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
#include
#include
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS ROW+2
#define EASY_COUNT 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 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);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
