你想玩三子棋吗?直接我的码云链接:下载文件找到debug里的exe运行即可
码云链接:2022-1-25扫雷(no bug) · GDM/C语言 - 码云 - 开源中国 (gitee.com)
一.game.h
#pragma once #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define lei 10 //初始化字符串,将字符串arr内容全部变成a void init_board(char arr[ROWS][COLS], int row, int col, char a); //打印字符串 void print_board(char arr[ROWS][COLS], int row, int col); //随机生成雷 void creat_mine(char arr[ROWS][COLS], int row, int col); //排查雷 //功能:输入一个坐标 // 如果不是雷,显示周围雷的数量,打印出新的print棋盘 // 如果是雷,提示被炸死,游戏结束 //形参:存放雷的棋盘,打印的雷 void find_mine(char mine[ROWS][COLS], char show[COLS][COLS], int row, int col);
二.test.c
#include<stdio.h> #include<string.h> #include<time.h> #include<stdlib.h> #include"game.h" #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define lei 10 void game() { char mine[ROWS][COLS] = { 0 }, show[ROWS][COLS] = { 0 }; //初始化字符串 init_board(mine, ROWS, COLS, '0'); init_board(show, ROWS, COLS, '*'); //打印棋盘 print_board(show, ROW, COL); //生成雷 creat_mine(mine, ROW, COL); //排雷 find_mine(mine, show, ROW, COL); } void menu() { printf("*****************\n"); printf("******1.Play*****\n"); printf("******2.Exit*****\n"); printf("*****************\n"); } int main() { srand((unsigned int)time(NULL)); menu(); int choise = 0; printf("请输入1/2选择是否游戏:"); again: scanf_s("%d", &choise); switch (choise) { case 1:game(); break; case 2:printf("游戏结束"); break; default:printf("输入错误,请重新输入1\2选择是否游戏:");goto again; } printf("byebye\n"); return 0; }
三.game.c
#pragma once #include<stdio.h> #include<string.h> #include<time.h> #include<stdlib.h> #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define lei 10 //初始化字符串,将字符串arr[row][col]变成a void init_board(char arr[ROWS][COLS], int row, int col, char a) { for (int i = 0;i<row;i++) { for (int j = 0; j < col; j++) { arr[i][j] = a; } } } //打印字符串 [row][col]的范围 void print_board(char arr[ROWS][COLS], int row, int col) { printf("--------扫雷--------\n"); printf(" "); for (int i = 1; i <=row; i++) { printf("%d ", i); } printf("\n"); for (int i = 1; i<=row; i++) { printf("%d ", i ); for (int j = 1; j <= col; j++) { printf("%c ", arr[i][j]); } printf("\n"); } } //随机生成雷 void creat_mine(char arr[ROWS][COLS], int row, int col) { int a = lei; while (1) { int x = rand()%9+1; int y = rand()%9+1; if (a == 0) { break; } else if (arr[x][y] == '0') { arr[x][y] = '1'; a--; } } } //排查雷 //功能:输入一个坐标 // 如果不是雷,显示周围雷的数量,打印出新的print棋盘 // 如果是雷,提示被炸死,游戏结束 //形参:存放雷的棋盘,打印的雷 int count_mine(char mine[ROWS][COLS], int row, int col,int x,int y) { int a = mine[x - 1][y - 1] + mine[x - 1][y] + 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]; int b = mine[x][y] * 8; return a - b; }//计算周围雷的数量 void find_mine(char mine[ROWS][COLS], char show[COLS][COLS], int row, int col) { int x, y; while (1) { int win = 0; printf("请输入你要排查雷的位置:"); scanf_s("%d %d", &x, &y); if (mine[x][y] == '1') { printf("恭喜你被炸死了\n"); break; } else { int count = count_mine(mine, COL, ROW,x,y); show[x][y] = count + '0'; win++; print_board(show, ROW, COL); } if (win == ROW * COL - lei) { printf("恭喜你扫雷大师\n"); printf(" 获胜 \n"); break; } } }