扫雷群规则资讯

微信红包群IC语言游戏编程到底怎么学之(扫雷源码)

发布人:抢红包微信群软件下载 来源:微信抢红包群,支付宝红包群,红包群,红包扫雷群发布时间:2022-08-20 21:02:06 热度:

扫雷游戏源码 ,这是一款经典游戏源码,首先,你必须接受扫雷是一款拼人品的游戏,想要驾驭它你需要有充足的耐心。学习游戏开发进群学习交流(加群: 590750544 群里有大量游戏开发教学视频和源码)

/*

图形库 扫雷版本2.0 夏七

2016 11 25

版本更新

1.可点击点击过的部分

2.奖励触发机制

3.右键可以标记

*/

include

include

include

define N 10

int win;

void game();

void drawmap(int map[][N+2],IMAGE* img);

int play(int map[][N+2], int hmap[][N+2]);

void addFun(int map[][N + 2], int hmap[][N + 2],int x,int y);//如果是0 显示周围的部分

void addFun(int map[][N + 2], int hmap[][N + 2],int x,int y)//传入坐标 坐标为0

{

int i, j;

//显示周围一圈的0 递归调用

for (i = x - 1; i <= x + 1; i++){

for (j = y - 1; j <= y + 1; j++){

//是不是在周围

if (i == 0 || i == 11 || j == 0 || j == 11){ continue; }

else if (hmap[i][j] != 0){ continue; }

else if (map[i][j] == 0){

hmap[i][j] = 10; win++;

}//中间为空

else{ hmap[i][j] = map[i][j]; win++; }

}

}

return;

}

void game(){

//生成一个扫雷地图 10*10

//周围一圈作为辅助

int map[N+2][N+2] = { 0 };

int hmap[N + 2][N + 2] = { 0 };

int m, n, i, j;

//随机生成数据 -1表示雷区 生成N颗雷

srand((unsigned)time(NULL));

//用n控制雷区

for (n = 0; n < N;){

i = rand() % N + 1;

j = rand() % N + 1;

if (map[i][j] == 0){

map[i][j] = -1;

n++;

}

}

//检验生成的雷

for (i = 1; i <= N; i++){

for (j = 1; j <= N; j++){

if (map[i][j] != -1) {

//检查周围雷的个数

for (m = i - 1; m <= i + 1; m++){

for (n = j - 1; n <= j + 1; n++){

if (map[m][n] == -1){

map[i][j]++;

}

}

}

}

}

}

//画图 将数组转换为扫雷图

initgraph(64*N, 64*N);

IMAGE img[12];

loadimage(&img[0], L"0.jpg", 64, 64);

loadimage(&img[1], L"1.jpg", 64, 64);

loadimage(&img[2], L"2.jpg", 64, 64);

loadimage(&img[3], L"3.jpg", 64, 64);

loadimage(&img[4], L"4.jpg", 64, 64);

loadimage(&img[5], L"5.jpg", 64, 64);

loadimage(&img[6], L"6.jpg", 64, 64);

loadimage(&img[7], L"7.jpg", 64, 64);

loadimage(&img[8], L"8.jpg", 64, 64);

loadimage(&img[9], L"雷.jpg", 64, 64);

loadimage(&img[10], L"空.jpg", 64, 64);

loadimage(&img[11], L"标记.jpg", 64, 64);

win = 0;//重置胜利条件

while (1){

drawmap(hmap,img);

if (play(map, hmap) == -1){

drawmap(hmap, img);

MessageBox(0, L"炸弹来咯", L"BOOM", MB_OK);

return;

}

//游戏是否继续 胜利条件 点开了所有非雷区域

if (win == N*N - N){

drawmap(hmap, img);

MessageBox(0, L"你赢了", L"WELL PLAYED", MB_OK);

break;

} (加群: 590750544 群里有大量游戏开发教学视频和源码)

}

}

int play(int map[][N+2], int hmap[][N+2]){

//获取鼠标位置

MOUSEMSG msg;

while (1){

msg = GetMouseMsg();

switch (msg.uMsg){

//左键点开

case WM_LBUTTONDOWN:

//switch改进 先用if

if (hmap[msg.x / 64 + 1][msg.y / 64 + 1] != 0){ continue; }

if (map[msg.x / 64 + 1][msg.y / 64 + 1] == 0){//点到0

//hmap[msg.x / 64 + 1][msg.y / 64 + 1] = 10;//为0就改为10

//win++;

addFun(map, hmap, msg.x / 64 + 1, msg.y / 64 + 1);

//写函数替换

}

else { hmap[msg.x / 64 + 1][msg.y / 64 + 1] = map[msg.x / 64 + 1][msg.y / 64 + 1]; win++; }

//定义全局变量

return map[msg.x / 64 + 1][msg.y / 64 + 1];

break;

//增加右键 1.左键不可点击 2.右键添加取消标记 3.调用函数时候0周围也不显示

//右键标记雷

case WM_RBUTTONDOWN:

//2.右键标记取消

if (hmap[msg.x / 64 + 1][msg.y / 64 + 1] == 0){ hmap[msg.x / 64 + 1][msg.y / 64 + 1] = 11; }

else if (hmap[msg.x / 64 + 1][msg.y / 64 + 1] == 11){ hmap[msg.x / 64 + 1][msg.y / 64 + 1] = 0; }

else { continue; }

return 0;

break;

}

}

}

//画图

void drawmap(int hmap[][N+2],IMAGE *img){

for (int i = 1; i <= N; i++){

for (int j = 1; j <= N; j++){

switch (hmap[i][j]){

case -1:putimage(64 * (i - 1), 64 * (j - 1), &img[9]); break;//雷

case 0:putimage(64 * (i - 1), 64 * (j - 1), &img[10]); break;//默认空

case 10:putimage(64 * (i - 1), 64 * (j - 1), &img[0]); break;//点击之后为空

case 1:putimage(64 * (i - 1), 64 * (j - 1), &img[1]); break;

case 2:putimage(64 * (i - 1), 64 * (j - 1), &img[2]); break;

case 3:putimage(64 * (i - 1), 64 * (j - 1), &img[3]); break;

case 4:putimage(64 * (i - 1), 64 * (j - 1), &img[4]); break;

case 5:putimage(64 * (i - 1), 64 * (j - 1), &img[5]); break;

case 6:putimage(64 * (i - 1), 64 * (j - 1), &img[6]); break;

case 7:putimage(64 * (i - 1), 64 * (j - 1), &img[7]); break;

case 8:putimage(64 * (i - 1), 64 * (j - 1), &img[8]); break;

case 9:putimage(64 * (i - 1), 64 * (j - 1), &img[9]); break;

case 11:putimage(64 * (i - 1), 64 * (j - 1), &img[11]); break;

default: break;

}

}

}

}

int main(){

do{

game();

if (MessageBox(0, L"再玩一局?", L"退出", MB_RETRYCANCEL) == IDCANCEL){

break;

}

} while (1);

closegraph();

//getchar();

return 0;

}

学习编程建议加群:(加群: 590750544 群里有大量游戏开发教学视频和源码)

... 
上一篇 : 抢红包群Iʚ小白桃ɞ(11-20)
下一篇 : 抢红包群Ic语言经典游戏代码
猜你喜欢的微信抢红包群,支付宝红包群,红包群,红包扫雷群