c語言人機五子棋,C語言人機五子棋程序演算法

本文目錄一覽:

怎樣用C語言編一個簡單的五子棋遊戲?

#include graphics.h

#include stdio.h

#include MATH.H

IMAGE* IMG;

IMAGE* IMG2;

IMAGE* IMG3;

IMAGE* whole;

bool mark = false;

int x = 0, y = 0;

int flag[15][15];

void show()

{

outtextxy(550, 100, “白方:”);

outtextxy(550, 150, ” 箭頭移動”);

outtextxy(550, 200, ” 回車鍵落子”);

outtextxy(550, 250, “黑方:”);

outtextxy(550, 300, ” ADWS移動”);

outtextxy(550, 350, ” 空格鍵落子”);

}

int success1(int dir1, int dir2)

{

int number = 0;

int temp_x = x, temp_y = y;

while (((temp_x / 35 + dir1) = 0 (temp_x / 35 + dir1) 15) ((temp_y / 35 + dir2) = 0 (temp_y / 35 + dir2) 15) (flag[(temp_x / 35 + dir1)][(temp_y / 35 + dir2)] == 1))

{

temp_x = temp_x + dir1 * 35;

temp_y = temp_y + dir2 * 35;

++number;

}

return number;

}

int success2(int dir1, int dir2)

{

int number = 0;

int temp_x = x, temp_y = y;

while (((temp_x / 35 + dir1) = 0 (temp_x / 35 + dir1) 15) ((temp_y / 35 + dir2) = 0 (temp_y / 35 + dir2) 15) (flag[(temp_x / 35 + dir1)][(temp_y / 35 + dir2)] == 2))

{

temp_x = temp_x + dir1 * 35;

temp_y = temp_y + dir2 * 35;

++number;

}

return number;

}

int success1()

{

int number = 0;

number = success1(0, -1) + success1(0, 1);//上下

if (number 4)

{

number = success1(-1, 0) + success1(1, 0);//左右

if (number 4)

{

number = success1(-1, -1) + success1(1, 1);//左上右下

if (number 4)

{

number = success1(-1, 1) + success1(1, -1);//左下右上

}

}

}

return number;

}

int success2()

{

int number = 0;

number = success2(0, -1) + success2(0, 1);//上下

if (number 4)

{

number = success2(-1, 0) + success2(1, 0);//左右

if (number 4)

{

number = success2(-1, -1) + success2(1, 1);//左上右下

if (number 4)

{

number = success2(-1, 1) + success2(1, -1);//左下右上

}

}

}

return number;

}

void control()

{

char key = 0;

while (key != 27)

{

Sleep(10);

if (kbhit())

{

key = getch();

switch (key)

{

case VK_LEFT:

if (mark)

break;

if (x 0)

x = x – 35;

break;

case ‘a’:

case ‘A’:

if (!mark)

break;

if (x 0)

x = x – 35;

break;

case VK_RIGHT:

if (mark)

break;

if (x 490)

x = x + 35;

break;

case ‘d’:

case ‘D’:

if (!mark)

break;

if (x 490)

x = x + 35;

break;

case VK_UP:

if (mark)

break;

if (y 0)

y = y – 35;

break;

case ‘w’:

case ‘W’:

if (!mark)

break;

if (y 0)

y = y – 35;

break;

case VK_DOWN:

if (mark)

break;

if (y 490)

y = y + 35;

break;

case ‘s’:

case ‘S’:

if (!mark)

break;

if (y 490)

y = y + 35;

break;

case VK_RETURN:

if (mark)

break;

if (flag[x / 35][y / 35] == 0)

{

putimage(whole, x + 6, y + 6, 31, 32, IMG2, 0, 0);

flag[x / 35][y / 35] = 1;

if (success1() = 4)

{

outtextxy(600, 50, “黑方 勝!”);

key = 27;

}

mark = true;

}

break;

case VK_SPACE:

if (!mark)

break;

if (flag[x / 35][y / 35] == 0)

{

putimage(whole, x + 6, y + 6, 31, 31, IMG3, 0, 0);

flag[x / 35][y / 35] = 2;

if (success2() = 4)

{

outtextxy(600, 50, “白方 勝!”);

key = 27;

}

mark = false;

}

break;

default:

break;

}

putimage(0, 0, whole);

putimage_transparent(NULL, IMG, x + 20, y + 20, 0x0, 0, 0, 20, 20);

}

}

}

void main()

{

setinitmode(0);

initgraph(800, 538);

SetWindowText(GetHWnd(), “五子棋20110327”);

setcolor(0xffffff);

setfont(36, 0, “楷體_GB2312”);

IMAGE* IMG1 = new IMAGE;

getimage(IMG1, “JPG”, MAKEINTRESOURCE(102));//棋盤

putimage(0, 0, IMG1);

IMG2 = new IMAGE;

getimage(IMG2, “JPG”, MAKEINTRESOURCE(103));//黑棋

IMG3 = new IMAGE;

getimage(IMG3, “JPG”, MAKEINTRESOURCE(104));//白棋

IMG = new IMAGE;

getimage(IMG, “GIF”, MAKEINTRESOURCE(101));//手形

whole = new IMAGE;

getimage(whole, 0, 0, 537, 537);

putimage_transparent(NULL, IMG, x + 20, y + 20, 0x0, 0, 0, 20, 20);

show();

control();

delete IMG1;

delete IMG2;

delete IMG3;

delete whole;

getch();

getch();

closegraph();

}

求一個五子棋人機對戰c語言演算法 主要是電腦不知道怎麼下棋,設計的是玩家先手

objectMainextendsApp{

varreverse_pairs = 0//逆序數

defmsort[T](cmp:(T, T) = Boolean)(l:List[T]):List[T] = {

defmerge(l1:List[T], l2:List[T]):List[T]=(l1, l2)match{

case(Nil, _) = l2

case(_, Nil) = l1

case(x::left1, y::left2) =

if(cmp(x, y))

x::merge(left1, l2)

else{

reverse_pairs += l1.length

y::merge(l1, left2)

}

}

valn = l.length / 2

if(n == 0)

return l

else{

val(l1, l2) = l.splitAt(n)

merge(msort(cmp)(l1), msort(cmp)(l2))

}

}

println(msort((x:Int, y:Int) = xy)(List(5, 4, 3, 2, 7,6 )))

println(reverse_pairs)

}

請用所學的C語言實現一個命令行下的五子棋遊戲。要求有棋盤界面,並實現人人,人機機人的三種對弈模式。

;tn=baiduPostBrowsersc=4335990148z=430611008pn=0rn=30lm=0word=c%2B%2B#4335990148

百度貼吧裡面的,我試過可以運行,有人機對戰功能~

#include iostream.h

#include process.h

#include conio.h

class five

{

int x;

int y;

int m;

int n;

int num_xy;

int num_mn;

char qipan[20][20];

public:

five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0)

{

x = X;

y = Y;

m = M;

n = N;

num_xy = Num_xy;

num_mn = Num_mn;

for(int i = 0 ; i 20 ; i ++)

{

for(int j = 0 ;j 20 ; j ++)

qipan[i][j] = ‘.’;

}

}

int getm()

{

return m;

}

int getn()

{

return n;

}

void getpointxy();

void getpointmn();

void machinemn();

void showqipan();

void print();

bool IsxyWin();

bool IsmnWin();

int dangerlevel(int a,int b);

void attack();

};

void five::getpointxy()

{

cout”請分別輸入第”num_xy+1″步白棋(‘o’)的橫坐標和縱坐標:”;

cin x y;

if(x = 0 || y = 0 || x 20 || y 20 )

{

cout “出界,請重新輸入:”endl ;

getpointxy();

}

else if(qipan[y-1][x-1] != ‘.’ )

{

cout “請所下的位置已經有棋子,請重新輸入:” endl;

getpointxy();

}

else if(num_xy+num_mn = 400)

{

cout “棋盤已滿,平局!” endl;

exit(0);

}

else

{

qipan[y-1][x-1] = ‘o’;

num_xy++;

}

}

void five::getpointmn()

{

cout”請分別輸入第”num_mn+1″步黑棋(‘x’)的橫坐標和縱坐標:”;

cin m n;

if(m = 0 || n = 0 || m 20 || n 20 )

{

cout “出界,請重新輸入:”endl ;

getpointmn();

}

else if(qipan[n-1][m-1]!=’.’)

{

cout “請所下的位置已經有棋子,請重新輸入:” endl;

getpointmn();

}

else if(num_xy+num_mn = 400)

{

cout “棋盤已滿,平局!” endl;

exit(0);

}

else

{

qipan[n-1][m-1] = ‘x’;

num_mn++;

}

}

int five::dangerlevel(int a, int b)

{

int level = 0;

for(int i = 1 ; a+i=19; i ++)

{

if(qipan[a+i][b] == ‘.’ a + i = 19)

{

i = i+1;

break;

}

if(qipan[a +i][b] == ‘x’ a + i = 19)

break;

}

level += (i-1);

for(i = 1 ; a-i=0; i ++)

{

if(qipan[a-i][b] == ‘.’ (a-i) = 0)

{

i = i+1;

break;

}

if(qipan[a-i][b] == ‘x’ (a-i) = 0)

break;

}

level += (i-1);

for(i = 1 ; b+i=19 ; i ++)

{

if(qipan[a][b + i] == ‘.’ b + i = 19)

{

i = i+1;

break;

}

if(qipan[a][b + i] == ‘x’ b + i = 19)

break;

}

level += (i-1);

for( i = 1 ; b-i=0 ; i ++)

{

if(qipan[a][b – i] == ‘.’ (b-i) = 0)

{

i = i+1;

break;

}

if(qipan[a][b – i] == ‘x’ (b-i) = 0)

break;

}

for( i = 1 ; a+i=19 b+i=19; i ++)

{

if(qipan[a + i][b + i] == ‘.’ b+i = 19 a+i = 19)

{

i = i+1;

break;

}

if(qipan[a + i][b + i] == ‘x’ b+i = 19 a+i = 19)

break;

}

level += (i-1);

for( i = 1 ; a-i= 0 b-i = 0; i ++)

{

if(qipan[a – i][b – i] == ‘.’ a-i= 0 b-i = 0)

{

i = i+1;

break;

}

if(qipan[a – i][b – i] == ‘x’ a-i= 0 b-i = 0)

break;

}

level += (i-1);

for( i = 1 ; a-i= 0 b+i = 19 ; i ++)

{

if(qipan[a – i][b + i] == ‘.’ a-i= 0 b+i = 19)

{

i = i+1;

break;

}

if(qipan[a – i][b + i] == ‘x’ a-i= 0 b+i = 19)

break;

}

level += (i-1);

for( i = 1 ; a + i= 19 b-i = 0 ; i ++)

{

if(qipan[a + i][b – i] == ‘.’ a + i= 19 b-i = 0)

{

i = i+1;

break;

}

if(qipan[a + i][b – i] == ‘x’ a + i= 19 b-i = 0)

break;

}

level += (i-1);

return level;

}

void five::attack()

{

int num1=1,num2=1,num3=1,num4=1;

int A = 20 , B = 20 ,max = 0;

for(int a = 0 ; a 19 ; a ++)

{

for(int b = 0 ; b 19 ; b ++)

{

if(qipan[a][b] == ‘.’)

{

int level = 0;

for(int i = 1 ; a+i=19; i ++)

{

if(qipan[a+i][b] == ‘.’ a + i = 19)

{

i = i+1;

break;

}

if(qipan[a +i][b] == ‘o’ a + i = 19)

break;

}

level += (i-1);

for(i = 1 ; a-i=0; i ++)

{

if(qipan[a-i][b] == ‘.’ (a-i) = 0)

{

i = i+1;

break;

}

if(qipan[a-i][b] == ‘o’ (a-i) = 0)

break;

}

level += (i-1);

for(i = 1 ; b+i=19 ; i ++)

{

if(qipan[a][b + i] == ‘.’ b + i = 19)

{

i = i+1;

break;

}

if(qipan[a][b + i] == ‘o’ b + i = 19)

break;

}

level += (i-1);

for( i = 1 ; b-i=0 ; i ++)

{

if(qipan[a][b – i] == ‘.’ (b-i) = 0)

{

i = i+1;

break;

}

if(qipan[a][b – i] == ‘o’ (b-i) = 0)

break;

}

for( i = 1 ; a+i=19 b+i=19; i ++)

{

if(qipan[a + i][b + i] == ‘.’ b+i = 19 a+i = 19)

{

i = i+1;

break;

}

if(qipan[a + i][b + i] == ‘o’ b+i = 19 a+i = 19)

break;

}

level += (i-1);

for( i = 1 ; a-i= 0 b-i = 0; i ++)

{

if(qipan[a – i][b – i] == ‘.’ a-i= 0 b-i = 0)

{

i = i+1;

break;

}

if(qipan[a – i][b – i] == ‘o’ a-i= 0 b-i = 0)

break;

}

level += (i-1);

for( i = 1 ; a-i= 0 b+i = 19 ; i ++)

{

if(qipan[a – i][b + i] == ‘.’ a-i= 0 b+i = 19)

{

i = i+1;

break;

}

if(qipan[a – i][b + i] == ‘o’ a-i= 0 b+i = 19)

break;

}

level += (i-1);

for( i = 1 ; a + i= 19 b-i = 0 ; i ++)

{

if(qipan[a + i][b – i] == ‘.’ a + i= 19 b-i = 0)

{

i = i+1;

break;

}

if(qipan[a + i][b – i] == ‘o’ a + i= 19 b-i = 0)

break;

}

level += (i-1);

if(level = max)

{

n = a + 1;

m = b + 1;

max = level;

}

}

else

continue;

}

}

qipan[n-1][m-1] = ‘x’;

}

void five::machinemn()

{

int Num1=1,Num2=1,Num3=1,Num4=1,A11 = 21,A12 = 21,A21 = 21,A22 = 21,A31 = 21,A32 = 21,A41 = 21,A42 = 21;

for(int i = x ; i x+5 x+520 ; i ++)

{

if(qipan[y-1][i] == ‘.’)

{

A11=i;

break;

}

if(qipan[y-1][i] == ‘x’)

break;

if(qipan[y-1][i] == ‘o’)

Num1++;

}

for(i = x-2; i = 0 ; i –)

{

if(qipan[y-1][i] == ‘.’)

{

A12 = i;

break;

}

if(qipan[y-1][i] == ‘x’)

{

break;

}

if(qipan[y-1][i] == ‘o’)

Num1++;

}

////

for( i = y ; i y+5 y+5 20 ; i ++)

{

if(qipan[i][x-1] == ‘.’)

{

A21 = i;

break;

}

if(qipan[i][x-1] == ‘x’)

{

break;

}

if(qipan[i][x-1] == ‘o’)

Num2++;

}

for(i = y-2; i = 0 ; i –)

{

if(qipan[i][x-1] == ‘.’)

{

A22 = i;

break;

}

if(qipan[i][x-1] == ‘x’)

{

break;

}

if(qipan[i][x-1] == ‘o’)

Num2++;

}

////

for(i = 0 ; i 5 x+i20 y+i20; i++ )

{

if(qipan[y+i][x+i] == ‘.’)

{

A31 = i;

break;

}

if(qipan[y+i][x+i] == ‘x’)

{

break;

}

if(qipan[y+i][x+i] ==’o’)

Num3++;

}

for(i = 0 ; x – i -2=0 y-i-2=0 i 5;i++ )

{

if(qipan[y-i-2][x-i-2] == ‘.’)

{

A32 = i;

break;

}

if(qipan[y-i-2][x-i-2] == ‘x’)

break;

if(qipan[y-i-2][x-i-2] == ‘o’)

Num3++;

}

////

for(i = 0 ; x + i 20 y – i – 2 = 0 i 5;i ++)

{

if(qipan[y-i-2][x+i] == ‘.’)

{

A41 = i;

break;

}

if(qipan[y-i-2][x+i] == ‘x’)

{

break;

}

if(qipan[y-i-2][x+i] == ‘o’)

Num4++;

}

for(i = 0 ; y + i 20 x – i – 2 = 0 i 5;i ++)

{

if(qipan[y+i][x-i-2] == ‘.’)

{

A42 = i;

break;

}

if(qipan[y+i][x-i-2] == ‘x’)

{

break;

}

if(qipan[y+i][x-i-2] == ‘o’)

Num4++;

}

////

if(num_xy == 0 num_xy == 0)

{

m = n = 10;

qipan[m-1][n-1] = ‘x’;

}

else if(num_xy == 1)

attack();

else if(num_xy == 1)

{

m = x+1;

n = x+1;

qipan[m-1][n-1] = ‘x’;

}

else if(Num1 == 4 A11 == 21 A12 != 21) //一排四個右邊一頭堵住

{

n =1 + y-1;

m = 1 + A12;

qipan[y-1][A12] = ‘x’;

}

else if(Num1 == 4 A12 == 21 A11 != 21) //一排四個左邊邊一頭堵住

{

n =1 + y-1;

m = 1 + A11;

qipan[y-1][A11] = ‘x’;

}

else if(Num2 == 4 A21 == 21 A22 != 21) //一列四個下邊一頭堵住

{

n =1 + A22;

m = 1 + x-1;

qipan[A22][x-1] = ‘x’;

}

else if(Num2 == 4 A22 == 21 A21 != 21) //一列四個上邊一頭堵住

{

n =1 + A21;

m = 1 + x-1;

qipan[A21][x-1] = ‘x’;

}

else if(Num3 == 4 A31 == 21 A32 != 21) //一左上右下斜列四個右邊一頭堵住

{

n =1 + y – A32 – 2;

m = 1 + x – A32 – 2;

qipan[y-A32-2][x-A32-2] = ‘x’;

}

else if(Num3 == 4 A32 == 21 A31 != 21) //一左上右下斜列四個左邊一頭堵住

{

n =1 + y + A31;

m = 1 + x + A31;

qipan[y+A31][x+A31] = ‘x’;

}

else if(Num4 == 4 A41 == 21 A42 != 21) //一左下右上斜列四個右邊一頭堵住

{

n =1 + y + A42;

m = 1 + x – A42 – 2;

qipan[y+A42][x-A42-2] = ‘x’;

}

else if(Num4 == 4 A42 == 21 A41 != 21) //一左下右上斜列四個左邊一頭堵住

{

n =1 + y – A41 – 2;

m = 1 + x + A41;

qipan[y-A41-2][x+A41] = ‘x’;

}

else if(Num1==3 A11 != 21 A12 != 21) //一排3 個兩頭沒堵

{

n =1 + y-1;

m = 1 + A11;

if(dangerlevel(y-1,A11) = dangerlevel(y-1,A12))

qipan[y-1][A11] = ‘x’;

else

qipan[y-1][A12] = ‘x’;

}

else if(Num2==3 A21 != 21 A22 != 21) //一列 3 個兩頭沒堵

{

n =1 + A21;

m = 1 + x-1;

if(dangerlevel(A21,x-1) = dangerlevel(A22,x-1))

qipan[A21][x-1] = ‘x’;

else

qipan[A22][x-1] = ‘x’;

}

else if(Num3 == 3 A31 != 21 A32 != 21) //一左上右下斜列3 個兩頭沒堵

{

n =1 + y + A31;

m = 1 + x + A31;

if(dangerlevel(y+A31,x+A31) = dangerlevel(y-A32 – 2,y – A32 -2))

qipan[y+A31][x+A31] = ‘x’;

else

qipan[y-A32-2][x-A32 -2] = ‘x’;

}

else if(Num4==3 A41 != 21 A42 != 21) //一左下右上斜列3 個兩頭沒堵

{

n =1 + y – A41 – 2;

m = 1 + x + A41;

if(dangerlevel(y-A41-2,x+A41) = dangerlevel(y-A42-2,x+A42))

qipan[y-A41-2][x+A41] = ‘x’;

else

qipan[y-A42-2][x+A42] = ‘x’;

}

else if(Num1 == 2 A11 != 21 A12 != 21) //一排2個兩頭沒堵

{

n =1 + y-1;

m = 1 + A11;

qipan[y-1][A11] = ‘x’;

}

else if( Num2 == 2 A21 != 21 A22 != 21) //一列2個兩頭沒堵

{

n =1 + A21;

m = 1 + x-1;

qipan[A21][x-1] = ‘x’;

}

else if(Num3 == 2 A31 != 21 A32 != 21) //一左上右下斜列2 個兩頭沒堵

{

n =1 + y + A31;

m = 1 + x + A31;

qipan[y+A31][x+A31] = ‘x’;

}

else if(Num4==2 A41 != 21 A42 != 21) //一左下右上斜列2個兩頭沒堵

{

n =1 + y – A41 – 2;

m = 1 + x + A41;

qipan[y-A41-2][x+A41] = ‘x’;

}

else

attack();

}

void five::showqipan()

{

int p=0,q=0;

for(int i = 0 ; i = 20 ; i++)

{

if(p10)

{

cout p ‘ ‘;

}

else

cout p ;

p++;

}

cout endl;

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

{

if(i=0)

{

q++;

if(q10)

cout q ‘ ‘;

else

cout q;

}

for(int j = 0 ; j 20 ; j ++)

cout qipan[i][j]’ ‘ ;

cout endl;

}

}

void five::print()

{

int p=0,q=0;

for(int i = 0 ; i = 20 ; i++)

{

if(p10)

{

cout p ‘ ‘;

}

else

cout p ;

p++;

}

cout endl;

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

{

if(i=0)

{

q++;

if(q10)

cout q ‘ ‘;

else

cout q;

}

for(int j = 0 ; j 20 ; j ++)

{

cout qipan[i][j]’ ‘ ;

}

cout endl;

}

}

bool five::IsxyWin()

{

int num1=1,num2=1,num3=1,num4=1;

for(int i = x ; i x+5 x+520 ; i ++)

{

if(qipan[y-1][i] != ‘o’)

break;

if(qipan[y-1][i] == ‘o’)

num1++;

}

for(i = x-2; i = 0 ; i –)

{

if(qipan[y-1][i] != ‘o’)

break;

if(qipan[y-1][i] == ‘o’)

num1++;

}

for( i = y ; i y+5 ; i ++)

{

if(qipan[i][x-1] != ‘o’)

break;

if(qipan[i][x-1] == ‘o’)

num2++;

}

for(i = y-2; i = 0 ; i –)

{

if(qipan[i][x-1] != ‘o’)

break;

if(qipan[i][x-1] == ‘o’)

num2++;

}

for(i = 0 ; i 5 x+i20 y+i20; i++ )

{

if(qipan[y+i][x+i] != ‘o’)

break;

if(qipan[y+i][x+i] ==’o’)

num3++;

}

for(i = 0 ; x – i -2=0 y-i-2=0 i 5;i++ )

{

if(qipan[y-i-2][x-i-2] != ‘o’)

break;

if(qipan[y-i-2][x-i-2] == ‘o’)

num3++;

}

for(i = 0 ; x + i 20 y – i – 2 = 0 i 5;i ++)

{

if(qipan[y-i-2][x+i] != ‘o’)

break;

if(qipan[y-i-2][x+i] == ‘o’)

num4++;

}

for(i = 0 ; y + i 20 x – i – 2 = 0 i 5;i ++)

{

if(qipan[y+i][x-i-2] != ‘o’)

break;

if(qipan[y+i][x-i-2] == ‘o’)

num4++;

}

if(num1=5||num2=5||num3=5||num4=5)

return 1;

else

return 0;

}

bool five::IsmnWin()

{

int num1=1,num2=1,num3=1,num4=1;

for(int i = m ; i m+5 m+520 ; i ++)

{

if(qipan[n-1][i] != ‘x’)

break;

if(qipan[n-1][i] == ‘x’)

num1++;

}

for(i = m-2; i = 0 ; i –)

{

if(qipan[n-1][i] != ‘x’)

break;

if(qipan[n-1][i] == ‘x’)

num1++;

}

for( i = n ; i n+5 ; i ++)

{

if(qipan[i][m-1] != ‘x’)

break;

if(qipan[i][m-1] == ‘x’)

num2++;

}

for(i = n-2; i = 0 ; i –)

{

if(qipan[i][m-1] != ‘x’)

break;

if(qipan[i][m-1] == ‘x’)

num2++;

}

for(i = 0 ; i 5 m+i20 n+i20; i++ )

{

if(qipan[n+i][m+i] != ‘x’)

break;

if(qipan[n+i][m+i] ==’x’)

num3++;

}

for(i = 0 ; m – i -2=0 n-i-2=0 i 5;i++ )

{

if(qipan[n-i-2][m-i-2] != ‘x’)

break;

if(qipan[n-i-2][m-i-2] == ‘x’)

num3++;

}

for(i = 0 ; m + i 20 n – i – 2 = 0 i 5;i ++)

{

if(qipan[n-i-2][m+i] != ‘x’)

break;

if(qipan[n-i-2][m+i] == ‘x’)

num4++;

}

for(i = 0 ; n + i 20 m – i – 2 = 0 i 5;i ++)

{

if(qipan[n+i][m-i-2] != ‘x’)

break;

if(qipan[n+i][m-i-2] == ‘x’)

num4++;

}

if(num1=5||num2=5||num3=5||num4=5)

return 1;

else

return 0;

}

void main()

{

five a;

int temp;

cout “歡迎體驗本遊戲!這是本遊戲的棋盤:” endl;

a.showqipan();

cout “雙人遊戲請按1,人機遊戲請按2,退出請按3:”;

cin temp;

if(temp == 3)

exit(1);

if(temp == 1)

{

cout “您選擇了雙人遊戲,下面遊戲開始:” endl;

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

{

a.getpointxy();

a.print();

if(a.IsxyWin())

{

cout “白棋勝!” endl;

break;

}

a.getpointmn();

a.print();

if(a.IsmnWin())

{

cout “黑棋勝!” endl;

break;

}

}

}

if(temp == 2)

{

int temp1=0;

cout “您選擇了人機遊戲,您是白棋(‘o’),電腦是黑棋(‘x’),下面遊戲開始:” endl;

cout “您先下請按1,電腦先下請按2:”;

cin temp1;

if(temp1 == 1)

{

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

{

a.getpointxy();

a.print();

if(a.IsxyWin())

{

cout “你贏了!恭喜!” endl;

break;

}

a.machinemn();

a.print();

cout “電腦走(” a.getm() ‘,’ a.getn() ‘)’ endl;

if(a.IsmnWin())

{

cout “哈哈,你輸了!” endl;

break;

}

}

}

if(temp1 == 2)

{

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

{

a.machinemn();

a.print();

if(a.IsmnWin())

{

cout “哈哈,你輸了!” endl;

break;

}

a.getpointxy();

a.print();

if(a.IsxyWin())

{

cout “你贏了!恭喜!” endl;

break;

}

}

}

}

cout “Press any key to EXIT\n”;

getch();

}

求五子棋C語言AI演算法(原創思路)

我有個簡單的思路: 先定義一條線上棋子的各種布局,比如初步定義長度為五個子 ◎◎◎◎● ◎◎●◎× ◎●◎×× ◎×◎×◎ 等等。白圈是自己的子,黑圈是對方的子,叉子是未走的格子。 程序里有個布局表,再定義各個布局的分數,比如連五最99分,連三30分等等。 …

求C語言編寫的五子棋程序。

#includestdio.h

#includestdlib.h

#includegraphics.h

#includebios.h

#includeconio.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

#define SPACE 0x3920

#define BILI 20

#define JZ 4

#define JS 3

#define N 19

int box[N][N];

int step_x,step_y ;

int key ;

int flag=1 ;

void draw_box();

void draw_cicle(int x,int y,int color);

void change();

void judgewho(int x,int y);

void judgekey();

int judgeresult(int x,int y);

void attentoin();

void attention()

{

char ch ;

window(1,1,80,25);

textbackground(LIGHTBLUE);

textcolor(YELLOW);

clrscr();

gotoxy(15,2);

printf(“遊戲操作規則:”);

gotoxy(15,4);

printf(“Play Rules:”);

gotoxy(15,6);

printf(“1、按左右上下方向鍵移動棋子”);

gotoxy(15,8);

printf(“1. Press Left,Right,Up,Down Key to move Piece”);

gotoxy(15,10);

printf(“2、按空格確定落棋子”);

gotoxy(15,12);

printf(“2. Press Space to place the Piece”);

gotoxy(15,14);

printf(“3、禁止在棋盤外按空格”);

gotoxy(15,16);

printf(“3. DO NOT press Space outside of the chessboard”);

gotoxy(15,18);

printf(“你是否接受上述的遊戲規則(Y/N)”);

gotoxy(15,20);

printf(“Do you accept the above Playing Rules? [Y/N]:”);

while(1)

{

gotoxy(60,20);

ch=getche();

if(ch==’Y’||ch==’y’)

break ;

else if(ch==’N’||ch==’n’)

{

window(1,1,80,25);

textbackground(BLACK);

textcolor(LIGHTGRAY);

clrscr();

exit(0);

}

gotoxy(51,12);

printf(” “);

}

}

void draw_box()

{

int x1,x2,y1,y2 ;

setbkcolor(LIGHTBLUE);

setcolor(YELLOW);

gotoxy(7,2);

printf(“Left, Right, Up, Down KEY to move, Space to put, ESC-quit.”);

for(x1=1,y1=1,y2=18;x1=18;x1++)

line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);

for(x1=1,y1=1,x2=18;y1=18;y1++)

line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);

for(x1=1;x1=18;x1++)

for(y1=1;y1=18;y1++)

box[x1][y1]=0 ;

}

void draw_circle(int x,int y,int color)

{

setcolor(color);

setlinestyle(SOLID_LINE,0,1);

x=(x+JZ)*BILI ;

y=(y+JS)*BILI ;

circle(x,y,8);

}

void judgekey()

{

int i ;

int j ;

switch(key)

{

case LEFT :

if(step_x-10)

break ;

else

{

for(i=step_x-1,j=step_y;i=1;i–)

if(box[i][j]==0)

{

draw_circle(step_x,step_y,LIGHTBLUE);

break ;

}

if(i1)break ;

step_x=i ;

judgewho(step_x,step_y);

break ;

}

case RIGHT :

if(step_x+118)

break ;

else

{

for(i=step_x+1,j=step_y;i=18;i++)

if(box[i][j]==0)

{

draw_circle(step_x,step_y,LIGHTBLUE);

break ;

}

if(i18)break ;

step_x=i ;

judgewho(step_x,step_y);

break ;

}

case DOWN :

if((step_y+1)18)

break ;

else

{

for(i=step_x,j=step_y+1;j=18;j++)

if(box[i][j]==0)

{

draw_circle(step_x,step_y,LIGHTBLUE);

break ;

}

if(j18)break ;

step_y=j ;

judgewho(step_x,step_y);

break ;

}

case UP :

if((step_y-1)0)

break ;

else

{

for(i=step_x,j=step_y-1;j=1;j–)

if(box[i][j]==0)

{

draw_circle(step_x,step_y,LIGHTBLUE);

break ;

}

if(j1)break ;

step_y=j ;

judgewho(step_x,step_y);

break ;

}

case ESC :

break ;

case SPACE :

if(step_x=1step_x=18step_y=1step_y=18)

{

if(box[step_x][step_y]==0)

{

box[step_x][step_y]=flag ;

if(judgeresult(step_x,step_y)==1)

{

sound(1000);

delay(1000);

nosound();

gotoxy(30,4);

if(flag==1)

{

setbkcolor(BLUE);

cleardevice();

setviewport(100,100,540,380,1);

/*定義一個圖形窗口*/

setfillstyle(1,2);

/*綠色以實填充*/

setcolor(YELLOW);

rectangle(0,0,439,279);

floodfill(50,50,14);

setcolor(12);

settextstyle(1,0,5);

/*三重筆劃字體, 水平放?5倍*/

outtextxy(20,20,”The White Win !”);

setcolor(15);

settextstyle(3,0,5);

/*無襯筆劃字體, 水平放大5倍*/

outtextxy(120,120,”The White Win !”);

setcolor(14);

settextstyle(2,0,8);

getch();

closegraph();

exit(0);

}

if(flag==2)

{

setbkcolor(BLUE);

cleardevice();

setviewport(100,100,540,380,1);

/*定義一個圖形窗口*/

setfillstyle(1,2);

/*綠色以實填充*/

setcolor(YELLOW);

rectangle(0,0,439,279);

floodfill(50,50,14);

setcolor(12);

settextstyle(1,0,8);

/*三重筆劃字體, 水平放大8倍*/

outtextxy(20,20,”The Red Win !”);

setcolor(15);

settextstyle(3,0,5);

/*無襯筆劃字體, 水平放大5倍*/

outtextxy(120,120,”The Red Win !”);

setcolor(14);

settextstyle(2,0,8);

getch();

closegraph();

exit(0);

}

}

change();

break ;

}

}

else

break ;

}

}

void change()

{

if(flag==1)

flag=2 ;

else

flag=1 ;

}

void judgewho(int x,int y)

{

if(flag==1)

draw_circle(x,y,15);

if(flag==2)

draw_circle(x,y,4);

}

int judgeresult(int x,int y)

{

int j,k,n1,n2 ;

while(1)

{

n1=0 ;

n2=0 ;

/*水平向左數*/

for(j=x,k=y;j=1;j–)

{

if(box[j][k]==flag)

n1++;

else

break ;

}

/*水平向右數*/

for(j=x,k=y;j=18;j++)

{

if(box[j][k]==flag)

n2++;

else

break ;

}

if(n1+n2-1=5)

{

return(1);

break ;

}

/*垂直向上數*/

n1=0 ;

n2=0 ;

for(j=x,k=y;k=1;k–)

{

if(box[j][k]==flag)

n1++;

else

break ;

}

/*垂直向下數*/

for(j=x,k=y;k=18;k++)

{

if(box[j][k]==flag)

n2++;

else

break ;

}

if(n1+n2-1=5)

{

return(1);

break ;

}

/*向左上方數*/

n1=0 ;

n2=0 ;

for(j=x,k=y;j=1,k=1;j–,k–)

{

if(box[j][k]==flag)

n1++;

else

break ;

}

/*向右下方數*/

for(j=x,k=y;j=18,k=18;j++,k++)

{

if(box[j][k]==flag)

n2++;

else

break ;

}

if(n1+n2-1=5)

{

return(1);

break ;

}

/*向右上方數*/

n1=0 ;

n2=0 ;

for(j=x,k=y;j=18,k=1;j++,k–)

{

if(box[j][k]==flag)

n1++;

else

break ;

}

/*向左下方數*/

for(j=x,k=y;j=1,k=18;j–,k++)

{

if(box[j][k]==flag)

n2++;

else

break ;

}

if(n1+n2-1=5)

{

return(1);

break ;

}

return(0);

break ;

}

}

void main()

{

int gdriver=VGA,gmode=VGAHI;

clrscr();

attention();

initgraph(gdriver,gmode,”c:\\tc”);

/* setwritemode(XOR_PUT);*/

flag=1 ;

draw_box();

do

{

step_x=0 ;

step_y=0 ;

/*draw_circle(step_x,step_y,8); */

judgewho(step_x-1,step_y-1);

do

{

while(bioskey(1)==0);

key=bioskey(0);

judgekey();

}

while(key!=SPACEkey!=ESC);

}

while(key!=ESC);

closegraph();

}

c語言五子棋人機對戰的代碼

首先設2維數組模擬棋盤,棋盤每個位置設權值,代表當前適合下的一個價值

然後根據下面的表,給值,每下一步判斷一次

棋型名稱 棋型模式 估值

活四 ?AAAA? 300000

死四A AAAA? 2500

死四B AAA?A 3000

死四C AA?AA 2600

活三 ??AAA?? 3000

死三A AAA?? 500

死三B ?A?AA? 800

死三C A??AA 600

死三D A?A?A 550

活二 ???AA??? 650

死二A AA??? 150

死二B ??A?A?? 250

死二C ?A??A? 200

代碼挺長的,沒什麼看的意義,自己琢磨一下這個就寫了

不懂得繼續問

原創文章,作者:MWXHB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313785.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MWXHB的頭像MWXHB
上一篇 2025-01-07 09:44
下一篇 2025-01-07 09:44

相關推薦

  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • 瘦臉演算法 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

發表回復

登錄後才能評論