扫雷就是要把所有非地雷的格子揭开即胜利;开到地雷格子就算失败。
游戏主区域由很多个方格组成。输入你所想要点击的位置坐标,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷。
game.h
这部分是建立自己所需的函数库。
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#pragma warning(disable:4996)
#define ROW 12
#define COL 12
#define NUM 20
void Setmine(char board[][COL],int row,int col);
void showboard(char board[][COL], int row, int col);
int GetCount(char board[][COL], int x,int y);
void Game();
#endif
main.c
打印游戏进入界面,实现进入游戏、退出游戏等操作。这部分在主函数中调用定义的函数,将其放入相应的框架中达到实现扫雷游戏代码
#include"game.h"
void Menu()
{
printf("########################\n");
printf("### 欢迎来到扫雷游戏 ###\n");
printf("###1.Play 2.Exit###\n");
printf("########################\n");
printf("请选择>");
}
int main()
{
int quit = 0;
while (!quit) {
Menu();
int select = 0;
scanf("%d", &select);
switch (select) {
case 1:
Game();
break;
case 2:
quit = 1;
break;
default:
printf("你选择有误,请重新输入!\n");
break;
}
}
printf("欢迎下次再来!\n");
system("pause");
return 0;
}
game.c
打印游戏界面,游戏界面基于二维数组建立。
void showboard(char board[][COL], int row, int col)
{
int i = 1;
for (; i <= 10; i++) {
printf(" %d", i);
}
printf("\n");
for (i = 1; i <= 11; i++) {
printf("----");
}
printf("\n");
for (i = 1; i <= 10; i++) {
printf("%2d |", i);
int j = 1;
for (; j <= 10; j++) {
printf(" %c |", board[i][j]);
}
printf("\n");
int k = 1;
for (k = 1; k <= 11; k++) {
printf("----");
}
printf("\n");
}
}
在游戏界面中埋入地雷的函数,以字符0代表没有雷,字符1代表有雷
void showboard(char board[][COL], int row, int col)
{
int i = 1;
for (; i <= 10; i++) {
printf(" %d", i);
}
printf("\n");
for (i = 1; i <= 11; i++) {
printf("----");
}
printf("\n");
for (i = 1; i <= 10; i++) {
printf("%2d |", i);
int j = 1;
for (; j <= 10; j++) {
printf(" %c |", board[i][j]);
}
printf("\n");
int k = 1;
for (k = 1; k <= 11; k++) {
printf("----");
}
printf("\n");
}
}
获取输入坐标周围雷数量的函数
int GetCount(char board[][COL], int x, int y){
return board[x-1][y-1] + board[x-1][y] + board[x-1][y+1] + board[x][y-1] + board[x][y+1] + \
board[x+1][y-1] + board[x+1][y] + board[x+1][y+1] - 8 * '0';
}
找雷函数,在这个函数中我们将获得玩家输入的坐标并判断改位置是不是雷,此函数中我们将会调用上面我们所建立的函数。
void Game()
{
system("cls");
srand((unsigned long)time(NULL));
char mine_board[ROW][COL];
char show_board[ROW][COL];
memset(mine_board, '0', sizeof(mine_board));
memset(show_board, '*', sizeof(show_board));
int no_x;
int no_y;
Setmine(mine_board, ROW, COL,&no_x,&no_y);
int x = 0;
int y = 0;
int times = 100 - NUM;
do {
showboard(show_board, ROW, COL);
printf("Please Enter<x,y>:");
scanf("%d %d", &x, &y);
if (x < 1 || x>10 || y < 1 || y>10) {
printf("输入有误,请重新输入!\n");
continue;
}
if (show_board[x][y] != '*') {
printf("该位置已排除,请重新输入!\n");
continue;
}
if (mine_board[x][y] == '1') {
printf("Game Over!\n");
showboard(mine_board, ROW, COL);
break;
}
int count = GetCount(mine_board, x, y);
show_board[x][y] = count + '0';
times--;
} while (times > 0);
}
个人心得:首先要得出一个大概的流程框架,然后在其中填入相应的代码。我在编写过程中很多地方考虑不周,导致写出的代码无法实现功能。个人能力有限,希望大家多多指正我的错误,帮助我进步