亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c5.c

?? 掃雷游戲的編程源碼
?? C
字號:
/*5.3.4 源程序*/
#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(_BX&1);
}
int RightPress(void)/*鼠標右鍵按下*/
{
   _AX=0x03;
   geninterrupt(0x33);
   return(_BX&2);
}
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(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)
      {
	 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;i<10;i++)/*畫格子*/
      for(j=0;j<10;j++)
	 DrawEmpty(i,j,0,8);
   setcolor(7);
   DrawSmile();/*畫臉*/
   randomize();
   for(i=0;i<10;i++)/*100個格子隨機賦值有沒有地雷*/
      for(j=0;j<10;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;i<10;i++)
      for(j=0;j<10;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==0&&j==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==0&&j==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==9&&j==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==9&&j==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==0&&Mine[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!=0&&Mine[i-1][j].num!=1)
      ShowWhite(i-1,j);
   if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)
      ShowWhite(i-1,j+1);
   if(j!=9&&Mine[i][j+1].num!=1)
      ShowWhite(i,j+1);
   if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)
      ShowWhite(i+1,j+1);
   if(i!=9&&Mine[i+1][j].num!=1)
      ShowWhite(i+1,j);
   if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)
      ShowWhite(i+1,j-1);
   if(j!=0&&Mine[i][j-1].num!=1)
      ShowWhite(i,j-1);
   if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)
      ShowWhite(i-1,j-1);
}
void GamePlay(void)/*游戲過程*/
{
   int i,j,Num;/*Num用來接收統計函數返回一個格子周圍有多少地雷*/
   for(i=0;i<10;i++)
      for(j=0;j<10;j++)
	 Mine[i][j].roundnum=MineStatistics(i,j);/*統計每個格子周圍有多少地雷*/
   while(!kbhit())
   {
      if(LeftPress())/*鼠標左鍵盤按下*/
      {
	 MouseGetXY();
	 if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新來*/
	 {
	    MouseOff();
	    gameAGAIN=1;
	    break;
	 }
	 if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*當前鼠標位置在格子范圍內*/
	 {
	    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(mineNUM<1)/*勝利了*/
	       {
		  GameWin();
		  break;
	       }
	    }
	 }
      }
   }
   if(RightPress())/*鼠標右鍵鍵盤按下*/
   {
      MouseGetXY();
      if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*當前鼠標位置在格子范圍內*/
      {
	 j=(MouseX-190)/20;/*x坐標*/
	 i=(MouseY-90)/20;/*y坐標*/
	 MouseOff();
	 if(Mine[i][j].flag==0&&Mine[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);
      }
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清beeg欧美| 亚洲一二三专区| 亚洲精品视频一区| 亚洲成人资源在线| 乱中年女人伦av一区二区| 国产电影一区二区三区| 91亚洲男人天堂| 3d成人h动漫网站入口| 亚洲精品在线观看网站| ㊣最新国产の精品bt伙计久久| 亚洲一二三专区| 国产一区二区三区四| 一本久道中文字幕精品亚洲嫩| 5566中文字幕一区二区电影| 久久久不卡影院| 亚洲一区二区av在线| 国产精品77777| 欧美日韩亚洲综合一区二区三区 | 亚洲精品菠萝久久久久久久| 爽好久久久欧美精品| 国产成+人+日韩+欧美+亚洲| 精品污污网站免费看| 欧美激情中文不卡| 日本aⅴ亚洲精品中文乱码| 成人app软件下载大全免费| 欧美丰满嫩嫩电影| 亚洲人成在线观看一区二区| 韩国成人在线视频| 欧美日韩高清一区| 国产精品麻豆一区二区 | 日韩一区二区麻豆国产| 亚洲欧洲精品成人久久奇米网| 免费高清在线一区| 在线精品亚洲一区二区不卡| 久久久www免费人成精品| 日韩精品电影一区亚洲| 99综合电影在线视频| 精品国产123| 日韩精品一区第一页| 91香蕉视频污在线| 久久久久青草大香线综合精品| 五月婷婷激情综合网| 91美女蜜桃在线| 国产亚洲精品久| 极品瑜伽女神91| 欧美久久高跟鞋激| 伊人色综合久久天天人手人婷| 成人性生交大合| 久久久精品免费免费| 久久精品国产99国产精品| 欧美妇女性影城| 一区二区日韩电影| 91欧美一区二区| 国产精品不卡在线| 国产成人福利片| 欧美精品一区二区三区蜜桃| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美三级日韩在线| 一区二区三区欧美日| 91免费国产在线| 一区视频在线播放| 99久久精品一区| 国产精品久久久久久久久免费相片 | 奇米888四色在线精品| 91老师片黄在线观看| 国产精品麻豆欧美日韩ww| 成人在线一区二区三区| 日韩一区二区三区视频在线观看| 亚洲成人www| 欧美性大战久久久久久久| 亚洲欧美乱综合| 色综合天天综合网天天狠天天| 午夜精品福利一区二区蜜股av| 99精品视频在线免费观看| 亚洲视频你懂的| 91电影在线观看| 亚洲一线二线三线视频| 精品污污网站免费看| 日韩精品每日更新| 欧美大片在线观看| 韩国三级电影一区二区| wwwwxxxxx欧美| 国产成人av电影在线观看| 国产欧美视频一区二区| 国产+成+人+亚洲欧洲自线| 国产精品久久久久久久久快鸭 | 久久精品欧美日韩| 国产成人一级电影| 中文字幕在线免费不卡| 91老司机福利 在线| 亚洲大型综合色站| 日韩欧美精品三级| 国产乱码精品1区2区3区| 中文字幕中文字幕一区| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩一卡二卡| 毛片基地黄久久久久久天堂| 久久久久九九视频| 成人美女视频在线观看| 亚洲精品成人在线| 日韩欧美一区二区视频| 国产激情一区二区三区| 亚洲视频一二三区| 欧美日韩精品一区二区| 国产美女在线观看一区| 亚洲色大成网站www久久九九| 欧美日韩免费电影| 国产九九视频一区二区三区| 国产精品成人在线观看| 欧美精品亚洲一区二区在线播放| 激情欧美一区二区三区在线观看| 国产精品区一区二区三区| 色婷婷综合激情| 蜜桃av噜噜一区二区三区小说| 国产拍欧美日韩视频二区| 色婷婷国产精品| 精品一区二区三区香蕉蜜桃| 亚洲欧洲精品天堂一级| 欧美一卡在线观看| 成人综合在线视频| 日韩不卡一区二区三区| 欧美激情在线观看视频免费| 欧美系列亚洲系列| 国产精品综合二区| 午夜久久久久久久久| 国产日本欧美一区二区| 欧美美女一区二区| 粉嫩av一区二区三区粉嫩| 亚洲r级在线视频| 日本一区二区三区高清不卡| 欧美日韩成人综合天天影院| 国产精品一区在线| 亚洲成人自拍偷拍| 最近中文字幕一区二区三区| 日韩一区二区精品葵司在线| 色综合久久综合网| 国产裸体歌舞团一区二区| 午夜精品aaa| 亚洲欧美综合在线精品| 欧美tickling挠脚心丨vk| 色老汉av一区二区三区| 国产精品12区| 日韩vs国产vs欧美| **网站欧美大片在线观看| 久久尤物电影视频在线观看| 欧美日韩在线免费视频| 99热99精品| 国产成人综合在线| 蜜臀va亚洲va欧美va天堂| 一区二区三区国产| 国产精品久久久久久久裸模| 精品国产乱子伦一区| 欧美日韩国产三级| 91丨九色丨尤物| 成人国产免费视频| 国产一区二区三区久久久| 日韩av网站在线观看| 亚洲一区二区三区四区在线免费观看| 国产日韩欧美麻豆| 亚洲精品一区二区三区99 | 国产一区二区三区在线观看免费| 天堂蜜桃一区二区三区| 一区二区三区精品视频在线| 椎名由奈av一区二区三区| 国产欧美一区二区精品久导航 | 日本亚洲免费观看| 亚洲在线中文字幕| 亚洲乱码精品一二三四区日韩在线 | 亚洲观看高清完整版在线观看| 国产精品久久久久久亚洲毛片| 国产欧美日韩精品一区| 26uuu欧美| 久久综合久久综合久久| 欧美电影免费观看高清完整版在 | 奇米精品一区二区三区四区| 亚欧色一区w666天堂| 亚洲午夜激情网页| 亚洲资源中文字幕| 亚洲午夜免费视频| 亚洲sss视频在线视频| 亚洲电影第三页| 午夜久久久久久久久| 五月婷婷色综合| 亚洲成人综合视频| 亚洲不卡一区二区三区| 亚洲成人综合在线| 日韩黄色免费网站| 免费高清视频精品| 国产在线一区二区综合免费视频| 激情成人午夜视频| 国产精品18久久久久久久久| 国产麻豆精品视频| 国产a级毛片一区| 菠萝蜜视频在线观看一区| 99riav久久精品riav| 日本福利一区二区| 91.com视频| 精品国产乱子伦一区| 一区二区在线观看不卡| 欧美日韩一区在线观看|