- 最後登錄
- 2023-10-16
- 在線時間
- 135 小時
- 註冊時間
- 2008-7-10
- 閱讀權限
- 20
- 精華
- 0
- UID
- 4551139
- 帖子
- 270
- 積分
- 445 點
- 潛水值
- 16141 米
| - #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- #define PE printf
- void GotoXY(int x,int y)
- {
- HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
- COORD c;
- c.X=x;
- c.Y=y;
- SetConsoleCursorPosition(h,c);
-
- }
- void WriteC(int c,int x,int y)
- {
- HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
- COORD coord;
- coord.X=x;
- coord.Y=y;
- DWORD wbyte=0;
- SetConsoleCursorPosition(h,coord);
- WriteConsole(h,&c,1,&wbyte,NULL);
- }
- #define MAX_X 40
- #define MAX_Y 20
- #define MIN_X 0
- #define MIN_Y 0
- void DrawBox()
- {
- int i;
- int j;
- PE("+");
- for( i = MIN_X+1 ; i < MAX_X ; ++i)
- PE("-");
- PE("+\n");
- for( j = MIN_Y+1 ; j < MAX_Y ; ++j)
- {
- PE("|");
- for( i = MIN_X+1 ; i < MAX_X ; ++i)
- PE(" ");
- PE("|\n");
- }
- PE("+");
- for( i = MIN_X+1 ; i < MAX_X ; ++i)
- PE("-");
- PE("+\n");
- }
- int StarX=(MAX_X+MIN_X)/2;
- int StarY=(MAX_Y+MIN_Y)/2;
- #define STAR '*'
- int Move()
- {
- if( GetKeyState(0x51)&0x80 ) return 0; // test 'Q'
- int NewX=StarX;
- int NewY=StarY;
- if( GetKeyState(VK_LEFT)&0x80 ) --NewX; // 使用GetKeyState 取得left key 的狀態
- if( GetKeyState(VK_RIGHT)&0x80 ) ++NewX;
- if( GetKeyState(VK_UP)&0x80 ) --NewY;
- if( GetKeyState(VK_DOWN)&0x80 ) ++NewY;
-
- if( NewX <= MIN_X ) NewX=MIN_X+1;
- if( NewX >= MAX_X ) NewX=MAX_X-1;
- if( NewY <= MIN_Y ) NewY=MIN_Y+1;
- if( NewY >= MAX_Y ) NewY=MAX_Y-1;
- // 位置有改變
- if( NewX!=StarX || NewY!= StarY )
- {
- WriteC(' ',StarX,StarY);
- WriteC(STAR,NewX,NewY);
- StarX=NewX;
- StarY=NewY;
- GotoXY(0,MAX_Y+1);
- }
-
- return 1;
- }
- int main()
- {
- DrawBox();
- WriteC(STAR,StarX,StarY);
- GotoXY(0,MAX_Y+1);
- while(Move())
- {
- Sleep(1000/30);
- }
- }
複製代碼 這是window 下的的程式
最主要你必須要用GetKeyState() 取得目前按鑑狀態
當某key 被按下 用GetKeyState(key) 取得的值它的MSB 會被設為1
沒有按下時不會被設定... |
|