欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)掃雷游戲源代碼

 更新時(shí)間:2021年03月02日 16:51:48   作者:大佬之路  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷游戲源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下

此次掃雷中我們以9乘以9的表格為例,后期可自動(dòng)調(diào)動(dòng)

主要思路:建立兩個(gè)11乘以11的表格,分別為布雷和排雷后的表格,其中我們以字符1表示此處有雷,字符0表示此處無雷,在布雷時(shí)我們用時(shí)間函數(shù)布置隨機(jī)的10個(gè)雷(具體多少個(gè)雷可自行選擇),在另一個(gè)表格中顯示出所選位置周圍雷的個(gè)數(shù)

建立11*11的表格是因?yàn)楸阌诮y(tǒng)計(jì)四條邊上位置周圍含雷的個(gè)數(shù)

用vs建立頭文件game.n和兩個(gè)源文件game.c和test.c
(先分開講解,在文章最后有三個(gè)文件的整體顯示)

在頭文件中的聲明有

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY 10

time.h和stdlib.h 文件是time.h的庫函數(shù)

ROW表示行,COL表示列,ROWS表示11列,COLS表示11行,EASY表示(簡單程度)雷有10個(gè)
首先在test.c文件中建立主函數(shù)

int main()
{
 int input = 0;
 srand((unsigned int)time(NULL));

 do
 {
 menu();
 printf("請(qǐng)選擇:>");
 scanf("%d", &input);
 switch (input)
 {
 case 1:
 game();//實(shí)現(xiàn)游戲的過程
 break;
 case 0:
 printf("退出游戲\n");
 break;
 default:
 printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
 break;

 }

 } while (input);
 return 0;

}

其中 srand((unsigned int)time(NULL)) 是為了能夠在使用rand函數(shù)時(shí)每次產(chǎn)生不同的隨機(jī)數(shù)

其中包含兩個(gè)函數(shù),分別為菜單函數(shù)menu()和實(shí)現(xiàn)游戲的函數(shù)game()

菜單函數(shù)

void menu()
{
 printf("************************\n");
 printf("***** 1.play *********\n");
 printf("***** 0.exit *********\n");
 printf("************************\n");

}

主函數(shù)中整形input為輸入的數(shù)字,1進(jìn)行游戲,0退出游戲

進(jìn)行的游戲函數(shù)

void game()
{
 //創(chuàng)建棋盤對(duì)應(yīng)的數(shù)組
 char mine[ROWS][COLS];//布置好的雷的信息
 char show[ROWS][COLS];//排查出雷的信息
 //初始化棋盤
 initboard(mine, ROWS, COLS, '0');
 initboard(show, ROWS, COLS, '*');
 //打印棋盤
 //displayboard(mine, ROW, COL); 
 displayboard(show, ROW, COL);
 //布置雷
 setmine(mine, ROW, COL, EASY);
 //displayboard(mine, ROW, COL);
 //排雷
 finemine(mine, show, ROW, COL);
}

1、創(chuàng)建棋盤

在游戲函數(shù)中我們首先創(chuàng)建兩個(gè)11乘以11的棋盤,布置雷的棋盤為mine[ROWS][COLS],在玩家面前顯示的棋盤為show[ROWS][COLS]

2、初始化棋盤

在布置雷的棋盤中全部填寫字符0,在玩家顯示的棋盤面前全部填寫為字符*,
頭文件中聲明

//初始化棋盤
void initboard(char board[ROWS][COLS], int rows, int cols,char set);

game.c中具體寫出函數(shù)

void initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0, j = 0;
 for (i = 0; i < rows; i++)
 {
 for (j = 0; j < cols; j++)
 {
 board[i][j] = set;
 }
 }
}

3、打印棋盤

頭文件聲明

//打印棋盤
void displayboard(char board[ROWS][COLS], int row, int col);

game.c中具體寫出函數(shù)

//打印棋盤
void displayboard(char board[ROWS][COLS], int row, int col)
{
 int i = 0, j = 0;
 printf("-----------掃雷游戲-------------\n");
 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");
 }
 printf("-----------掃雷游戲-------------\n");

}

4、布置雷

將mine函數(shù)布置出雷

頭文件

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count);

count為計(jì)數(shù)器,計(jì)算布置雷的個(gè)數(shù),初始值為EASY,在頭文件中設(shè)置為10

game.c中的函數(shù)

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
 int x = rand() % row + 1; //模9為0到8
 int y = rand() % col + 1;
 if (mine[x][y] == '0')
 {
 mine[x][y] = '1';
 count--;
 }
 }

}

rand函數(shù)產(chǎn)生隨機(jī)數(shù),模上row(9)后的數(shù)為0到8,加上1為1到9的數(shù),棋盤本為11*11,但我們填充雷在1~9行,1到9列

5、排雷并且在玩家面前顯示出棋盤

頭文件

//排雷
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c中的函數(shù)

//統(tǒng)計(jì)x,y坐標(biāo)周圍雷的個(gè)數(shù)
int getmine(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y-1] + mine[x-1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1]
 + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}


//排雷+打印排雷后的棋盤
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int win = 0;
 while (win<ROW*COL-EASY)
 {
 printf("請(qǐng)輸入要排查雷的坐標(biāo):>");
 int x, y;
 scanf("%d%d", &x, &y);
 //坐標(biāo)合法性
 //坐標(biāo)是不是雷,不是雷,統(tǒng)計(jì)周圍雷的個(gè)數(shù)
 if (x >= 1 && x <= row&&y >= 1 &&y <= col)
 {
 if (mine[x][y]=='1')
 {
 printf("很遺憾,你被炸死了\n");
 displayboard(mine, row, col);
 break;
 }
 else
 {
 //坐標(biāo)不是雷,統(tǒng)計(jì)雷的個(gè)數(shù)
 int count = getmine(mine, x, y);
 show[x][y] = count+'0';//數(shù)字加上字符0為字符數(shù)字,轉(zhuǎn)化為字符數(shù)字,因?yàn)榇蛴〉臑樽址?
 displayboard(show, row, col); //打印排雷后的棋盤
 win++;
 }
 }
 else
 {

 printf("坐標(biāo)非法,重新輸入!\n");
 }
 }

 if (win == ROW*COL - EASY)
 {
 printf("恭喜你,排雷成功\n");
 displayboard(mine, row, col);
 }
}

win為已排查出非雷的個(gè)數(shù)

判斷非雷位置周圍8個(gè)位置有雷的個(gè)數(shù)只需要將周圍8個(gè)位置中的字符相加再減去8個(gè)0的ascll值,因?yàn)?個(gè)位置中有雷的位置即為字符1,將8個(gè)位置的字符相加轉(zhuǎn)化為實(shí)際的數(shù)字,即為雷的個(gè)數(shù),當(dāng)排除出的非雷的個(gè)數(shù)為ROWSCOLS-EASY(99-10)時(shí),即掃雷成功

game.h中完整文件為

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY 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 mine[ROWS][COLS], int row, int col, int count);
//排雷
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c中完整文件為

#define _CRT_SECURE_NO_WARNINGS

#include"game.h"
//初始化棋盤
void initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0, 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, j = 0;
 printf("-----------掃雷游戲-------------\n");
 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");
 }
 printf("-----------掃雷游戲-------------\n");

}
//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
 int x = rand() % row + 1; //模9為0到8
 int y = rand() % col + 1;
 if (mine[x][y] == '0')
 {
 mine[x][y] = '1';
 count--;
 }
 }

}
//統(tǒng)計(jì)x,y坐標(biāo)周圍雷的個(gè)數(shù)
int getmine(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y-1] + mine[x-1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1]
 + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}


//排雷+打印排雷后的棋盤
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int win = 0;
 while (win<ROW*COL-EASY)
 {
 printf("請(qǐng)輸入要排查雷的坐標(biāo):>");
 int x, y;
 scanf("%d%d", &x, &y);
 //坐標(biāo)合法性
 //坐標(biāo)是不是雷,不是雷,統(tǒng)計(jì)周圍雷的個(gè)數(shù)
 if (x >= 1 && x <= row&&y >= 1 &&y <= col)
 {
 if (mine[x][y]=='1')
 {
 printf("很遺憾,你被炸死了\n");
 displayboard(mine, row, col);
 break;
 }
 else
 {
 //坐標(biāo)不是雷,統(tǒng)計(jì)雷的個(gè)數(shù)
 int count = getmine(mine, x, y);
 show[x][y] = count+'0';//數(shù)字加上字符0為字符數(shù)字,轉(zhuǎn)化為字符數(shù)字,因?yàn)榇蛴〉臑樽址?
 displayboard(show, row, col); //打印排雷后的棋盤
 win++;
 }
 }
 else
 {

 printf("坐標(biāo)非法,重新輸入!\n");
 }
 }

 if (win == ROW*COL - EASY)
 {
 printf("恭喜你,排雷成功\n");
 displayboard(mine, row, col);
 }
}

test.c完整文件為

#define _CRT_SECURE_NO_WARNINGS

#include "game.h"


void menu()
{
 printf("************************\n");
 printf("***** 1.play *********\n");
 printf("***** 0.exit *********\n");
 printf("************************\n");

}
void game()
{
 //創(chuàng)建棋盤對(duì)應(yīng)的數(shù)組
 char mine[ROWS][COLS];//布置好的雷的信息
 char show[ROWS][COLS];//排查出雷的信息
 //初始化棋盤
 initboard(mine, ROWS, COLS, '0');
 initboard(show, ROWS, COLS, '*');
 //打印棋盤
 //displayboard(mine, ROW, COL); 
 displayboard(show, ROW, COL);
 //布置雷
 setmine(mine, ROW, COL, EASY);
 //displayboard(mine, ROW, COL);
 //排雷
 finemine(mine, show, ROW, COL);
}

int main()
{
 int input = 0;
 srand((unsigned int)time(NULL));

 do
 {
 menu();
 printf("請(qǐng)選擇:>");
 scanf("%d", &input);
 switch (input)
 {
 case 1:
 game();//實(shí)現(xiàn)游戲的過程
 break;
 case 0:
 printf("退出游戲\n");
 break;
 default:
 printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
 break;

 }

 } while (input);
 return 0;

}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言的可變參數(shù)函數(shù)實(shí)現(xiàn)詳解

    C語言的可變參數(shù)函數(shù)實(shí)現(xiàn)詳解

    某些情況下我們希望函數(shù)的參數(shù)個(gè)數(shù)可以根據(jù)需要確定,因此c語言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開始講解
    2021-08-08
  • C語言進(jìn)階可變參數(shù)列表

    C語言進(jìn)階可變參數(shù)列表

    這篇文章主要為大家介紹了C語言進(jìn)階可變參數(shù)列表的示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 如何在C++中調(diào)用python代碼你知道嗎

    如何在C++中調(diào)用python代碼你知道嗎

    這篇文章主要為大家介紹了C++中調(diào)用python代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 在C語言中輸入中文字符串講解

    在C語言中輸入中文字符串講解

    這篇文章主要介紹了在C語言中輸入中文字符串講解,本文通過概念和案例相結(jié)合講述了如何在C語言中使用中文,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • QT圓形圖像剪切功能實(shí)現(xiàn)

    QT圓形圖像剪切功能實(shí)現(xiàn)

    這篇文章主要介紹了QT圓形圖像剪切,實(shí)現(xiàn)代碼包括剪切代碼,完整QML源碼,C++代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • VC中控制臺(tái)程序創(chuàng)建窗口的實(shí)例方法

    VC中控制臺(tái)程序創(chuàng)建窗口的實(shí)例方法

    在本篇文章里小編給大家分享的是關(guān)于VC中控制臺(tái)程序創(chuàng)建窗口的實(shí)例方法及相關(guān)代碼內(nèi)容,有需要的朋友學(xué)習(xí)下吧。
    2021-12-12
  • Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    別踩白塊是一款音樂類休閑游戲,游戲的玩法不難,只需跟著音樂的節(jié)奏點(diǎn)中對(duì)的方塊即可。本文將用Matlab實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以了解一下
    2022-03-03
  • 教你用c++從頭開始實(shí)現(xiàn)決策樹

    教你用c++從頭開始實(shí)現(xiàn)決策樹

    從頭實(shí)現(xiàn)一個(gè)分類決策樹分類器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過程中的主要經(jīng)驗(yàn),對(duì)c++實(shí)現(xiàn)決策樹相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • C++基于prim實(shí)現(xiàn)迷宮生成

    C++基于prim實(shí)現(xiàn)迷宮生成

    這篇文章主要為大家詳細(xì)介紹了C++基于prim實(shí)現(xiàn)迷宮生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 一文讀懂c++之static關(guān)鍵字

    一文讀懂c++之static關(guān)鍵字

    這篇文章主要介紹了c++之static關(guān)鍵字的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評(píng)論