bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

利用C語言編寫一個掃雷游戲-創新互聯

本篇文章為大家展示了利用C語言編寫一個掃雷游戲,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創新互聯建站專注于泗洪網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供泗洪營銷型網站建設,泗洪網站制作、泗洪網頁設計、泗洪網站官網定制、重慶小程序開發公司服務,打造泗洪網絡公司原創品牌,更為您提供泗洪網站排名全網營銷落地服務。

C語言是什么

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發,使用C語言可以以簡易的方式編譯、處理低級存儲器。

主要思路:建立兩個11乘以11的表格,分別為布雷和排雷后的表格,其中我們以字符1表示此處有雷,字符0表示此處無雷,在布雷時我們用時間函數布置隨機的10個雷(具體多少個雷可自行選擇),在另一個表格中顯示出所選位置周圍雷的個數


建立11*11的表格是因為便于統計四條邊上位置周圍含雷的個數

用vs建立頭文件game.n和兩個源文件game.c和test.c
(先分開講解,在文章最后有三個文件的整體顯示)


在頭文件中的聲明有

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY 10

time.h和stdlib.h 文件是time.h的庫函數

ROW表示行,COL表示列,ROWS表示11列,COLS表示11行,EASY表示(簡單程度)雷有10個
首先在test.c文件中建立主函數

int main()
{
 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("選擇錯誤,請重新選擇\n");
 break;

 }

 } while (input);
 return 0;

}

其中 srand((unsigned int)time(NULL)) 是為了能夠在使用rand函數時每次產生不同的隨機數

其中包含兩個函數,分別為菜單函數menu()和實現游戲的函數game()

菜單函數

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

}

主函數中整形input為輸入的數字,1進行游戲,0退出游戲

進行的游戲函數

void game()
{
 //創建棋盤對應的數組
 char mine[ROWS][COLS];//布置好的雷的信息
 char show[ROWS][COLS];//排查出雷的信息
 //初始化棋盤
 initboard(mine, ROWS, COLS, '0');
 initboard(show, ROWS, COLS, '*');
 //打印棋盤
 //displayboard(mine, ROW, COL); 
 displayboard(show, ROW, COL);
 //布置雷
 setmine(mine, ROW, COL, EASY);
 //displayboard(mine, ROW, COL);
 //排雷
 finemine(mine, show, ROW, COL);
}

1、創建棋盤

在游戲函數中我們首先創建兩個11乘以11的棋盤,布置雷的棋盤為mine[ROWS][COLS],在玩家面前顯示的棋盤為show[ROWS][COLS]

2、初始化棋盤

在布置雷的棋盤中全部填寫字符0,在玩家顯示的棋盤面前全部填寫為字符*,
頭文件中聲明

//初始化棋盤
void initboard(char board[ROWS][COLS], int rows, int cols,char set);

game.c中具體寫出函數

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

3、打印棋盤

頭文件聲明

//打印棋盤
void displayboard(char board[ROWS][COLS], int row, int col);

game.c中具體寫出函數

//打印棋盤
void displayboard(char board[ROWS][COLS], int row, int col)
{
 int i = 0, j = 0;
 printf("-----------掃雷游戲-------------\n");
 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");
 }
 printf("-----------掃雷游戲-------------\n");

}

4、布置雷

將mine函數布置出雷

頭文件

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count);

count為計數器,計算布置雷的個數,初始值為EASY,在頭文件中設置為10

game.c中的函數

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
 int x = rand() % row + 1; //模9為0到8
 int y = rand() % col + 1;
 if (mine[x][y] == '0')
 {
 mine[x][y] = '1';
 count--;
 }
 }

}

rand函數產生隨機數,模上row(9)后的數為0到8,加上1為1到9的數,棋盤本為11*11,但我們填充雷在1~9行,1到9列

5、排雷并且在玩家面前顯示出棋盤

頭文件

//排雷
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c中的函數

//統計x,y坐標周圍雷的個數
int getmine(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y-1] + mine[x-1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1]
 + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}


//排雷+打印排雷后的棋盤
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int win = 0;
 while (win<ROW*COL-EASY)
 {
 printf("請輸入要排查雷的坐標:>");
 int x, y;
 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
 {
 //坐標不是雷,統計雷的個數
 int count = getmine(mine, x, y);
 show[x][y] = count+'0';//數字加上字符0為字符數字,轉化為字符數字,因為打印的為字符
 displayboard(show, row, col); //打印排雷后的棋盤
 win++;
 }
 }
 else
 {

 printf("坐標非法,重新輸入!\n");
 }
 }

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

win為已排查出非雷的個數

判斷非雷位置周圍8個位置有雷的個數只需要將周圍8個位置中的字符相加再減去8個0的ascll值,因為8個位置中有雷的位置即為字符1,將8個位置的字符相加轉化為實際的數字,即為雷的個數,當排除出的非雷的個數為ROWSCOLS-EASY(99-10)時,即掃雷成功

game.h中完整文件為

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY 10
//初始化棋盤
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, int count);
//排雷
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

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, 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, j = 0;
 printf("-----------掃雷游戲-------------\n");
 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");
 }
 printf("-----------掃雷游戲-------------\n");

}
//布置雷
void setmine(char mine[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
 int x = rand() % row + 1; //模9為0到8
 int y = rand() % col + 1;
 if (mine[x][y] == '0')
 {
 mine[x][y] = '1';
 count--;
 }
 }

}
//統計x,y坐標周圍雷的個數
int getmine(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y-1] + mine[x-1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1]
 + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}


//排雷+打印排雷后的棋盤
void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int win = 0;
 while (win<ROW*COL-EASY)
 {
 printf("請輸入要排查雷的坐標:>");
 int x, y;
 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
 {
 //坐標不是雷,統計雷的個數
 int count = getmine(mine, x, y);
 show[x][y] = count+'0';//數字加上字符0為字符數字,轉化為字符數字,因為打印的為字符
 displayboard(show, row, col); //打印排雷后的棋盤
 win++;
 }
 }
 else
 {

 printf("坐標非法,重新輸入!\n");
 }
 }

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

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];//布置好的雷的信息
 char show[ROWS][COLS];//排查出雷的信息
 //初始化棋盤
 initboard(mine, ROWS, COLS, '0');
 initboard(show, ROWS, COLS, '*');
 //打印棋盤
 //displayboard(mine, ROW, COL); 
 displayboard(show, ROW, COL);
 //布置雷
 setmine(mine, ROW, COL, EASY);
 //displayboard(mine, ROW, COL);
 //排雷
 finemine(mine, show, ROW, COL);
}

int main()
{
 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("選擇錯誤,請重新選擇\n");
 break;

 }

 } while (input);
 return 0;

}

上述內容就是利用C語言編寫一個掃雷游戲,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。

網頁題目:利用C語言編寫一個掃雷游戲-創新互聯
文章轉載:http://vcdvsql.cn/article22/dsdojc.html

成都網站建設公司_創新互聯,為您提供標簽優化定制開發網站排名App開發小程序開發營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設