C語言編程實現(xiàn)掃雷游戲
本文實例為大家分享了C語言實現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
在我們熟知的掃雷中,我們點擊小方塊,小方塊要么出現(xiàn)數(shù)字,要么遇到地雷。我打算,使用數(shù)組的方式來完成掃雷游戲。使用一個數(shù)組用來生成隨機(jī)地雷,使用另外一個數(shù)組,用來進(jìn)行游戲,該數(shù)組可以先將所有的元素都初始化為'*',表示沒有被掃雷的坐標(biāo)點。
以下是代碼部分。
這是test.c文件
#define _CRT_SECURE_NO_WARNINGS 1
//掃雷游戲
#include "game.h"
void game()
{
char MineArr[ROWS][COLS] = {0};
char ShowArr[ROWS][COLS] = {0};
//給數(shù)組賦初值
//地雷數(shù)組全部賦予0,顯示數(shù)組全部賦予'*'
Assign(MineArr, ROWS, COLS, '0');
Assign(ShowArr, ROWS, COLS, '*');
//將數(shù)組顯示出來,并在數(shù)組旁添加坐標(biāo)號
//Show(MineArr, ROW, COL);
Show(ShowArr, ROW, COL);
//布置地雷
Mine(MineArr, ROW, COL);//將布置地雷后的數(shù)組輸出
Show(MineArr, ROW, COL);
//排查地雷
FindMine(MineArr, ShowArr,ROW,COL);
}
int main()
{
int input;
do
{
printf("------------------------------\n");
printf("-------1、開始游戲------------\n");
printf("------------------------------\n");
printf("-------0、退出游戲------------\n");
printf("------------------------------\n");
printf("請選擇:>\n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("掃雷游戲開始\n");
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("輸入錯誤,請重新輸入\n");
break;
}
}
while (input);
return 0;
}
game.h文件
#define _CRT_SECURE_NO_WARNINGS 1 #include "stdio.h" #include <stdlib.h> #include<time.h> #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define Easy_Count 10; void Assign(char Arr[ROW][COL],int rows,int cols,char set);//給數(shù)組賦初值 void Show(char Arr[ROW][COL], int rows, int cols);//將數(shù)組顯示出來,并在數(shù)組旁添加坐標(biāo)號 void Mine(char Arr[ROW][COL],int rows, int cols);//布置地雷 void FindMine(char Arr1[ROW][COL], char Arr2[ROW][COL], int row, int col); int GetMineCount(char Arr1[ROW][COL],int x,int y);
game.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void Assign(char Arr[ROW][COL], int rows, int cols, char set)
{
int i = 0;
for (i = 0;i < rows;i++)
{
int j = 0;
for (j = 0;j < cols;j++)
{
Arr[i][j] = set;
}
}
}
void Show(char Arr[ROW][COL], int row, int col)
{
for (int a = 0;a < 10;a++)
{
printf("%d ",a);
}
printf("\n");
int i = 1;
for (i = 1;i <= row;i++)
{
printf("%d ",i);
int j = 1;
for (j = 1;j <= col;j++)
{
printf("%c ", Arr[i][j]);
}
printf("\n");
}
}
void Mine(char Arr[ROW][COL], int rows, int cols)
{
int count = Easy_Count;
while (count)
{
srand((unsigned)time(NULL));
int i = rand() % rows + 1;
int j = rand() % cols + 1;
if (Arr[i][j]!='1')
{
Arr[i][j] = '1';
count--;
}
}
}
int GetMineCount(char Arr1[ROW][COL], int x, int y)
{
return Arr1[x - 1][y + 1] + Arr1[x][y + 1] + Arr1[x + 1][y + 1] +
Arr1[x - 1][y] + Arr1[x + 1][y] +
Arr1[x - 1][y - 1] + Arr1[x][y - 1] + Arr1[x + 1][y - 1] - 8 * '0';
}
void FindMine(char Arr1[ROW][COL], char Arr2[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
printf("請輸入要排查的坐標(biāo):>");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (Arr1[x][y]=='1')
{
printf("很遺憾,你被炸死了\n");
Show(Arr1, ROW, COL);
break;
}
else
{
int count = GetMineCount(Arr1,x,y);
Arr2[x][y] = count + '0';
Show(Arr2, ROW, COL);
}
}
else
{
printf("坐標(biāo)非法,請重新輸入\n");
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用C語言實現(xiàn)珠璣妙算Mastermind小游戲
這篇文章主要介紹了使用C語言實現(xiàn)珠璣妙算Mastermind小游戲,這是一款益智類多人游戲游戲,非常有趣,需要的朋友可以參考下2023-03-03
Visual Studio 2019 Professional 激活方法詳解
這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
QT中QDataStream二進(jìn)制數(shù)據(jù)讀寫的實現(xiàn)
本文主要介紹了QT中QDataStream二進(jìn)制數(shù)據(jù)讀寫的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
C語言全面細(xì)致講解單雙精度float與double的使用方法
C語言中小數(shù)的數(shù)據(jù)類型為 float 或 double:float 稱為單精度浮點數(shù),double 稱為雙精度浮點數(shù)。不像整數(shù),小數(shù)的長度始終是固定的,float 占用4個字節(jié),double 占用8個字節(jié)2022-05-05
C語言system 自動關(guān)機(jī)函數(shù)代碼
這篇文章主要介紹了C語言system 自動關(guān)機(jī)函數(shù)代碼,需要的朋友可以參考下2016-04-04
C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能
這篇文章主要介紹了C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能,幫助大家提高程序運行速度,感興趣的朋友可以了解下2020-10-10

