/***************************************************************
*文件名称:five_algorism.java
*版本:1.0
*日期:2005年8月24日
*作者:刘海平
*说明:五子棋算法,用于初始化棋盘,判断胜负!
*类说明: 类名:five_algorism
* 成员方法:
* InitGame() 用于棋局初始化。
* IsGameOver() 用于判断棋局结束。
*
*其他:本程序采用10*10的地图,具体说明见相应的算法设计文档。
**************************************************************/
//全局变量声明
public class five_algorism{
int board[][]=new int[10][10];
boolean ptab[][][]=new boolean[10][10][192];
boolean ctab[][][]=new boolean[10][10][192];
int win[][]=new int[2][192];
int num[]=new int[2];
boolean turn=false,over=false;
int winner;
int x,y,i,q;
//初始化函数
public void InitGame()
{
int i,j,k;
int count=0;
over=false;
num[0]=num[1]=0;
for(i=0;i<192;i++)
{
win[0][i]=0;
win[1][i]=0;
}
for(i=0;i<10;i++)
for(j=0;j<10;j++)
board[i][j]=2;
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[i][j+k][count]=true;
ctab[i][j+k][count]=true;
}
count++;
}
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[j+k][i][count]=true;
ctab[j+k][i][count]=true;
}
count++;
}
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[i+k][j+k][count]=true;
ctab[i+k][j+k][count]=true;
}
count++;
}
for(i=0;i<6;i++)
for(j=9;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptab[j-k][i+k][count]=true;
ctab[j-k][i+k][count]=true;
}
count++;
}
//随机函数,决定那方先下
}
//判断棋局胜负函数,需要传递4个参数,
//分别是PLAYER1所下棋子的坐标m,n;PLAYER2所下棋子坐标u,v.
public boolean IsGameOver(int m,int n,int u,int v)
{
//player1
if(turn)
{
if(board[m][n]==2)
{
board[m][n]=0;
num[0]++;
if(num[0]==50&&num[1]==50)
{
winner=2;
over=true;
}
else
for(i=0;i<192;i++)
{
if(ptab[m][n][i])
{
win[0][i]++;
ctab[m][n][i]=false;
win[1][i]=7;
if(win[0][i]==5)
{
winner=0;
over=true;
}
}
}
turn=false;
}
}
//player2
if(!turn)
{
if(num[0]==50&&num[1]==50)
{
winner=2;
over=true;
}
else
for(i=0;i<192;i++)
{
win[1][q]++;
ptab[u][v][q]=false;
win[0][q]=7;
}
if(win[1][q]==5)
{
winner=1;
over=true;
}
}
return over;
}
}