⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 map.java

📁 模仿Fyrad32编写的四子棋游戏
💻 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 + -