📄 map.java
字号:
package fyrad;
/**
*地图类,实现棋盘的操作
*/
public class Map
{
private int columns;//列数
private int rows; //行数
public int count;//棋子个数
private int map[][];//地图二维数组
private int place[];//棋子应该放在那一行
public Map(){} //无参构造方法
public Map(int Width, int Height)
{
rows=Width;
columns=Height;
map=new int [Width][Height];
place=new int [Width];
for(int i=0;i<rows;i++)//初始化地图二维数组
{
for(int j=0;j<columns;j++)
{ map[i][j]=0; }
}
count=Width*Height;
for(int i=0;i<rows;i++)
{ place[i]=Height; }
}
public void SetPlayer(int PlayerFlag, int row,int Column)
{ map[row][Column]=PlayerFlag; }
//地图上的主要算法
public boolean IsWin(int x,int y,int PlayerFlag) //判断是否获胜
{
int count;
int xLeft,xRight,yUp,yDown;
xLeft=xRight=x;
yUp=yDown=y;
//纵向判断
count=0;
while(xLeft>=0&&map[xLeft][y]==PlayerFlag)
{ xLeft--; count++; }
while(xRight<rows&&map[xRight][y]==PlayerFlag)
{ xRight++; count++; }
if(count-1>=4) return true;
//横向判断
count=0;
while(yUp>=0&&map[x][yUp]==PlayerFlag)
{ yUp--; count++; }
while(yDown<columns&&map[x][yDown]==PlayerFlag)
{ yDown++; count++; }
if(count-1>=4) return true;
//斜左上判断
count=0;
xLeft=xRight=x;
yUp=yDown=y;
while(xLeft>=0&&yUp>=0&&map[xLeft][yUp]==PlayerFlag)
{ xLeft--; yUp--; count++; }
xLeft=xRight=x;
yUp=yDown=y;
while(xRight<rows && yDown<columns && map[xRight][yDown]==PlayerFlag)
{ xRight++; yDown++; count++; }
if(count-1>=4) return true;
//斜右上判断
count=0;
xLeft=xRight=x;
yUp=yDown=y;
while(xRight<rows && yUp>=0 && map[xRight][yUp]==PlayerFlag)
{ xRight++; yUp--; count++; }
xLeft=xRight=x;
yUp=yDown=y;
while(xLeft>=0 && yDown<columns && map[xLeft][yDown]==PlayerFlag)
{ xLeft--; yDown++; count++; }
if(count-1>=4) return true;
return false;
}
//判断平局
public boolean IsEqual()
{
if(count==0) return true;
else return false;
}
//电脑下子
public int ComputerPlace()
{
double a = Math.random()*columns;
int randomNum = new Double(a).intValue();
return randomNum;
}
//下子
public void AddPlace(int Col)
{ if(place[Col]>0) place[Col]-=1; }
//返回下子方位
public int Place(int Col)
{ return place[Col]; }
public int CalNum(int x,int y,int PlayerFlag)
{
int xLeft,xRight,yUp,yDown;
xLeft=xRight=x;
yUp=yDown=y;
int num1,num2,num3,num4;//横,纵,左斜,右斜棋子个数
//纵向判断
num2=0;
while(xLeft>=0&&map[xLeft][y]==PlayerFlag)
{ xLeft--; num2++; }
while(xRight<rows&&map[xRight][y]==PlayerFlag)
{ xRight++; num2++; }
num2--;
//横向判断
num1=0;
while(yUp>=0&&map[x][yUp]==PlayerFlag)
{ yUp--; num1++; }
while(yDown<columns&&map[x][yDown]==PlayerFlag)
{ yDown++; num1++; }
num1--;
//斜左上判断
num3=0;
xLeft=xRight=x;
yUp=yDown=y;
while(xLeft>=0&&yUp>=0&&map[xLeft][yUp]==PlayerFlag)
{ xLeft--; yUp--; num3++; }
xLeft=xRight=x;
yUp=yDown=y;
while(xRight<rows&&yDown<columns&&map[xRight][yDown]==PlayerFlag)
{ xRight++; yDown++; num3++; }
num3--;
//斜右上判断
num4=0;
xLeft=xRight=x;
yUp=yDown=y;
while(xRight<rows && yUp>=0 && map[xRight][yUp]==PlayerFlag)
{ xRight++; yUp--; num4++; }
xLeft=xRight=x;
yUp=yDown=y;
while(xLeft>=0 && yDown<columns && map[xLeft][yDown]==PlayerFlag)
{ xLeft--; yDown++; num4++; }
num4--;
return Max4(num1,num2,num3,num4);
}
public int Max4(int x1,int x2,int x3,int x4)
{
int max=0;
max=x1;
if(max<x2) max=x2;
if(max<x3) max=x3;
if(max<x4) max=x4;
return max;
}
public int ComputerAIPlace()
{
for(int num=4;num>0;num--)
{
for(int col=0;col<columns;col++)
{
SetPlayer(1,Place(col),col);
if(CalNum(Place(col),col,1)==num)
{
SetPlayer(0,Place(col),col);
return col;
}
SetPlayer(0,Place(col),col);
}
for(int col=0;col<columns;col++)
{
SetPlayer(2,Place(col),col);
if(CalNum(Place(col),col,2)==num)
{
SetPlayer(0,Place(col),col);
return col;
}
SetPlayer(0,Place(col),col);
}
}
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -