c語言getmouse,C語言編譯器

本文目錄一覽:

C語言 遊戲 代碼

掃雷 #include graphics.h

#include stdlib.h

#include dos.h

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define MOUSEMOVE 0xff08

struct

{

int num;/*格子當前處於什麼狀態,1有雷,0已經顯示過數字或者空白格子*/

int roundnum;/*統計格子周圍有多少雷*/

int flag;/*右鍵按下顯示紅旗的標誌,0沒有紅旗標誌,1有紅旗標誌*/

}Mine[10][10];

int gameAGAIN=0;/*是否重來的變量*/

int gamePLAY=0;/*是否是第一次玩遊戲的標誌*/

int mineNUM;/*統計處理過的格子數*/

char randmineNUM[3];/*顯示數字的字符串*/

int Keystate;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

void Init(void);/*圖形驅動*/

void MouseOn(void);/*鼠標光標顯示*/

void MouseOff(void);/*鼠標光標隱藏*/

void MouseSetXY(int,int);/*設置當前位置*/

int LeftPress(void);/*左鍵按下*/

int RightPress(void);/*鼠標右鍵按下*/

void MouseGetXY(void);/*得到當前位置*/

void Control(void);/*遊戲開始,重新,關閉*/

void GameBegain(void);/*遊戲開始畫面*/

void DrawSmile(void);/*畫笑臉*/

void DrawRedflag(int,int);/*顯示紅旗*/

void DrawEmpty(int,int,int,int);/*兩種空格子的顯示*/

void GameOver(void);/*遊戲結束*/

void GameWin(void);/*顯示勝利*/

int MineStatistics(int,int);/*統計每個格子周圍的雷數*/

int ShowWhite(int,int);/*顯示無雷區的空白部分*/

void GamePlay(void);/*遊戲過程*/

void Close(void);/*圖形關閉*/

void main(void)

{

Init();

Control();

Close();

}

void Init(void)/*圖形開始*/

{

int gd=DETECT,gm;

initgraph(gd,gm,”c:\\tc”);

}

void Close(void)/*圖形關閉*/

{

closegraph();

}

void MouseOn(void)/*鼠標光標顯示*/

{

_AX=0x01;

geninterrupt(0x33);

}

void MouseOff(void)/*鼠標光標隱藏*/

{

_AX=0x02;

geninterrupt(0x33);

}

void MouseSetXY(int x,int y)/*設置當前位置*/

{

_CX=x;

_DX=y;

_AX=0x04;

geninterrupt(0x33);

}

int LeftPress(void)/*鼠標左鍵按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX1);

}

int RightPress(void)/*鼠標右鍵按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX2);

}

void MouseGetXY(void)/*得到當前位置*/

{

_AX=0x03;

geninterrupt(0x33);

MouseX=_CX;

MouseY=_DX;

}

void Control(void)/*遊戲開始,重新,關閉*/

{

int gameFLAG=1;/*遊戲失敗後判斷是否重新開始的標誌*/

while(1)

{

if(gameFLAG)/*遊戲失敗後沒判斷出重新開始或者退出遊戲的話就繼續判斷*/

{

GameBegain(); /*遊戲初始畫面*/

GamePlay();/*具體遊戲*/

if(gameAGAIN==1)/*遊戲中重新開始*/

{

gameAGAIN=0;

continue;

}

}

MouseOn();

gameFLAG=0;

if(LeftPress())/*判斷是否重新開始*/

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)

{

gameFLAG=1;

continue;

}

}

if(kbhit())/*判斷是否按鍵退出*/

break;

}

MouseOff();

}

void DrawSmile(void)/*畫笑臉*/

{

setfillstyle(SOLID_FILL,YELLOW);

fillellipse(290,75,10,10);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,BLACK);/*眼睛*/

fillellipse(285,75,2,2);

fillellipse(295,75,2,2);

setcolor(BLACK);/*嘴巴*/

bar(287,80,293,81);

}

void DrawRedflag(int i,int j)/*顯示紅旗*/

{

setcolor(7);

setfillstyle(SOLID_FILL,RED);

bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);

setcolor(BLACK);

line(198+j*20,95+i*20,198+j*20,95+i*20+10);

}

void DrawEmpty(int i,int j,int mode,int color)/*兩種空格子的顯示*/

{

setcolor(color);

setfillstyle(SOLID_FILL,color);

if(mode==0)/*沒有單擊過的大格子*/

bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);

else

if(mode==1)/*單擊過後顯示空白的小格子*/

bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);

}

void GameBegain(void)/*遊戲開始畫面*/

{

int i,j;

cleardevice();

if(gamePLAY!=1)

{

MouseSetXY(290,70); /*鼠標一開始的位置,並作為它的初始坐標*/

MouseX=290;

MouseY=70;

}

gamePLAY=1;/*下次按重新開始的話鼠標不重新初始化*/

mineNUM=0;

setfillstyle(SOLID_FILL,7);

bar(190,60,390,290);

for(i=0;i10;i++)/*畫格子*/

for(j=0;j10;j++)

DrawEmpty(i,j,0,8);

setcolor(7);

DrawSmile();/*畫臉*/

randomize();

for(i=0;i10;i++)/*100個格子隨機賦值有沒有地雷*/

for(j=0;j10;j++)

{

Mine[i][j].num=random(8);/*如果隨機數的結果是1表示這個格子有地雷*/

if(Mine[i][j].num==1)

mineNUM++;/*現有雷數加1*/

else

Mine[i][j].num=2;

Mine[i][j].flag=0;/*表示沒紅旗標誌*/

}

sprintf(randmineNUM,”%d”,mineNUM); /*顯示這次總共有多少雷數*/

setcolor(1);

settextstyle(0,0,2);

outtextxy(210,70,randmineNUM);

mineNUM=100-mineNUM;/*變量取空白格數量*/

MouseOn();

}

void GameOver(void)/*遊戲結束畫面*/

{

int i,j;

setcolor(0);

for(i=0;i10;i++)

for(j=0;j10;j++)

if(Mine[i][j].num==1)/*顯示所有的地雷*/

{

DrawEmpty(i,j,0,RED);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(200+j*20,100+i*20,7,7);

}

}

void GameWin(void)/*顯示勝利*/

{

setcolor(11);

settextstyle(0,0,2);

outtextxy(230,30,”YOU WIN!”);

}

int MineStatistics(int i,int j)/*統計每個格子周圍的雷數*/

{

int nNUM=0;

if(i==0j==0)/*左上角格子的統計*/

{

if(Mine[0][1].num==1)

nNUM++;

if(Mine[1][0].num==1)

nNUM++;

if(Mine[1][1].num==1)

nNUM++;

}

else

if(i==0j==9)/*右上角格子的統計*/

{

if(Mine[0][8].num==1)

nNUM++;

if(Mine[1][9].num==1)

nNUM++;

if(Mine[1][8].num==1)

nNUM++;

}

else

if(i==9j==0)/*左下角格子的統計*/

{

if(Mine[8][0].num==1)

nNUM++;

if(Mine[9][1].num==1)

nNUM++;

if(Mine[8][1].num==1)

nNUM++;

}

else

if(i==9j==9)/*右下角格子的統計*/

{

if(Mine[9][8].num==1)

nNUM++;

if(Mine[8][9].num==1)

nNUM++;

if(Mine[8][8].num==1)

nNUM++;

}

else if(j==0)/*左邊第一列格子的統計*/

{

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(j==9)/*右邊第一列格子的統計*/

{

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

}

else if(i==0)/*第一行格子的統計*/

{

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

}

else if(i==9)/*最後一行格子的統計*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

}

else/*普通格子的統計*/

{

if(Mine[i-1][j].num==1)

nNUM++;

if(Mine[i-1][j+1].num==1)

nNUM++;

if(Mine[i][j+1].num==1)

nNUM++;

if(Mine[i+1][j+1].num==1)

nNUM++;

if(Mine[i+1][j].num==1)

nNUM++;

if(Mine[i+1][j-1].num==1)

nNUM++;

if(Mine[i][j-1].num==1)

nNUM++;

if(Mine[i-1][j-1].num==1)

nNUM++;

}

return(nNUM);/*把格子周圍一共有多少雷數的統計結果返回*/

}

int ShowWhite(int i,int j)/*顯示無雷區的空白部分*/

{

if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有紅旗或該格處理過就不對該格進行任何判斷*/

return;

mineNUM–;/*顯示過數字或者空格的格子就表示多處理了一個格子,當所有格子都處理過了表示勝利*/

if(Mine[i][j].roundnum==0Mine[i][j].num!=1)/*顯示空格*/

{

DrawEmpty(i,j,1,7);

Mine[i][j].num=0;

}

else

if(Mine[i][j].roundnum!=0)/*輸出雷數*/

{

DrawEmpty(i,j,0,8);

sprintf(randmineNUM,”%d”,Mine[i][j].roundnum);

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

Mine[i][j].num=0;/*已經輸出雷數的格子用0表示已經用過這個格子*/

return ;

}

/*8個方向遞歸顯示所有的空白格子*/

if(i!=0Mine[i-1][j].num!=1)

ShowWhite(i-1,j);

if(i!=0j!=9Mine[i-1][j+1].num!=1)

ShowWhite(i-1,j+1);

if(j!=9Mine[i][j+1].num!=1)

ShowWhite(i,j+1);

if(j!=9i!=9Mine[i+1][j+1].num!=1)

ShowWhite(i+1,j+1);

if(i!=9Mine[i+1][j].num!=1)

ShowWhite(i+1,j);

if(i!=9j!=0Mine[i+1][j-1].num!=1)

ShowWhite(i+1,j-1);

if(j!=0Mine[i][j-1].num!=1)

ShowWhite(i,j-1);

if(i!=0j!=0Mine[i-1][j-1].num!=1)

ShowWhite(i-1,j-1);

}

void GamePlay(void)/*遊戲過程*/

{

int i,j,Num;/*Num用來接收統計函數返回一個格子周圍有多少地雷*/

for(i=0;i10;i++)

for(j=0;j10;j++)

Mine[i][j].roundnum=MineStatistics(i,j);/*統計每個格子周圍有多少地雷*/

while(!kbhit())

{

if(LeftPress())/*鼠標左鍵盤按下*/

{

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)/*重新來*/

{

MouseOff();

gameAGAIN=1;

break;

}

if(MouseX190MouseX390MouseY90MouseY290)/*當前鼠標位置在格子範圍內*/

{

j=(MouseX-190)/20;/*x坐標*/

i=(MouseY-90)/20;/*y坐標*/

if(Mine[i][j].flag==1)/*如果格子有紅旗則左鍵無效*/

continue;

if(Mine[i][j].num!=0)/*如果格子沒有處理過*/

{

if(Mine[i][j].num==1)/*鼠標按下的格子是地雷*/

{

MouseOff();

GameOver();/*遊戲失敗*/

break;

}

else/*鼠標按下的格子不是地雷*/

{

MouseOff();

Num=MineStatistics(i,j);

if(Num==0)/*周圍沒地雷就用遞歸算法來顯示空白格子*/

ShowWhite(i,j);

else/*按下格子周圍有地雷*/

{

sprintf(randmineNUM,”%d”,Num);/*輸出當前格子周圍的雷數*/

setcolor(RED);

outtextxy(195+j*20,95+i*20,randmineNUM);

mineNUM–;

}

MouseOn();

Mine[i][j].num=0;/*點過的格子周圍雷數的數字變為0表示這個格子已經用過*/

if(mineNUM1)/*勝利了*/

{

GameWin();

break;

}

}

}

}

}

if(RightPress())/*鼠標右鍵鍵盤按下*/

{

MouseGetXY();

if(MouseX190MouseX390MouseY90MouseY290)/*當前鼠標位置在格子範圍內*/

{

j=(MouseX-190)/20;/*x坐標*/

i=(MouseY-90)/20;/*y坐標*/

MouseOff();

if(Mine[i][j].flag==0Mine[i][j].num!=0)/*本來沒紅旗現在顯示紅旗*/

{

DrawRedflag(i,j);

Mine[i][j].flag=1;

}

else

if(Mine[i][j].flag==1)/*有紅旗標誌再按右鍵就紅旗消失*/

{

DrawEmpty(i,j,0,8);

Mine[i][j].flag=0;

}

}

MouseOn();

sleep(1);

}

}

}

用C語言寫一個控制鼠標鍵盤自動點的程序複雜嗎

用按鍵精靈這個軟件,他可以錄下鍵盤,鼠標的動作。然後在按照你錄的模擬你錄下的動作“`這個軟件完全可以達到你想要的標準。可以到百度去搜索“使用教程“自己編寫那不是一天兩天的事

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/303384.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 手機Python編譯器愛心代碼

    本文將從以下幾個方面對手機Python編譯器愛心代碼做詳細闡述,旨在幫助讀者了解該編譯器的基本功能和特點: 一、簡要介紹 手機Python編譯器愛心代碼是一款可以在手機上運行Pyt…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論