基于C語言實(shí)現(xiàn)簡單的掃雷游戲
掃雷游戲的實(shí)現(xiàn),必須要考慮其中包含的功能。
首先是在游戲開始時(shí)的初始界面,規(guī)定用戶輸入1則游戲開始,輸入2則游戲結(jié)束,再去創(chuàng)建兩個(gè)二維數(shù)組,一個(gè)存放用戶看到的界面,一個(gè)存放埋雷的雷盤,在進(jìn)行初始化兩個(gè)二維數(shù)組,用戶界面展示為一個(gè)10*10的界面,首行和首列存儲'0'-'9',給用戶直觀的可以尋找想要搜索的元素,雷區(qū)初始化為' 0 ',用戶界面初始化為'?'。
在進(jìn)行雷位置的初始化,使用數(shù)字幀表示,用 數(shù)字幀%9+1 得到一個(gè)1-9的數(shù)字,可以取得一個(gè)[1-9][1-9]的坐標(biāo),建立一個(gè) i == 0 ,i是小于等于10的, 創(chuàng)建一個(gè)循環(huán)次數(shù)為10的循環(huán),在判斷此坐標(biāo)是否為' 0 ',若是' 0 ',則將其賦為'1',在進(jìn)行i++ ,再將如果不是'0',則直接退出本次循環(huán),直到1==10,則循環(huán)中止,一共在其中埋10顆雷。
接下來用戶輸入想要搜索的坐標(biāo),因?yàn)?*9的雷盤一共有81個(gè)元素,其中存在10顆雷,所以如果搜索71個(gè)元素都沒有雷,則可以判定掃雷成功,所以創(chuàng)建一個(gè)71次的循環(huán),如果為71的話,則游戲成功,每次掃雷的時(shí)候,需要將用戶看到界面的此次掃雷位置賦為此位置周圍雷的數(shù)量,,則創(chuàng)建一個(gè)函數(shù),此函數(shù)返回值為雷盤上對應(yīng)的坐標(biāo)周圍存的元素-8*'0',得到一個(gè)數(shù)字,再將此數(shù)字進(jìn)行+'0',將其轉(zhuǎn)為字符型;傳入用戶界面的對應(yīng)坐標(biāo).在進(jìn)行下次循環(huán).如果循環(huán)次數(shù)為71是,則判定掃雷成功。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define Row 11
#define Col 11
#define Rows 10
#define Cols 10
void print() {
printf("**************************************\n");
printf("************1.開始游戲****************\n");
printf("************2.退出游戲****************\n");
printf("**************************************\n");
}
//初始化棋盤
void init(char board[Row][Col], char c) {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++) {
board[i][j] = c;
}
}
}
//打印用戶看到的界面
void printboard(char board[Row][Col]) {
for (int i = 0; i < Rows; i++) {
printf("%d ", i);
}
printf("\n");
for (int i = 1; i < Rows; i++) {
printf("%d ", i);
for (int j = 1; j < Cols; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
//打印雷盤
void print_mineboard(char board[Row][Col]) {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
//初始化10個(gè)雷的位置
void set_mine(char mine_board[Row][Col]) {
int i = 0;
do {
int row = rand() % 9 + 1;
int col = rand() % 9 + 1;
if (mine_board[row][col] == '0') {
mine_board[row][col] = '1';
i++;
}
else {
continue;
}
} while (i <= 10);
}
int player_enter(char board[Row][Col],int x,int y) {
//返回雷子數(shù)量
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';
}
//游戲函數(shù)
void game() {
char human_board[Row][Col];
char mine_board[Row][Col];
//2.初始化兩個(gè)棋盤
char one = '?';
char two = '0';
init(human_board, one);
init(mine_board, two);
//3.棋盤2 雷的位置初始化
set_mine(mine_board);
//4.打印棋盤
printf("\n");
//5.玩家輸入坐標(biāo)位置
for (int i = 1; i <= 71; i++) {
printboard(human_board);
int x = 0;
int y = 0;
printf("請輸入你要尋找的坐標(biāo)(x,y):");
scanf("%d %d", &x, &y);
//判斷坐標(biāo)是否正確
if (x > 0 && x < 10 && y>0 && y < 10 && human_board[x][y] == '?') {
//判斷坐標(biāo)處是否有雷
if (mine_board[x][y] == '1') {
printf("你被炸死了!\n");
//給他死個(gè)明白
print_mineboard(mine_board);
break;
}
else {
//輸出雷子數(shù)量
human_board[x][y] = player_enter(mine_board, x, y) + '0';
system("cls");
}
}
else {
printf("坐標(biāo)有誤,請重新輸入!\n");
i--;
}
if (i == 71) {
printf("你真牛逼,這都能贏!\n");
}
}
}
int main() {
srand((unsigned int)time(0));
//1.創(chuàng)建登錄界面
print();
int i = 0;
//用戶選擇接下來的操作
while (1) {
int choose = 0;
if (i == 0) {
printf("請選擇你接下來想要進(jìn)行的操作:");
i++;
}
else {
printf("還要玩嗎?\n");
printf("1 yes 2 no\n");
}
scanf("%d", &choose);
if (choose == 1) {
game();
}
else {
if (choose == 2) {
break;
}
else {
printf("輸入錯(cuò)誤,請重新輸入!\n");
continue;
}
}
}
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺析C++調(diào)用Java的Jar包(帶參數(shù))問題
這篇文章主要介紹了C++調(diào)用Java的Jar包(帶參數(shù))問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
c語言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
這篇文章主要介紹了c語言鏈表基本操作,大家參考使用吧2013-12-12
C語言實(shí)現(xiàn)的一個(gè)三子棋游戲詳解流程
三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對角線連起來,相對兩邊依次擺上三個(gè)雙方棋子,只要將自己的三個(gè)棋子走成一條線,對方就算輸了2021-10-10
C語言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01

