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

C語言掃雷游戲的簡(jiǎn)單實(shí)現(xiàn)

 更新時(shí)間:2021年11月22日 08:51:28   作者:與秋逐鹿3zZ  
這篇文章主要為大家詳細(xì)介紹了C語言掃雷游戲的簡(jiǎn)單實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天來用c語言做一個(gè)掃雷功能的簡(jiǎn)單實(shí)現(xiàn),首先創(chuàng)建一個(gè)test.c來用于在寫代碼的途中測(cè)試掃雷代碼,game.h來存放實(shí)現(xiàn)掃雷函數(shù)需要用到的頭文件,game.c來存放最終的成品。

首先用函數(shù)打印一個(gè)菜單,讓玩家選擇進(jìn)行游玩掃雷游戲或者退出,考慮到玩家會(huì)輸入1和2以外的數(shù)字,我們加上一個(gè)fefault,將菜單放入do-while循環(huán)中,while的結(jié)束條件為choose為0,玩家在結(jié)束一場(chǎng)游戲后可以重新走一邊循環(huán),保證用戶在結(jié)束一把掃雷之后可以選擇繼續(xù)進(jìn)行下一局或是退出游戲。

void menu()
{
 printf("**********\n");
 printf("**1.play**\n");
 printf("**0.quit**\n");
 printf("**********\n");
}
 
void test()
{
 int choose;
 do
 {
  menu();
  printf("請(qǐng)進(jìn)行你的選擇");
  scanf("%d", &choose);
  switch (choose)
  {
  case 1:
   printf("游戲開始\n");
   break;
  case 2:
   printf("游戲退出\n");
  default:
   printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
  }
 } while (choose);
}

在case1中加入game()函數(shù)來進(jìn)行掃雷游戲的實(shí)現(xiàn)。掃雷有雷的布置和雷的掃,首先來實(shí)現(xiàn)雷的布置,用二維數(shù)組實(shí)現(xiàn)一個(gè)9x9的棋盤,通過建立兩個(gè)棋盤來實(shí)現(xiàn)信息的交互,一個(gè)棋盤hid放雷的布置情況,還有一個(gè)棋盤show來將信息呈現(xiàn)給玩家。因?yàn)閟how棋盤需要將用戶掃過區(qū)域周圍八個(gè)格子雷的數(shù)量寫出來,如果定義一個(gè)【9】【9】的數(shù)組就會(huì)發(fā)生越界,因此兩個(gè)數(shù)組都定位為11x11,為了方便寫,宏定義col=9 row=9 COL=col+2 ROW=row+2。初始化show數(shù)組全為*,hid數(shù)組全為0

void SetBoard(char board[ROW][COL], int r, int c, char set)
{
 for (int i = 0; i < r; i++)
 {
  for (int j = 0; j < c; j++)
  {
   board[i][j] = set;
  }
 }
}
 
void ShowBoard(char board[ROW][COL],int r,int c)
{
 for (int a = 0; a <= r; a++)
 {
  printf("%d ", a);
 }
 printf("\n");
 for (int i = 1; i <= r; i++)
 {
  printf("%d ", i);
  for (int j = 1; j <= c; j++)
  {
   printf("%c ", board[i][j]);
  }
  printf("\n");
  
 }
}

接下來實(shí)現(xiàn)雷的隨機(jī)插入,隨機(jī)生成兩個(gè)一到九的整數(shù)下x,y,添加一個(gè)count計(jì)數(shù)器,如果當(dāng)前hid[x][y]為字符0 則hid[x][y]為字符0,count計(jì)數(shù)器加一

srand((unsigned int)time(NULL));
 
void SetBoob(char hid[ROW][COL],int rw,int c)
{
 int count = 0;
 for (int i = 0; count <= 9; i++)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (hid[x][y] == '0')
  {
   hid[x][y] = '1';
   count = count + 1;
  }
 }
}

這樣雷就布置好了,接下來是玩家排雷的過程。

用while(1)做一個(gè)一直重復(fù)的循環(huán),玩家輸入行和列x,y,程序?qū)id[x][y]與字符‘1'對(duì)比,若踩雷則跳出循環(huán)顯示游戲結(jié)束并打印hid棋盤讓玩家看到雷的位置,若沒踩雷show[x][y]變成周圍八個(gè)格子的地雷個(gè)數(shù)并打印show棋盤。因?yàn)橥婕铱赡茌斎?~9之外的數(shù),因此要用if函數(shù)限制x,y的大小。

統(tǒng)計(jì)hid【x】【y】周圍的雷的個(gè)數(shù)可以通過將周圍的字符全部相加再減去八個(gè)字符0來實(shí)現(xiàn)

void CountBoob(char hid[ROW][COL], int x, int y)
{
 int count;
 count = hid[x - 1][y - 1] + hid[x][y - 1] + hid[x + 1][y - 1] + hid[x - 1][y] + hid[x + 1][y] + hid[x - 1][y + 1] + hid[x][y + 1] + hid[x + 1][y + 1] - 8 * '0';
 return count;
}
void FindBoob(char hid[ROW][COL], char show[ROW][COL], int r, int c)
{
 int x, y;
 while (1)
 {
  printf("請(qǐng)輸入行和列");
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= row && y >= 1 && y <= col)
  {
   if (hid[x][y] == '1')
   {
    printf("游戲結(jié)束\n");
    ShowBoard(hid, row, col);
    break;
   }
   else
   {
    int n = CountBoob(hid, x, y);
    show[x][y] = n+'0';
    ShowBoard(show, row, col);
   }
  }
  else
  {
   printf("輸入錯(cuò)誤坐標(biāo)請(qǐng)重新輸入");
  }
 }
}

后期我在掃雷過程中加入了一個(gè)計(jì)數(shù)器count,每掃一個(gè)無雷區(qū)域則count加一當(dāng)count等于71時(shí)打印游戲勝利并展示hid棋盤跳出循環(huán)。

將所有的函數(shù)放入頭文件,.c程序如下

#define _CRT_SECURE_NO_WARNINGS 1
 
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "game.h"
 
int main()
{
 int choose;
 srand((unsigned int)time(NULL));
 do
 {
  menu();
  printf("請(qǐng)進(jìn)行你的選擇");
  scanf("%d", &choose);
  switch (choose)
  {
  case 1:
   printf("游戲開始\n");
   game();
   break;
  case 0:
   printf("游戲退出\n");
   break;
  default:
   printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
  }
 } while (choose);
}

掃雷是如若周圍沒有雷,可以實(shí)現(xiàn)棋盤的展開,這個(gè)因?yàn)闀r(shí)間問題只能進(jìn)行后期補(bǔ)充。

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

相關(guān)文章

  • C語言中求解圖形的問題

    C語言中求解圖形的問題

    這篇文章主要介紹了C語言中求解圖形的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言實(shí)現(xiàn)動(dòng)態(tài)版通訊錄的代碼分享

    C語言實(shí)現(xiàn)動(dòng)態(tài)版通訊錄的代碼分享

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)態(tài)版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識(shí),需要的可以參考一下
    2023-01-01
  • C語言函數(shù)棧幀詳解

    C語言函數(shù)棧幀詳解

    下面小編就為大家?guī)硪黄獪\談C語言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • C++的內(nèi)存管理詳細(xì)解釋

    C++的內(nèi)存管理詳細(xì)解釋

    這篇文章主要介紹了C/C++中的內(nèi)存管理小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的示例代碼

    C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的示例代碼

    之前在?windows系統(tǒng)中開發(fā)應(yīng)用時(shí),?遇到需要進(jìn)行線程同步的時(shí)候幾乎都是使用的事件內(nèi)核對(duì)象?Event。本文為大家整理了C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的相關(guān)資料,需要的可以參考一下
    2022-11-11
  • 掌握C++:揭秘寫時(shí)拷貝與淺深拷貝之間的關(guān)系

    掌握C++:揭秘寫時(shí)拷貝與淺深拷貝之間的關(guān)系

    探索C++的奧秘,本指南將揭秘寫時(shí)拷貝與淺深拷貝之間的微妙關(guān)系,摸索這些復(fù)雜概念背后的邏輯,讓你的編程技能瞬間提升,來吧,讓我們一起進(jìn)入這個(gè)引人入勝的C++世界!
    2024-01-01
  • C語言實(shí)現(xiàn)返回字符串函數(shù)的四種方法

    C語言實(shí)現(xiàn)返回字符串函數(shù)的四種方法

    在C語言中實(shí)現(xiàn)函數(shù)返回字符串,首先要確定函數(shù)返回的字符串地址的來源,一般分為四種方式,下面這篇文章就給大家通過示例代碼詳細(xì)介紹這幾種方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C++ STL入門教程(2) list雙向鏈表使用方法(附程序代碼)

    C++ STL入門教程(2) list雙向鏈表使用方法(附程序代碼)

    這篇文章主要為大家詳細(xì)介紹了C++ STL入門教程第二篇,list雙向鏈表使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Qt中的雙緩沖機(jī)制與實(shí)例應(yīng)用

    詳解Qt中的雙緩沖機(jī)制與實(shí)例應(yīng)用

    所謂雙緩沖機(jī)制,是指在繪制控件時(shí),首先將要繪制的內(nèi)容繪制在一個(gè)圖片中,再將圖片一次性地繪制到控件上。本文主要為大家介紹了Qt中的雙緩沖機(jī)制與實(shí)例應(yīng)用,希望對(duì)大家有所幫助
    2023-03-03
  • 解決pip?install?dlib報(bào)錯(cuò)C++11?is?required?to?use?dlib

    解決pip?install?dlib報(bào)錯(cuò)C++11?is?required?to?use?dlib

    這篇文章主要介紹了在使用pip?install?dlib安裝dlib的時(shí)候報(bào)錯(cuò)C++11?is?required?to?use?dlib的解決方法,需要的的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-02-02

最新評(píng)論

吴江市| 专栏| 普兰县| 莎车县| 建瓯市| 平乡县| 安陆市| 尉氏县| 巴中市| 巫溪县| 电白县| 融水| 铁岭市| 嘉禾县| 毕节市| 鲁甸县| 长丰县| 都兰县| 疏附县| 高陵县| 饶平县| 舞阳县| 乌审旗| 兰州市| 武威市| 许昌县| 民勤县| 长治县| 宜黄县| 饶河县| 洛扎县| 苍南县| 马鞍山市| 绥滨县| 高雄市| 罗源县| 凤翔县| 当阳市| 蒲江县| 子长县| 久治县|