实现:
1.棋盘的打印
2.玩家走,电脑走
3.判断棋盘知否下满
4.判断输赢
game.h #ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROWS 3 #define COLS 3 //可在.h文件中修改棋盘大小 void init_board(char arr[ROWS][COLS], int row, int col); void display_board(char arr[ROWS][COLS], int row, int col); void player_move(char arr[ROWS][COLS], int row, int col); void computer_move(char arr[ROWS][COLS], int row, int col); char check_win(char arr[ROWS][COLS], int row, int col); #endif game.c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<Windows.h> #include<stdlib.h> #include "game.h" void init_board(char arr[ROWS][COLS], int row, int col) //棋盘初始化 { memset(arr, ' ', col*row*sizeof(char)); } void display_board(char arr[ROWS][COLS], int row, int col) //打印棋盘 { int i = 0; for (i = 0; i<row; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); printf("---|---|---\n"); } } void player_move(char arr[ROWS][COLS], int row, int col) //玩家下棋 { int x = 0; int y = 0; while (1) { printf("请输入坐标:"); scanf("%d%d", &x, &y); x--; y--; if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2))) { if (arr[x][y] == ' ') { arr[x][y] = 'X'; break; } else { printf("下标有误, 重新输入"); } } else { printf("下标有误, 重新输入"); } } } void computer_move(char arr[ROWS][COLS], int row, int col) //电脑随机下棋 { while (1) { int x = rand() % 3; int y = rand() % 3; if (arr[x][y] == ' ') { arr[x][y] = '0'; break; } } } int is_full(char arr[ROWS][COLS], int row, int col) //判断棋盘是否下满 { int i = 0; int j = 0; for (i = 0; i<row; i++) { for (j = 0; j<col; j++) { if (arr[i][j] == ' ') return 0; } } return 1; } char check_win(char arr[ROWS][COLS], int row, int col) //判断输赢, { int i = 0; for (i = 0; i<row; i++) { if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][1] != ' ')) return arr[i][1]; // ① 竖赢 } for (i = 0; i<col; i++) { if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[1][i] != ' ')) return arr[1][i]; // ② 横赢 } if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' ')) return arr[1][1]; if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' ')) //③ 斜赢 return arr[1][1]; if (is_full(arr, row, col)) { return 'q'; } //平局 return ' '; }test.c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<windows.h> #include<time.h> #include"game.h" void menu() //游戏菜单 { printf("#########################################\n"); printf("##### 1.start ######\n"); printf("##### 0.exit ######\n"); printf("#########################################\n"); } void game() { char board[ROWS][COLS]; char ret = 0; init_board(board, ROWS, COLS); display_board(board, ROWS, COLS); srand((unsigned int)time(NULL)); while (1) { player_move(board, ROWS, COLS); if ((ret = check_win(board, ROWS, COLS)) != ' ') break; display_board(board, ROWS, COLS); computer_move(board, ROWS, COLS); if ((ret = check_win(board, ROWS, COLS)) != ' ') break; display_board(board, ROWS, COLS); } if (ret == 'X') { printf("玩家赢\n"); } else if (ret == '0') { printf("电脑赢\n"); } else if (ret == 'q') { printf("平局\n"); } display_board(board, ROWS, COLS); } int main() { int input = 0; do { menu( ); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("选择错误\n"); break; } } while (input); return 0; }
游戏实现:
玩家赢
电脑赢
平局
