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

基于C語言實(shí)現(xiàn)簡單的掃雷小游戲

 更新時間:2021年11月22日 09:39:49   作者:504?Gateway?Time-out  
這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)簡單的掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

首先來規(guī)劃一下掃雷游戲?qū)崿F(xiàn)的幾個步驟:

初始化棋盤:二維數(shù)組的遍歷及賦值
為了后續(xù)代碼的簡潔方便,我們用'0'來初始化

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

布置雷的信息:應(yīng)用隨機(jī)函數(shù)進(jìn)行賦值

void SetMine(char mine[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;

  if (mine[x][y] == '0')
  {
   mine[x][y] = '1';
   count--;
  }
 }
}

排查雷:

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 int win = 0;
 while (win<row*col- EASY_COUNT)
 {
  printf("請輸入要排查的坐標(biāo)->");
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= row && y >= 1 && y <= col)
  {
   if (mine[x][y] == '1')
   {
    printf("很遺憾你被炸死了\n");
    DisplayBoard(mine, row, col);
    break;
   }
   else
   {
    //計算x,y坐標(biāo)周圍有幾個雷
    int n=get_mine_count(mine, x, y);
    show[x][y] = n + '0';
    DisplayBoard(show, row, col);
    win++;

   }
   
   
  }
  else
   printf("輸入坐標(biāo)錯誤,請重新輸入\n");

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

下面是游戲?qū)崿F(xiàn)的完整代碼,依舊是分為了3個版塊,為了更好的管理代碼,提高代碼的可讀性和可移植性

game2.h

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROW 9
#define COL 9
#define  EASY_COUNT 10

#define ROWS ROW+2
#define COLS COL+2

//初始化棋盤
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);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game2.c

#include "game2.h"

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0;
 int 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;
 int j = 0;
 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");

 }
}
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;

  if (mine[x][y] == '0')
  {
   mine[x][y] = '1';
   count--;
  }
 }
}
static int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y] + 
  mine[x - 1][y - 1] +
  mine[x][y - 1] + 
  mine[x + 1][y] + 
  mine[x + 1][y + 1] +
  mine[x][y + 1] + 
  mine[x - 1][y + 1]+
  mine[x+1][y-1]-8*'0';
}


void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 int win = 0;
 while (win<row*col- EASY_COUNT)
 {
  printf("請輸入要排查的坐標(biāo)->");
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= row && y >= 1 && y <= col)
  {
   if (mine[x][y] == '1')
   {
    printf("很遺憾你被炸死了\n");
    DisplayBoard(mine, row, col);
    break;
   }
   else
   {
    //計算x,y坐標(biāo)周圍有幾個雷
    int n=get_mine_count(mine, x, y);
    show[x][y] = n + '0';
    DisplayBoard(show, row, col);
    win++;

   }
   
   
  }
  else
   printf("輸入坐標(biāo)錯誤,請重新輸入\n");

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

test.c

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

}

void game()
{
 //創(chuàng)建數(shù)組
 char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息
 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息

 //初始化mine數(shù)組全部為‘0'
 InitBoard(mine, ROWS, COLS, '0');
 //初始化show數(shù)組全部為‘0'
 InitBoard(show, ROWS, COLS, '*');

 //打印棋盤
 //DisplayBoard(mine, ROW, COL);

 //布置雷
 SetMine(mine, ROW, COL);
 DisplayBoard(show, ROW, COL);

 //DisplayBoard(mine, ROW, COL);

 //排查雷
 FindMine(mine, show, ROW, COL);
}
void test()
{
 int input = 0;
 srand((unsigned int)time(NULL));
 do
 {
  menu();
  printf("請選擇->");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   game();
   break;

  case 0:
   printf("退出游戲\n");
   break;

  default:
   printf("選擇錯誤\n");
   break;
  }
 } while (input);
}
int main()
{
 test();
 return 0;

}

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

相關(guān)文章

  • Qt圖片繪圖類之QPixmap/QImage/QPicture詳解

    Qt圖片繪圖類之QPixmap/QImage/QPicture詳解

    這篇文章主要為大家詳細(xì)介紹了Qt圖片繪圖類中QPixmap、QImage和QPicture的使用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C語言鏈表完整操作演示

    C語言鏈表完整操作演示

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表的完整操作演示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Qt5多線程編程的實(shí)現(xiàn)

    Qt5多線程編程的實(shí)現(xiàn)

    Qt通過三種形式提供了對線程的支持,本文主要介紹了Qt5多線程編程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動態(tài)數(shù)組的區(qū)別分析

    C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動態(tài)數(shù)組的區(qū)別分析

    這篇文章主要介紹了C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動態(tài)數(shù)組的區(qū)別分析,很重要的概念,需要的朋友可以參考下
    2014-08-08
  • 深入了解C語言字符函數(shù)和字符串函數(shù)

    深入了解C語言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • VC++角色游戲中的人物初始化模塊代碼實(shí)例

    VC++角色游戲中的人物初始化模塊代碼實(shí)例

    這篇文章主要介紹了VC++角色游戲中的人物初始化模塊,對大家學(xué)習(xí)VC++有一定的幫助,需要的朋友可以參考下
    2014-08-08
  • c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例

    c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例

    這篇文章主要介紹了c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例,需要的朋友可以參考下
    2014-05-05
  • Visual Studio Code配置C/C++開發(fā)環(huán)境的教程圖解

    Visual Studio Code配置C/C++開發(fā)環(huán)境的教程圖解

    這篇文章主要介紹了Visual Studio Code配置C/C++開發(fā)環(huán)境的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • C++?std::thread?使用方法

    C++?std::thread?使用方法

    這篇文章主要介紹了C++?std::thread?如何使用,C++中的std::thread類提供了一種方便的多線程編程方式,在使用std::thread類時,我們需要注意線程間的同步和通信問題,以確保多個線程之間的正確協(xié)同工作需要的朋友可以參考下
    2023-03-03
  • Opencv LBPH人臉識別算法詳解

    Opencv LBPH人臉識別算法詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv LBPH人臉識別算法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評論