C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
C語(yǔ)言實(shí)現(xiàn)掃雷游戲,供大家參考,具體內(nèi)容如下
game1.h中的代碼如下:
里邊放置的是相關(guān)的函數(shù)聲明
#include<stdio.h> #include<stdlib.h> #include<time.h> #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 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 board[ROWS][COLS],int row,int col); void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);
saolei.c中的代碼如下:
這里主要是實(shí)現(xiàn)菜單的打印以及棋盤的打印
#define _CRT_SECURE_NO_WARNINGS 1
#include"game1.h"
void menu()
{
printf("**************************\n");
printf("******* 1.play *********\n");
printf("******* 0.exit *********\n");
printf("**************************\n");
}
void game1()
{
//雷的信息存儲(chǔ)
//布置好雷的信息
char mine[ROWS][COLS]={0};
//排查出雷的信息
char show[ROWS][COLS]={0};
//初始化
InitBoard(mine,ROWS,COLS,'0');
InitBoard(show,ROWS,COLS,'*');
DisplayBoard(show,ROW,COL);
//布置雷
SetMine(mine,ROW,COL);
//掃雷
FindMine(mine,show,ROW,COL);
}
void saolei()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請(qǐng)選擇:");
scanf("%d",&input);
switch(input)
{
case 1:
game1();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
break;
}
}while(input);
}
int main()
{
saolei();
return 0;
}
game1.c中的代碼如下:
主要是玩家玩游戲排雷的整個(gè)游戲過(guò)程的相關(guān)函數(shù)操作。
#define _CRT_SECURE_NO_WARNINGS 1
#include"game1.h"
#include<stdio.h>
void InitBoard(char board[ROWS][COLS],int rows,int cols,char 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[ROWS][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<row*col-EASY_COUNT)
{
printf("請(qǐng)輸入排查雷的坐標(biāo):");
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("輸入坐標(biāo)非法,請(qǐng)重新輸入!");
}
}
if(win==win<row*col-EASY_COUNT)
{
printf("恭喜你,排雷成功!\n");
DisplayBoard(mine,row,col);
}
}
代碼運(yùn)行結(jié)果如圖所示:

相關(guān)文章
C++實(shí)現(xiàn)線性表順序存儲(chǔ)的示例代碼
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)線性表順序存儲(chǔ)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2023-03-03
VC實(shí)現(xiàn)讓關(guān)閉按鈕成灰色不可用的方法
這篇文章主要介紹了VC實(shí)現(xiàn)讓關(guān)閉按鈕成灰色不可用的方法,比較實(shí)用的一個(gè)特殊功能,需要的朋友可以參考下2014-08-08
C++ 中動(dòng)態(tài)鏈接庫(kù)--導(dǎo)入和導(dǎo)出的實(shí)例詳解
這篇文章主要介紹了C++ 中動(dòng)態(tài)鏈接庫(kù)--導(dǎo)入和導(dǎo)出的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之 折半查找實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之 折半查找實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
VC實(shí)現(xiàn)五子棋游戲的一個(gè)算法示例
這篇文章主要介紹了VC實(shí)現(xiàn)五子棋游戲的一個(gè)算法示例,對(duì)于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下2014-08-08
C語(yǔ)言實(shí)現(xiàn)的猴子分桃問(wèn)題算法解決方案
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的猴子分桃問(wèn)題算法,較為詳細(xì)的分析了猴子分桃問(wèn)題算法的原理與通過(guò)遞歸算法解決問(wèn)題的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10
解析C++編程中的選擇結(jié)構(gòu)和switch語(yǔ)句的用法
這篇文章主要介紹了解析C++編程中的選擇結(jié)構(gòu)和switch語(yǔ)句的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09

