四子棋智能下棋c语言实现的简单介绍

本文目录一览:

求四子棋C语言的编程

专门给你写的楼主,满意的话补分哦~

发现问题给我发消息,我修正

有简单的ai,最好是两个人玩或者左右互搏

开始的有说明菜单

代码的第三行WIN改成几就是几子棋

#include stdio.h

#include conio.h

#include stdlib.h

#include string.h

#define WIN 5

char *view[19][19];

char *const BLACK=”○”,*const WHITE=”●”,*const POS=”¤”;

char *const LT=”┌”,*const TOP=”┬”,*const RT=”┐”;

char *const LEFT=”├”,*const CENTER=”┼”,*const RIGHT=”┤”;

char *const LF=”└”,*const FOOT=”┴”,*const RF=”┘”;

int step[4][2]={1,1,1,-1,1,0,0,1};

int pro;

int side;

int px,py;

int end;

int pvc;

int pside;

int dpx,dpy;

int round;

int style;

void show(int x,int y)

{

int i,j;

printf(“\t\t%d子棋\n第%d手\n”,WIN,round);

for(i=0;i19;i++)

{

for(j=0;j19;j++)

if(i==xj==y)

printf(“%s”,POS);

else

printf(“%s”,view[i][j]);

puts(“”);

}

if(side)

printf(“\n%s黑方回合”,BLACK);

else

printf(“\n%s白方回合”,WHITE);

}

void login()

{

char sel;

getch();

puts(“*操作说明*\n”);

puts(“方向↑ : W键 或者 小键盘8”);

puts(“方向↓ : S键 或者 小键盘5”);

puts(“方向← : A键 或者 小键盘4”);

puts(“方向→ : D键 或者 小键盘6”);

puts(“落子 : 其他任意键\n”);

system(“pause”);

system(“cls”);

puts(“*请选择模式*\n”);

pvc=0;

do

{

pvc=!pvc;

if(pvc)

printf(“\r单人游戏”);

else

printf(“\r双人游戏”);

sel=getch();

}while(sel!=’\r’);

puts(“\n”);

if(pvc)

{

pside=1;

do

{

pside=!pside;

if(pside)

printf(“\r选择黑棋(先行)”);

else

printf(“\r选择白棋(后行)”);

sel=getch();

}while(sel!=’\r’);

puts(“\n”);

style=1;

do

{

style=!style;

if(style)

printf(“\r电脑风格进攻”);

else

printf(“\r电脑风格防守”);

sel=getch();

}while(sel!=’\r’);

}

system(“cls”);

}

void initial()

{

int i,j;

srand(time(NULL));

view[0][0]=LT;

for(i=1;i18;i++)

view[0][i]=TOP;

view[0][18]=RT;

for(i=1;i18;i++)

{

view[i][0]=LEFT;

for(j=1;j18;j++)

view[i][j]=CENTER;

view[i][18]=RIGHT;

}

view[18][0]=LF;

for(i=1;i18;i++)

view[18][i]=FOOT;

view[18][18]=RF;

px=9,py=9;

end=0;

side=1;

pro=1;

for(i=0;iWIN;i++)

pro*=WIN;

show(px,py);

}

int final(int base,int direction)

{

return

direction==1?18:direction==0?-1:0;

}

int judge(int x,int y)

{

int i,j,num,t;

for(t=0;t4;t++)

{

i=x,j=y,num=1;

while(i!=final(i,-step[t][0])

j!=final(j,-step[t][1])

view[i-step[t][0]][j-step[t][1]]==view[x][y])

i-=step[t][0],j-=step[t][1],num++;

i=x,j=y;

while(i!=final(i,step[t][0])

j!=final(j,step[t][1])

view[i+step[t][0]][j+step[t][1]]==view[x][y])

i+=step[t][0],j+=step[t][1],num++;

if(num=WIN)

return 1;

}

return 0;

}

void move()

{

char cmd=getch();

switch(cmd)

{

case 119:case 56:

if(!px)

px=18;

else

px–;break;

case 115:case 53:

if(px==18)

px=0;

else

px++;break;

case 97: case 52:

if(!py)

py=18;

else

py–;break;

case 100:case 54:

if(py==18)

py=0;

else

py++;break;

default:

if(view[px][py]!=BLACK

view[px][py]!=WHITE)

{

if(side)

view[px][py]=BLACK;

else

view[px][py]=WHITE;

side=!side;

if(judge(px,py))

end=1;

}

}

}

void win()

{

if(side)

puts(“\r白方胜! “);

else

puts(“\r黑方胜! “);

}

int uabs(int i)

{

return i0?-i:i;

}

int cml(int i)

{

return i0?i-19:19+i;

}

void AI_move(int ai_side,int dis)

{

int i,j;

char *AI_SIDE=ai_side?BLACK:WHITE;

i=dpx-px;

j=dpy-py;

if(uabs(i)9)

i=cml(i);

if(uabs(j)9)

j=cml(j);

while(i||j)

{

if(i)

{

i0?(i–,px++):(i++,px–);

if(px0||px18)

px=cml(px);

}

if(j)

{

j0?(j–,py++):(j++,py–);

if(py0||py18)

py=cml(py);

}

if(dis)

{

system(“cls”);

show(px,py);

}

}

view[px][py]=AI_SIDE;

if(judge(px,py))

end=1;

side=!side;

}

void computer_attack(int ai_side)

{

int fx,fy,i,j,same,len,tlen,t,tsame,maxscore=0,score,u;

char *AI_SIDE=ai_side?BLACK:WHITE;

char *P_SIDE=AI_SIDE==WHITE?BLACK:WHITE;

for(fx=0;fx19;fx++)

for(fy=0;fy19;fy++)

{

if(view[fx][fy]==BLACK||view[fx][fy]==WHITE)

continue;

same=0,len=0;

for(t=0;t4;t++)

{

i=fx,j=fy,tlen=1,tsame=0,u=pro;

while(i!=final(i,-step[t][0])

j!=final(j,-step[t][1])

view[i-step[t][0]][j-step[t][1]]!=P_SIDE

(fx-i!=WIN*step[t][0]|| fy-j!=WIN*step[t][1]))

{

if(view[i-step[t][0]][j-step[t][1]]==AI_SIDE)

tsame+=u,u*=WIN;

else

u/=WIN;

i-=step[t][0],j-=step[t][1],tlen++;

}

i=fx,j=fy,u=pro;

while(i!=final(i,step[t][0])

j!=final(j,step[t][1])

view[i+step[t][0]][j+step[t][1]]!=P_SIDE

(i-fx!=WIN*step[t][0]|| j-fy!=WIN*step[t][1]))

{

if(view[i+step[t][0]][j+step[t][1]]==AI_SIDE)

tsame+=u,u*=WIN;

else

u/=WIN;

i+=step[t][0],j+=step[t][1],tlen++;

}

if(tlen=WIN)

same+=tsame,len+=tlen;

}

score=same+len;

if(scoremaxscore)

{

maxscore=score;

dpx=fx,dpy=fy;

}

}

}

void first_round()

{

if(round==1)

{

dpx=rand()%10+5,dpy=rand()%10+5;

}

if(round==2)

{

dpx=px+rand()%3-1,dpy=py+rand()%3-1;

dpx==-1?dpx+=2:0;

dpx==19?dpx-=2:0;

dpy==-1?dpy+=2:0;

dpy==19?dpy-=2:0;

}

}

void AI_think(int def)

{

int tpx=px,tpy=py,tside=side;

char *tview[19][19];

if(round3)

{

first_round();

return;

}

memcpy(tview,view,19*19*sizeof(char*));

while(!end)

{

if(side==tside)

{

computer_attack(!pside);

AI_move(!pside,0);

}

else

{

computer_attack(pside);

AI_move(pside,0);

}

}

memcpy(view,tview,19*19*sizeof(char*));

px=tpx,py=tpy;

end=0;

if(side!=tside)

{

side=tside;

computer_attack(!pside);

return ;

}

else

{

while(def–0)

{

computer_attack(pside);

AI_move(pside,0);

}

memcpy(view,tview,19*19*sizeof(char*));

px=tpx,py=tpy;

side=tside;

if(end)

computer_attack(pside);

else

computer_attack(!pside);

end=0;

}

}

void turn()

{

int tside=side;

round++;

if(pvcside!=pside)

{

AI_think(style?2:WIN);

AI_move(!pside,1);

}

else

{

while(tside==side)

{

move();

system(“cls”);

show(px,py);

}

}

}

int main()

{

login();

initial();

while(!end)

turn();

win();

system(“pause”);

}

求C语言四子棋程序

这个很简单,首先双循环打印棋盘15*15大小,然后设置键盘输入,已棋盘左下角为左边,输入左边在相应的位置打印一个黑点就行了

C语言编程立体四子棋

给个判断胜利的算法你,具体自己完善。

//一个立四方体用不同的面进行切割可切割成12个不重复的面,对每个面调用isWin()函数,以下是伪代码

void main()

{

int board[4][4][4]={1,1,2,2…1,2,1}

int cube[][];

for(i=0;i4;i++)

{

cube[][]=board[i][][];

if(isWin(cube))

{

printf(“win”);

return;

}

cube[][]=board[][i][]

if(isWin(cube))

{

printf(“win”);

return;

}

cube[][]=board[][][i]

if(isWin(cube))

{

printf(“win”);

return;

}

}

//判断一个面是否构成四连

int isWin(int cube[][])

{

//判断所有行的四个棋子是否一样

for(i=0;i4;i++)

if(cube[i][0]==cube[i][1]==cube[i][2]==cube[i][3])

return true;

//判断所有列的四个棋子是否一样

for(i=0;i4;i++)

if(cube[0][i]==cube[1][i]==cube[2][i]==cube[3][i])

return true;

//判断对角线的四个棋子是否一样

if(cube[0][0]==cube[1][1]==cube[2][2]==cube[3][3])

return true;

if(cube[0][3]==cube[1][2]==cube[2][1]==cube[3][0])

return true;

return false;

}

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:09
下一篇 2024-12-12 12:09

相关推荐

  • Python简单数学计算

    本文将从多个方面介绍Python的简单数学计算,包括基础运算符、函数、库以及实际应用场景。 一、基础运算符 Python提供了基础的算术运算符,包括加(+)、减(-)、乘(*)、除…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 华为打造的歌:从卡拉OK到智能音乐平台

    华为打造的歌是一款智能音乐平台,旨在打造一个汇聚优质音乐、歌手和乐迷社群的平台。该平台依托华为强大的技术实力和广泛的生态伙伴网络,为用户提供全方位的音乐生态服务,包括在线K歌、语音…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • Python海龟代码简单画图

    本文将介绍如何使用Python的海龟库进行简单画图,并提供相关示例代码。 一、基础用法 使用Python的海龟库,我们可以控制一个小海龟在窗口中移动,并利用它的“画笔”在窗口中绘制…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • 智能风控 Python金融风险PDF

    在金融交易领域,风险控制是一项重要任务。智能风控是指通过人工智能技术和算法模型,对金融交易进行风险识别、风险预警、风险控制等操作。Python是一种流行的编程语言,具有方便、易用、…

    编程 2025-04-29

发表回复

登录后才能评论