C言語:簡単な無界面化操作掃雷ゲーム

13160 ワード

                 ,         C      ?
                 ,        ,     ,      ,             ,  :             !
        :

直接あごを1つのファイルに入れると、機能は実現できますが、良い習慣ではありません.書籍『高品質プログラミングガイドC++/C言語』を参考にすることができます
#define  _CRT_SECURE_NO_WARNINGS 10
#include
#include
#include
#define ROWS 12
#define COLS 12
#define NUM 15

enum op{
    EXIT,
    PLAY
};

void meau()
{
    printf("****************************************************
"
); printf("*************** 1、play ****************
"
); printf("*************** 0、exit ****************
"
); printf("****************************************************
"
); } void init_board(char board[ROWS][COLS]) { int i = 0; int j = 0; char x = ' '; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { board[i][j] = x; } } } void init_mine(char mine[ROWS][COLS]) { int i = 0; int j = 0; char x = ' '; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { mine[i][j] = x; } } } void get_mine(char mine[ROWS][COLS]) { int x = 0; int y = 0; int mine_num = NUM; while (mine_num) { loop: x = rand() % (ROWS - 3 + 1) + 1; y = rand() % (COLS - 3 + 1) + 1; if (mine[x][y] != '*') { mine[x][y] = '*'; } else { goto loop; } mine_num = mine_num - 1; } } void print_board(char board[ROWS][COLS]) { int i = 0; int j = 0; printf(" "); for (i = 1; i < ROWS - 1; i++) { printf(" %d ", i); } printf("
"
); for (i = 1; i < ROWS - 1; i++) { printf(" "); for (j = 1; j < COLS - 1; j++) { printf("|---", board[i][j]); } printf("|
"
); printf("%2d", i); for (j = 1; j < COLS - 1; j++) { printf("| %c ", board[i][j]); } printf("|
"
); } printf(" "); for (j = 1; j < COLS - 1; j++) { printf("|---", board[i][j]); } printf("|
"
); } char is_mine_num(char mine[ROWS][COLS], char board[ROWS][COLS], int x, int y) { int count = 0; if (mine[x - 1][y - 1] == '*')count++; if (mine[x - 1][y] == '*')count++; if (mine[x - 1][y + 1] == '*')count++; if (mine[x][y - 1] == '*')count++; if (mine[x][y + 1] == '*')count++; if (mine[x + 1][y - 1] == '*')count++; if (mine[x + 1][y] == '*')count++; if (mine[x + 1][y + 1] == '*')count++; board[x][y] = (count + '0'); return board[x][y]; } void play_game(char mine[ROWS][COLS], char board[ROWS][COLS]) { int count = (ROWS - 2)*(COLS - 2) - NUM; int x = 0; int y = 0; char ret = 0; while (count) { loop: printf(" :
>:"
); scanf("%d %d", &x, &y); if ((x<1 || x>ROWS - 2) || (y > ROWS - 2 || y < 1)) { printf(" ! 。
"
); goto loop; } if (mine[x][y] == '*') { int i = 0; int j = 0; while (count == ((ROWS - 2)*(COLS - 2) - NUM)) { rand: i = rand() % (ROWS - 3 + 1) + 1; j = rand() % (COLS - 3 + 1) + 1; if (mine[i][j] == ' ') { mine[i][j] = '*'; mine[x][y] = ' '; count--; board[x][y] = is_mine_num(mine, board, x, y); print_board(board); print_board(mine); goto loop; } else { goto rand; } } printf(" !
"
); return; } else { board[x][y] = is_mine_num(mine, board, x, y); print_board(board); } //print_board(mine); count--; } if (count == 0) printf("
"
); } void play() { int input = 0; char board[ROWS][COLS]; char mine[ROWS][COLS]; srand((unsigned)time(NULL)); do { meau(); loop: printf(" >>:
"
); scanf("%d", &input); if (input != 0 && input != 1) { printf(" , 。
"
); goto loop; } switch (input) { case PLAY: printf(" :
"
); init_mine(mine); init_board(board); get_mine(mine); print_board(board); print_board(mine); play_game(mine, board); break; case EXIT: printf(" !"); break; } } while (input); } int main() { play(); system("pause"); return 0; }