2024年2月8日发(作者:)
创天中文vc++6.0能运行的一百行代码的小游戏
扫雷游戏代码
#include
#include
#include
#include
#include
#pragma comment(lib,"")
#define Row 10 //行、列
#define COL 10
#define MINE 10 //雷的数量
#define SIZE 50 //图片宽度
@int map[ROW][COL];//全局变量自动初始化为0
【//定义图片数组,保存图片
IMAGE img[12];
//游戏胜利与否
int flag;
//游戏数据初始化
Ovoid GameInit()
mciSendString("open ./image/3 alias Bem", 0, 0, 0);
mciSendString("play BGM", 0, 0, 0):
//设置随机数种子
srand((unsigned)time(NULL));
//初始化数组
for (int i = 0; i < ROW;i++)
for (int j = 0; j < COL: j++)
map[il[jl= 0;
//埋雷,-1表示雷 10个雷
for (int i = 0; i < MINE;)
int r = rand() % 10;//0 9
int c= rand() % 10;
if (map[r][c]== 0)//还没有设置为雷
map[r][e]=-1;
i++;//每埋雷一次,就加1
时
//把以雷为中心的九宫格数据加1,雷除外for (int i = 0; i < ROW;i++)
for (int j = 0;j < COL; j++)
//判断是不是雷-1
if(map[i][j]==-1)
//遍历雷所在的九宫格
for (int m = i - 1; m <= i + 1; m++)
国
园
for (int n = j - 1; n <= j + 1; n++)
if((m >= 0 && m
圈
map [m][n]+= 1;
为
//加载图片
for (int i = 0; i < 12;i++)
char file[50]=“";
sprintf(file,"./image/Md. jpg", i);
1oadimage(&ing[i], file,SIZE, SIZE);
//加密格子
for (int i = 0; i for (int j = 0; ji< COL;j++) //map[i][ji]+= 20; //绘制界面 Evoid GameDraw() cleardevice(); for (int i = 0; i for (int j= 0; j < COL; j++) if(map[i][j]==-1) putimage(j* SIXE, i * STZE, &ing[9]);//绘制雷 else if (map[i][j]>=0 && map[i][j]<=8)//把其他数字一并处理01 2 3 4 5 6 7 8 putimage(j * SIZE, i * SIZE, &img[map[i][j]]); else if (map[i][j]>= 19 &A map[i][ji]<= 28) putimage(j * SIZE, i * SIZE, &img[10]); else if (map[i][jl>30)//标记 putimage(j * SIZE, i * SIZE,&img[11]); void openNull(int row, int col); //鼠标操作 gint MouseContro1() (MouseHitO)//判断有没有鼠标消息 MOUSEMSG msg = GetMouselsg();//鼠标所在的 x,y int row = msg.y / SIZE;//把鼠标坐标转换成,数组下标 int col= msg.X / SI2E; //对鼠标消息进行分发 switch () case WM_LBUTTONDOWN://鼠标左键点击 if (map[row][col]>8)//如果没有打开就打开 mciSendString("close click", 0, 0, 0); mciSendString("open ./image/ alias click", 0, 0, 0): mciSendString("play click", 0, 0, 0); map[row][co1]-= 20; flagtt; openMul1(row, col); break; case WM_RBUTTONDOWN://鼠标右键点击 if (map[row][col]〉 8 && map[row][co1]<= 28)//如果没打开,且未被标记 map[row][col]+= 20; else if(map[row][col]>28)//只有没打开的才可以取消标记和标记 map [row][col]-= 20; break; return map[row][col]; //打开所有以空白为中心的九宫格 日void openNul1(int row,int col) if (map[row][col]== 0)//点击的是空白 for (int m= row - 1;m<= row + 1; mt+) for (int n = col - 1; n <= col + 1; nt+) if ((m >= 0 && m 〈 RoW && n >= 0 && n < COL) && (map [m][n]=-20 || map[m][n]!=19)& map [m][n]>8)//如果没有月结,并且为空或者数字,并且没有被打开 map [ml [n]-= 20; flagt+; openNul1(m, n); lvoid Jude() if (MouseControl()==-1) 1/结束 int isok=MessageBox(GetHWnd(),“你输了,是否再玩一次","提示",MB_OKCANCEL); if (IDOK == isok) GameInit(); flag=0; else exit(666); mciSendString("close BGm", o, 0, 0); if (flag == ROW * COL - MINE) int isok = MessageBox(GetRWnd(),“你赢了,是否再玩一次","提示",MB_OKCANCEL): if (IDOK == isok) Gamelnit(0); flag = 0; else exit(666); mciSendString("close Bcm", 0, 0, 0); Evoid show() for (int i= 0; i for (int j = 0;j printf("*2d ", map[i][j]); putchar("In'); putchar('n'); putchar('Vn'); //system("cls");//清屏 Pint main() initgraph(ROW * SIZE, COL * SIZE, SHOWCONSOLE); GameInit(); show(); BeginBatchDraw(); while (1) //show(); GameDraw(); FlushBatchDraw(); Jude(); EnaBatchDraw(); getchar(); return 0;
本文发布于:2024-02-08 20:03:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170739383968621.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |