一、五子棋原理
采用二维数组保存棋盘信息,棋盘上面的任何一个位置,里面可以放置三类信息。
- 空
- 用户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)); //默认棋盘数据都是0
int 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;
}
}