新手,剛學完C語言從入門到精通,編了一個小游戲,說不能用鼠標,太爛了。
2 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
我之前寫過一個打地鼠的小游戲,就是用鼠標操作的。發給你參考下。代碼很簡單。
主要函數我在下方說明了,但更多信息你必須自己百度看,一言兩語說不完。
SetConsoleCursorPosition函數可以定位光標位置,也就是文字內容顯示的起點。
ReadConsoleInput(HANDLE hConsoleInput,*INPUT_RECORD lpBuffer,DWORD nLength,
DWORD lpNumberOfEventsRead)函數可以獲取鼠標的操作信息。
調用過上面函數后,lpBuffer由于是傳址,所以其地址里的值就包含了鼠標信息。
lpBuffer.EventType == MOUSE_EVENT //判斷是鼠標事件
lpBuffer.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED//判斷是鼠標左鍵點擊
兩個判斷一起就是鼠標左鍵點擊的判斷,其他事件參數你可以自己網上找。
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> #include <time.h> #include <string.h> #include <malloc.h> #define gSizek 30//區域大小寬度 #define gSizeg 20//區域大小高度 #define gBegin 3//活動區域起始行 int main() { int t=0,s0,s1,i,j,count=0,fen=0,row=0,clo=0; char gameA[gSizeg][gSizek+1],fSave[10]={0}; SetConsoleTitle( "打地鼠" ); HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 獲取標準輸入設備句柄 INPUT_RECORD inRec; DWORD res; COORD p0; p0.X=0; p0.Y=0; srand ( time (0)); s0= time (NULL); strcpy (gameA[0], " GAME" ); strcpy (gameA[1], "未命中次數:0,計分:000000" ); for (i=gBegin-1;i<gSizeg;i++) { for (j=0;j<gSizek+1;j++) { if (i>gBegin-1 && i<gSizeg-1 && j>0 && j<gSizek-1) gameA[i][j]= ' ' ; else gameA[i][j]=4; if (j==gSizek) gameA[i][j]=0; } } for (i=0;i<gSizeg;i++) printf ( "%s\n" ,gameA[i]); while (1) { if (t>=3) { if (row>0 && clo>0) gameA[row][clo]= ' ' ; row= rand ()%(gSizeg-1); clo= rand ()%(gSizek-1); s0= time (NULL); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0); if (row<3) row=4; if (clo<1) clo=1; gameA[row][clo]=2; for (i=0;i<gSizeg;i++) { //gameA[i][gSizeg+1]=0; printf ( "%s\n" ,gameA[i]); } } if (count==3) { p0.X=10; p0.Y=8; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0); printf ( "GAME OVER!" ); break ; } s1= time (NULL); t=s1-s0; ReadConsoleInput(hInput, &inRec, 1, &res); if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠標左鍵 { if (inRec.Event.MouseEvent.dwMousePosition.X==clo && inRec.Event.MouseEvent.dwMousePosition.Y==row) { if (fen==0) fen=1; if (fen>999999) fen=999999; else fen=fen*2; sprintf (fSave, "%06d" ,fen); gameA[1][18]=0; strcat (gameA[1],fSave); } else { count++; fen=0; gameA[1][11]=count+ '0' ; } t=4; } } while (1); return 0; } |
- 2 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
0/150
提交
取消