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

用C語言實現(xiàn)掃雷游戲

 更新時間:2021年06月06日 09:34:19   作者:Enthusiastic_boy  
這篇文章主要為大家詳細介紹了用C語言實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

用C語言實現(xiàn)掃雷游戲,因為代碼會比較多,所以采用多文件的方式,使代碼看起來更好。

一.main.c

在主調(diào)函數(shù)中首先要提供一個給用戶選擇的界面,在這里我們假定選擇1為開始游戲,0為退出游戲,代碼如下:

函數(shù)執(zhí)行開始,會在顯示框中提示用戶輸入數(shù)字,1為進入游戲,此時會調(diào)用Game()函數(shù);0為退出游戲。其中while循環(huán)的作用是當用戶進入界面輸入錯誤(非01)或者完成一把游戲后繼續(xù)彈出選項,只有當輸入0才將num置為0,退出循環(huán)。

二.test.h

此為頭文件,其中包含宏定義和函數(shù)的聲明,代碼如下:

#ifndef __TEST_H__//防止頭文件被重復包含
#define __TEST_H__
#define _CRT_SECURE_NO_WARNINGS 1
 
#include <stdio.h>
#include <windows.h>
#define HORI 6//控制數(shù)組大小
#define VERT 6//控制數(shù)組大小
#define NUM 7//埋雷數(shù)量
#define STYLE '#'//初始化時顯示的字符
extern void  Game();
 
#endif

三.test.c

1.有關于掃雷的主要代碼都會寫在這個文件里。test.c當中必須包含頭文件test.h(因為代碼分塊問題,這里我沒有寫)。Game()函數(shù)調(diào)用其他函數(shù),實現(xiàn)整個掃雷過程,不使用二維數(shù)組的邊框,原因是如果使用邊框就不好計算周圍雷的個數(shù)。system("cls")為清屏操作,加上以后的效果就是看起來是在一張圖上掃雷。見以下代碼:

void Game(){
 srand((unsigned long)time(NULL));//生成隨機數(shù)種子
 char fake[HORI][VERT];//定義一個二維數(shù)組用于顯示給用戶
 char mine[HORI][VERT];//定義一個和上邊大小相同的二維數(shù)組用來埋雷
 memset(fake,STYLE , sizeof(fake));//初始化為STYLE
 memset(mine, '0', sizeof(mine));//初始化為字符0
 int count = (HORI - 2)*(VERT - 2) - NUM;//不使用數(shù)組邊框,計算出剩余大小
 Bray(mine,HORI,VERT);//調(diào)用函數(shù)實現(xiàn)埋雷
 while (count){//一直做循環(huán)直到用戶掃雷完成
  Display(fake,HORI,VERT);//顯示二維數(shù)組fake
  int x = 0;
  int y = 0;
  printf("Please Enter Your Postion<x,y>#:\n");
  scanf("%d%d", &x, &y);//輸入掃雷坐標
  if (x<1 || x>10 || y<1 || y>10){//輸入非法跳出本次循環(huán)繼續(xù)下一次
   printf("Please try again:\n");
   continue;
  }
  if (fake[x][y] != STYLE){//輸入非法跳出本次循環(huán)繼續(xù)下一次
   printf("Please try again:\n");
   continue;
  }
  if (mine[x][y] =='1'){//掃到雷了,游戲結束,跳出while循環(huán),返回到選擇界面
   printf("Game over\n");
   Display(mine, HORI, VERT);
   break;
  }
  fake[x][y] = Digital(mine,x,y);//把數(shù)組mine[x][y]旁邊的雷的數(shù)量算出來,賦值給fake[x][y];
  count--;//沒碰到雷時,count減一,離成功又近一步
  system("cls");//清屏
 }
}

2..埋雷函數(shù)Bray()的實現(xiàn),把雷設置為字符‘1',目的是方便計算周圍雷的個數(shù);count此時為埋雷數(shù)量,控制while循環(huán)次數(shù),可能出現(xiàn)生成隨機數(shù)相同,所以將count--放在if語句中,用來防止生成的隨機數(shù)位置相同。代碼如下:

void Bray(char arr[][VERT],int hori,int vert){//埋雷,雷為1字符
 int count = NUM;
 while (count){
  int x = rand() % (hori - 2) + 1;
  int y= rand() % (vert - 2) + 1;
  if (arr[x][y] == '0'){
   arr[x][y]='1';
   count--;
  }
 }
};

3..計算周圍雷個數(shù)的函數(shù)Digital()如下,假如返回值為int型表示雷的個數(shù)則:因為數(shù)組mine中存放的是字符‘0'(Ascllc碼為48)和字符‘1'(Ascllc碼為49),把以x,y為下標的字符一圈加起來在減去8乘以‘0'(字符0)為想要的雷的數(shù)量;但是返回值卻是char類型,所以再給式子加上‘0'(字符0)就轉化為所對應的char類型了;所以總體為減去7乘以‘0'(字符0)。代碼如下:

char Digital(char arr[][VERT],int x,int y){//返回字符
 return arr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1] + arr[x][y - 1] + \
  arr[x][y + 1] + arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] - 7 * '0';
};

4.顯示游戲界面的函數(shù)為Display() ,不適用數(shù)組邊框,所以ij的起始數(shù)字為1,剛好對應數(shù)組下標。代碼如下:

void Print(hori){
 printf("  ");
 for (int i = 0; i < hori - 2; i++){
  printf("----");
 }
 printf("\n");//每打印一行后換行
}
void Display(char arr[][VERT],int hori,int vert){//顯示窗口
 printf(" ");//首先打印一個空格,根據(jù)具體需要調(diào)整
 for (int i = 1; i < hori - 1; i++){//打印出數(shù)字1到數(shù)組長度減二
  printf("%4d", i);
 }
 printf("\n");//換行
 Print(hori);//首先打印一段橫杠
 for (int i = 1; i < hori - 1; i++){
  printf("%-2d|", i);
  for (int j = 1; j < vert - 1; j++){
   printf("  %c|",arr[i][j]);
  }//打印一行空格加雷的數(shù)量加|
  printf("\n");//每打印一行后換行
  Print(hori);//打印橫杠
 }
};

test.c中除了Game()函數(shù),其他函數(shù)可用static修飾,不用暴露給外部。

做完這些就完成了掃雷的代碼,運行效果如下:

此時輸入坐標就可以玩掃雷游戲了。

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

相關文章

  • c++只保留float型的小數(shù)點后兩位問題

    c++只保留float型的小數(shù)點后兩位問題

    這篇文章主要介紹了c++只保留float型的小數(shù)點后兩位問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++實現(xiàn)編碼轉換的示例代碼

    C++實現(xiàn)編碼轉換的示例代碼

    這篇文章主要介紹了C++實現(xiàn)編碼轉換的示例代碼,幫助大家快捷的實現(xiàn)編碼轉換,感興趣的朋友可以了解下
    2020-08-08
  • 樹存儲結構的幾種表示方法

    樹存儲結構的幾種表示方法

    今天小編就為大家分享一篇關于樹存儲結構的幾種表示方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C++位圖的實現(xiàn)原理與方法

    C++位圖的實現(xiàn)原理與方法

    位圖(bitset)是一種常用的數(shù)據(jù)結構,常用在給一個很大范圍的數(shù),判斷其中的一個數(shù)是不是在其中。這篇文章主要給大家介紹了關于C++位圖以及位圖的實現(xiàn)原理與方法,需要的朋友可以參考下
    2021-05-05
  • C++ sort排序之降序、升序使用總結

    C++ sort排序之降序、升序使用總結

    這篇文章主要介紹了C++ sort 排序(降序、升序)使用總結,需要的朋友可以參考下
    2020-11-11
  • Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    這篇文章主要介紹了Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Qt實現(xiàn)電子時鐘

    Qt實現(xiàn)電子時鐘

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)電子時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 理解數(shù)據(jù)結構

    理解數(shù)據(jù)結構

    本文是對數(shù)據(jù)結構對編程的重要性,數(shù)據(jù)結構對數(shù)據(jù)存儲,數(shù)據(jù)處理,內(nèi)存工作,從宏觀上理解數(shù)據(jù)結構
    2016-07-07
  • opencv實現(xiàn)讀取視頻保存視頻

    opencv實現(xiàn)讀取視頻保存視頻

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)讀取視頻保存視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++順序表的實例代碼

    C++順序表的實例代碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)順序表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

福建省| 溆浦县| 克什克腾旗| 徐闻县| 界首市| 仙游县| 仙居县| 盘山县| 泗洪县| 文安县| 宝山区| 大厂| 秦安县| 昭平县| 万山特区| 苏州市| 海兴县| 乃东县| 隆子县| 宾川县| 蒲江县| 丰都县| 隆安县| 尉氏县| 舟山市| 富顺县| 晋中市| 东安县| 邵武市| 内江市| 西吉县| 乐至县| 汾西县| 鄄城县| 石柱| 靖边县| 保靖县| 肇州县| 桂阳县| 丰台区| 常山县|