第一篇:(骑士游历)JAVA程序设计课程设计报告
目录
一
设计课题名称..........................................................................1 二 设计目的与意义......................................................................1 三
系统描述..................................................................................1 四
运行环境..................................................................................1 五
系统的分析与设计..................................................................1
5.1
创建骑士游历程序......................................................................................................2 5.2
程序的基本组成............................................................................................................3 5.3
程序结构说明................................................................................................................3 5.4
AccessibleSquare算法实现.........................................................................................4 5.5
图形化界面....................................................................................................................5 5.6
主调用程序的设计和开发............................................................................................6 5.7 程序的源程序..................................................................................................................7
六
运行结果..................................................................................14 七
总结..........................................................................................16 八 参考文献....................................................................................19
一
设计课题名称
骑士游历程序的开发 二 设计目的与意义
Java是目前最流行的软件开发语言之一,有Sun Microsystem 公司推出,成为网络上的“世界语”。Java适合开发基于多媒体、与平台无关、面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。Java课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。
三
系统描述
骑士游历问题是一个古老而著名的问题,它最初是由大数学家Euler提出的.问题是这样的:国际象棋中的棋子(叫作骑士)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?(骑士按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格)本程序实现了骑士游历问题的求解,并能够演示起始位置在棋盘上任何位置的游历问题的实现.程序采用动态的图形演示,使算法的描述更形象,更生动,使教学能产生良好的效果.本程序采用Applet来编制整个程序,这样既可以使大家对算法的实现有了一定的了解,也可以熟悉一下Java图形界面, Applet以及Java语言的命名规范.作为本书的第一例子,希望能让大家熟悉Java的基本语言结构和强大的开发能力.在骑士游历的课程设计中,我们严格按照面向对象的思想进行开发,其中有AccessibleSquare 类,MyPanel类和KnightsTour类.读者应注意各个类之间的关系,以便更深入地理解Java中类的思想.四
运行环境
本程序是在windows xp,JBuild 9的环境下运行的.五
系统的分析与设计
此次骑士游历问题,在JBuild 9集成开发环境下完成编写调试等工作.JBuilder是Borland公司开发的针对java的开发工具,使用JBuilder将可以快速,有效的开发各类java应用,它使用的JDK与sun公司标准的JDK不同,它经过了较多的修改,以便开发人员能够像开发Delphi应用那样开发java应用。
JBuilder的核心有一部分采用了VCL技术,使得程序的条理非常清晰,就算是初学者,也能完整的看完整个代码。JBuilder另一个特点是简化了团队合作,它采用的互联网工作室技术使不同地区,甚至不同国家的人联合开发一个项目成为了可能。
Jbuilder 9是功能强大的可视化Java集成开发工具,可以快速开发包括复杂企业级应用系统的各种Java程序,包括独立运行程序、Applet程序、Servlet、JSP、EJB、Web Service等,最新的Jbuilder 9版本支持Sun的J2SE 1.4和J2EE 1.4。使用可视化工具开发程序有很多好处,其中最显著的是能够快速生成程序框架、设计图形界面、调试程序等,此外Jbuilder 9内置了对一些企业级服务器的支持,包括Borland服务器、Bea公司的WebLogic服务器、IBM的WebSphere服务器和iPlanet服务器。Jbuilder 9在以前版本的基础上,增强和增加了许多功能。
JBuilder9的代码预览功能(CodeInsight)可以在编辑器中显示一个与上下文相关的弹出窗口。它可以帮助用户快速、准确地编写Java代码。例如,单击一个对象,马上在相应位置出现其所有的属性和方法等内容,用户可以快速地选择所需要的内容。代码预览功能可帮助用户显示与上下文相关的数据成员与方法列表(MemberInsight)、当前代码中要使用的方法的参数列表(ParameterInsight)、可以通过当前类路径访问的类列表(ClassInsight)、结构窗口中的错误(ErrorInsight)以及在调试时显示变量值及表达式的值。
5.1
创建骑士游历程序
在对Jbuilder9的基本常识有了初步的了解后,就可以起步创建骑士游历程序了。
创建过程如下:
(1)单击桌面图标,启动Jbuilder9开发平台进入一个新的工程界面。
(2)命名新的工程并保存文件,方法是单击菜单FileNew Project,出现一个对话框窗口,将工程名为Knighttour,选择保存工程文件目录之后,单击Finish按钮完成骑士游历工程的创建。
5.2
程序的基本组成
下面着重介绍一下骑士游历程序的界面、程序结构以及程序效果显示图。程序运行的界面上主要包括6个按钮:
(1)Info:帮助信息。(2)Start:开始游历。(3)Stop:停止游历。(4)Exit:退出游历。
(5)NextTour:重新开始一个新的游历。(6)NextMoving:骑士要走的下一步
5.3
程序结构说明
整个程序界面由三部分组成,上方是由Info、Start、Stop和Exit四个按钮的工具栏,可以执行相应的操作;中间是骑士游历效果显示图,动态演示骑士游历的过程;最下边一排是Next Tour和Next Moving两个按钮,单击Next Tour按钮,可重新开始一个新的游历,单击Next Moving按钮,可显示骑士要走的下一步。如图 5-1 所示。(这是骑士在第一个格子起始位置进行游历的情况,如果想在其他位置开始游历,直接单击Next Tour按钮就可以了,程序实现的骑士骑士位置的方式是按照顺序从第一列第一个开始、直到组后一列、最后一行)。
另外,可以由边框颜色的不同,判断骑士初始的位置、上一步所走的位置和现在所处的位置。单击Next Moving按钮可以显示骑士游历的下一步。连续单击直到64个格子全部走完,可以清晰地显示整个游历的过程。图5-2显示的是骑士起始位置在第一个格子的游历的一个中间状态。当然,骑士可以在棋盘的任何位置开始,操作者可以自己运行程序,以获得更深的认识。
图5-1 骑士在第一个格子的请况
图5-2 骑士在第一个格子游历的中间状态
本程序由三个类组成一个工程文件.其中KnightsTour是主类,或者说是控制类, AccessibleSquare类主要是算法实现, MyPanel实现图形化显示结果.程序的运行关系如图5-3.图5-3 程序运行关系图
5.4
AccessibleSquare算法实现
AccessibleSquare类主要是算法实现,采用启发式算法.先把八个可能走的方向用两个数组(horizontal[ ]和vertical[ ])表示出来,选择走哪个方向就在原坐标上进行相应的加法,表示骑士到了一个新的位置.horizontal[ ]和vertical[ ]表示骑士8个方向走L形状所需的X坐标和Y坐标的变化量: horizontal[] = {2,1,-1,-2,-2,-1,1,2}, vertical [] = {-1,-2,-2,-1,1,2,2,1}.坐标图如下: 5 7 8 4 3 2 1
图5-4
骑士游历走向坐标图
(1)
由于程序采用启发式算法,应考察每一方格的可到达性.使用数组accessibility []表示可达到数,并当骑士游历时,程序动态修正剩余格子的可达到数.accessibility [ arrayPos ] = 0 表明格子已经被占据.(2)
使用冒泡法来查询最小数.冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。
5.5
图形化界面
由于目前用户对界面的要求逐步提高,因此,现在的可视化编程已经取代了传统的用户界面的设计方法。而在可视化编程中,人机之间的直接联系主要是通过一些窗口和对话框来实现。JBuilder9也不例外,它也是通过这些窗口和对话框来实现窗体。用户需要的控件则可以直接放置在窗体上,利用这些控件来实现复杂的功能。
用户界面设计器是用户在编写程序过程中最常用到的工具。用户在进行界面设计时,只需单击文件视图标签中的Design页,就会出现该用户界面设计
器。用户可以利用JBuilder提供的各种控件来搭建自己的程序界面。而且同时,JBuilder9还为这些界面自动生成了相应的代码,为用户提供了程序的环境。接下来,就要由用户设置属性,来编写一些实现用户特定功能的代码。这在很大程度上减少了用户界面设计的复杂度,使用户的主要精力投入到如何实现和加强功能上来。
本程序是Applet的图形界面以及如何利用图形用户界面的控件接受用户信息,并用图形或图像显示结果.(1)
MyPanel函数实现图形化显示结果, MyPanel类就是画图类.首先用两种不同颜色的方块(WHITE和BIACK)显示出棋盘,还有其他两种方块(WKNIGHT和BKNIGHT),这两种方块上都有骑士,但颜色不一样.在骑士游历过程中不断用后来两种有骑士的方块代替前两种方块,其中需要注意的是保持棋盘的颜色一致性.如5-3图所示.将其设置为静态变量,方便使用,防止修改时出错.5-5 骑士游历游戏中的棋盘用图
(2)
其次就是要显示骑士起始位置,刚走过的步的位置和现在的位置,用边框的不同来加以区别,采用函数g.setColor(Color.green)(刚走过的步显示为绿色)和g.setColor(Color.biue)(当步显示为蓝色)实现.这个类的对象在主类KnightsTour中被实例化.5.6
主调用程序的设计和开发
KnightsTour类是控制类,它完成对算法类和画图类的调用.由于JAVA的GUI编程是事件驱动的,因此在KnightsTour类中,通过监听前面介绍的几个Button的事件相应,完成程序的调用过程.采用二维数组表示初始位置位于某个位置的可达到数, 即以棋盘任意一点为初试位置,骑士游历完整个棋盘的路径数.利用access[][]数组来表示这个二维数组.{ 2, 3, 4, 4, 4, 4, 3, 2 },{ 3, 4, 6, 6, 6, 6, 4, 3 },{ 4, 6, 8, 8, 8, 8, 6, 4 },{ 4, 6, 8, 8, 8, 8, 6, 4 },{ 4, 6, 8, 8, 8, 8, 6, 4 },{ 4, 6, 8, 8, 8, 8, 6, 4 },{ 3, 4, 6, 6, 6, 6, 4, 3 },{ 2, 3, 4, 4, 4, 4, 3, 2 }};
本程序中在KnightsTour类中添加了两个按钮 JButton nextMoving = new JButton(“下一步”);
JButton nextTour = new JButton(“新起点重新开始”);用于用户对游戏进行操作,这两个按钮分别有事件响应.5.7 程序的源程序
package gao;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.image.*;public class KnightsTour extends JApplet {
// 初始位置位于某个位置的可达到数采用二维数组表示
//即以棋盘任意一点为初试位置,骑士游历完整个棋盘的路径数
public static int access[][] = {
{2,3,4,4,4,4,3,2},{3,4,6,6,6,6,4,3},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{3,4,6,6,6,6,4,3},{2,3,4,4,4,4,3,2}};
public static int accessbak[][] = arrayCopy(access);
int countMoving =-1;
int tourXpos [] = new int [ 64 ];//游历中,X,Y都有64个位置
int tourYpos [] = new int [ 64 ];
private int recordXpos [][];
private int recordYpos [][];
private int recordCount =1){
recordCount ++;
} else { recordCount = 0;}
myPanel.initboard(recordXpos [ recordCount ] ,recordYpos [ recordCount ]);
myPanel.repaint();
}
});//end call to addActionListener
}
public void paint(Graphics g)
{ super.paint(g);
} }//end of class KnightsTour class AccessibleSquares { //骑士8个方向走L形状所需的X坐标和Y坐标的变化量
private static int horizontal[] = {2,1,-1,-2,-2,-1,1,2};
private static int vertical [] = {-1,-2,-2,-1,1,2,2,1};
private int xpos[];//骑士所处X轴的坐标
private int ypos[];//骑士所处y轴的坐标
private int accessibility [];//表示可达到数
private int ownxpos ,ownypos;
private int ownAccessibility;
private int arrayPos;
private int countAccessibility;
public AccessibleSquares(int x , int y){//构造函数
int testXPos;
int testYPos;
xpos = new int [ 8 ];//骑士所处X轴的坐标
ypos = new int [ 8 ];
accessibility = new int [ 8 ];
arrayPos = 0;
ownxpos = x;
ownypos = y;
ownAccessibility = KnightsTour.access[ x ][ y ];
for(int i = 0;i < horizontal.length;i++){//有八种到达的情况
testXPos = x + horizontal[ i ];//得出X,Y坐标的测试位置
testYPos = y + vertical [ i ];
if((testXPos >= 0)&(testXPos < 8)&
(testYPos >= 0)&(testYPos < 8)){//判断测试位置是否在棋盘内
xpos [ arrayPos ] = testXPos;//由测试位置给出正确X,Y坐标
ypos [ arrayPos ] = testYPos;
accessibility [ arrayPos ] = KnightsTour.access [testXPos][testYPos];
//利用对应的X,Y坐标得出相应的可到达的路径总数
// accessibility [ arrayPos ] = 0 表明格子已经被占据
if(accessibility [ arrayPos ] > 0)
arrayPos ++;
}//寻找空格子结束
}// 结束for循环,寻找结束
countAccessibility = arrayPos;//统计可达到数
if(countAccessibility > 0)
{sortAll();}
arrayPos =-1;
}
public boolean hasMoreAccessible(){
// arrayPos + 1 指向下一个可行的
if((arrayPos + 1)< countAccessibility){
return true;} else { return false;}
}// hasMoreAccessible()方法结束
public AccessibleSquares nextAccessible(){
arrayPos ++;
return this;
}
public AccessibleSquares accessibleAt(int pos){
if((pos >= 0)&(pos < countAccessibility))
arrayPos = pos;
return this;
}
public int getXpos(){
return xpos[ arrayPos ];
}
public int getYpos(){
return ypos[ arrayPos ];
}
public int getAccessibility(){
return accessibility[ arrayPos ];
}
public int getTotalAccessible(){
return countAccessibility;
}
//冒泡排序法.冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。
private void sortAll(){
for(int begin = 0;begin < countAccessibility1){
displayCount ++;
chessboard [ xrecord [ displayCount ] ][ yrecord [ displayCount ] ] += 2;
repaint();
}
}
public void paintComponent(Graphics g){
//用于显示运行时态的颜色
for(int row = 0;row < 8;row ++){
for(int column = 0;column < 8;column ++){
images[ chessboard[ row ][ column ] ].paintIcon(this , g, 40 * row,40 * column);
}//end of inner for
}//end of outer for
if(displayCount > 0){
lastxpos = xrecord [ displayCount 1];
nextxpos = xrecord [ displayCount ];
nextypos = yrecord [ displayCount ];
g.setColor(Color.green);
g.drawRect(40 * xrecord [ displayCount1 ] + 2, 36, 36);
g.setColor(Color.green);//刚走过的步显示为绿色
g.drawRect(40 * xrecord [ displayCount ] + 2 ,40 * yrecord [ displayCount ] + 2, 36, 36);
g.setColor(Color.blue);//当前步显示为蓝色
g.drawRect(40 * Math.min(nextxpos, lastxpos),40 * Math.min(nextypos, lastypos),(Math.abs(nextxposlastypos)+ 1)* 40);
}//end of if
g.setColor(Color.red);//起始位置显示为红色
g.drawRect(40 * xrecord [ 0 ] + 2,40 * yrecord [ 0 ] + 2, 36, 36);
}// end of the method paintComponent }
六
运行结果
程序能正常运行,并得出正确的结果,其运行结果如下.图 6-1骑士游历游戏进入界面
图 6-2骑士游历游戏以(1,1)为起点运行图
图 6-3骑士游历游戏以(6,3)为起点
图 6-4 骑士游历游戏以(6,3)为起点运行图
七
总结
这一周的java课程设计,我收获了很多,学到了很多知识,同时也发现了自己许多的不足。
通过骑士游历程序的设计,初步熟悉了Jbuilder集成卡发环境的使用,让那个我熟悉了如何在Jbuilder下开发应用程序、程序设计的基本步骤等,另外熟悉了Java环境下图形用户界面的编程,为后续工作打下了基础。
虽然这个课题是所有的课题中最简单的,按照参考书上的程序可以得出正确结果.但是要了解所有程序的思路并不是一件很轻松的事情,在准备添加功能的时候,突然发现在菜单栏内的四个按钮不能更改,而且程序中也没有相关代码控制它,于是开始千方百计的对程序进行修改.但到最后仍没收获,请教了老师后才知道问题出在哪里.在JBuild9的开发环境中,在建立Application类型的文件时,如果其最后一项中的”Create a runtime configuration”没被选中的话(见图7-1),则不会出现菜单
栏中的”Info”,”Start”,”Stop”和”Exit”四个按钮(见图7-2).图7-1
JBuild9 新建Application文件截图
图7-2 无自动菜单栏的运行图
不找出问题的根本,就无法理解自己获得的是什么,在一个星期的课程设计中,我将掌握的专业理论知识很好地运用到对这个课题的理解中.做到了理论和实践相结合,在实践中加深了对专业理论知识的理解,并提升了对理论知识的运用能力,获得了许多宝贵的经验。
这个课程设计的顺利完成,离不开刘国清老师的指导和帮助,在他的细心指导和帮助下,我对骑士游历程序的开发的整个流程有了深刻地了解和系统
地掌握.通过这个星期的课程设计,我们更加理解了小组合作的重要性。真正理解了作为一个计算机学习者不仅仅要学好计算机知识,同时也要与自己的搭档配合,共同克服困难.骑士游历课程设计是我和同学一起探讨,最后慢慢理解的,所以说不管有什么样的困难,团队的合作都能把问题一一解决。总之,这次的课程设计让我受益匪浅。
八 参考文献
[1] 黄晓东等.Java课程设计案例精编(第2版)[M].北京:中国水利水电出版社,2007
[2] 李尊朝 苏军.JAVA语言程序设计[M].北京:中国铁通出版社,2007.10 [3] 李明 袁晓君.Java计算机语言函数应用[M].北京:科学出版社,2000
第二篇:课程设计《JAVA程序设计》任务书.
《 JA V A 程序设计》课程设计任务书 一.课程设计基本信息
课程名称:《JAVA 程序设计》课程设计 学时:1周 学分:1学分
二.课程设计目的与要求
1.教学目的:本课程是学习《 Java 程序设计》后的综合实践课,使学生能够比较深入的理解 Java 语言的特征及体系;熟练的掌握并会运用 Java 语言与面向对象程序设计的思想和方法设计应用程序解 决应用问题,积累程序设计的实践经验,为培养软件技术高技能人才奠定基础。
本课程是培养计划中综合性较强的实践教学环节之一, 帮助学生掌握教学内容、培养学生运用知识 解决应用问题的实际动手能力、提高学生综合素质有很重要的意义。
2.教学要求:本课程设计以设计一个或多个实际应用系统为目的,通过课程设计让学生较全面的 掌握 Java 语法基础知识、面向对象程序设计方法, 尤其是基于 Java 的应用程序设计的方法与技术, 能 够运用 J2SE平台,结合相应的数据库系统开发应用程序,理论联系实际,达到培养实践操作技能的目 的。
学生要了解 Java 程序开发的一般过程,特别掌握系统分析与设计的基本方法,写出系统分析与设 计报告,并能设计真实可用的应用系统。
三.课程设计内容与安排
根据老师提供的设计题目, 写出系统分析与设计报告, 并建立原型系统。题目可以由教师与学生根 据实际情况商定,可参考的题目:图书借阅管理系统、产品管理
系统、学生成绩管理、学生信息管理、人事管理、人力资源管理系统、物流信息管理系统等。
1.主要设计内容如下:(1系统设计:包括系统需求分析、总体设计和功能设计,必要时使用图表说明。(2数据库设计与实现:包括数据库的需求分析、数据库的概念结构设计和数据库的逻辑设计。
(3系统各模块设计:包括用户界面及相应功能算法等程序设计。2.教学安排
总课时 30课时,其中需求分析与系统设计、数据库设计与实现、系统各模块实现所以及系统集成 调试运行用时间建议各占 15%,15%,40%,20%的课时, 学生可根据具体情况调整, 利用 10%的时间完成课 程设计报告。
四.课程设计教学建议及要求
1.要求学生有一定的程序设计和数据库基础知识,由老师指定或学生自行组织形成项目小组,必 要时由多人开发一个项目, 其中需要指定负责项目的小组长控制项目进度。每个小组的项目开发过程应 该遵从项目管理规范。
2.严格要求每个学生按照规定时间进行设计,禁止无故迟到和旷课。3.要求学生有自我学习的能力,遇到问题要学会自我解决。
4.要求设计的界面美观、合理、便于操作等,功能与实际应用系统紧密联系,系统结构合理构思 巧妙、模块化程度高等。
五.课程设计成绩评定
课程设计成绩由学生的出勤情况和程序设计情况各分别占 10%和 90%组成。程序的考核从界面、功 能实现、创新性、问题回答和课程设计报告等几方面进行。
考核内容和比重表(参考
考核内容 出勤 界面 功能实现 创新 问题回答 设计报告 比重 10%15%30%15%10%20% 六.课程设计报告撰写与提交
1.课程设计报告格式见本文后面所附 “课程设计报告模板” , 课程设计报告最终以电子稿形式提交, 如需打印另行通知。在课程设计正文中使用图表时, 所有的图必须有图号和图题, 所有的表必须有表的 名称和编号。
2.对课程设计报告正文内容的提示说明如下:(1摘要(100-150个字: 主要包括设计内容、方法和结果,最后列出报告中用到关键字。(2课程设计介绍(要求 400-600个字: 对课程设计内容做综述,介绍课程设计的目的和要求等内容。同时对课程设计小组成员构成 进行介绍,并说明自己在整个课程设计中将承担的任务。
(3系统设计(要求 600-800个字: 主要介绍完成系统需求分析、总体设计和功能设计。必要时利用图表说明。(4数据库设计与实现: 主要介绍数据库的需求分析、数据库的概念结构设计和数据库的逻辑设计。数据库设计应利 用图表说明。
(5系统各功能模块设计(字数根据实际情况而定 : 主要介绍系统各功能模块的界面设计及相应的功能程序设计。对于界面设计应的描述界面中所
使用的相应的组件列表,包括组件类别、组件 ID 值、组件作用等。同时应附相应界面设计状 态的界面截图和相应的运行界面截图。如果涉及多个功能模块,则应分别描
述。
(6课程设计总结和体会
主要对课程设计所做的工作进行总结, 同时描述课程设计后的体会, 包括专业技术方面的体会 和职业能力和职业意识方面的体会。另外对课程设计内容中存在的不足和改进意见进行阐述。(7致谢
在课程设计过程中,如果得到他人的帮助,则不要忘记致谢。(8参考文献
要列出在课程设计过程中用到的主要参考文献和站点。虽然看过, 但没有用到的文献或站点则 不必列出。参考文献要与报告正文关联,要不少于 4项。
(9附录:带注释的程序清单
源程序清单只写关键程序要有注释。注释是功能性的注释,而不须要对语句或命令本身进行 注释。
Java 课程设计参考题目
1、编写一个记事本程序 要求:
用图形用户界面实现。
能实现编辑、保存、另存为、查找替换等功能。提示:使用文件输入输出流。
2、模拟龟兔赛跑 要求: 用图形用户界面实现。
能设置比赛时间,马匹的数量等等。在任意时间段内马匹的速度是随机的。开始比赛之后以动画显示赛马过程。提示:使用多线程
3、学生信息管理系统 要求: 使用图形用户界面
用数据库建立 1或 2个学生信息表。(可以使用 txt 文件代替数据库 能连接数据库并实现查询、增、删、改等功能。
4、聊天小程序 要求: 使用图形用户界面。
能实现一个聊天室中多人聊天。
可以两人私聊。提示:使用 socket 通信
5、ATM 柜员机模拟程序
要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为 123456 时, 系统能登录 ATM 柜员机系统,用户可以按照以下规则进行:
1、查询余额:初始余额为 10000元
2、ATM 取款:每次取款金额为 100的倍数,总额不超过 5000元,支取金额不允许透支。
3、ATM 存款:不能出现负存款。
4、修改密码:新密码长度不小于 6位,不允许出现 6位完全相同的情况,只有旧密码正确,新密码符 合要求,且两次输入相同的情况下才可以成功修改密码。
6、实现数据结构中二叉树的遍历演示过程 要求:使用图形用户界面
实现二叉树的前序遍历、中序遍历、后续遍历、按层遍历的算法的演示过程。动画演示尽量与程序执行 同步,人机交互、适于教学。
7、超市收银系统 要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡、所购商品的货号等。从数据库中取出有关价格信息,再把
这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情 况交数据库存储以供查询。
另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满 200元,可为其发放一张会员卡,以后在该商场购物可向 9折优惠。
8、万年历
要求:使用图形用户界面。
实现日期与星期的查询,其他功能自定义。
9、五子棋游戏 要求:使用图形用户界面 实现两人游戏,能够判断输赢
有 “ 开始 ” 按钮,当选择完棋盘大小后,按此按钮进入对战状态。当有胜利者(垂直、水平、对角线连续 5子 ,显示对话框,提示谁(黑还是白胜利了。若当棋盘满了还无胜利者,显示平局对话框。界面 上还要有 “ 复盘 ” 按钮,可对完成的棋局进行复盘,例如每 3秒走一步。
10、日历记事本
要求:带有日程提醒功能的日历。
1、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
2、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时 间相吻合时,给出具有提示信息的对话框。
3、查询信息:用户可以查询到某个月的所有的提示信息。
11、电子英汉词典
要求: 能够编辑词典库中的信息
能够实现英译汉,汉译英。(要考虑一词多义
12、计算器小程序 要求:使用图形用户界面
能在键盘或鼠标上读入数据,并完成加。减。乘。除计算。在屏幕上显示一个主菜单。提示用户输入 相应的数字键,分辨执行加。减。乘。除计算功能和结束程序的功能。
13、图的最小生成树算法过程演示 要求:使用图形用户界面
使用菜单显示普利姆和克鲁斯卡尔最小生成树的动画实现过程, 动画与算法的实现尽量同步实现, 便于 人机交互和教学。
14、加密与解密 要求:采用图形用户界面
1、给定任意一个文本文件,进行加密,生成另一个文件。
2、对加密后的文件还原。
15、小游戏 要求:。
程序随机产生 20— 50根火柴,由人与计算机轮流拿,每次拿的数量不超过 3根,拿到最后一根为胜。(使用图形界面
16、敏感词汇分析 要求: 任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在 sentive.txt 文件中,每个词 占一行 ,报告每个词出现的次数。
17、基数排序过程动画演示 要求:使用图形用户界面
基数排序算法的实现过程参照《数据结构》教材,动画效果强。可以采用最高位优先算法实现,也可以 采用最低位优先算法实现,人机交互、便于教学。
课程设计时间安排 序 号
时 间 实习主要内容 实习地点 指导教师
1星期一 上午 概要设计:确定项目的实施方案、设 计程序模块连接图、完成模块功能描 述
实训室 刘延岭
2星期一 下午 总体设计:设计程序流程图,完成数 据库设计、方法设计
实训室 刘延岭 3星期二 上午 详细设计:实现系统功能 实训室 刘延岭 4星期二 下午 详细设计:实现系统功能 实训室 刘延岭 5星期三 上午 详细设计:实现系统功能
实训室 刘延岭 6星期三 下午 详细设计:实现系统功能 实训室 刘延岭 7星期四 上午 系统功能完善,整合测试 实训室 刘延岭 8星期四 下午 撰写设计文档 实训室 刘延岭 9星期五 上午 撰写设计文档 实训室 刘延岭 10星期五 下午 检查验收 实训室 刘延岭
计算机与信息工程系
《 JAVA 程序设计》课程设计(字为黑体四号粗 课程设计题目(黑体二号粗 专业 计算机 班级 1001班 学号 02 姓名;刘腾帅 E-Mail 电话 *** 时间
(字为黑体四号粗 承德石油高等专科学校(字为楷体四号粗
(报告正文为宋体,多倍行间距:1.25倍 摘要:(四号粗
内容(小四号字
关键字:(小四号粗 内容(小四号字 1.课程设计介绍(四号粗
对课程设计内容做综述,介绍课程设计的目的和要求等内容。同时对课程设计小组成 员构成进行介绍,并说明自己在整个课程设计中将承担的任务。2.系统设计(四号粗 内容(小四 2.1需求分析 2.2总体设计 2.3功能设计
3.系统各功能模块设计(四号粗(注:必要时应分模块(页面描述 内容(小四
4.1界面设计(必要时使用用户组件 4.2功能实现
4.课程设计总结和体会(小四号粗 内容(小四 5.致谢(四号粗 参考文献(四号粗
内容(小四内容如下例所示:
小四
([1]博彦科技.编程高手 J2EE.北京大学出版社,2000.94-97 [2]http://www.xiexiebang.com/learning/lesson/xinxi/20030401/lesson.asp 附录(注:另起一页
1.xx 功能模块(页面相关事件或方法程序清单(1 xx 事件或方法(2 xxxxxxxxxxxx 2.xx 功能模块(页面相关事件或方法程序清单(1xx 事件或方法(2 xxxxxxxxxxxx 成绩评定
出勤情况(10分 界面设计(15分 功能实现(30分 创新点(15分 答辩情况(10分 设计报告(20分 设计评语
指导教师
第三篇:《Java程序设计课程设计》教学大纲1
《Java程序设计课程设计》教学大纲
Java Programming Course Design
课程代码: I1101Y09
课程总周数:
2-4
学
分:
课程性质:
必修
课程类别:
集中实践环节
先修课程:
《 Java程序设计 》
面向专业:
信息管理与信息系统
开课单位 :
经济与管理学院
执
笔:
审
校:
一、课程设计的地位与任务
《Java程序设计课程设计》是信息管理与信息系统专业必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。
二、课程设计的内容和基本要求
1、内容:设计题目需要在老师课堂上演示的程序基础上增加1-9个功能。
2、要求:
(1)学生两到三人组成一组,每组必须独立完成设计任务,严禁抄袭或找人代做等行为,一经发现成绩以不及格计。
(2)课程设计期间要严格遵守学习纪律,遵守作息时间,不得迟到、早退和旷课,课程设计期间缺勤1/3以上者,成绩以不及格记。
(3)课程设计报告每组学生上交一份课程设计报告打印稿(A4双面打印)。每班以班级为单位交一张刻录光盘,并且将光盘内容每班学委打个压缩包发老师邮箱。
该光盘包括每组的文件夹,其中包括每组的设计报告内容以及每组独立开发的软件。每组的文件夹命名规则为“组长名字_组员1名字_组员2名字”)。注意:光盘要有封皮,注明班级、小组总数,一起上交。
三、教学安排与教学方法
依照教学计划,课程安排在2或4周内完成,共32学时。1.复习过去所学主要内容(8学时)
2.系统分析,主要核心功能及代码设计(8学时)3.剩余功能代码实现、编程调试(12学时)4.完成课程设计报告(4学时)
四、考核方法及成绩评定
1、考核类别:考查
2、考核形式:平时成绩(20%)、课程设计报告及软件验收(80%)。
3、成绩评定:百分制,100分满分,低于60分为不及格。
五、推荐教材与主要参考书 推荐教材
1、梁勇 :《Java语言程序设计 基础篇(原书第8版)》,机械工业出版社,2012;
2、梁勇 :《Java语言程序设计 进阶篇(原书第8版)》,机械工业出版社,2012。
主要参考书
1、[美]塞若,[美]贝茨:《Head First Java(中文版)》,中国电力出版社,2007;
2、[美]埃克尔:《Java编程思想(第4版)》,机械工业出版社,2007;
3、[美]史蒂芬.约翰.梅特斯克:《Java设计模式(第2版)》, 电子工业出版社,2012。
第四篇:《Java语言程序设计》课程设计指导书
《Java语言程序设计》课程设计指导书
一、教学目标
《Java语言程序设计》是计算机类专业和信息安全专业的专业课。Java语言是目前广为流行的面向对象程序设计语言,适用于网络编程,满足Internet上软件开发的需要。因此本课程是一门概念性和实践性都很强的专业课程。本课程从基本程序设计流程出发,逐步过渡到面向对象的程序设计方法,由浅入深地讲解面向对象的编程思想。
java课程设计是巩固所学理论知识、提高程序设计能力的重要实践环节。通过课程设计的训练,使学生能够综合应用Java的基础知识和基本方法,体会软件设计的全过程,编写出高效率的应用程序,培养学生的数据处理能力,提高软件设计能力,从而为今后进行系统软件和应用软件的开发研究打下坚实的基础,并倡导刻苦钻研的精神和严谨的治学作风。
二、教学要求
课程设计要求每位学生熟练运用Java语言,按照面向对象程序设计思想,独立编制一个略具规模、中等难度的应用程序。调试通过并写出课程设计报告,课程设计报告包括题目说明、题意分析、设计目的、设计特点、功能说明、主要功能程序段、运行结果及结果分析、编程经验、设计体会、存在问题及解决方法等。
三、课程设计题目
课程设计课题分推荐课题和其它课题:
推荐课题:javaweb开发的管理系统(图书查询系统、汽车租赁系统、仓库管理系统、人事管理系统等)
其它课题:javaswing开发的游戏、工具、管理系统 俄罗斯方块、5子棋游戏、扫雷、模拟考试系统
2、设计要求
⑴ 独立编制一个略具规模、中等难度的应用程序。
⑵ 调试通过并写出课程设计报告,课程设计报告包括题目说明、题意分析、设计目的、设计特点、功能说明、主要功能程序段、运行结果及结果分析、编程经验、设计体会、存在问题及解决方法等。
四、主要开发工具
Javaweb相关工具
五、课程设计报告要求
1.封面:按下面所给的格式填写 2.正文要求如下:(1)题目说明;(2)题意分析;(2)设计目的;(3)设计特点;(4)功能说明;(5)主要程序段;
(6)运行结果分析以及测试结果(7)存在问题解决方法
(8)结束语(设计收获体会)3.报告正文格式要求: ·大标题三号加粗 ·小标题四号加粗 ·正文宋体小四号字
·每个自然段开始空两格.·文中英文用新罗马(time new roman),四号
4.其他要求:字数5000字
六、提交的材料
(一)、程序(电子版)
(二)、程序设计说明书(打印)
七、课程设计成绩评定
平时出勤及表现: 10% 课程设计完成情况,难度等级60% 课程设计报告、文档资料:30%
1、期末成绩评定
实习成绩 = 实际操作、调试和测试(效果)+ 设计报告 +平时表现。
2、评定标准
(1)严格控制95分,其标准是有创意;(2)90分以上,必须全部正确;(3)有少许错误,可给80—89;(4)错误不多,可给60—79;
注:如甲、乙有拷贝、复印等抄袭现象,甲、乙均按0分处理。
第五篇:Java程序设计报告
楚雄师范学院
2015年春季期末Java程序设计报告
项目名称:基于Java平台开发的五子棋程序设计
学 院: 物理与电子科学学院
专 业:电子信息科学与技术
班 级:2 0 1 3 级 电 信 一 班
组员姓名:杨邦桂 许勇 董俊宏 课程教师: 程 满
目录
引言...........................................................................................................................................4 第一章 设计目的和要求.........................................................................................................4 第二章JAVA语言概述.........................................................................................................4 2.1 JAVA简介........................................................................................................................4 2.1.1 JAVA的基本特点.....................................................................................................4 2.2 JAVA工具
JDK............................................................................................................5 第三章 程序的设计思路和算法.............................................................................................5 3.1 人机博弈的要点............................................................................................................5 3.2 五子棋特点及规则......................................................................................................5 3.3 设计思路......................................................................................................................6 3.3.1...................................................................................................................................6 第四章 测试及运行效果.........................................................................................................6 4.1棋盘系统主界面.............................................................................................................6 4.2下期博弈过程界面.........................................................................................................7 4.3黑方赢的结果.................................................................................................................7 4.4白方赢的结果.................................................................................................................8 第五章 设计体会与总结.........................................................................................................9 附录.........................................................................................................................................10 源程序代码及简要说明:.................................................................................................10
引言
随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。
网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。
第一章 设计目的和要求
1.1 实现一个简单的五子棋游戏程序,包括如下两个界面:(1)对弈及角色(黑方先落棋)。
(2)在游戏界面,有游戏栏(开局、悔棋、退出),帮助栏; 显示区;棋盘区。1.2在实际系统中使用、实现人工智能的相关算法
1.3进一步加深对人工智能算法的理解
第二章JAVA语言概述
2.1 JAVA简介
JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。
2.1.1 JAVA的基本特点
(1)简单性
Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。
(2)面向对象
Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。
(3)多线程
多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。
(4)分布性
Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。(5)体系结构中立
Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。
(6)安全性
用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
2.2 JAVA工具
JDK
(1)Java编译器
Java编译器将Java源代码文件编译成可执行的Java字节码。Java源代码文件的扩展名为.java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。
(2)Java解释器
Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。
第三章 程序的设计思路和算法
3.1 人机博弈的要点
人机对弈的程序,至少应具备以下5个部分:
(1)某种在机器中表示棋局的方法,能够让程序知道博弈的状态。(2)产生合法走法的规则,以使博弈公正地进行,并可判断人类对手是否乱走。(3)从所有合法的走法中选择最佳的走法技术。(4)一种评估局面优劣的方法,用以同上面的技术配合做出智能的选择。(5)一个界面,有了他,这个程序才能用。
3.2 五子棋特点及规则
五子棋的娱乐性强、规则简单、易学、流行性广。普通人不需长时间专门训练即可自如行棋。因此极受大众欢迎。五子棋的规则为:
(1)棋盘
采用像围棋盘一样的15路或19路线的棋盘,在此采用19路的棋盘。
(2)下法
两人分别执黑白两色棋子。轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。
(3)输赢判断
黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。
(4)特殊规定
职业五子棋虽然对黑棋采取了种种限制,但黑子先行的优势依然很大。因此,在高段位的职业比赛中,又出现了三种特殊的规定。
a.指定打法:是指比赛双方按照约定好的开局进行对弈,由白棋先行。
b.三手可交换:是指黑棋下盘面第3手棋后,白方在下第四手之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。
c.五手两打法:是指黑棋在下盘面上关键的第5手棋时,必须下两步棋,让白棋在这两步棋中拿掉一粒棋子,然后再继续对弈。一般说来,白棋肯定拿掉对白方不利的一点,而保留对黑方较为不利的那点让黑方行棋。3.3 设计思路
3.3.1开始——下棋——判断输赢——结束游戏或重新再来——退出。
1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。2.编写一个功能判断落子的位置及画出相应的黑白棋子。3.判断胜负
第四章 测试及运行效果
4.1棋盘系统主界面
图4-1初始化棋盘效果,玩家为黑棋 4.2下棋博弈过程界面
图4-2黑白棋博弈
4.3黑方赢的结果
图4-3黑方胜利界面
4.4白方赢的结果
图4-4白方胜利界面
第五章 设计体会与总结
Java编程最强大的地方不是它是容易学,或者难学,而是它拥有一个强大的库。JAVA是一个完全面向对象的语言,JAVA的命名规则是很容易让人接受的。而且容易被编程人员记住。经过实践训练,对JAVA的综合应用能力有了较大的提高,另外对JAVA的特点有了更深层次的认识。这次实践中使用的代码虽然不长,但类与类之间也有很强的逻辑关系,这就是面向对象语言的最大优势,这样可使我们更轻松的运用JAVA。
经过努力,查阅相关资料,终于完成该课题,虽然效果不是很好,但亲手做过之后还是很有成就感的。
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用Eclipse开发平台有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。
附录
源程序代码及简要说明:
import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Timer;import java.util.TimerTask;import java.lang.Thread;public class WZQ_2008 extends Frame implements ActionListener { Timer t=new Timer(true);//Thread mt=new MyThread(this);MenuBar mb=new MenuBar();Menu myx=new Menu(“游戏”);Menu mbz=new Menu(“帮助”);MenuItem mikj=new MenuItem(“开局”);MenuItem mihq=new MenuItem(“悔棋”);MenuItem mitc=new MenuItem(“退出”);MenuItem migy=new MenuItem(“关于”);int x=0;int y=0;String stb=“五子棋游戏
请黑方落子”;String stw=“五子棋游戏
请白方落子”;boolean isBlack=true;String str=“Game Over”;boolean over=false;int count=0;int jj=30;int r=25;String str1;int [][]date=new int[15][15];
int i=0;public WZQ_2008(){
this.setMenuBar(mb);
mb.add(myx);
mb.add(mbz);
myx.add(mikj);mikj.addActionListener(this);mikj.setEnabled(false);myx.add(mihq);mihq.setEnabled(false);mihq.addActionListener(this);myx.add(mitc);mitc.addActionListener(this);mbz.add(migy);migy.addActionListener(this);this.setTitle(stb);this.setBounds(100,100,485,500);this.setBackground(new Color(206,148,49));this.setResizable(false);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });this.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){
if(over)
{
return;
}
x=(e.getX()-30+jj/2)/jj;
y=(e.getY()-60+jj/2)/jj;
if(x<0||x>14||y<0||y>14)
{
return;
}
if(date[x][y]!=0)
{
return;
}
if(isBlack)
{
setTitle(stw);
date[x][y]=1;
}
else
{
setTitle(stb);
date[x][y]=2;
}
mikj.setEnabled(true);
mihq.setEnabled(true);
isBlack=!isBlack;
pd();
repaint();
} });this.setVisible(true);
} public void pd(){ int xq=0,xz=14;int yq=0,yz=14;if(x-4>0){
xq=x-4;} if(x+4<14){
xz=x+4;} if(y-4>0){
yq=y-4;} if(y+4<14){
yz=y+4;} pdh(xq,xz);count =0;pds(yq,yz);count=0;pdfx(xq,xz);count=0;pdzx(xq,xz);} public void pdzx(int xq,int xz){ for(int i=xq;i<=xz;i++){
if(y+x-i<0)
{
break;
}
if(y+x-i>14)
{
continue;
}
if(date[i][y+x-i]==date[x][y])
{
count++;
isOver();
}
else
{
count=0;
} } } public void pdfx(int xq,int xz){ for(int i=xq;i<=xz;i++){
if(y-x+i<0)
{
continue;
}
if(y-x+i>14)
{
break;
}
if(date[i][y-x+i]==date[x][y])
{
count++;
isOver();
}
else
{
count=0;
} }
} public void pds(int yq,int yz){ for(int i=yq;i<=yz;i++){
if(date[x][i]==date[x][y])
{
count++;
isOver();
}
else
{
count=0;
} } } public void pdh(int xq,int xz){ for(int i=xq;i<=xz;i++){
if(date[i][y]==date[x][y])
{
count++;
isOver();
}
else
{
count=0;
} } } public void isOver(){ if(count==5){
over=true;
if(date[x][y]==1)
{
str1=“黑方胜利”;
}
else if(date[x][y]==2)
{
str1=“白方胜利”;
}
//mt.start();
//for(int i=0)
t.schedule(new MyTimer(this),100,500);
this.repaint();} } public void actionPerformed(ActionEvent e){ if(e.getSource()==mikj){
mikj.setEnabled(false);
mihq.setEnabled(false);
for(int i=0;i { for(int j=0;j { date[i][j]=0; } } isBlack=true; this.setTitle(stb); over=false; this.repaint();} if(e.getSource()==mihq){ mihq.setEnabled(false); date[x][y]=0; if(isBlack) { this.setTitle(stw); } else { this.setTitle(stb); } isBlack=!isBlack; this.repaint();} if(e.getSource()==mitc){ this.dispose();} if(e.getSource()==migy){ new MyAbout(this);} } public void update(Graphics g){ paint(g);} public void paint(Graphics g){ Image ii=this.createImage(485,500);Graphics gg=ii.getGraphics();paintBuffer(gg);g.drawImage(ii,0,0,this);} public void paintBuffer(Graphics g){ for(int i=0;i<15;i++){ g.drawLine(30,60+i*jj,30+14*jj,60+i*jj); g.drawLine(30+i*jj,60,30+i*jj,60+14*jj);} for(int i=0;i for(int j=0;j { if(date[i][j]==1) { g.setColor(Color.BLACK); } else if(date[i][j]==2) { g.setColor(Color.WHITE); } else { continue; } //抗锯齿,使绘画出来的图形更圆滑 Graphics2D g2d=(Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g.fillOval(30-jj/2+i*jj,60-jj/2+j*jj,r,r); } } if(over) { g.setColor(Color.GRAY); g.setFont(new Font(“楷体”,3,70)); g.drawString(str,45,250); g.drawString(str1,48,350); g.setColor(Color.RED); g.setFont(new Font(“楷体”,3,70)); g.drawString(str,50,253); g.drawString(str1,60,353); mihq.setEnabled(false); } } public static void main(String[]args){ new WZQ_2008(); } } class MyAbout extends Dialog { Button bok=new Button(“确定”);public MyAbout(WZQ_2008 wzq){ super(wzq,“百纳科技五子棋”,true); this.add(bok); bok.setBounds(180,250,60,20); this.setLayout(null); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } }); bok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); this.setBounds(100,100,400,300); this.setResizable(false); this.setVisible(true);} public void paint(Graphics g){ Image ii=new ImageIcon(“about.jpg”).getImage(); g.drawImage(ii,0,0,this);} } class MyTimer extends TimerTask { WZQ_2008 wzq;boolean b=true;public MyTimer(WZQ_2008 wzq){ this.wzq=wzq;} public void run(){ if(!wzq.over) { return; } if(b) { wzq.str=“Game Over”; } else { wzq.str=“"; } b=!b; wzq.repaint(); wzq.i++; if(wzq.i==11) { cancel(); wzq.i=0; } System.out.println(wzq.i);} } /*class MyThread extends Thread { WZQ_2008 wzq;boolean b=true;public MyThread(WZQ_2008 wzq){ this.wzq=wzq;} public void run(){ if(!wzq.over) { return; } if(b) { wzq.str=”Game Over“; } else { wzq.str=”"; } b=!b; wzq.repaint();} }*/