分享
 
 
 

简单扫雷游戏

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

鼠标右键的功能没写进去,这个程序主要是练下鼠标操作的,其中显示空白区域还用了个第归,写得比较简单.望大家多多指教.

#include <graphics.h>

#include <stdlib.h>

#include <dos.h>

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define MOUSEMOVE 0xff08

int num[10][10];/*范围*/

int p[10][10];/*统计雷的数组*/

int loop;/*重新来的标志*/

int again=0;/*是否重来的变量*/

int scorenum;/*一开始统计有几个雷*/

char score[3];/*输出一共有几个地雷*/

int Keystate;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

/*鼠标光标外形定义*/

typedef strUCt

{

unsigned int shape[32];

char hotx;

char hoty;

}SHAPE;

/*箭头型*/

SHAPE ARROW={

{

0x3fff,0x1fff,0x0fff,0x07ff,

0x03ff,0x01ff,0x00ff,0x007f,

0x003f,0x00ff,0x01ff,0x10ff,

0x30ff,0xf87f,0xf87f,0xfc3f,

0x0000,0x7c00,0x6000,0x7000,

0x7800,0x7c00,0x7e00,0x7f00,

0x7f80,0x7e00,0x7c00,0x4600,

0x0600,0x0300,0x0300,0x0180

},

0,0,

};

/*鼠标光标显示*/

void MouseOn()

{

_AX=0x01;

geninterrupt(0x33);

}

/*鼠标光标掩示*/

void MouseOff()/*鼠标光标隐藏*/

{

_AX=0x02;

geninterrupt(0x33);

}

void MouseSetXY(int x,int y)/*设置当前位置*/

{

_CX=x;

_DX=y;

_AX=0x04;

geninterrupt(0x33);

}

int LeftPress()/*左键按下*/

{

_AX=0x03;

geninterrupt(0x33);

return(_BX&1);

}

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

{

_AX=0x03;

geninterrupt(0x33);

MouseX=_CX;

MouseY=_DX;

}

begain()/*游戏开始画面*/

{

int i,j;

loop: cleardevice();

MouseOn();

MouseSetXY(180,30);

MouseX=180;

MouseY=30;

scorenum=0;

setfillstyle(SOLID_FILL,7);

bar(190,60,390,290);

setfillstyle(SOLID_FILL,8);

for(i=100;i<300;i+=20)/*画格子*/

for(j=200;j<400;j+=20)

bar(j-8,i+8,j+8,i-8);

setcolor(7);

setfillstyle(SOLID_FILL,YELLOW);/*画脸*/

fillellipse(290,75,10,10);

setcolor(YELLOW);

setfillstyle(SOLID_FILL,0);

fillellipse(285,75,2,2);

fillellipse(295,75,2,2);

setcolor(0);

bar(287,80,293,81);

randomize();

for(i=0;i<10;i++)

for(j=0;j<10;j++)

{

num[i][j]=random(7)+10;/*用10代表地雷算了*/

if(num[i][j]==10)

scorenum++;

}

sprintf(score,"%d",scorenum);

setcolor(1);

settextstyle(0,0,2);

outtextxy(210,70,score);

scorenum=100-scorenum;/*为了后面判定胜利*/

}

gameove()/*游戏结束画面*/

{

int i,j;

setcolor(0);

for(i=0;i<10;i++)

for(j=0;j<10;j++)

if(num[i][j]==10)/*是地雷的就显示出来*/

{

setfillstyle(SOLID_FILL,RED);

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

setfillstyle(SOLID_FILL,0);

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

}

}

int tongji(int i,int j)/*计算有几个雷*/

{

int x=0;/*10代表地雷*/

if(i==0&&j==0)

{

if(num[0][1]==10)

x++;

if(num[1][0]==10)

x++;

if(num[1][1]==10)

x++;

}

else if(i==0&&j==9)

{

if(num[0][8]==10)

x++;

if(num[1][9]==10)

x++;

if(num[1][8]==10)

x++;

}

else if(i==9&&j==0)

{

if(num[8][0]==10)

x++;

if(num[9][1]==10)

x++;

if(num[8][1]==10)

x++;

}

else if(i==9&&j==9)

{

if(num[9][8]==10)

x++;

if(num[8][9]==10)

x++;

if(num[8][8]==10)

x++;

}

else if(j==0)

{

if(num[i][j+1]==10)

x++;

if(num[i+1][j]==10)

x++;

if(num[i-1][j]==10)

x++;

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

x++;

if(num[i+1][j+1]==10)

x++;

}

else if(j==9)

{

if(num[i][j-1]==10)

x++;

if(num[i+1][j]==10)

x++;

if(num[i-1][j]==10)

x++;

if(num[i-1][j-1]==10)

x++;

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

x++;

}

else if(i==0)

{

if(num[i+1][j]==10)

x++;

if(num[i][j-1]==10)

x++;

if(num[i][j+1]==10)

x++;

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

x++;

if(num[i+1][j+1]==10)

x++;

}

else if(i==9)

{

if(num[i-1][j]==10)

x++;

if(num[i][j-1]==10)

x++;

if(num[i][j+1]==10)

x++;

if(num[i-1][j-1]==10)

x++;

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

x++;

}

else

{

if(num[i-1][j]==10)

x++;

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

x++;

if(num[i][j+1]==10)

x++;

if(num[i+1][j+1]==10)

x++;

if(num[i+1][j]==10)

x++;

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

x++;

if(num[i][j-1]==10)

x++;

if(num[i-1][j-1]==10)

x++;

}

return(x);

}

funcheck(int i,int j)/*开始找无雷*/

{

scorenum--;

if(p[i][j]==0&&num[i][j]!=10)

{

setfillstyle(SOLID_FILL,7);/*显示无雷区*/

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

num[i][j]=-1;

}

else if(p[i][j]!=0)

{

sprintf(score,"%d",p[i][j]);/*输出雷数*/

setcolor(RED);

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

num[i][j]=-1;

return ;

}

if(i!=0&&num[i-1][j]!=-1&&num[i-1][j]!=10)/*第归开始*/

funcheck(i-1,j);

if(i!=0&&j!=9&&num[i-1][j+1]!=-1&&num[i-1][j+1]!=10)

funcheck(i-1,j+1);

if(j!=9&&num[i][j+1]!=-1&&num[i][j+1]!=10)

funcheck(i,j+1);

if(j!=9&&i!=9&&num[i+1][j+1]!=-1&&num[i+1][j+1]!=10)

funcheck(i+1,j+1);

if(i!=9&&num[i+1][j]!=-1&&num[i+1][j]!=10)

funcheck(i+1,j);

if(i!=9&&j!=0&&num[i+1][j-1]!=-1&&num[i+1][j-1]!=10)

funcheck(i+1,j-1);

if(j!=0&&num[i][j-1]!=-1&&num[i][j-1]!=10)

funcheck(i,j-1);

if(i!=0&&j!=0&&num[i-1][j-1]!=-1&&num[i-1][j-1]!=10)

funcheck(i-1,j-1);

}

[1] [2]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有