C語言模擬實現(xiàn)簡單掃雷游戲
本文指的掃雷是簡單模擬電腦中的掃雷游戲,但以我目前的水平,也就只能在黑框中實現(xiàn)
test.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include "game2.h"
void menu()
{
printf("********* welcome ********\n");
printf("**********1.play**********\n");
printf("**********0.exit**********\n");
}
enum Option
{
EXIT,
PLAY
};
void game()
{
int x = 0;
int y = 0;
int i = 0;
int win = 0;
char mine[ROWS + 2][COLS + 2] = { 0 };
char show[ROWS + 2][ROWS + 2] = { 0 };
init_board(mine, ROWS + 2, COLS + 2, '0');
init_board(show, ROWS + 2, COLS + 2, '*');
//display(mine, ROWS + 2, COLS + 2);#define _CRT_SECURE_NO_WARNINGS
//display(show, ROWS + 2, COLS + 2);
mine_set(mine, ROWS + 2, COLS + 2);
display(mine, ROWS + 2, COLS + 2);
while (win<ROWS*COLS - DEFAULT_COUNT)
{
for (i = 0; i <= win; i++)
{
printf("請輸入坐標(biāo):>");
scanf("%d%d", &x, &y);
//合法性判斷
if ((x>0) && (x <= ROWS) && (y > 0) && (y <= COLS))
{
if ((i == 0) && (mine[x][y] == '1'))
{
(mine[x][y] = '0') ;
}
if (mine[x][y] == '1')
{
printf("很遺憾,你被炸死了\n");
break;
}
else
{
int count = 0;
win++;
count = get_mine_num(mine, x, y);
show[x][y] = count + '0';
display(show, ROWS + 2, COLS + 2);
}
}
else
{
printf("輸入錯誤請重新輸入\n");
}
}
if (win >= ROWS*COLS - DEFAULT_COUNT)
{
printf("恭喜你,掃雷成功\n");
}
}
}
int main()
{
int input = 0;
srand((uint_t)time(NULL));
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case PLAY:
game();
break;
case EXIT:
break;
default:
printf("輸入錯誤,請重新輸入\n");
break;
}
} while (input);
system("pause\n");
return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game2.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void init_board(char arr[ROWS + 2][COLS + 2], int row, int col,char ch)
{
memset(arr, ch, sizeof(char) * row * col);
}
void display(char arr[ROWS + 2][COLS + 2], int row, int col)
{
int i = 0;
int j = 0;
printf(" ");
for (i = 0; i < col - 2; i++)
{
printf("%d ", i + 1);
}
printf("\n");
for (i = 0; i < row - 2; i++)
{
printf("%2d ", i + 1);
for (j = 0; j < col - 2; j++)
{
printf("%c ", arr[i + 1][j + 1]);
}
printf("\n");
}
}
void mine_set(char arr[ROWS + 2][COLS + 2], int row, int col)
{
int x = 0;
int y = 0;
int count = DEFAULT_COUNT;
while (count)
{
x = rand() % 10 + 1;
y = rand() % 10 + 1;
if (arr[x][y] != '1')
{
arr[x][y] = '1';
count--;
}
}
}
int get_mine_num(char arr[ROWS + 2][COLS + 2], int x, int y)
{
return (arr[x][y - 1] - '0') +
(arr[x - 1][y - 1]-'0')- +
(arr[x - 1][y]-'0') +
(arr[x - 1][y + 1]-'0') +
(arr[x][y + 1]-'0') +
(arr[x + 1][y + 1]-'0') +
(arr[x + 1][y]-'0') +
(arr[x + 1][y - 1]-'0');//返回周圍雷的個數(shù)
}
game.h
#ifndef __GAME_H__ #define __GAME_H__ #define ROWS 10 #define COLS 10 #define DEFAULT_COUNT 20 typedef unsigned int uint_t;//類型重命名 #include<string.h> #include<stdio.h> #include<time.h> #include<stdlib.h> void init_board(char arr[ROWS + 2][COLS + 2], int row, int col,char ch);//初始化 void display(char arr[ROWS + 2][COLS + 2], int row, int col); void mine_set(char arr[ROWS + 2][COLS + 2], int row, int col);//放雷 int get_mine_num(char arr[ROWS + 2][COLS + 2], int row, int col);//統(tǒng)計坐標(biāo)周圍雷的個數(shù) #endif //__GAME_H__

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
VsCode安裝和配置c/c++環(huán)境小白教程(圖文)
本文主要介紹了VsCode安裝和配置c/c++環(huán)境小白教程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
詳解C++編程中標(biāo)記語句與復(fù)合語句的寫法
這篇文章主要介紹了C++編程中標(biāo)記語句與復(fù)合語句的寫法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01
詳解C++設(shè)計模式編程中策略模式的優(yōu)缺點及實現(xiàn)
這篇文章主要介紹了C++設(shè)計模式編程中策略模式的優(yōu)缺點及實現(xiàn),文中討論了策略模式中設(shè)計抽象接口的繼承和組合之間的區(qū)別,需要的朋友可以參考下2016-03-03
C++學(xué)習(xí)進(jìn)階篇之類大小計算和this指針
this是C++中的一個關(guān)鍵字,也是一個const指針,它指向當(dāng)前對象,通過它可以訪問當(dāng)前對象的所有成員,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)進(jìn)階篇之類大小計算和this指針的相關(guān)資料,需要的朋友可以參考下2023-04-04
windows上配置vscode?C/C++代碼跳轉(zhuǎn)的實現(xiàn)
C/C++官方的C/C++插件,必備的插件,是代碼跳轉(zhuǎn)、自動補(bǔ)全、代碼大綱顯示等功能的基礎(chǔ),本文主要介紹了windows上配置vscode?C/C++代碼跳轉(zhuǎn),感興趣的可以了解一下2023-09-09
C語言循環(huán)結(jié)構(gòu)與時間函數(shù)用法實例教程
這篇文章主要介紹了C語言循環(huán)結(jié)構(gòu)與時間函數(shù)用法,是C語言中非常重要的一個技巧,需要的朋友可以參考下2014-08-08
用c語言實現(xiàn)《狼人殺》游戲發(fā)牌系統(tǒng)
大家好,本篇文章主要講的是用c語言實現(xiàn)《狼人殺》游戲發(fā)牌系統(tǒng),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01

