C语言 五子棋-人工智能

本文介绍了一个使用C语言编写的五子棋程序,程序未采用最大值最小化剪枝算法,而是简单地让电脑寻找当前棋盘的最佳落子位置。程序遵循非标准的五子棋规则,没有禁手,且提供了源代码供读者参考。作者强调在开始编写程序前要先构思整体框架,以提高效率。此外,程序作为基础模板,可添加更多功能,如记忆、难度选择、悔棋等。
摘要由CSDN通过智能技术生成

    这个五子棋程序没有用到最大值最小中的剪枝算法,只是简单的实现了电脑能根据当前棋盘找到最有利的一个位置   然后在此位置下子。 现在算是实现人工智能的一个小的开始吧。关于下棋规则并没有按标准的五子棋规则而是只要在任意一个方向有五颗棋子就算赢。简单的说就是没有禁手规则。写这个程序确实也锻炼了自己不少,就是说写一个什么程序或者工程我觉得不是拿到就开始写代码了。而是先把整体框架先想好 再去写代码我发现这样子做反而更高效,如果一开始就写代码你会发现写到中途写不下去了,这个没有想好,那个功能欠佳。。。等等一系列的问题 

     这个五子棋可以当做一个初始模板,因为许许多多的功能可以往里面添加 比如:记忆功能,选择不同的算法难度,悔棋。。。等等其他待加入的功能。

     打了半天的字了,手软了    下面贴上我的代码。


源代码:


#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<time.h>
#define len 15


int chessmessage[len][len];
int worb = 2;
int count = 0;
int m;


void star_print();  //打印游戏开始函数
void movegb(char key); //光标的移动
void renjiboyi();   //人机博弈
void shuangrenboyi(); //双人博弈
void initial();    //初始化棋盘数据
void borad_print();  //打印棋盘数据
int chessjudge(int x, int y); //判断能否下子
int chessjudgewin(int x, int y, int worb);  //判断输赢
int chesscomputer(); //电脑下棋
int chessscore(int x, int y, int worb); //棋盘权值函数
void print(int m);


struct zuobiao
{
int x;
int y;
}weizhi = { 7, 9 };


void gotoxy(int x, int y) //建立坐标函数
{
COORD c;
c.X = x;
c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}










void star_print()
{
printf("\n\n\n\n\n");
printf("             ********************* 【五子棋】 *******************\n\n\n");
printf("             *********************【游戏说明】 ******************\n");
printf("                                                               \n");
printf("                   【1】: 黑子由机器使用                       \n");
printf("                -------------------------------------------------\n");
printf("                   【2】: 白子由人使用                         \n");
printf("                                                               \n");
printf("             ****************************************************\n");
printf("\n\n     【人机博弈按:1】 【双人博弈按:2】 【退出按:Esc】");
}


void borad_print()
{


int i, j, k;


print(m);


for (j = 0; j<len; j++)
{
for (i = 0; i<len; i++)
{


if (chessmessage[j][i] == 1)
printf("●");
else if (chessmessage[j][i] == 2)
printf("○");
else if (j == 0 && i == 0)
printf("┏");
else if (j == 0 && i == len - 1)
printf("┓");
else if (j == len - 1 && i == 0)
printf("┗");
else if (j == len - 1 && i == len - 1)
printf("┛");
else if (j == 0 && i != 0 && i != len - 1)
printf("┯");
else if (j != 0 && j != len - 1 && i == 0)
printf("┠");
else if (j != 0 && j != len - 1 && i == len - 1)
printf("┨");
else if (j == len - 1 && i != 0 && i != len - 1)
printf("┷");
else if (j != 0 && j != len - 1 && i != 0 && i != len - 1)
printf("┼");


if (j>0 && j<len - 1 && i<len - 1)
printf("—");




if (j == 0 && i != len - 1)
printf("━");
else if (j == len - 1 && i != len - 1)
printf("━");








}


printf("\n");


if (j >= 0 && j<len - 1)
{
for (k = 0; k<len; k++)
{
if (k == 0 || k == len - 1)
printf("┃  ");
else printf("│  ");
}


if (j == 2)
printf(" 【 操作 - PS 】");
if (j == 4)
printf(" 【 从玩按:n 】");
if (j == 5)
printf(" 【返回按:Backspace】");
if (j == 6)
printf(" 【退出按:Esc】");
if(j == 7)
printf(" 【 空格下子  】");
if(j == 8)
printf(" 【上,下,左,右】");
if(j == 9)
printf(" 【  移动光标 】");


}
printf("\n");


}
}


void print(int x)
{
if (x == 1)
printf("\n\n                  【五子棋--人机博弈】\n\n\n");
else printf("\n\n                  【五子棋--双人博弈】\n\n\n");
}


void movegb(char key)/*光标的移动*/
{
switch (key)
{


case 0x48:if (weizhi.y>1)weizhi.y--; if (weizhi.y<2)weizhi.y = len + 1; break;
/*光标向上移动*/


case 0x50:if (weizhi.y<len + 2)weizhi.y++; if (weizhi.y>len + 1)weizhi.y = 2; break;
/*光标向下移动*/


case 0x4B:if (weizhi.x>-1)weizhi.x--; if (weizhi.x<0)weizhi.x = len - 1; break;
/*光标向左移动*/


case 0x4D:if (weizhi.x<len)weizhi.x++; if (weizhi.x>len - 1)weizhi.x = 0; break;
/*光标向右移动*/
}
gotoxy(4 * weizhi.x, 2 * weizhi.y);
}




void initial()
{
int i, j;


for (j = 0; j<len; j++)    //重置对局数据
{
for (i = 0; i<len; i++)
{
chessmessage[i][j] = 0;
}
}


worb = 2;


count = 0;


system("cls");






borad_print();


weizhi.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值