四子棋智能下棋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/zh-hant/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

發表回復

登錄後才能評論