最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

初始化棋盤:二維數(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
   {
    //計(jì)算x,y坐標(biāo)周圍有幾個(gè)雷
    int n=get_mine_count(mine, x, y);
    show[x][y] = n + '0';
    DisplayBoard(show, row, col);
    win++;

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

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

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

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
   {
    //計(jì)算x,y坐標(biāo)周圍有幾個(gè)雷
    int n=get_mine_count(mine, x, y);
    show[x][y] = n + '0';
    DisplayBoard(show, row, col);
    win++;

   }
   
   
  }
  else
   printf("輸入坐標(biāo)錯(cuò)誤,請重新輸入\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("選擇錯(cuò)誤\n");
   break;
  }
 } while (input);
}
int main()
{
 test();
 return 0;

}

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

相關(guān)文章

  • C++實(shí)現(xiàn)圖像壓縮的示例代碼

    C++實(shí)現(xiàn)圖像壓縮的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)圖像壓縮的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C++ 組合 (Composition)的介紹與實(shí)例

    C++ 組合 (Composition)的介紹與實(shí)例

    這篇文章主要給大家介紹了關(guān)于C++ 組合(Composition)的相關(guān)資料,組合就是將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對單個(gè)對象和組合對象的使用具有一致性。需要的朋友可以參考下
    2021-05-05
  • C語言中的運(yùn)算符優(yōu)先級(jí)和結(jié)合性一覽表

    C語言中的運(yùn)算符優(yōu)先級(jí)和結(jié)合性一覽表

    這篇文章主要介紹了C語言中的運(yùn)算符優(yōu)先級(jí)和結(jié)合性一覽表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++string字符串拼接遇到的問題及解決

    C++string字符串拼接遇到的問題及解決

    這篇文章主要介紹了C++string字符串拼接遇到的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例

    Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例

    下面小編就為大家?guī)硪黄猄ublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序

    C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序

    這篇文章主要給大家介紹了關(guān)于C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++超詳細(xì)講解引用和指針

    C++超詳細(xì)講解引用和指針

    引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下
    2022-06-06
  • C++實(shí)現(xiàn)bmp格式圖像讀寫

    C++實(shí)現(xiàn)bmp格式圖像讀寫

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)bmp格式圖像讀寫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 深入淺析c/c++ 中的static關(guān)鍵字

    深入淺析c/c++ 中的static關(guān)鍵字

    C++的static有兩種用法:面向過程程序設(shè)計(jì)中的static和面向?qū)ο蟪绦蛟O(shè)計(jì)中的static。本文重點(diǎn)給大家介紹c/c++ 中的static關(guān)鍵字,感興趣的朋友跟隨小編一起看看吧
    2018-08-08
  • C語言冒泡排序算法代碼詳解

    C語言冒泡排序算法代碼詳解

    大家好,本篇文章主要講的是C語言冒泡排序算法代碼詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論

天全县| 肇源县| 四会市| 明星| 台北市| 东乡| 武宣县| 梓潼县| 农安县| 罗源县| 徐汇区| 时尚| 乌拉特中旗| 建宁县| 牡丹江市| 扬州市| 视频| 毕节市| 山西省| 木里| 商丘市| 宝山区| 五华县| 上林县| 双峰县| 清原| 稷山县| 嘉荫县| 云浮市| 南城县| 嘉荫县| 乌兰察布市| 宜阳县| 陆川县| 华安县| 海原县| 邹平县| 濮阳县| 绵竹市| 鄂伦春自治旗| 武陟县|