山东凯文科技职业学院
Java ME不是太熟悉,不过移动设备和嵌入式设备的开发个人觉得算是比较有意思的领域,最近比较瞩目的业界新闻有一个就是Google发布开源智能手机操作系统开发平台Android,也就是前一阵子炒得很火的GPhone(原来Google出的不是手机,而是一个手机操作系统开发平台)。这个平台貌似会对Java ME有些冲击,按照网上的消息,Android包括:1、高度定制的Linux操作系统内核及智能手机硬件驱动支持;2、经过Google修改过的Java虚拟机Dalvik,这里的性能比SUN的Hotspot高,支持大部分Java核心类库;3、大量智能手机开发核心类库;4、大量现成的智能手机应用软件;5、基于Eclipse的开发环境。也是按照网上的说法,Java EE提供了统一的编程平台,但不能调用操作系统的资源;而Android下直达操作系统,上直达应用软件,如:浏览器、日历、地图等。
Java开发工具很多,个人使用的IDE有Eclipse和NetBeans。Eclispe比较流行,各种插件也多,当然用起来也不错;NetBeans现在也是越做越好了,介绍这两个IDE主要是开源的,当然还有其它工具如JBuilder、IntelliJ、JCreator。这些IDE各有优势劣势,根据你开发的项目来选择了。
4.2 JAVA 编程环境
4.2.1 环境变量
(1)java(TM) SE Development Kits,即JDK。 (2)设置环境变量:
右击 我的电脑->属性->高级->环境变量,这时候可以看到以下的环境变量:Path:系统在任何路径下都可以识别Java命令。
classPath:为Java加载类(包括class,lib)的路径,只有类在classPath中,Java命令才能识别。 JAVA_HOME:Java的安装路径。
这三个变量是必须正确设置的,否则Java命令将可能不会正常运行,具体设置如下: Path: ;C:\\Progran Files\\java\\jdk1.6.0_01\\bin
classpath: .;Progran Files\\java\\jdk1.6.0_01\\lib\\dt.jar;Progran Files\\java\\jdk1.6.0_01\\lib\\tools.jar JAVA_HOME: Progran Files\\java\\jdk1.6.0_01
4.2.2 Eclipse插件
(1) XMLBuddy:编辑xml文件;下载地址为 http://www.xmlbuddy.com。 (2) Fat Jar:打包插件,可以方便的完成各种打包任务,可以包含外部的包等。
(3) Log4E:Log4j插件,提供各种与log4j相关的任务,Log4j专用于为程序输入调试信息。
8
山东凯文科技职业学院
(4) Lomboz:Ecilpse的一个J2EE的插件,可以将很多java应用服务器,J2EE组件和web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立,测试和部署J2ee应用。支持jsp编写,包括语法着色和语法检查:。
(5) MyEclipse:J2EE开发插件,支持jsp,EJB,数据库操作。 (6) TomcatPlugin:支持Tomcat插件。
9
山东凯文科技职业学院
第五章 详细设计
5.1程序设计思路
5.1.1.设计思想
1.本程序要实现五子棋的游戏功能,必须先有一个棋盘,所以,通过继承JPanel,然后在JPanel
上画出一个17*17的棋盘,另外还有三个按钮:重新开局、请黑方下子和请白方下子,提醒用户进行相应的操作。当然,JPanel必须放在JFrame中,所以,又通过继承JFrame得到一个实例。
2.对于下棋的操作,通过对JPanel增加鼠标事件监听器MouseListener,每次当用户点击鼠标
时,先取得点击的坐标值,然后换算成对应棋盘上(即棋盘数组)的位置(数组的下标)。
3.判断此处是否已经有棋子,如果有则提示玩家重新下子,否则通过java里的画图函数在此处
画上棋子,重新刷新输出棋盘。
4.判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更
换玩家下棋。
5.对于玩家的更换是程序自动的,每次用户点击鼠标后,若本局还未结束则会变换玩家,从
而画出对应黑方白方的棋子,直到有一方获胜程序技术。
5.1.2.程序设计分析
1. 本款游戏有“游戏”和“选项”两个选项,其中“游戏”包括开局、重新开始、结束游戏
几个选项;选项里边则包括对弈模式、悔棋、更改背景颜色几个选项,玩家可以根据具体需要选择使用。
2. 绘制棋盘,17条横线,17条竖线,在直线交点处下棋子(实心黑白圆形)。
3. 首先程序会判断对弈模式是人机对弈还是人人对弈模式,若是人机对弈则是玩家先下,玩家是黑方,电脑是白方。若是人人对弈,则是黑方先下,黑白交替下子。
4. 棋盘处于鼠标监听状态,当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标然后换算成对应的棋盘的位置,再判断此处是否有棋子,假如没有,那么在此处画出对应颜色的实心棋子,假如已经有棋子了,则提示玩家此处已经有棋子请重新下棋。
5. 当选择的是人机对弈模式的时候,轮到电脑下子时,电脑会通过算法计算每个没有棋子的位置的重要性来选择最重要的位置下子。 6. 人机对弈算法简介:
本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家
10
山东凯文科技职业学院
棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。 具体的分数值赋值如下: 分数 活二 半活二 死二 半死二 活三 半活三 死三 半死三 活四 半活四 死四 半死四 活五 半活五 死五 半死五 电脑 60 40 10 10 950 900 100 100 6000 5000 4000 3600 20000 10000 20000 10000 玩家 50 35 10 10 700 650 100 100 3500 3000 800 750 15000 3300 15000 3300 解释一下其中的活,半活,死,半死:
活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。
半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。
死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。
半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。
每个位置的分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。
7. 当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方
11
山东凯文科技职业学院
胜利。棋局结束后,任何一方均不能继续操作。 8.程序流程如下图4-1:
图5-1 程序流程图
5.2 程序设计
这个游戏程序包含两个类:
DrawPanel:棋盘类,用于绘画棋盘及棋子。
PlayerVsPC:主程序类,窗口的创建和整个逻辑程序代码。 类DrawPanel代码: package resource;
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D;
import javax.swing.JPanel;
public class DrawPanel extends JPanel{
private int[][] a; private int n,m;
12