700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言实现扫雷游戏(初级)源代码

c语言实现扫雷游戏(初级)源代码

时间:2020-03-22 13:54:03

相关推荐

c语言实现扫雷游戏(初级)源代码

因为这次c语言实现扫雷游戏,我写了很久还是没能写出扩展式排雷,就不献丑讲解了,就直接给出我自己写的初阶代码,大家想看高级实现,可以去看看这两位大佬的。finish_speech,殿下po;这两位大佬写的非常的详细,非常的好,非常适合深入了解。

1.fhjsd.c

#include"hfk.h"void menu(){printf("*********************************\n");printf("********** 1.play*********\n");printf("********** 2.exit*********\n");printf("*********************************\n");}void game(){char mine[ROWS][COLS] = { 0 };/*布置雷的扫雷信息*/char show[ROWS][COLS] = { 0 };initboard(mine, ROWS, COLS,'0');initboard(show, ROWS, COLS, '*');displayboard(show, ROW, COL);setmine(mine, ROW, COL);displayboard(mine, ROW, COL);findmine(mine, show, ROW, COL);}void test(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf_s("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);}int main(){test();return 0;}

2.hfk.h

#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS ROW+2#define EASY_COUNT 10void initboard(char board[ROWS][COLS], int rows, int cols, char set);void displayboard(char board[ROWS][COLS], int row, int col);void setmine(char board[ROWS][COLS], int row, int col);void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

3.ksfaf.c

#include"hfk.h"void initboard(char board[ROWS][COLS], int rows, int cols,char set){int i = 0;for (i = 0; i < cols; i++){int j = 0;for (j = 0; j < rows; j++){board[i][j] = set;}}}void displayboard(char board[ROWS][COLS], int row, int col){int i = 0;int j = 0;printf("---------扫雷----------\n");for (j = 0; j <= col; j++){printf("%d ", j);}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 = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}int get_mine_count(char mine[ROWS][COLS], int x, int y){return(mine[x - 1][y] + mine[x - 1][y - 1] + 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 findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){int x = 0;int y = 0;int win = 0;while (win<(row*col-EASY_COUNT)){printf("请输入要排查的坐标:");scanf_s("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] != '*'){printf("这坐标被排查过了\n");continue;}if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");displayboard(mine, ROW, COL);break;}else{int n = get_mine_count(mine, x, y);show[x][y] = n + '0';displayboard(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入\n");}}if (win == (row * col - EASY_COUNT)){printf("恭喜你,排雷成功\n");displayboard(mine, ROW, COL);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。