用C语言实现排雷游戏
时间:2022-05-11 09:23:24|栏目:C代码|点击: 次
设计简单的游戏界面菜单
输入数字1,进入游戏;
输入数字0,退出游戏;输入其他数字,将显示输入错误,重新输入;
排雷过程
输入坐标,将显示是否排到雷,或者没有。
显示的数字,将是该坐标周围八个坐标总共有几个雷。(如图,则有3颗)。如果输入的坐标超出坐标范围,将会提示,坐标非法输入,重新输入。
如果你输入的坐标有雷,将会出现,你被炸,游戏结束!
如果排雷成功,将显示你成功排雷。(这里设置了雷数是80个,将直接操作显示出来)。
相应的代码
测试代码在------text.c
#include"game.h"
void menu() { printf("****************\n"); printf(" 1. PLAY *\n"); printf(" 0. EXIT ******\n"); printf("*******************\n"); } void game() { //雷的信息; //1.布置雷的信息; char mine[ROWS][COLS]={0};//1111 //2.排查雷 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); } void test() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf(“请选择:>\n”); scanf("%d",&input); switch(input) { case 1: game(); break; case 0: printf(“退出游戏\n”); break; default: printf(“选择错误,请重新选择!\n”); break; } } while(input); } int main() { test(); return 0; } 2. 函数的声明 #define ROW 9 //显示时棋盘的行数; #define COL 9 //显示时棋盘的列数; #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 //雷的总数; #include <stdio.h> #include <stdlib.h> #include <time.h> void InitBoard(char board[ROWS][COLS],int rows,int cols,int set); void DisplayBoard(char board[ROW][COLS],int row,int col); void SetMine(char board[ROWS][COLS],int row,int col); void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col); 3. 相关函数的定义 #include “game.h” void InitBoard(char board[ROWS][COLS],int rows,int cols,int set) { int i = 0; int j = 0; for(i = 0;i<=rows;i++) { for(j = 0;j<=cols;j++) { board[i][j] = set; } } } void DisplayBoard(char board[ROW][COLS],int row,int col) { int i = 0; int j = 0; //打印列号; for( i =0;i<=col;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"); } } void SetMine(char board[ROWS][COLS],int row,int col) { int count = EASY_COUNT; while(count) { int x = rand()%row+1; int y = rand()%col+1; if(board[x][y]==‘0') { board[x][y]=‘1'; count–; } } } int get_mine_count(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<rowcol-EASY_COUNT) { printf(“请输入坐标:>\n”); scanf("%d%d",&x,&y); if(x>=1&&x<=row&&y>=1&&y<=col) { if(mine[x][y]‘1') { printf(“很遗憾,你被炸死了\n”); DisplayBoard(mine,ROW,COL); break; } else//计算雷的个数; { int count = get_mine_count(mine,x,y); show[x][y]=count+‘0'; DisplayBoard(show,ROW,COL); win++; } } else { printf(“输入非法坐标,请重新输入\n”); } } if(winrowcol-EASY_COUNT) { printf(“恭喜你,排雷成功\n”); DisplayBoard(mine,ROW,COL); } }
一级目录排雷游戏的缺陷与不足
设计排雷游戏非常的简易,而且对于输入坐标只能一个一个排,并不能在一定的情况下,将不是雷的空位显示出来,所以排雷过程中需要花费大量的时间。设计上面并不是很美观,只能是简易的游戏!
一级目录改进
需要运用递归去改进排雷游戏中关键的一步!