贪心策略java实现代码 贪心策略是什么( 五 )


public static boolean IsSurrender;//判断是否认输
public static boolean IsTie;//判断是否认输
public static String Message;//输出提示信息
public static Image IconImage;// 图标
public static Image blackBoard;//白棋盘
public static Image whiteBoard;//黑棋盘
public static Image blackChess;// 白棋棋子图片
public static Image whiteChess;// 白棋棋子图片
public static Image RightPlayer;//白棋棋罐图片
public static Image LeftPlayer;//白棋玩家头像图片
public static String path = "src/";// 图片的保存路径
4.chessButton类
这个是程序的组件类 。定义了各种功能键,完善程序功能,营造逼真的人机对战游戏效果 。分为3类:效果 。。
(1)、按钮组件
本程序有5个按钮 , 支持和棋、认输、新游戏、退出、悔棋等 。认输和和棋按钮终止当前的棋局,给出相应的提示信息;退出按钮调用系统System.exit(0)的函数正常返回;悔棋按钮调用后面要介绍的chessList类实现悔棋;新游戏按钮则刷新当前棋局准备下一轮,要将记录当前棋局的二维数组全部置0,刷新当前棋局开始时间等 。
(2)、单选按钮组件
游戏界面支持设置个性化界面,包括背景颜色与背景音乐,跟重要的一点是设置难度(简单、中等、困难) 。单选按钮只能多选一 。背景颜色主要是存储相关颜色搭配方案的RGB颜色,开2维数组,即对应RGB3原色数组的一维数组,然后通过改变WitchMatch全局变量的值来有用户自己选择颜色搭配,不同的颜色搭配对应不同的背景音乐表达一致的主题 。难度设置主要是改变计算机的下棋算法,不同难度通过Rank判断进入不同的程序分支,实现不同智能等级的计算机下棋水平 。
(3)、文本框
在不同的单选按钮前添加相应的文本框,提示用户可以实现的功能 。同时我用颜色模拟出显示当前棋局耗用时间的文本框 。
不论按钮还是单选按钮都要关联相应的消息 , 把相应功能的实现放在消息响应处理函数理 。这些主要是实现Java库提供的消息响应接口里的方法 。
5.chessPiece类
主要完成当前棋面的存储 , 存储棋面的数据结构为二维数组int[][] PositionFlag;然后定义获取、设置某点以及整个棋面的状态的方法 。
(1)、SetPositionFlag(int x, int y, int flag)//设置(x,y)处的状态为flag
(2)、GetPositionFlag(int x, int y)//获?。▁,y)处的状态
(3)、SetAllFlag(int [][]NewFlag)//设置当前整个棋面的状态为NewFlag
(4)、GetAllFlag()//获取当前整个棋面的状态
(5)、DrawChessPiece(Graphics g)//绘制当前局面的棋子
由于本类比较重要 , 所以附上了代码,见源代码1 。
6.chessBoard类
功能为绘制棋盘线 。由于围棋的棋盘比较复杂,横线、竖线较多,且为了使棋盘美观,还要自定义窗口边框、棋盘边框、对弈双方边框等,对线宽、线型也有一定要求 。有时要单像素线条,有时要多像素线条 。对于多像素线条,我主要用了2种方法 。
方法一:
在需要绘制多像素线条处首先绘制一条单像素线,然后根据线宽要求上下平移适当像素达到绘制多像素的目的 。这样的方法适合绘制水平线或竖直线 , 绘制其他斜率的线条容易造成走样 。在没有想到比较好的反走样编程思想后我选择了调用Java库中已经封装好的函数 。
方法二:
为了克服方法一绘制非水平或竖直线时造成的走样,同时也为了更进一步学习Java语言,我猜想肯定会有类似OpenGL中设置线宽的画刷,于是上网百度找到了相应的画刷Stroke类 。通过Java库实现绘制不同线宽的直线,达到了反走样效果 。

推荐阅读