亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

新手想學鉤子,網上看不懂?咋整?

新手想學鉤子,網上看不懂?咋整?

C
慕后森 2022-10-21 15:15:18
新手,剛學完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;}




查看完整回答
反對 回復 2022-10-24
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

找個 GUI 庫,或者用 win32 api 編程。

查看完整回答
反對 回復 2022-10-24
  • 2 回答
  • 0 關注
  • 100 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號