C语言实现三子棋游戏 代码+思路+电脑下棋算法
重点:
当检测到电脑已经两子连续时,将会尝试获得胜利。
在检测到玩家即将胜利(连城两子)时,进行拦截
尝试胜利的优先级高于拦截,意味着如果玩家不能再下一步截断电脑连续的两子,下一回合中将会被击败。
源码:
GitHub链接
https://github.com/SWQXDBA/Sanzi-chess/tree/main/sanziqi
其中
void clear(char board[H_max][L_max], int H, int L);//清空棋盘
void printboard(char board[H_max][L_max], int H, int L);//打印棋盘
void printmenu();//打印游戏菜单选项
void computerplay(char board[H_max][L_max], int H, int L);//电脑下棋
void search(char board[H_max][L_max], int X, int Y, int H, int L, char ch, char ch2);//核心算法:用于寻找电脑下棋的位置,会把找到的位置传给X和Y;
void putBoard(char board[H_max][L_max],char ch, int x, int y);/把棋子放置到某个位置,ch表示棋子,其中玩家为‘*’,电脑为‘#’;
char isWin(char board[H_max][L_max], int H, int L);判断是否胜利
int isFulled(char board[H_max]判断是否填满棋盘(平局)
main函数部分:
注意,这里使用了一个int类型来接收getchar()的字符,因为scanf("%d".&option),如果玩家输入了一个非字符的东西会出错
如果像上图这样写,则
但是如果写成scanf并且尝试接收一个int,如
出现死循环
此问题也可以通过加入getchar()来解决,比如