我在其二他網(wǎng)站看到的一個(gè)#字游戲,有意思點(diǎn)。
#include <iostream>
using namespace std;€
typedef char chess[10];
typedef int temparr[10];
chess arr;
temparr brr;
int number,suc,c3,n2,c2,n1,c1;
char ch;
void inarrdata(chess a)
{
????a[1]='1';a[2]='2';a[3]='3';
????a[4]='4';a[5]='5';a[6]='6';
????a[7]='7';a[8]='8';a[9]='9';
}
void display(chess a)
{
????cout<<endl;cout<<endl;
????cout<<"??"<<a[1]<<" "<<'|'<<" "<<a[2]<<" "<<'|'<<" "<<a[3]<<endl;
????cout<<" -----------"<<endl;
????cout<<"??"<<a[4]<<" "<<'|'<<" "<<a[5]<<" "<<'|'<<" "<<a[6]<<endl;
????cout<<" -----------"<<endl;
????cout<<"??"<<a[7]<<" "<<'|'<<" "<<a[8]<<" "<<'|'<<" "<<a[9]<<endl;
????cout<<endl;cout<<endl;
}
int arrfull()
{
????int i;
????int arrf=0;
????for(i=1;i<=9;i++)
????????if(i==arr[i]-48)
????????????arrf=1;
????return arrf;
}
void cn(int line)
{
????switch(line)
????????{
????????????case 0:c3=c3+1;break;
????????????case 1:n2=n2+1;break;
????????????case 2:c2=c2+1;break;
????????????case 3:n1=n1+1;break;
????????????case 4:c1=c1+1;break;
????????}
}
int linenum(char a,char b,char c)
{
????int ln=5;
????if((a=='X')&&(b=='X')&&(c=='X'))
????????ln=0;
????if(((a=='O')&&(b=='O')&&(c!='O'))||((a=='O')&&(b!='O')&&(c=='O'))||((a!='O')&&(b=='O')&&(c=='O')))
????????ln=1;
????if(((a=='X')&&(b=='X')&&(c!='X'))||((a=='X')&&(b!='X')&&(c=='X'))||((a!='X')&&(b=='X')&&(c=='X')))
????????ln=2;
????if(((a=='O')&&(b!='O')&&(c!='O'))||((a!='O')&&(b=='O')&&(c!='O'))||((a!='O')&&(b!='O')&&(c=='O')))
????????ln=3;
????if(((a=='X')&&(b!='X')&&(c!='x'))||((a!='X')&&(b=='X')&&(c!='X'))||((a!='X')&&(b!='X')&&(c=='X')))
????????ln=4;
????return ln;
}
int maxbrr(int *br)
{
????int temp,i,mb;
????temp=-888;
????for(i=1;i<=9;i++)
????????{
????????????if(temp<=br[i])
????????????????{
????????????????????temp=br[i];
????????????????????mb=i;
????????????????}
????????}
????return mb;
}
void manstep() //
人走棋處理模塊
{
????int j;
????display(arr);
????if(arrfull())??//
如果棋盤上還有下棋的位置,給人走一步棋
????????{
????????????cout<<"
您要走哪一步?請(qǐng)輸入數(shù)字(
1--9
)
:";
????????????cin>>j;
????????????while((j<1)||(j>9)||(j!=arr[j]-48))
????????????????{
????????????????????cout<<"
對(duì)不起,您輸入的數(shù)字不對(duì),請(qǐng)重新輸入(
1--9
)
:";
????????????????????cin>>j;
????????????????}
????????????arr[j]='O';
????????}
}
void computerstep()??//
計(jì)算機(jī)走棋處理模塊
{
????int i;
????if(arrfull())??//
如果棋盤上還有可下棋的位置,則計(jì)算機(jī)走棋
????????{
????????????for(i=1;i<=9;i++)??//
對(duì)每一步可走的棋進(jìn)行計(jì)算
????????????????{
????????????????????if(i==arr[i]-48)
????????????????????????{
????????????????????????????c3=0;n2=0;c2=0;n1=0;c1=0;
????????????????????????????arr[i]='X';
????????????????????????????number=linenum(arr[1],arr[2],arr[3]);cn(number);
????????????????????????????number=linenum(arr[4],arr[5],arr[6]);cn(number);
????????????????????????????number=linenum(arr[7],arr[8],arr[9]);cn(number);
????????????????????????????number=linenum(arr[1],arr[4],arr[7]);cn(number);
????????????????????????????number=linenum(arr[2],arr[5],arr[8]);cn(number);
????????????????????????????number=linenum(arr[3],arr[6],arr[9]);cn(number);
????????????????????????????number=linenum(arr[1],arr[5],arr[9]);cn(number);
????????????????????????????number=linenum(arr[3],arr[5],arr[7]);cn(number);
????????????????????????????brr[i]=(128*c3-63*n2+31*c2-15*n1+7*c1);?? //
計(jì)算此步權(quán)值
????????????????????????????arr[i]=i+48;
????????????????????????}
????????????????????else
????????????????????????brr[i]=-999;
????????????????}
????????????arr[maxbrr(brr)]='X';????//
確定計(jì)算機(jī)走哪一步,權(quán)值最大的一步
????????????c3=0;n2=0;c2=0;n1=0;c1=0;
???????????? number=linenum(arr[1],arr[2],arr[3]);cn(number);
???????????? number=linenum(arr[4],arr[5],arr[6]);cn(number);
???????????? number=linenum(arr[7],arr[8],arr[9]);cn(number);
???????????? number=linenum(arr[1],arr[4],arr[7]);cn(number);
???????????? number=linenum(arr[2],arr[5],arr[8]);cn(number);
???????????? number=linenum(arr[3],arr[6],arr[9]);cn(number);
???????????? number=linenum(arr[1],arr[5],arr[9]);cn(number);
???????????? number=linenum(arr[3],arr[5],arr[7]);cn(number);
???????????? if(c3!=0)????????????????//
計(jì)算機(jī)已贏
????????????????{
????????????????????display(arr);
????????????????????cout<<endl;
????????????????????cout<<"
計(jì)算機(jī)贏了
!!!"<<endl;
????????????????????exit(0);
????????????????????suc=0;
????????????????}
????????}
????else
????????suc=0;
}
int main()
{
????cout<<"
游戲規(guī)則:
"<<endl<<"
棋盤格式如圖,人和計(jì)算機(jī)在棋盤上交替走棋
"<<endl;
????cout<<"
約定計(jì)算機(jī)使用符號(hào)
X
,人使用符號(hào)
O"<<endl;
????cout<<"
誰(shuí)先使一橫行或一豎行或?qū)蔷€上有三個(gè)自己的符號(hào),就勝利了!
"<<endl;
????inarrdata(arr);??????????//
棋盤坐標(biāo)編號(hào)
????display(arr);????????????//
顯示初始棋盤
????suc=1;
????cout<<"
請(qǐng)選擇您是否先走
?(y/n)";
????cin>>ch;
????if((ch=='y')||(ch=='Y'))????//
輸入
Y
,表示人先走棋
????????{
????????????while(suc)
????????????????{
????????????????????manstep();
????????????????????computerstep();
????????????????}
????????????display(arr);
????????}
????else?????????????????????????? //
計(jì)算機(jī)先走棋
????????{
????????????while(suc)
????????????????{
????????????????????computerstep();
????????????????????if(suc)
????????????????????????manstep();
????????????????}
????????}
????cout<<endl<<"
和棋
!"<<endl;
????return 0;
}
?