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

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

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

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

設(shè)計(jì)思路

1. 定義兩個(gè)二維數(shù)組,一個(gè)存放炸彈信息,一個(gè)隱藏信息后向玩家展示。

2. 玩家每一次選擇都要判斷是否踩到炸彈,如果踩雷,將結(jié)束游戲,否則繼續(xù)游戲。

3.玩家每一次判斷后要將新棋盤展示給玩家,且將該位置附近雷的個(gè)數(shù)展示出來。

4.最后如果玩家找到所有非雷區(qū)時(shí),玩家獲勝。

首先,我們設(shè)計(jì)一個(gè)簡單的主函數(shù)

方便玩家自由選擇進(jìn)入游戲與退出游戲

int main()
{
 int input = 0;
    srand((unsigned int)time(NULL));//隨機(jī)數(shù)用于隨機(jī)存放炸彈
 do 
 {
  menu();//打印菜單
  printf("請選擇>\n");
  scanf("%d", &input);
  switch (input)
  {case 1:
   game();
   break;
  case 0:
   break;
  default:
   printf("輸入錯(cuò)誤,重新輸入>\n");
    break;
  } 
 } while (input);
}

菜單我們可以自由設(shè)計(jì),這里是我設(shè)計(jì)的一個(gè)簡單菜單:

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

敲重點(diǎn) 

接下來就開始了我們最關(guān)鍵的部分:游戲函數(shù)設(shè)計(jì)

void game()
{
 char mine[ROWS][COLS] = { 0 };//存放雷的信息
 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息
 InitBoard(mine, ROWS, COLS, '0');//初始化棋盤
 InitBoard(show, ROWS, COLS, '*');//
 DisplayBoard(show, ROWS, COLS);
 //布置雷
 SetMine(mine, ROW, COL); 
  //排查雷
  FindMine(mine,show,ROW,COL); 
}

這里我們定義了兩個(gè)二維數(shù)組,mine和show,其中mine用于我們儲(chǔ)存炸彈的信息,而show則用于向玩家展示游戲棋盤

一開始我們要考慮我們的棋盤大小與數(shù)組大小的關(guān)系

棋盤的大小就等于我們創(chuàng)建的數(shù)組大小嗎? 等于嗎?啊哈?

當(dāng)然不等于了,想什么呢小伙子?。?!

我們可是要考慮每一個(gè)位置周圍的炸彈數(shù)量的,你讓我最外層的怎么辦!

于是我們定義了以下幾個(gè)常數(shù)用于定義棋盤的長度寬度,還有多了一圈的數(shù)組

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

接下來就是對數(shù)組進(jìn)行初始化

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;
  }
 }
}

打印數(shù)組(展示棋盤)

void DisplayBoard(char board[ROWS][COLS], int rows, int cols)
{
 int i = 0;
 int j = 0;
 printf("----------------------------\n");
 printf( "%d ", j);
 for (i = 1; i < rows - 1; i++)
 {
  printf(" %d ", i);
 }
 printf("\n");
 for (i = 1; i < rows - 1; i++)  
 {
  printf("%d ", i); 
  for (j = 1; j < cols - 1; j++)
  { 
   printf(" %c ", board[i][j]);
  }
  printf("\n");
 }
 printf("----------------------------\n");
}

隨機(jī)放雷

void SetMine(char board[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  int x = rand() % row + 1;//+1可以保證每一個(gè)位置都能隨機(jī)放雷
  int y = rand() % col + 1;
  if (board[x][y] == '0')//在沒有放過雷的位置放雷
  {
   board[x][y] = '1';
   count--;
  }
 }
}

排雷函數(shù)

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
 return mine[x-1][y]+mine[x+1][y]+
  mine[x-1][y-1]+mine[x][y-1]+mine[x+1][y-1]+
  mine[x-1][y+1]+mine[x][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)>\n");
  scanf("%d%d", &x, &y);
  if(x>=1&&x<=row&&y>=1&&y<=col)
  {
   if (mine[x][y] == '0')//保證每一次都在新的位置
   {
    int count = GetMineCount(mine,  x,  y);
    show[x][y] = count+'0';//以字符形式
    DisplayBoard(show, ROWS, COLS);
    win++;
   }
   else
   {
    printf("很遺憾,踩到雷了\n");
    DisplayBoard(mine,ROWS,COLS);//向玩家展示所有雷的位置
    break;
   }  
  }
  else
  {
   printf("輸入不合法,請重新輸入>\n");
  }
 }
 if (win == row * col - EASY_COUNT)//判斷是否排雷成功
 {
  printf("恭喜您,排雷成功\n");
  DisplayBoard(mine, ROWS, COLS);
 }
}

至此我們的掃雷小游戲就制作完成了,可以進(jìn)行愉快的游戲啦!

下面是三個(gè)整體代碼

1.   game.h

#pragma once
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
#include<stdio.h>
//初始化棋盤
void InitBoard(char board[ROWS][COLS], int  rows, int cols,  char set);
//顯示棋盤
void DisplayBoard(char board[ROWS][COLS], int rows, int cols);
//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROW][COL], char show[ROW][COL], int rows, int cols);

2.   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;
 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 rows, int cols)
{
 int i = 0;
 int j = 0;
 printf("----------------------------\n");
 printf( "%d ", j);
 for (i = 1; i < rows - 1; i++)
 {
  printf(" %d ", i);
 }
 printf("\n");
 for (i = 1; i < rows - 1; i++)  
 {
  printf("%d ", i); 
  for (j = 1; j < cols - 1; j++)
  { 
   printf(" %c ", board[i][j]);
  }
  printf("\n");
 }
 printf("----------------------------\n");
}
void SetMine(char board[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (board[x][y] == '0')
  {
   board[x][y] = '1';
   count--;
  }
 }
}
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
 return mine[x-1][y]+mine[x+1][y]+
  mine[x-1][y-1]+mine[x][y-1]+mine[x+1][y-1]+
  mine[x-1][y+1]+mine[x][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)>\n");
  scanf("%d%d", &x, &y);
  if(x>=1&&x<=row&&y>=1&&y<=col)
  {
   if (mine[x][y] == '0')
   {
    int count = GetMineCount(mine,  x,  y);
    show[x][y] = count+'0';
    DisplayBoard(show, ROWS, COLS);
    win++;
   }
   else
   {
    printf("很遺憾,踩到雷了\n");
    DisplayBoard(mine,ROWS,COLS);
    break;
   }  
  }
  else
  {
   printf("輸入不合法,請重新輸入>\n");
  }
 }
 if (win == row * col - EASY_COUNT)
 {
  printf("恭喜您,排雷成功\n");
  DisplayBoard(mine, ROWS, COLS);
 }
}

3.  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()
{
 char mine[ROWS][COLS] = { 0 };//存放雷的信息
 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息
 InitBoard(mine, ROWS, COLS, '0');//初始化棋盤
 InitBoard(show, ROWS, COLS, '*');//
 DisplayBoard(show, ROWS, COLS);
 //布置雷
 SetMine(mine, ROW, COL); 
 DisplayBoard(mine, ROWS, COLS);
  //排查雷
  FindMine(mine,show,ROW,COL); 
}
 
int main()
{
 int input = 0;
 srand((unsigned int)time(NULL));
 do 
 {
  menu();
  printf("請選擇>\n");
  scanf("%d", &input);
  switch (input)
  {case 1: 
   game();
   break;
  case 0:
   break;
  default:
   printf("輸入錯(cuò)誤,重新輸入>\n");
    break;
  } 
 } while (input);

}

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

相關(guān)文章

  • Opencv實(shí)現(xiàn)用于圖像分割分水嶺算法

    Opencv實(shí)現(xiàn)用于圖像分割分水嶺算法

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)用于圖像分割分水嶺算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++ 中l(wèi)ambda表達(dá)式的編譯器實(shí)現(xiàn)原理

    C++ 中l(wèi)ambda表達(dá)式的編譯器實(shí)現(xiàn)原理

    C++ 11加入了一個(gè)非常重要的特性——Lambda表達(dá)式。這篇文章主要介紹了C++ 中l(wèi)ambda表達(dá)式的編譯器實(shí)現(xiàn)原理,需要的朋友可以參考下
    2017-02-02
  • VScode配置cuda開發(fā)環(huán)境的實(shí)現(xiàn)步驟

    VScode配置cuda開發(fā)環(huán)境的實(shí)現(xiàn)步驟

    本文主要介紹了VScode配置cuda開發(fā)環(huán)境的實(shí)現(xiàn)步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • C語言學(xué)習(xí)筆記之VS2022安裝使用教程

    C語言學(xué)習(xí)筆記之VS2022安裝使用教程

    這篇文章主要介紹了C語言學(xué)習(xí)筆記之VS2022安裝使用教程,在VS2022中,在使用scanf函數(shù)編譯出錯(cuò),本文給大家提到了解決方法,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于C++使用指針 堆和棧的區(qū)別分析

    關(guān)于C++使用指針 堆和棧的區(qū)別分析

    本篇文章小編為大家介紹,關(guān)于C++使用指針 堆和棧的區(qū)別分析。需要的朋友參考下
    2013-04-04
  • 利用c++編寫簡易版2048小游戲

    利用c++編寫簡易版2048小游戲

    這篇文章主要介紹了如何讓利用c++編寫簡易版的2048小游戲,感興趣的小伙伴請參考下面文章的具體內(nèi)容
    2021-09-09
  • C++中友元的實(shí)例詳解

    C++中友元的實(shí)例詳解

    這篇文章主要介紹了C++中友元的實(shí)例詳解的相關(guān)資料,希望通過本文大家能掌握友元的使用方法,需要的朋友可以參考下
    2017-09-09
  • opencv3/C++ 實(shí)現(xiàn)SURF特征檢測

    opencv3/C++ 實(shí)現(xiàn)SURF特征檢測

    今天小編就為大家分享一篇opencv3/C++ 實(shí)現(xiàn)SURF特征檢測,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • c++實(shí)現(xiàn)廣播通訊詳解

    c++實(shí)現(xiàn)廣播通訊詳解

    這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)廣播通訊的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-12-12
  • C語言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

    C語言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

    Format String Vulnerability(格式化字符串漏洞)是C語言中常見且嚴(yán)重的安全漏洞之一,它通常在程序使用不受信任的輸入作為格式化字符串時(shí)發(fā)生,本文將詳細(xì)介紹Format String Vulnerability的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

堆龙德庆县| 虞城县| 中卫市| 北辰区| 樟树市| 张北县| 上高县| 彭泽县| 巴彦淖尔市| 咸宁市| 南召县| 兴宁市| 太湖县| 宜阳县| 阳泉市| 余庆县| 陆丰市| 兰考县| 衢州市| 喀喇沁旗| 会昌县| 钦州市| 丰顺县| 黑山县| 行唐县| 宁明县| 翼城县| 嘉黎县| 偏关县| 崇阳县| 和静县| 濮阳县| 柞水县| 徐汇区| 萨嘎县| 阿城市| 开平市| 昌都县| 印江| 顺昌县| 桂林市|