C语言鼠标 *** 作

C语言鼠标 *** 作,第1张

我之前给别人写过一个打地鼠的小游戏,就是用鼠标 *** 作的。发给你参考下。代码很简单。

主要函数我在下方说明了,但更多信息你必须自己百度看,一言两语说不完。

SetConsoleCursorPosition函数可以定位光标位置,也就是文字内容显示的起点。

ReadConsoleInput(HANDLE hConsoleInput,INPUT_RECORD lpBuffer,DWORD nLength,

DWORD lpNumberOfEventsRead)函数可以获取鼠标的 *** 作信息。

调用过上面函数后,lpBuffer由于是传址,所以其地址里的值就包含了鼠标信息。

lpBufferEventType == MOUSE_EVENT //判断是鼠标事件

lpBufferEventMouseEventdwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED//判断是鼠标左键点击

两个判断一起就是鼠标左键点击的判断,其他事件参数你可以自己网上找。

#include <stdioh>

#include <stdlibh>

#include <windowsh>

#include <conioh>

#include <timeh>

#include <stringh>

#include <malloch>

#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;

    p0X=0;

    p0Y=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)

        {

            p0X=10;

            p0Y=8;

            SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

            printf("GAME OVER!");

            break;

        }

        s1= time(NULL);

        t=s1-s0;

        ReadConsoleInput(hInput, &inRec, 1, &res);

        if (inRecEventType == MOUSE_EVENT && inRecEventMouseEventdwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键

        {

            if(inRecEventMouseEventdwMousePositionX==clo && inRecEventMouseEventdwMousePositionY==row)

            {

                if(fen==0)

                    fen=1;

                if(fen>999999)

                    fen=999999;

                else

                    fen=fen2;

                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;

}

ret_val=fgets(st,n,stdin); 从标准输入设备读入一行字符,含换行符。若拍入字符个数多于需要,则 st[] 最后一个字符 为 '\0'

---

若拍入字符个数多于需要,才会 进入

while(getchar()!='\n') continue;

这句中的 continue 有或没有是 一样 的, 也就是说用:

while(getchar()!='\n') ; 是一样的。

这句的作用 相当于 清掉 拍入的多余的字符,直到遇到 换行符。

例如: n=5;

拍入 12345678换行。

fgets 读入 1234 到st[], st[4]='\0'

getchar() 依次读去 5 6 7 8 换行 -- 循环了5次。

你的问题 大概 指 这件事。 continue 从st[] 尾开始。

C语言里面有gotoxy(x,y)函数来定位光标位置;

但在VC下面没有conioh,也就没有gotoxy(),只在tc,bc中才有

下面是别人构造的一个:

include<windowsh>

#include<iostream>

using namespace std;

void gotoxy(int x, int y) {

COORD c;

cX = x - 1;

cY = y - 1;

SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);

}

int main()

{

gotoxy(20,12);

std::cout<<"Hello world!"<<endl;

return 0;

}

其中的COORD和SetConsoleCursorPosition定义在winconh中~

SetConsoleCursorPosition用于在相应的设备设置光标的位置,两个参数分别是设备句柄和光标位置结构。GetStdHandle定义在winbaseh上用于获得标准输入、输出、错误输出句柄

当参数标识为STD_OUTPUT_HANDLE时获得标准输出句柄

这里应该是棋盘坐标系和屏幕坐标系之间的映射(转换)

下面属于猜测:

屏幕坐标系(原点1,1):

+---------------->y

|

|

v

x

棋盘坐标系(原点0,0):

y

^

|

|

|

+------------------x

以上就是关于C语言鼠标 *** 作全部的内容,包括:C语言鼠标 *** 作、请帮忙解读下C语言下面代码中continue 的光标在哪儿 是在输入的第一个字符 还是st[i]、C语言问题: DOS光标定位!!!在线等!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9784740.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存