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