国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼

這篇具有很好參考價值的文章主要介紹了【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

.
??write in front??
??大家好,我是gugugu。希望你看完之后,能對你有所幫助,不足請指正!共同學(xué)習(xí)交流??
??本文由 gugugu 原創(chuàng) CSDN首發(fā)?? 如需轉(zhuǎn)載還請通知?
??個人主頁:gugugu—CSDN博客
??歡迎各位→點贊?? + 收藏?? + 留言???
??系列專欄:gugugu的系列專欄——CSDN博客
??我們并非登上我們所選擇的舞臺,演出并非我們所選擇的劇本??

前言

在學(xué)完數(shù)組和函數(shù)之后,今天帶來C語言的第二個小游戲——掃雷。
本程序?qū)Τ鯇W(xué)者來說存在一定難度,多次反復(fù)練習(xí),加強理解即可。
本文將從設(shè)計思路,功能實現(xiàn)等角度進(jìn)行詳細(xì)教學(xué)分析。

注意:本游戲是多文件編程


一.介紹掃雷。

1.掃雷的規(guī)則

游戲規(guī)則:點擊方格,如果是地雷,游戲失敗,找到所有方格,而不踩到地雷游戲勝利。游戲初始,所有的方格都是被覆蓋的。點開的“空”會標(biāo)識數(shù)字,中心的“空”標(biāo)識數(shù)字“1”,即表示其周圍8個方格內(nèi)僅有1顆雷,玩家需要通過這樣的信息來判斷正確的雷區(qū)位置并予以標(biāo)識。最終排除所有地雷獲勝。
看看掃雷游戲的原版是啥樣的吧。
【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲

【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲
本文將介紹初階的掃雷,進(jìn)階版將在不久之后繼續(xù)更新。

2.掃雷功能模板

掃雷游戲主要由以下幾個板塊組成
a.菜單
b.初始化
c.打印游戲界面
d.布置雷
e.排除雷

二、掃雷功能分析

首先本游戲依舊采用do while循環(huán)的結(jié)構(gòu)實現(xiàn)多次進(jìn)行游戲的功能。

1.確定棋盤的大小和雷的個數(shù)

在這里我們需要使用宏來確定棋盤的大小和雷的個數(shù)
使用宏可以方便隨時更改,而不會把程序給寫死,也就是說,我們想要多大的棋盤,想要多少顆雷都可以隨時更改

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//棋盤大小

#define BOOM 10//10課雷

2.菜單

掃雷游戲的菜單和猜數(shù)字游戲菜單的實現(xiàn)是一個道理,詳細(xì)可見猜數(shù)字游戲博客
…鏈接…
創(chuàng)建一個變量,用1表示開始游戲,用0表示結(jié)束游戲,設(shè)計一個菜單進(jìn)行選擇即可。

void main()
{
printf("#####################\n");
printf("########1.play#######\n");
printf("########0.exit#######\n");
printf("#####################\n");
}

3.初始化

棋盤初始化就是將界面清空,放上我們想讓界面存在的東西。
【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲

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

4.打印

我們玩游戲的時候肯定要看到游戲界面啊,所以需要寫一個函數(shù)來打印游戲界面。
也就是打印數(shù)組的內(nèi)容。
但是打印的時候不能只有*啊
我們還得打印行號和列號來輔助玩家確定坐標(biāo)。
【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲

void Display(char board[ROWS][COLS],int row,int col)//這個地方使用rows和cols也可以,代碼差別不大
{     
         //分割線
         printf("########掃雷########\n");
         //打印列號
         int i=0;
         for(i=0;i<=col;i++)
         {
           printf("%d ",i);
         }
         //換行
         printf("\n");
         //打印棋盤內(nèi)容
         for(i=1;i<=row;i++)
         {
             int j=0;
             for(j=0;j<=col;j++)//一行
             {
             if(j=0)
             {
             printf("%d ",i);//打印行號
             }
             else
             {
             printf("%c ",board[i][j]);
             }
             }
             printf("\n");
         }
         printf("########掃雷########\n");
}

5.布置雷

首先我們確定雷的個數(shù)
使用宏來確定雷的個數(shù),比較方便,易于更改
#define BOOM 10
但是記住雷的數(shù)量要布置的合理,不能出現(xiàn)9*9的棋盤,出現(xiàn)100顆雷,對吧。

  • 那么雷的位置如何確定呢?
    這就需要創(chuàng)建兩個隨機數(shù)分別放在x和y中,作為行號和列號。

布置雷肯定是把數(shù)組某一個位置上放雷,我們把雷記作‘1’,注意,這里的1是字符1,而不是數(shù)字1.

  • 但是肯定不止布置一顆雷啊,所以需要用到循環(huán),創(chuàng)建一個變量int count=BOOM;
    把count作為while的判斷條件,每進(jìn)行一次循環(huán)count–,那么當(dāng)count=0,也就是當(dāng)雷布置完的時候,會自動退出循環(huán)。

  • 注意,每次布置雷的時候,要確定這個地方是否已經(jīng)布置過雷了,如果布置過雷的話,重新產(chǎn)生隨機數(shù),重新布置這顆雷。

look look!!

void getboom(char board[ROWS][COLS],int row,int col)
{
      int x=0;
      int y=0;
      int count=BOOM;
      while(count)
      {
      int x=rand()%row+1;
      int y=rand()%col+1;
      if(board[x][y]=='0')
      {
      board[x][y]='1';
      count--;
      }
      }
}

6.排雷

布置好雷之后要進(jìn)行排查雷,每次排查完一次之后都要進(jìn)行一次排查完之后的展示
如果排到的地方是雷的話,你會被炸死,游戲結(jié)束;
如果不是雷,則在該處計算并輸出旁邊的八個格子內(nèi)有多少顆雷;
一直循環(huán),知道炸死,或者雷被排完。

void outboom(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
       int x=0;
       int y=0;
       int count=row*col-BOOM;
       while(count)
       { 
       printf("請輸入坐標(biāo)\n");
       scanf("%d %d",&x,&y);
       if(x>=1&&x<=row&&y>=1&&y<=col)
       {
          if(show[x][y]!='*')
          {
          printf("該位置已被排查,請重新輸入\n”);
          }
          if(mine[x][y]=='1')
          {
          printf("很遺憾,你被炸死了\n");
          break;
          }
          else
          {
                  char num=getnum(mine,x,y);//需要再引入一個函數(shù)
                  show[x][y]=num;
                  display(show,ROW,COL);
           }
       }
       else
      {
      printf("坐標(biāo)非法,請重新輸入\n");
      }

7.數(shù)雷的個數(shù)

這里就需要另寫一個函數(shù)來實現(xiàn)這個功能了,因為我們的數(shù)組show和mine都是字符數(shù)組,所以我們返回的雷的個數(shù)也需要是字符,所以將返回類型定義為char

char getnum(char board[ROWS][COLS], int x,int y)
{
     return (board[x-1][y-1]+
                board[x-1][y]+
                board[x-1][y+1]+
                board[x][y-1]+
                board[x][y+1]+
                board[x+1][y-1]+
                board[x+1][y]+
                board[x+1][y+1]-8*48+48);
  }
  • 來分析一下為什么會這么寫

  • 首先我們先解釋一下為什么可以字符加減

  • 每一個字符會對應(yīng)一個ASCII碼表, 字符會先轉(zhuǎn)化為ASCII碼值,用ASCII碼值進(jìn)行加減,再返回ASCII碼表對應(yīng)的字符

  • 【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲

  • 為什么要先減8*48呢?

  • 因為0的ASCII碼值為48,這里就是相當(dāng)于8個位置都減了一個字符0

  • 那為什么要加48呢?

  • 如果不加48的話,那運算結(jié)果就是從ASCII值0開始,可以看上表,ASCII碼值0對應(yīng)的字符是不顯示字符,但是字符0對應(yīng)的ASCII值為48,之后加上48之后,才能從字符0開始輸出。【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲

三、效果演示

【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲
【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲
【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲
大致就是這些功能啦,更高級的功能將在下一次博客—進(jìn)階版掃雷更新,敬請期待!

四、源碼

1、頭文件(game.h)

#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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

void init(char board[ROWS][COLS], int rows, int cols, char set);

void display(char board[ROWS][COLS], int row, int col);

void getboom(char board[ROWS][COLS], int row, int col);

void outboom(char board[ROWS][COLS], int row, int col);

2、函數(shù)實現(xiàn)部分(game.c)

#define  _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

char numboom(char board[ROWS][COLS], int x, int y)
{
	return board[x - 1][y - 1] +
		board[x - 1][y] +
		board[x - 1][y + 1] +
		board[x][y - 1] +
		board[x][y + 1] +
		board[x + 1][y - 1] +
		board[x + 1][y] +
		board[x + 1][y + 1] - 8 * 48 + 48;

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

//打印
void display(char board[ROWS][COLS], int row, int col)
{
	printf("-------掃雷--------\n");
	int i = 0;
	//列號
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");

	//打印內(nèi)容
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		for (j = 0; j <= col; j++)//一行
		{
			if (j == 0)
			{
				printf("%d ", i);//行號
			}
			else
			{
				printf("%c ", board[i][j]);
			}
		}
		printf("\n");
	}
	printf("-------掃雷--------\n");
}

//布置雷
void getboom(char board[ROWS][COLS], int row, int col)
{
	int count = BOOM;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}

//排查雷
void outboom(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = row * col - BOOM;
	while (count)
	{
		printf("請輸入坐標(biāo)\n");
		scanf("%d %d", &x, &y);

		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (show[x][y] != '*')
			{
				printf("位置已經(jīng)排查,請重新輸入\n");
			}

			if (mine[x][y] == '1')
			{
				printf("很遺憾,你被炸死了\n");
				display(mine, ROW, COL);
				break;
			}
			else
			{
				char num = numboom(mine, x, y);
				show[x][y] = num;
				display(show, ROW, COL);
				count--;
			}

			
		}
		else
		{
			printf("輸入的坐標(biāo)非法,請重新輸入\n");
		}
	}
	if (count == 0)
	{
		printf("游戲獲勝\n");
	}
}

3、主函數(shù)部分(test.c)

#define  _CRT_SECURE_NO_WARNINGS 1

#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 };
	//初始化
	init(mine, ROWS, COLS, '0');
	init(show, ROWS, COLS, '*');
	//打印
	display(mine, ROW, COL);
	display(show, ROW, COL);
	//布置雷
	getboom(mine, ROW, COL);
	display(mine, ROW, COL);
	//排查雷
	outboom(mine, show, ROW, COL);
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;

	do
	{
		menu();
		printf("請選擇\n");
	    scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("######  掃雷   ########\n");
			game();
			break;
		case 0:
			printf("安全退出\n");
			break;
		default :
			printf("選擇錯誤,請重新選擇\n");
			break;
		}
	} while (input);

	return 0;
}

好了,到這里本期分享就結(jié)束了,不知道各位小伙伴有沒有學(xué)會,可以在評論區(qū)留言哦,博主看到就會回答的。下一期進(jìn)階版掃雷將很快更新?。?!敬請期待?。。。?!


?。。。。。。。。。。。。?!求關(guān)注!?。。。。。。。。。。。。。。。?br> ?。。。。。。。。。。。。?mark>一鍵三連吧?。。。。。。。。。。。。。。?!

【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼,技術(shù)欄,博客創(chuàng)作,小白教學(xué),c語言,開發(fā)語言,游戲文章來源地址http://www.zghlxwxcb.cn/news/detail-624697.html

到了這里,關(guān)于【C語言】掃雷小游戲詳細(xì)分析(模塊化編程)——內(nèi)附源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • c語言小游戲之掃雷

    c語言小游戲之掃雷

    目錄 一:游戲設(shè)計理念及思路 二:初步規(guī)劃的游戲界面 三:開始掃雷游戲的實現(xiàn) 注:1.創(chuàng)建三個文件,test.c用來測試整個游戲的運行,game.c用來實現(xiàn)掃雷游戲的主體,game.h用來函數(shù)聲明和包含頭文件 2.為方便定位坐標(biāo),在展示數(shù)組時添加行號和列號 四:謝謝觀看? 聽說看到

    2024年01月23日
    瀏覽(113)
  • C語言:輕松實現(xiàn)掃雷小游戲

    C語言:輕松實現(xiàn)掃雷小游戲

    目錄 一、前言 二、掃雷步驟 1.創(chuàng)建項目 2.設(shè)計整體框架 1.定義數(shù)組長度和雷的個數(shù) 2.game函數(shù)功能 三、頭文件game.h代碼實現(xiàn)? 四、測試文件test.c代碼實現(xiàn) 五、game函數(shù)功能實現(xiàn) 1.初始化棋盤 2.打印棋盤 ?3.布置雷 4. 獲得雷的個數(shù) ?5.排查雷 6.game函數(shù)實現(xiàn)代碼 六、總結(jié) 大家好

    2024年02月03日
    瀏覽(90)
  • C語言——掃雷小游戲(遞歸展開版)

    C語言——掃雷小游戲(遞歸展開版)

    哈嘍,大家好,上次我們已經(jīng)學(xué)習(xí)了三子棋小游戲,今天我們來學(xué)習(xí)掃雷小游戲了。 目錄 1.游戲介紹 2.函數(shù)部分 2.1菜單 2.2game()函數(shù) 2.3mian()函數(shù) 2.4初始化棋盤 2.5打印棋盤 2.6布置雷 2.7排查雷 2.8統(tǒng)計雷 2.9遞歸,展開一片區(qū)域 3.完整代碼展示? 想必大家都玩過掃雷這款小游戲吧

    2024年02月03日
    瀏覽(89)
  • 【C】C語言實現(xiàn)掃雷小游戲

    相信大家一定都玩過掃雷小游戲,今天我就帶大家來用C語言實現(xiàn)一個簡易版的掃雷小游戲。 這里我們還是需要三個文件來封裝我們的寫的代碼: test.c ----- 用于我們代碼的測試,以及游戲整體框架的實現(xiàn)。 game .c ------ 用來封裝實現(xiàn)我們游戲的相關(guān)函數(shù)。 game.h ------ 主要用來

    2024年02月11日
    瀏覽(646)
  • 【C語言】掃雷小游戲(遞歸展開版)

    【C語言】掃雷小游戲(遞歸展開版)

    哈嘍,大家好,上次我們已經(jīng)學(xué)習(xí)了三子棋小游戲,今天我們來學(xué)習(xí)掃雷小游戲了。 目錄 1.游戲介紹 2.函數(shù)部分 2.1菜單 2.2game()函數(shù) 2.3mian()函數(shù) 2.4初始化棋盤 2.5打印棋盤 2.6布置雷 2.7排查雷 2.8統(tǒng)計雷 2.9遞歸,展開一片區(qū)域 3.完整代碼展示? 想必大家都玩過掃雷這款小游戲吧

    2024年02月12日
    瀏覽(93)
  • 【C語言】小游戲-掃雷(清屏+遞歸展開+標(biāo)記)

    【C語言】小游戲-掃雷(清屏+遞歸展開+標(biāo)記)

    大家好,我是深魚~ 目錄 一、游戲介紹 二、文件分裝 ?三、代碼實現(xiàn)步驟 1.制作簡易游戲菜單 ?2. 初始化棋盤(11*11) ?3.打印棋盤(9*9) 4.布置雷? ?5.計算(x,y)周圍8個坐標(biāo)的和? 6.排查雷? ?1清屏后打印棋盤 2遞歸展開 3標(biāo)記雷 四、完整代碼 game.h:相關(guān)函數(shù)的聲明,整個代碼要引用

    2024年02月12日
    瀏覽(97)
  • 【C語言實現(xiàn)掃雷小游戲——可展開一片】

    【C語言實現(xiàn)掃雷小游戲——可展開一片】

    學(xué)習(xí)完了函數(shù)和數(shù)組,讓我們做個掃雷小游戲鞏固一下所學(xué)的知識把! 使用控制臺操作 通過菜單實現(xiàn)選擇 棋盤為9×9 默認(rèn)隨機布置10個雷 排查雷 如果排查的位置不是雷,就顯示周圍有幾個雷 排查位置是雷,游戲結(jié)束,玩家失敗 把10個雷全部排除,游戲結(jié)束,玩家成功 掃雷

    2024年02月08日
    瀏覽(91)
  • C語言經(jīng)典小游戲之掃雷(超詳解釋+源碼)

    C語言經(jīng)典小游戲之掃雷(超詳解釋+源碼)

    “少年氣,是歷盡千帆舉重若輕的沉淀,也是樂觀淡然笑對生活的豁達(dá)!” 今天我們學(xué)習(xí)一下掃雷游戲怎么用C語言來實現(xiàn)! 一個掃雷盤面由許多方格(cell)組成,方格中隨機分布著一定數(shù)量的雷(mine),一個格子中至多只有1雷。勝利條件是打開所有安全格(非雷格,saf

    2024年02月12日
    瀏覽(96)
  • 帶你實現(xiàn)初階掃雷小游戲—【C語言】

    帶你實現(xiàn)初階掃雷小游戲—【C語言】

    ? 目錄 1. 掃雷游戲?qū)崿F(xiàn)的思路 注意點1? 注意點2? 2. 函數(shù)實現(xiàn)掃雷功能 2.1 初始化棋盤 2.2 顯示棋盤 2.3 設(shè)置雷 2.4 排查雷 2.5 返回附近雷的個數(shù) 3.源碼 3.1 game.h 3.2 game.c? 3.3 test.c 我們這里拿9*9的棋盤(其中包含10個雷)來實現(xiàn)(這里也可以自定義棋盤大小和雷的個數(shù) 》我們這

    2024年02月05日
    瀏覽(104)
  • C語言之掃雷小游戲的實現(xiàn)【含遞歸展開】

    C語言之掃雷小游戲的實現(xiàn)【含遞歸展開】

    掃雷游戲是1992年發(fā)行的一款大眾類益智游戲,對于許多80后、90后來說都是童年的回憶。如今三十年過去了,這款游戲依舊受到很多網(wǎng)友的喜愛,今天我們一起來模擬實現(xiàn)一下掃雷游戲。 本文所用的編譯器是VS2022 這里我們使用模塊化設(shè)計,模塊化設(shè)計就是把各個模塊的代碼分

    2024年02月02日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包