一、五子棋原理
采用二维数组保存棋盘信息,棋盘上面的任何一个位置,里面可以放置三类信息。
- 空
- 用户1的落子(黑子)
- 用户2的落子(白子)
下棋就是在二维数组中找对应的空位置,进行落子落完子之后下来就要考虑该落子位置是否有”五子连珠“,进而进行输赢判定,每一次走棋,多会有四种情况
- 用户1赢
- 用户2赢
- 平局
- 未出结果
二、第一步. main构建游戏起始逻辑
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Menu() //游戏菜单
{printf("############################\n");printf("## 0. Exit 1. Play ##\n");printf("############################\n");printf("Please Select# ");
}
int main()
{int quit = 0;int select = 0;while (!quit) {Menu();scanf("%d", &select);switch (select) { //根据用户选择,执行合适的游戏逻辑代码case 0:quit = 1;break;case 1:Game();break;defalut:printf("Please Select Again!\n");break;}}
}
三、第二步. 构建游戏入口Game()函数
#define ROW 20 //数组行数,可以按照需求调整
#define COL 20 //数组列数,可以按照需求调整
#define PLAYER1 1 //玩家1编号,默认棋盘数据是0,玩家1落子,该位置被改成2
#define PLAYER2 2 //玩家2编号,默认棋盘数据是0,玩家1落子,该位置被改成2
#define NEXT 0 //游戏继续
#define PLAYER1_WIN 1 //玩家1赢了
#define PLAYER2_WIN 2 //玩家2赢了
#define DRAW 3 //平局
void Game()
{int board[ROW][COL]; //采用ROW * COL型的二维数组,来进行游戏信息的保存memset(board, '\0', sizeof(board)); //默认棋盘数据都是0int result = NEXT;do {ShowBoard(board); //显示棋盘PlayerMove(board, PLAYER1); //PLAYER1先走,也可以随机让一个人先走result = IsOver(board); //判定游戏是否结束if (NEXT != result) {break;}ShowBoard(board);PlayerMove(board, PLAYER2);result = IsOver(board);if (NEXT != result) {break;}} while (1);ShowBoard(board);switch (result) {case PLAYER1_WIN:printf("Player1 win!\n");break;case PLAYER2_WIN:printf("Player2 win!\n");break;case DRAW:printf("Player1 darw Player2!\n");break;}
}