文章目錄
- 一、掃雷怎么實作?
- 二、使用步驟
- 1.先列印個選單
- 2.創建陣列,并且初始化
- 3. 列印陣列
- 4.放置雷
- 5.玩家下棋
- 附上全部代碼
一、掃雷怎么實作?
二、使用步驟
1.先列印個選單
void menu()
{
printf("***************************\n");
printf("*****1.play 0.exit**\n");
printf("***************************\n");
}//樸實無華的選單
2.創建陣列,并且初始化
//因為我們這里要有一個陣列來存放雷,一個陣列給玩家看,所以在這里我們用兩個陣列,給我們設定雷的我們暫且稱為my_board,給玩家看的稱為y_board,
代碼如下(示例):
char ret = 0;
//在這里建立兩個陣列自己看的叫my_board,將要放置雷的地方置為1,其他地方置為0,給別人看的叫y_board,一開始先將給別人看的陣列放*
char my_board[ROWS][COLS] = { 0 };
char y_board[ROWS][COLS] = { 0 };
//初始化陣列,把‘0’‘*’傳過來更加方便我們就可以用一個函式來初始化兩個陣列,
Initboard(my_board, ROWS, COLS,'0');
Initboard(y_board, ROWS, COLS, '*');
//這里的ret用來接收我們傳過來
void Initboard(char board[ROWS][COLS], int rows, int cols,char ret )
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols;j++)
{
board[i][j] = ret ;
}
}
}
3. 列印陣列
為了方便我們看他們的坐標,我們就把他們的坐標也列印出來
void Showboard(char board[ROWS][COLS], int row, int col)
{
for (int u = 0; u <= row; u++)
{
printf("%d ", u);
}
printf("\n");
for (int i = 1; i <= row; i++)
{
printf("%d ", i);
for (int j = 1; j <= col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
4.放置雷
void Setlei(char my_board[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int c = count;
while (c)
{
x = rand() % row + 1;
y = rand() % col + 1;
if (my_board[x][y] == '0')
{
my_board[x][y] = '1';
c--;
}
}
}
5.玩家下棋
//'1'-'0'=1,也可以減7個‘0’后回傳去char型別就可以直接用y_board[x][y]接收
int Sum(char my_board[ROWS][COLS],int x,int y)
{
return my_board[x - 1][y - 1] +
my_board[x][y - 1] +
my_board[x + 1][y - 1] +
my_board[x - 1][y] +
my_board[x + 1][y] +
my_board[x - 1][y + 1] +
my_board[x][y + 1] +
my_board[x + 1][y + 1]-8*'0';
}
void Playboard(char my_board[ROWS][COLS], char y_board[ROWS][COLS], int row, int col)
{
int b = 0;
int x = 0; int y = 0;
int ret = 0;
while (1)
{
printf("請輸入你要下的坐標\n");
scanf("%d%d", &x, &y);
if (x <= row&&x >0 && y >0 && y <= col)
{
if (my_board[x][y] != '1')
{
ret= Sum(my_board, x, y);
y_board[x][y] = ret + '0';
b++;
Showboard(y_board, ROW, COL);
if (b == ROW*COL - count)
{
printf("您贏了\n");
Showboard(my_board, ROW, COL);
break;
}
}
else if (my_board[x][y] == '1')
{
printf("恭喜你被炸死了\n");
Showboard(my_board, ROW, COL);
break;
}
}
else printf("輸入的坐標不對,請重新輸入\n");
}
}
附上全部代碼
//頭檔案game.h
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define count 10
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void Initboard(char board[ROWS][COLS], int rows, int cols,char ret);
void Showboard(char board[ROWS][COLS], int row, int col);
void Setlei(char my_board[ROWS][COLS], int row, int col);
void Playboard(char my_board[ROWS][COLS], char y_board[ROWS][COLS], int row,int col);
//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("***************************\n");
printf("*****1.play 0.exit**\n");
printf("***************************\n");
}
void game()
{
char ret = 0;
//在這里建立兩個陣列自己看的叫my_board,將要放置雷的地方置為1,其他地方置為0,給別人看的叫y_board,一開始先將所有陣列放*
char my_board[ROWS][COLS] = { 0 };
char y_board[ROWS][COLS] = { 0 };
//初始化陣列
Initboard(my_board, ROWS, COLS,'0');
Initboard(y_board, ROWS, COLS, '*');
//列印陣列
Showboard(y_board, ROW, COL);
//設定隨機雷
Setlei(my_board, ROW, COL);
/*Showboard(my_board, ROW, COL);*///在自己檢測的時候可以拿來看雷放在哪個地方
//下坐標,做判斷
Playboard(my_board, y_board, ROW, COL);
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請輸入你選擇的數字\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("輸入的錯誤錯誤,請重新輸入\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
//game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void Initboard(char board[ROWS][COLS], int rows, int cols,char ret )
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols;j++)
{
board[i][j] = ret ;
}
}
}
void Showboard(char board[ROWS][COLS], int row, int col)
{
for (int u = 0; u <= row; u++)
{
printf("%d ", u);
}
printf("\n");
for (int i = 1; i <= row; i++)
{
printf("%d ", i);
for (int j = 1; j <= col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void Setlei(char my_board[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int c = count;
while (c)
{
x = rand() % row + 1;
y = rand() % col + 1;
if (my_board[x][y] == '0')
{
my_board[x][y] = '1';
c--;
}
}
}
//'1'-'0'=1,也可以減7個‘0’后回傳去char型別就可以直接用y_board[x][y]接收
int Sum(char my_board[ROWS][COLS],int x,int y)
{
return my_board[x - 1][y - 1] +
my_board[x][y - 1] +
my_board[x + 1][y - 1] +
my_board[x - 1][y] +
my_board[x + 1][y] +
my_board[x - 1][y + 1] +
my_board[x][y + 1] +
my_board[x + 1][y + 1]-8*'0';
}
void Playboard(char my_board[ROWS][COLS], char y_board[ROWS][COLS], int row, int col)
{
int b = 0;
int x = 0; int y = 0;
int ret = 0;
while (1)
{
printf("請輸入你要下的坐標\n");
scanf("%d%d", &x, &y);
if (x <= row&&x >0 && y >0 && y <= col)
{
if (my_board[x][y] != '1')
{
ret= Sum(my_board, x, y);
y_board[x][y] = ret + '0';
b++;
Showboard(y_board, ROW, COL);
if (b == ROW*COL - count)
{
printf("您贏了\n");
Showboard(my_board, ROW, COL);
break;
}
}
else if (my_board[x][y] == '1')
{
printf("恭喜你被炸死了\n");
Showboard(my_board, ROW, COL);
break;
}
}
else printf("輸入的坐標不對,請重新輸入\n");
}
}```
# 總結
當中我們在字符相加程序中要注意(字符-‘0’)可以換成我們看到的int形式,該文章參照了位元鵬哥的教學視頻,加入了自己的學習和理解,歡迎大佬指點,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260141.html
標籤:其他
下一篇:洛谷P1554 夢中的統計
