經典掃雷 性感再上線
阿新 • • 發佈:2018-12-09
mine_clearance.c
#include"game.h" void menu() { printf("********************\n"); printf("***** 1.play *****\n"); printf("***** 0.exit *****\n"); printf("********************\n"); } void game() { int x = 0; int y = 0; int count = MINE_NUM; char mineboard[ROWS][COLS] = { 0 };//放雷的雷盤 char findboard[ROWS][COLS] = { 0 };//排雷的雷盤 char textboard[ROWS][COLS] = { 0 };//測試是否展開的雷盤 InitBoard(textboard, ROWS, COLS, '0'); InitBoard(mineboard, ROWS, COLS, '0'); InitBoard(findboard, ROWS, COLS, '*'); SetMine(mineboard, ROWS, COLS, count); FindMine(mineboard, findboard,textboard, x, y); } int main() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("請選擇:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出遊戲!\n"); break; default: printf("輸入錯誤,請重新選擇!\n"); break; } } while (input); system("pause"); return 0; }
game.c
#include"game.h" void InitBoard(char board[ROWS][COLS], int rows, int cols, char ch) { memset(&board[0][0], ch, rows*cols * sizeof(board[0][0])); } void ShowBoard(char findboard[ROWS][COLS], int row, int col) { int i = 0; int j = 0; printf(" "); for (i = 1; i <= row; i++) { printf("%d ", i); } printf("\n\n"); for (i = 1; i <= row; i++) { printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ", findboard[i][j]); } printf("\n"); } } void SetMine(char mineboard[ROWS][COLS], int rows, int cols, int count) { int i = 0; int j = 0; while (count != 0) { i = rand() % 9 + 1; j = rand() % 9 + 1; if (mineboard[i][j] == '0') { mineboard[i][j] = '1'; count--; } } } void Compute(char findboard[ROWS][COLS], char mineboard[ROWS][COLS], int x, int y) { findboard[x][y] = mineboard[x - 1][y] + mineboard[x - 1][y - 1] + mineboard[x][y - 1] + mineboard[x + 1][y - 1] + mineboard[x + 1][y] + mineboard[x + 1][y + 1] + mineboard[x][y + 1] + mineboard[x - 1][y + 1] - 7 * '0'; } void Open(char findboard[ROWS][COLS], char mineboard[ROWS][COLS], char textboard[ROWS][COLS], int x, int y) { textboard[x][y] = '1'; if (x > 0 && x < ROWS - 1 && y>0 && y < COLS - 1) { Compute(findboard, mineboard, x, y); if (findboard[x][y] == '0') { Compute(findboard, mineboard, x - 1, y); Compute(findboard, mineboard, x - 1, y - 1); Compute(findboard, mineboard, x, y - 1); Compute(findboard, mineboard, x + 1, y - 1); Compute(findboard, mineboard, x + 1, y); Compute(findboard, mineboard, x + 1, y + 1); Compute(findboard, mineboard, x, y + 1); Compute(findboard, mineboard, x - 1, y + 1); if (findboard[x - 1][y] == '0') { if (textboard[x - 1][y] == '0') { Open(findboard, mineboard, textboard, x - 1, y); } } if (findboard[x][y - 1] == '0') { if (textboard[x][y - 1] == '0') { Open(findboard, mineboard, textboard, x, y - 1); } } if (findboard[x + 1][y] == '0') { if (textboard[x + 1][y] == '0') { Open(findboard, mineboard, textboard, x + 1, y); } } if (findboard[x][y + 1] == '0') { if (textboard[x][y + 1] == '0') { Open(findboard, mineboard, textboard, x, y + 1); } } } } } void FindMine(char mineboard[ROWS][COLS], char findboard[ROWS][COLS], char textboard[ROWS][COLS], int x, int y) { ShowBoard(mineboard, ROW, COL); int ret = ROW * COL - MINE_NUM; int count = 0; while (1) { int time0 = 0; int time1 = 0; int time2 = 0; ShowBoard(findboard, ROW, COL); time1 =(unsigned int) time(NULL); printf("請輸入你要排雷的座標:>"); scanf("%d%d", &x, &y); if (x > 0 && x < ROWS - 1 && y>0 && y < COLS - 1) { count++; if (mineboard[x][y] == '1') { if (count == 1) { SetMine(mineboard, ROWS, COLS, count); mineboard[x][y] = '0'; Open(findboard, mineboard,textboard, x, y); } else { time2 = (unsigned int)time(NULL); time0 = time2 - time1; printf("很遺憾,你被炸死了! 所用時間:%ds\n", time0); ShowBoard(mineboard, ROW, COL); break; } } else { ret--; Open(findboard, mineboard, textboard, x, y); } } else { printf("輸入座標有誤,請重新輸入!\n"); } if (ret == 0) { time2 = (unsigned int)time(NULL); time0 = time2 - time1; printf("恭喜你,遊戲通關! 所用時間:%ds\n",time0); ShowBoard(mineboard, ROW, COL); break; } } }
game.h
#ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #include <stdio.h> #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define MINE_NUM 10//遊戲中的雷數 //初始化雷盤 void InitBoard(char board[ROWS][COLS], int rows, int cols, char ch); //展示雷盤 void ShowBoard(char findboard[ROWS][COLS], int row, int col); //埋雷 void SetMine(char mineboard[ROWS][COLS], int rows, int cols, int count); //計算雷數 void Compute(char findboard[ROWS][COLS], char mineboard[ROWS][COLS], int x, int y); //展開雷陣 void Open(char findboard[ROWS][COLS], char mineboard[ROWS][COLS], char textboard[ROWS][COLS], int x, int y); //排雷 void FindMine(char mineboard[ROWS][COLS], char findboard[ROWS][COLS],char textboard[ROWS][COLS], int x, int y); #endif //__GAME_H__