java课程设计报告五子棋.docx
《java课程设计报告五子棋.docx》由会员分享,可在线阅读,更多相关《java课程设计报告五子棋.docx(29页珍藏版)》请在冰豆网上搜索。
java课程设计报告五子棋
第一章软件平台……………………………
游戏设计思路…………………………
第二章小游戏五子棋的开发过程………………
第一节JAVA基础知识………………………
第二节启动程序的分析……………………
第三节游戏设计过程………………………
第三章总结…………………………………………
第四章参考文献……………………………………
第五章附录…………………………………………
第一章
游戏设计思路:
第二章
第一节java程序基础知识
本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。
不同的类和包提供的方法、类型等都不同,本程序还使用了继承。
以至使其能够完成不同的功能。
本节主要讲述本系统所使用的基础知识。
1、类的基础
<1、类的定义
JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。
类是java程序中最小的组成单位。
<2、Java中类定义的格式为:
[类修饰符]class类名[extends基类][implements接口]
{//成员变量声明(Membervariabledeclaration)
//成员方法声明(Membermethoddeclaration)}
其中,class、extends和implements都是Java的关键字。
类修饰符、extends和implements是关于修饰符、继承和接口的内容。
2、继承
继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。
Java语言中,所有的类都是直接或间接的继承java.lang.object类而得到的。
被继承的类称为基类或父类,继承而的来的类成为子类。
子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。
Java不支持多重继承。
即一个子类不能拥有两个或以上的父类。
3、包
<1、包的定义
在Java中,把相关的代码组织到一起,称为“包”。
包市一种将相关类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。
<2、包的语法及导入:
PackagePackageName;//包的定义
Importjava.awt.Color//导入包关键字Import
4、接口
<1、接口的定义
Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用是使得处于不同层次上以至于互不相干的类能够执行相同的操作,引用相同的值,而且在一个类中可以同时实现来自不同接口中的多种方法。
<2、接口的定义和实现
Interface接口名{//抽象方法}//定义接口
Class类名implements接口名称{//类体}实现接口
5、线程
<1、线程的定义
即同时执行多个程序段,每个程序段都是一个线程。
<2、线程的周期
线程的周期包括新建(new)、就绪(start())、执行(run())、阻塞(sleep()、wait()、suspend()、输入/输出流中发生线程阻塞)、死亡(stop()、destroy())。
创建线程的方法:
一种是创建Thread类的子类。
另一种是实现Runnable接口.而本系统采用的是接口的方式。
6.Applet小应用程序
<1、小应用程序与应用程序的区别:
小应用程序没有主方法不能单独运行。
而应用程序是拥有主方法的是可以单独运行的。
<2、Applet的执行方式
它有两种:
一种是浏览器中执行,另一种是使用Appletviewer()命令执行。
本系统的两个小应用程序都是采用编制html以浏览器形式执行。
<3、Applet主类的一般框架结构图
Importjava.awt.*;
Importjava.applet.*;
Publicclass类名extendsApplet{
Publicvoidinit(){//初始化变量、设置字体、装载图片}
Publicvoidstart(){//启动程序执行或恢复程序执行}
Publicvoidstop(){//挂起正在执行的程序,暂停程序}
Publicvioddestroy(){终止程序的执行释放资源}
Publicviodpaint(Graphicsg){//完成绘制图形等操作}}
7、异常处理
<1、异常处理概念
异常是Java程序运行出现的错误。
<2、异常处理机制
异常处理机制:
当try子句中抛出的异常属于某个catch子句的异常类时,该catch子句捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。
在catch子句中,可以从异常类对象中获取异常细节,并可通过该对象使用异常类中的方法,对异常进行相应的处理。
第二节启动程序的分析
本程序主要是为了启动主程序所使用。
让使用者有个等待时间。
本程序运用了多线程机制使其能同时进行多个任务。
导入的各包详细见后附录。
publicclassExec{//测试类
publicstaticvoidmain(String[]args){//显示带有启动进度条的欢迎窗体
newDemoWindow();//实例化一个对象}
}
classDemoWindowextendsJWindowimplementsRunnable{//带有启动进度条的欢迎窗体类
privateJProgressBarprogress=newJProgressBar(1,100);//进度条
ImagePanelip=newImagePanel();//图片面板
publicDemoWindow(){//构造函数
add(ip,BorderLayout.CENTER);//窗体布局
add(progress,BorderLayout.SOUTH);//将进度条放在边界布局管理器南边
progress.setStringPainted(true);//设置进度条
progress.setBorderPainted(false);
progress.setString("正在启动应用程序...");
progress.setForeground(Color.blue);
progress.setBackground(Color.white);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));//设置窗体光标
//设置窗体正好显示整个图片
pack();
//设置窗体居中显示
ToolkittheKit=getToolkit();
DimensionwndSize=theKit.getScreenSize();
setLocation((wndSize.width-ip.getWidth())/2,(wndSize.height-ip
.getHeight())/2);
setVisible(true);//设置窗体为可见
this.toFront();//将当前窗体置于屏幕所有窗体的前面
ThreadsplashThread=newThread(this);//新建线程
splashThread.start();//启动改变进度条的线程}
publicvoidrun(){//改变进度条的线程方法
try{//异常处理机制
for(inti=0;i<100;i++){//循环100次
Thread.sleep(100);//暂停0.1秒
progress.setValue(progress.getValue()+1);//累加进度条的进度
}
if(progress.getValue()==100)判断进度条的值是否是100
{jsbdd=newjsb("我的记事本");若是则实例化jsb对象即启动主程序
}}
catch(Exceptione){若出现异常则打印出相应的消息
System.out.println(e.getMessage());}
this.dispose();//释放窗体资源
}}
classImagePanelextendsJPanel{//图片面板
Imageimage=null;//图片内容
publicImagePanel(){//构造函数
MediaTrackertracker=newMediaTracker(this);//创建MediaTracker类变量,以加载图片,它可以保证图片加载完毕后才会进行下一步操作
try{//异常处理
image=Toolkit.getDefaultToolkit().getImage("images/tl.jpg");//加载图片
tracker.addImage(image,0);//等待图片加载完毕
tracker.waitForID(0);}
catch(Exceptione){//若出现异常则打印出消息
System.out.println(e.getMessage());}
setPreferredSize(newDimension(image.getWidth(this),image
.getHeight(this)));//设置图片面板的大小正好容纳整个图片}
publicvoidpaintComponent(Graphicsg){//重载的绘图函数,绘制指定图片
super.paintComponent(g);//调用基类的方法
g.drawImage(image,0,0,this);}}
第三节游戏设计过程
本程序是根据小游戏五子棋开发出来的,从游戏开始到结束,此下为小部分代码分析:
1.新建一个java文件:
2.编写代码
3.运行
4.总分析:
设计了游戏按照棋子的二维数组进行绘制棋子,玩家下棋后,程序修改数组相应位置,设置isPlayer1值,然后重新绘制(repaint),就更新了棋盘界面。
由于游戏的功能简单,也为了使游戏的操作尽可能的简便,我不在游戏进入时设计菜单,而是直接开始对战,在对战界面,设置了重新开始和退出的按钮。
即运行即玩,可以悔档,存档,取档,重开
总结
1.Java发展到现在,按应用来分主要分为三大块:
J2SE,J2ME和J2EE,这也就是SunONE(OpenNetEnvironment)体系。
2.Java语法:
I/O包,Util包,Lang包.
3.Servlet:
就是服务器端小程序,他负责生成发送给客户端的HTML文件。
JSP在执行时,也是先转换成Servlet再运行的。
虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。
4.Javabean:
可以把你的JSP中的Java代码封装起来,便于调用也便于重用
参考文献
1、Java语言程序设计主编:
贾振华副主编:
黄荣盛贾振旺
2、查询相关资料
3、王克宏.Java技术及其应用北京:
高等教育出版社,1994
4、林邦杰,彻底研究Java2。
北京:
电子工业出版社,2002
5、温平进、张威等。
InstantJava2实例解析。
北京:
北京希望电子出版社,2002
6、林建铭.精通Java2.北京:
科学出版社,2001
7、王胜捷.Java程序设计。
北京:
中国铁道出版社,2002
8、东方华人.Java2入门与提高.北京:
清华大学出版社,2000
9、洪威恩.Java2面向对象程序设计.北京:
中国铁道出版社2002
10、杜江、沈应逵。
Java2实例教程.北京:
清华大学出版社,2003
11、金勇化、曲俊生等.Java网络高级教程.北京:
北京希望电子出版社,2002
12、张利国.Java实用案例教程。
北京:
清华大学出版社,2003
13、孙一林.Java语言程序设计.北京:
清华大学出版社,2001
14、殷兆麟.Java语言程序设计.北京:
高等教育出版社,2002
15、殷兆麟..Java网络编程基础.北京大学出版社,2004
16、教育部考试中心.全国计算机等级考试大纲(2004年)版.北京:
高等教育出版社,2004
17、孙燕.Java程序设计培训教程.北京:
清华大学出版社,2002
附录(代码)
importjava.util.*;
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
importjavax.swing.*;
classGobangextendsJFrameimplementsRunnable,ActionListener{
finalstaticintPlayer=1;
finalstaticintAI=-1;
ClassLoadercl=this.getClass().getClassLoader();
Toolkittk=Toolkit.getDefaultToolkit();
intlength=14,game_state,winner,check,step;
intgrid[][]=newint[length][length];
intlocX,locY/*囱竚*/,count/*硈囱计*/,x,y/*既竚*/,displace_x=0,displace_y=0/*簿秖*/,direction;
ArrayListsteps=newArrayList();/*癘魁囱˙*/
JPopupMenucontrol_menu=newJPopupMenu();/*龄匡虫*/
JMenuItem[]command=newJMenuItem[4];
String[]command_str={"囱","郎","弄郎","秨"};
int[][]dir={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
boolean[]dir2=newboolean[8];
booleanturn;
Stringmessage;
finalJDialogdialog=newJDialog(this,"叫匡",true);
Fontfont=newFont("new_font",Font.BOLD,20);
Gridgrids[][]=newGrid[length][length];
Image
white=tk.getImage(cl.getResource("res/white.png"));
Image
black=tk.getImage(cl.getResource("res/black.png"));
Imagetitle=tk.getImage(cl.getResource("res/title.png"));
Imagetemp;
JPanelboardPanel,bigpanel;
JRadioButton[]choice=newJRadioButton[2];
finalstaticintStart=0;
finalstaticintSelect=1;
finalstaticintPlaying=2;
finalstaticintEnd=3;
finalstaticintnil=-1;/*礚よ*/
finalstaticintoblique_1=0;/*オ*/
finalstaticintoblique_2=1;/*オ*/
finalstaticinthorizontal=2;/*绢*/
finalstaticintvertical=3;/**/
Gobang(){
super("き囱");
boardPanel=newJPanel();
boardPanel.setLayout(newGridLayout(length,length,0,0));
boardPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
for(inti=0;ifor(intj=0;jgrids[i][j]=newGrid(i,j);
boardPanel.add(grids[i][j]);
}
bigpanel=newJPanel();
bigpanel.add(boardPanel,BorderLayout.CENTER);
getContentPane().add(bigpanel,BorderLayout.SOUTH);
game_state=Start;
ThreadStart();
dialog.setSize(160,100);
dialog.setResizable(false);
dialog.setLocationRelativeTo(null);
ButtonGroupchoice_group=newButtonGroup();
JPanelchoice_menu=newJPanel();
choice[0]=newJRadioButton("堵",newImageIcon(black),true);
choice[1]=newJRadioButton("フ",newImageIcon(white));
for(inti=0;ichoice_menu.add(choice[i]);
choice_group.add(choice[i]);}
for(inti=0;icommand[i]=newJMenuItem(command_str[i]);
command[i].addActionListener(this);
control_menu.add(command[i]);}
JButtonselect=newJButton("絋﹚");
JPanelselect_menu=newJPanel();
select_menu.add(select);
select.addActionListener(this);
dialog.getContentPane().add(choice_menu,BorderLayout.NORTH);
dialog.getContentPane().add(select_menu,BorderLayout.CENTER);
setIconImage(title);
setResizable(false);
setSize(300,335);
setVisible(true);
setLocationRelativeTo(null);}
publicstaticvoidmain(String[]arg){
Gobangapplication=newGobang();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
publicvoidactionPerformed(ActionEventevent){
if(event.getSource().equals(command[0])){
if(steps.size()!
=0)
undo();
}
elseif(event.getSource().equals(command[1]))
Save();
elseif(event.getSource().equals(command[2]))
Load();
elseif(event.getSource().equals(command[3]))
ReStart();
else
{
if(choice[1].isSelected())
{
temp=white;white=black;black=temp;}
dialog.dispose();}}
publicvoidWinCheck(){
check=turn?
Player:
AI;
direction=oblique_1;
WinCheck2();}
publicvoidWinCheck2(){
count=1;
switch(direction){
caseoblique_1:
displace_x=1;
displace_y=-1;
direction=oblique_2;
break;
caseoblique_2:
displace_x=displace_y=1;
direction=horizontal;
break;
casehorizontal:
displace_x=1;
displace_y=0;
direction=vertical;
break;
casevertical:
displace_x=0;
displace_y=1;
direction=nil;
break;}
x=locX+displace_x;
y=locY+displace_y;
while(x>=0&&x=0&&ycount=count+1;
x=x+displace_x;
y=y+displace_y;}
x=locX-displace_x;
y=locY-displace_y;
while(x>=0&&x=0&&ycount=count+1;
x=x-displace_x;
y=y-displace_y;}
if(count>=5){
game_state=End;
winner=chec