?? 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 + -