遊戲規模:10×10的棋盤遊戲,20個雷。
程序實現:1.爲玩家提供遊戲界面如圖。
2。在該界面上,玩家通過輸入座標開始掃雷,若遇見雷則提示遇見雷,視圖界面該位置上修改爲不同圖標表示雷,若沒有遇見,改位置上要顯示周圍一圈雷的個數,直到無雷的地方都被選擇,則本局遊戲結束。
3.結束一輪遊戲後要返回初始界面,由玩家決定要不要再玩一局。
程序代碼:
mine_clear.h:(頭文件)
#ifndef _MINE_CLEAR_
#define _MINE_CLEAR_
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#define ROW 12
#define COL 12
#define MINE_NUM 20
#define TOTAL 100
void ShowUI();
void Game();
void Set_mine();
void Show_Board();
int Calculat_Mine_Number();
#endif
main.c:(主函數)
#define _CRT_SECURE_NO_WARNINGS 1
#include "mine_clear.h"
int main()
{
int select;
do{
ShowUI();
scanf("%d", &select);
switch (select)
{
case 1:Game(); break;
case 0:printf("bey...\n"); break;
default:printf("Please input right number:"); break;
}
} while (select);
system("pause");
return 0;
}
mine_clear.c:(子函數)
#define _CRT_SECURE_NO_WARNINGS 1
#include "mine_clear.h"
void ShowUI()
{
printf("#################################\n");
printf("#### 1.PLAY 2.EXIT ####\n");
printf("#################################\n");
printf("Please make a choice by select a number:");
}
static int Get_Randnumber(int star,int end)
{
return rand() % (end - star + 1) + star;
}
void Set_mine(char mine_board[][COL])
{
srand((unsigned int)time(NULL));
int row,col;
int mine_number = MINE_NUM;
while (mine_number)
{
row = Get_Randnumber(1, ROW - 2);
col = Get_Randnumber(1, COL - 2);
if ('0'==mine_board[row][col])
{
mine_board[row][col] = '1';
mine_number--;
}
}
}
void Show_Board(char show_board[][COL])
{
int i = 1;
int j = 1;
int t = 1;
printf(" ");
for (; i <= COL - 2; i++)
{
printf("%d ", i);
}
printf("\n");
for (i=1; i <= COL - 4; i++)
{
printf("---");
}
printf("\n");
for (i = 1; i <= ROW-2; i++)
{
printf("%2d|", i);
for (j = 1; j <= COL - 2; j++)
{
printf("%c|",show_board[i][j]);
}
printf("\n");
for (t=1; t <= COL - 4; t++)
{
printf("---");
}
printf("\n");
}
}
int Calculat_Mine_Number(char mine_board[][COL], int row, int col)
{
return mine_board[row - 1][col - 1] + mine_board[row - 1][col] + mine_board[row - 1][col + 1] + mine_board[row][col - 1] + mine_board[row][col + 1]+ mine_board[row + 1][col - 1] + mine_board[row + 1][col] + mine_board[row + 1][col + 1]-8*'0';
}
void Game()
{
char mine_board[ROW][COL];
char show_board[ROW][COL];
int row, col;
int count=0;
memset(mine_board, '0', sizeof(mine_board));
memset(show_board, '*', sizeof(show_board));
Set_mine(mine_board);
while (1)
{
Show_Board(show_board);
printf("plese input your pose:");
scanf("%d%d", &row, &col);
if ('0' == mine_board[row][col])
{
show_board[row][col] = Calculat_Mine_Number(mine_board,row,col)+'0';
count++;
}
else if ('1' == mine_board[row][col])
{
printf("oh~~no,you meet a mine...\n");
show_board[row][col] = '@';
continue;
}
if (MINE_NUM == (TOTAL - count))
{
printf("wow~~you win!!!!\n");
break;
}
}
}