经典扫雷游戏(C语言)

编程入门 行业动态 更新时间:2024-10-06 10:30:32

经典扫雷游戏(C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言)"/>

经典扫雷游戏(C语言)

今天给大家讲解用C语言写扫雷游戏的过程,希望大家可以多多支持!

目录

今天给大家讲解用C语言写扫雷游戏的过程,希望大家可以多多支持!

1.游戏菜单

2.游戏部分棋盘模拟。

3.打印棋盘

4.布置地雷

5.排雷


1.游戏菜单

写扫雷游戏的过程大致和三子棋游戏差不多。我会把代码放在最后。

第一步先写一个游戏菜单。

2.游戏部分棋盘模拟。

菜单写完后我们就要开始写游戏部分。首先想想扫雷也同样需要一个棋盘。于是我们先初始化一个棋盘。

  • board:二维字符数组,用于存储游戏板的数据。
  • rows:整数,表示二维数组的行数。
  • cols:整数,表示二维数组的列数。
  • set:字符,要将数组中的元素设置为的字符。

3.打印棋盘

初始化好后,我们要看看我们的0是否已经在棋盘里的呢。我们于是需要打印棋盘。

 


4.布置地雷

这样我们的棋盘就打印好啦。棋盘打印好后,就该布置地雷了。

函数内部使用一个循环来随机选择地雷所在的位置,并将对应位置的元素设置为 '1',表示有地雷。循环的次数由常量 EASY_COUNT 控制,可以根据难度级别修改具体的值。请注意,在使用 rand() 函数之前,需要包含 <stdlib.h> 头文件还有<time.h>头文件。另外,为了使随机数取值范围正确,生成的行号和列号需要加 1。

 

这里我们同样用到了rand函数大家可以参考我这一篇文章 里面有对rand函数详细的介绍。

5.排雷

 当我们布置好雷后,就要开始排雷了。

  • mine:二维字符数组,表示游戏板的数据,存储地雷分布情况。
  • x:整数,表示要计算地雷数量的位置的行号。
  • y:整数,表示要计算地雷数量的位置的列号。

函数内部通过将指定位置周围8个格子中的元素相加,并减去 8 * '0'(即字符 '0' 的ASCII码值乘以8),得到周围地雷的数量。

函数内部使用一个循环进行游戏的主逻辑。在每次循环中,请求用户输入要清除的坐标,并判断输入的坐标是否合法。合法的坐标范围是从 1 到行数和列数之间。如果输入的坐标超出了合法范围,则提示输入错误并重新输入。对于合法的坐标,首先检查该位置是否有地雷。如果有地雷,则游戏结束,输出失败信息,并调用 DisplayBoard 函数显示出地雷的分布情况。如果没有地雷,则根据周围地雷的数量更新显示状态,并调用 DisplayBoard 函数显示更新后的游戏板。游戏的胜利条件是清除除地雷以外的所有格子,当已经清除的格子数等于总格子数减去地雷数时,游戏胜利。


#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i;int j;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i;int j;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("------扫雷------\n");
}void SetMine(char mine[ROWS][COLS], int row, int col)
{int count=EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}	}
}int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return mine[x - 1][y] +mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - 8 * '0';
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS] ,int row, int col)
{int x = 0;int y = 0;int win = 0;while (win<row*col-EASY_COUNT){printf("请输入要清除的坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y>=1 && y <= col){if (mine[x][y] == '1'){printf("抱歉你被炸死了。");DisplayBoard(mine, ROW, COL);break;}else{int c = GetMineCount(mine, x, y);show[x][y] = c + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("输入错误,请重新输入:");}}
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include "game.h"void meun()
{printf("***************\n");printf("**** 1.play ***\n");printf("**** 0.exit ***\n");printf("***************\n");
}void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');/*DisplayBoard(mine, ROW, COL);*/DisplayBoard(show, ROW, COL);SetMine(mine, ROW, COL);/*DisplayBoard(mine, ROW, COL);*/FindMine(mine,show, ROW, COL);/*DisplayBoard(mine, ROW, COL);*/}int main()
{srand((unsigned int)time(NULL));int input = 0;do{meun();printf("请输入选项:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏,");break;default:printf("输入错误,请重新输入。");break;}} while (input);return 0;
}


#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define EASY_COUNT 10
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#include <stdio.h>void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);void DisplayBoard(char board[ROWS][COLS], int row, int col);void SetMine(char mine[ROWS][COLS], int row, int col);void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS] ,int row, int col);

更多推荐

经典扫雷游戏(C语言)

本文发布于:2024-03-23 20:00:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742221.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   经典   游戏

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!