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

C語(yǔ)言開發(fā)實(shí)現(xiàn)掃雷游戲

 更新時(shí)間:2020年11月12日 08:45:32   作者:F....  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言開發(fā)實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

簡(jiǎn)單描述:

輸入要要掃的位置.
如果是雷,則游戲失敗.
如果將所有不是雷的位置都掃了一遍,則游戲勝利.

主要細(xì)節(jié)

1、初始化(玩家掃雷圖,地雷布局圖)

展示出來的地圖(玩家能看到的地圖)showMap

for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 showMap[row][col] = '*';
 }
}

地雷的布局地圖(玩家看不到的地圖)mineMap

for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 mineMap[row][col] = '*';
 }
 }
 int count = 0;
 while (count<MINECOUNT){
 int row = rand() % 9;
 int col = rand() % 9;
 mineMap[row][col] = 'L';
 count++;
 }
}

3、打印地圖

void print(char Map[ROW][COL]){
 printf(" |0|1|2|3|4|5|6|7|8|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}

5、玩家輸入要掃的位置信息(9*9格子中某一特定位置)

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){
 while (1){
 printf("請(qǐng)輸入您要點(diǎn)的位置坐標(biāo):");
 scanf("%d %d", row, col);
 if (((*row) < 0) || ((*row) >= ROW)
 || ((*col) < 0) || ((*col) >= COL)){
 printf("輸入有誤 ");
 continue;
 }
 if (showMap[*row][*col] == '*'){
 showMap[*row][*col] = ' ';
 break;
 }
 }
}

7、判斷某一位置是不是地雷

//返回1表示雷;返回0表示不是雷
int isMine(char mineMap[ROW][COL], int row, int col){
 if (mineMap[row][col] == 'L'){
 return 1;
 }
 return 0;
}

9、某一位置附近地雷的個(gè)數(shù)

int MineNerborhood(char mineMap[ROW][COL], int row, int col){
 if (row < 0 || row >= ROW
 || col < 0 || col >= COL){
 return '0';
 }
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++){
 for (int c = col - 1; c <= col + 1; c++){
 if (mineMap[r][c] == 'L'){
 count++;
 }
 }
 }
 return count + '0';
}

源代碼:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define ROW 9
#define COL 9
#define MINECOUNT 10

void Input(char showMap[ROW][COL], char mineMap[ROW][COL], int* row, int* col){
 while (1){
 printf("請(qǐng)輸入您要點(diǎn)的位置坐標(biāo):");
 scanf("%d %d", row, col);
 if (((*row) < 0) || ((*row) >= ROW)
 || ((*col) < 0) || ((*col) >= COL)){
 printf("輸入有誤 ");
 continue;
 }
 if (showMap[*row][*col] == '*'){
 showMap[*row][*col] = ' ';
 break;
 }
 }
}

//返回1表示雷;返回0表示不是雷
int isMine(char mineMap[ROW][COL], int row, int col){
 if (mineMap[row][col] == 'L'){
 return 1;
 }
 return 0;
}
//
void init(char showMap[ROW][COL], char mineMap[ROW][COL]){

 for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 showMap[row][col] = '*';
 }
 }
 for (int row = 0; row < ROW; row++){

 for (int col = 0; col < COL; col++){
 mineMap[row][col] = '*';
 }
 }
 int count = 0;
 while (count<MINECOUNT){
 int row = rand() % 9;
 int col = rand() % 9;
 mineMap[row][col] = 'L';
 count++;
 }
}
void print(char Map[ROW][COL]){
 printf(" |0|1|2|3|4|5|6|7|8|\n");
 for (int row = 0; row < ROW; row++){
 printf("%d |", row);
 for (int col = 0; col < COL; col++){
 printf("%c ", Map[row][col]);
 }
 printf("\n");
 }
}
//(row,col)附近格子地雷的個(gè)數(shù)
int MineNerborhood(char mineMap[ROW][COL], int row, int col){
 if (row < 0 || row >= ROW
 || col < 0 || col >= COL){
 return '0';
 }
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++){
 for (int c = col - 1; c <= col + 1; c++){
 if (mineMap[r][c] == 'L'){
 count++;
 }
 }
 }
 return count + '0';
}
//一局游戲
void game(){
 srand(time(0));
 //展示給玩家的地圖
 char showMap[ROW][COL];
 //雷的布局圖
 char mineMap[ROW][COL];
 //對(duì)兩個(gè)地圖進(jìn)行初始化
 init(showMap, mineMap);
 //print(mineMap);
 //玩家已經(jīng)掃到的不是雷的格子的數(shù)目
 int notMineCount = 0;
 printf("掃雷游戲開始啦!\n");
 while (1){
 //打印地圖
 print(showMap);
 //輸入地點(diǎn)
 int row, col;
 Input(showMap, mineMap, &row, &col);
 //判斷是否是雷區(qū)
 if (isMine(mineMap, row, col) == 1){
 printf(" 大兄弟,踩雷咧!\n給您看看雷的布局\n");
 print(mineMap);
 break;
 }
 //判斷附近雷的情況
 showMap[row][col]=MineNerborhood(mineMap, row, col);

 notMineCount++;
 //判斷是否贏了
 if (notMineCount == ROW*COL - MINECOUNT){
 print(mineMap);
 printf("恭喜您贏啦!\n");
 break;
 }
 }
 
}
int menu(){
 printf("===================\n");
 printf("1.開始游戲\n");
 printf("0.結(jié)束游戲\n");
 printf("===================\n");
 printf("請(qǐng)輸入您的選擇:");
 int choice;
 scanf("%d", &choice);
 return choice;
}
int main(){
 while (1){
 int choice = menu();
 if (choice == 1){
 game();
 }else if (choice==0){
 break;
 }else{
 printf("輸入有誤,請(qǐng)重新輸入\n");
 }
 }
 system("pause");
 return 0;
}

運(yùn)行結(jié)果:



更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • C語(yǔ)言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解

    C語(yǔ)言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解

    下面小編就為大家?guī)硪黄狢語(yǔ)言變長(zhǎng)數(shù)組 struct中char data[0]的用法詳解。小編覺得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++內(nèi)存對(duì)象布局小測(cè)試

    C++內(nèi)存對(duì)象布局小測(cè)試

    這篇文章主要介紹了C++內(nèi)存對(duì)象布局小測(cè)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • C++超詳細(xì)講解函數(shù)重載

    C++超詳細(xì)講解函數(shù)重載

    C++ 允許多個(gè)函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function Overloading),借助重載,一個(gè)函數(shù)名可以有多種用途
    2022-05-05
  • Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    本文主要介紹了Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用,這些關(guān)聯(lián)容器在Qt中提供了靈活而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)選項(xiàng),根據(jù)具體的需求和使用場(chǎng)景,您可以選擇適合的容器來存儲(chǔ)和管理數(shù)據(jù),感興趣的可以了解一下
    2023-09-09
  • C語(yǔ)言FlappyBird飛揚(yáng)的小鳥實(shí)現(xiàn)開發(fā)流程

    C語(yǔ)言FlappyBird飛揚(yáng)的小鳥實(shí)現(xiàn)開發(fā)流程

    因?yàn)樵诩艺撕枚嗵?,隨手玩了下自己以前做的一些小游戲,說真的,有幾個(gè)游戲做的是真的劣質(zhì),譬如 flappybird 真的讓我難以忍受,于是重做了一波分享給大家
    2022-11-11
  • C語(yǔ)言與C++中內(nèi)存管理詳解

    C語(yǔ)言與C++中內(nèi)存管理詳解

    本章主要介紹C語(yǔ)言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語(yǔ)言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來看看吧
    2022-04-04
  • static關(guān)鍵字的作用詳解

    static關(guān)鍵字的作用詳解

    在C語(yǔ)言中,static的字面意思很容易把我們導(dǎo)入歧途,其實(shí)它的作用有三條。
    2013-04-04
  • C語(yǔ)言實(shí)現(xiàn)一個(gè)文件版動(dòng)態(tài)通訊錄流程詳解

    C語(yǔ)言實(shí)現(xiàn)一個(gè)文件版動(dòng)態(tài)通訊錄流程詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)一個(gè)文件版動(dòng)態(tài)通訊錄流程,希望大家能從這篇文章中收獲到許多,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解單鏈表

    C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解單鏈表

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容
    2022-03-03
  • 深入解析C++中的std::thread的使用

    深入解析C++中的std::thread的使用

    這篇文章主要介紹了C++中的std::thread的使用,在C++11新標(biāo)準(zhǔn)中,可以簡(jiǎn)單通過使用thread庫(kù),來管理多線程,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04

最新評(píng)論