三子棋的实现功能:
通过输入坐标确认下棋地点,与电脑对战,电脑产生随机数(随机坐标)。
输出棋盘,并判断玩家与电脑的输赢,输出赢家。
#include<stdio.h> #include<stdlib.h> #include"game.h" #include<windows.h> void start_game(char arr[ROWS][COLS]) { show_arr(arr, ROWS, COLS); //输出棋盘; while (1) { player_game(arr, ROWS, COLS);//玩家开始玩游戏; if (check(arr) == 'p') { break; } show_arr(arr, ROWS, COLS); printf("电脑开始下棋:>\n"); computer_game(arr, ROWS, COLS);//电脑开始玩游戏; if (check(arr) == 'c') { break; } Sleep(1000); show_arr(arr, ROWS, COLS); } if (check(arr) == 'p') { printf("玩家获胜\n"); } else { printf("电脑获胜\n"); } } void menu() //简易的菜单输出; { printf("**************************\n"); printf("****** 1.play ******\n"); printf("****** 0.exit ******\n"); printf("**************************\n"); } void game() { int tmp = 0; char arr[ROWS][COLS] = { 0 };//初始化棋盘输出 ROWS,COLS宏定义大小; init_arr(arr, ROWS, COLS); srand((unsigned)time(NULL));//产生随机数,此处需要调用头文件#include<time.h> menu(); printf("请选择是否开始玩游戏:>"); scanf("%d", &tmp); switch (tmp) { case PLAY: start_game(arr); break; case EXIT: break; } } int main() { game(); system("pause"); return 0; }text.c写大概的逻辑,通过调用各个函数判断是否开始游戏,并写一个简易的判断输赢的函数。text.c需要调用头文件#include "game.h"。
#include<stdio.h> #include<stdlib.h> #include"game.h" void init_arr(char arr[ROWS][COLS]) //给棋盘复制为空格’ ’; { int i = 0; int j = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { arr[i][j] = ' '; } } } void show_arr(char arr[ROWS][COLS]) //按一定格式输出棋盘; { int i = 0; for (i = 0; i < ROWS; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); if (i != 2) { printf("---|---|--- \n"); } } } void player_game(char arr[ROWS][COLS]) //玩家开始玩游戏 { int x = 0; int y = 0; while (1) { printf("请玩家输入坐标:>"); scanf("%d %d", &x, &y); //判断坐标是否合法; if ((x > 0 && x <= 3) && (y > 0 && y <= 3)) { if (arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = 'X'; break; } else { printf("坐标不可以使用.\n"); } } else { printf("坐标输入不合法\n"); } } } void computer_game(char arr[ROWS][COLS]) //电脑开始玩游戏 { while (1) { int x = rand() % 3; //此处产生随机数,对3取余,使x,y的坐标数为0或者1或者2; int y = rand() % 3; if (arr[x][y] == ' ') { arr[x][y] = '0'; break; } } } char check(char arr[ROWS][COLS]) { int i = 0; //判断玩家的输赢; for (i = 0; i < ROWS; i++)//判断三个行数是否均为X,是的话返回p,代表player获胜; { if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == 'X')) return 'p'; } for (i = 0; i < COLS; i++)//判断三个列数是否均为X,是的话返回p,代表player获胜; { if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == 'X')) return 'p'; } //用两个if语句判断两个对角是否均为X,是的话返回p,代表player获胜; if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'X')) { return 'p'; } if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'X')) { return 'p'; } //判断电脑的输赢; for (i = 0; i < ROWS; i++) { if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == '0')) return 'c'; } for (i = 0; i < COLS; i++) { if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == '0')) return 'c'; } if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == '0')) { return 'c'; } if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == '0')) { return 'c'; } }game.c主要写text.c调用的函数,实现三子棋的主要函数功能。
1、初始化棋盘;
2、输出棋盘;
3、玩家和电脑分别下棋;
4、判断输赢;
此处的函数声明均放在下面的game.h头文件中,因此此处应该写入#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __GAME_H__ #define __GAME_H__ #define ROWS 3 //定义行数; #define COLS 3 //定义列数; enum XP //枚举 使得选择菜单容易理解1.play 0.exit; { PLAY = 1, EXIT = 0 }; //函数的声明; void init_arr(char arr[ROWS][COLS]); void show_arr(char arr[ROWS][COLS]); void player_game(char arr[ROWS][COLS]); void computer_game(char arr[ROWS][COLS]); char check(char arr[ROWS][COLS]); #endif三子棋的主要代码如上。可以写在一个.c文件中,像上面这样,代码容易读懂。