java课程设计报告_五子棋_第1页
java课程设计报告_五子棋_第2页
java课程设计报告_五子棋_第3页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录第一章软件平台游戏设计思路第二章小游戏五子棋的开发过程第一节JAVA基础知识第二节启动程序的分析第三节游戏设计过程第三章总结第四章参考文献第五章附录第一章游戏设计思路:n第二章第一节java程序基础知识本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。不同的类和包提供的方法、类型等都不同,本程序还使用了继承。以至使其能够完成不同的功能。本节主要讲述本系统所使用的基础知识。1、类的基础<1、类的定义JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。类是java程序中最小的组成单位。<2、 Java中类定义的格式为:类修饰符class

2、类名extends 基类implements接口 成员变量声明(Member variable declaration )/ 成员方法声明 (Member method declaration ) 其中,class、extends 和implements 都是 Java的关键字。类修饰符、extends 和implements 是关于修饰符、继承和接口的内容。2、继承继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。Java语言中,所有的类都是直接或间接的继承类而得到的。被继承的类称为基类或父类,继承而的来的类成为子类。子类继承基类的方法和属性 ,同时也可以修改基类的方法

3、和属性,并增加自己新的属性和方法。Java不支持多重继承。即一个子类不能拥有两个或以上的父类。3、包<1、包的定义在Java中,把相关的代码组织到一起,称为包”。包市一种将相关类、接口或其他包 组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。<2、包的语法及导入:Package PackageName; /包的定义Import java.awt.Color/ 导入包关键字 Import4、接口<1、接口的定义Java中的接口可以看成是一种抽象类 ,它是一些抽象方法和常量的集合 ,其主要作用是 使得处于不同层次上以至于互不相干的类能够执行相同的操作,引用

4、相同的值,而且在一个类中可以同时实现来自不同接口中的多种方法。<2、接口的定义和实现In terface 接口名/抽象方法 II定义接口Class类名implements接口名称/类体 实现接口5、线程<1、线程的定义即同时执行多个程序段,每个程序段都是一个线程。<2、线程的周期线程的周期包括新建(new )、就绪(start()、执行(run()、阻塞(sleep()、wait()、suspend()、输入/输出流中发生线程阻塞)、死亡(stop()、destroy。)。创建线程的方法:一种是创建 Thread类的子类。另一种是实现 Runnable接口 .而本系统采用的是

5、接口的方 式。6. Applet小应用程序<1、小应用程序与应用程序的区别:小应用程序没有主方法不能单独运行。而应用程序是拥有主方法的是可以单独运行的。<2、Applet的执行方式它有两种:一种是浏览器中执行,另一种是使用Appletviewer()命令执行。本系统的两个小 应用程序都是采用编制html以浏览器形式执行。<3、Applet主类的一般框架结构图Import java.awt.*;Import java.applet.*;Public class 类名 extends AppletPublic void init()初始化变量、设置字体、装载图片Public vo

6、id start()/启动程序执行或恢复程序执行Public void stop()挂起正在执行的程序,暂停程序Public viod destroy()终止程序的执行释放资源Public viod pai nt(Graphics g)完成绘制图形等操作 7、异常处理<1、异常处理概念异常是Java程序运行出现的错误。<2、异常处理机制异常处理机制:当try子句中抛出的异常属于某个 catch子句的异常类时,该catch子句 捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。在catch子句中,可以从异常类对象中获取异常细节,并可通过该对象使用异常类中的方法,

7、对异常进行相应的处理。第二节启动程序的分析本程序主要是为了启动主程序所使用。让使用者有个等待时间。本程序运用了多线程机制使其能同时进行多个任务。导入的各包详细见后附录。public class Exec / 测试类public static void mai n(Stri ng args) /显示带有启动进度条的欢迎窗体new DemoWindow(); / 实例化一个对象class DemoWindow extends JWindow implements Runnable / 带有启动进度条的欢迎窗体类private JProgressBar progress = new JProgres

8、sBar(1, 100);/ 进度条ImagePa nel ip = new ImagePa nel();/图片面板public DemoWindow() / 构造函数add(ip, BorderLayout.CENTER); / 窗体布局add(progress, BorderLayout.SOUTH); /将进度条放在边界布局管理器南边progress.setStri ngPai nted(true); /设置进度条progress.setBorderPa in ted(false);progress.setStri ng("正在启动应用程序.");progress.s

9、etForegro un d(Color.blue);progress.setBackgro un d(Color.white);设置窗体光标setCursor(Cursor.getPredefi nedCursor(Cursor.WAIT_CURSOR); /设置窗体正好显示整个图片pack();/设置窗体居中显示Toolkit theKit = getToolkit();Dimension wndSize = theKit.getScreenSize();setLocation(wndSize.width - ip.getWidth() / 2, (wndSize.height - ip.

10、getHeight() / 2);setVisible(true); /设置窗体为可见this.toFro nt();将当前窗体置于屏幕所有窗体的前面Thread splashThread = new Thread(this);/ 新建线程splashThread.start(); /启动改变进度条的线程public void run() /改变进度条的线程方法try /异常处理机制for (int i = 0; i < 100; i+) / 循环 100 次Thread.sleep(100); / 暂停 0.1 秒 progress.setValue(progress.getValue

11、() + 1);/ 累加进度条的进度if (progress.getValue()=100)判断进度条的值是否是100 jsb dd=new jsb(" 我的记事本”);若是则实例化jsb对象即启动主程序catch (Exception e) 若出现异常则打印出相应的消息System.out.pri ntln( e.getMessage();this.dispose(); /释放窗体资源class ImagePanel extends JPanel / 图片面板Image image = null; / 图片内容public ImagePanel() / 构造函数MediaTrack

12、er tracker = new MediaTracker(this);/ 创建 MediaTracker 类变量,以加载图片,它可以保证图片加载完毕后才会进行下一步操作try /异常处理image = Toolkit.getDefaultToolkit().getlmage("images/tl.jpg"); /加载图片tracker.addlmage(image, 0);/ 等待图片加载完毕tracker.waitForlD(O);catch (Exception e) /若出现异常则打印出消息System.out.pri ntln( e.getMessage();se

13、tPreferredSize( new Dime nsi on (image.getWidth(this), image.getHeight(this); /设置图片面板的大小正好容纳整个图片public void paintComponent(Graphics g) /重载的绘图函数,绘制指定图片super.paintComponent(g);/ 调用基类的方法g.drawlmage(image, 0, 0, this);第三节游戏设计过程本程序是根据小游戏五子棋开发出来的,从游戏开始到结束,此下为小部分代码分析:1. 新建一个java文件:2. 编写代码3. 运行胡雅 JfrHUSI Ji

14、MEIIIJd輩 JTrvvR-Hr-屉耳 w j v Iffl K|厲id虺致馆)_C*CD l£Cij:ftuij Wifai弓 耳J c=ra- 等-:fi学 B 凰w2JJ斫昨 | pl 生 rt!務出IIII "Tl S=Ffl*iJ1:LBIS2<J1 旦 ItapOfI Z imparl 1: lRpori < impart E ippurt fc i BportuC.lL . lo.*= 4Vt 卜: eveat 4Ppl0t *.3-aMA 4V& 阿CL 仰H1AUI3E WLTq丄1転事 U C-I1£1C1£&

15、#163;JFVjpiJiBtriFn&tiut1HiEiHCtiMl幷H由柞.tnw>:丹 -. dlsplft£«_MBC.I- *. m . y f* it »/!/& gfEmt.r - (G-ab-uit jAra|3lN) MlLl 话总署世> iHi:E)生啟 I 国 UtCD EKijJ 曲口 i:凶 fflft-Hl I已“ 0八”八.富氓E F1卿険甬% ” 并怙| 事 曲 二"曲*"世-呂期 I Fl-° Jrc - MI Fii诵五':;dSEE四工二IrtSiia; |卫十

16、砒桃1耳馬;<1础涉F1扁丹氏曲!!,|4. 总分析:设计了游戏按照棋子的二维数组进行绘制棋子,玩家下棋后,程序修改数组相应位置,设置isPlayerl值,然后重新绘制(repaint),就更新了棋盘界面。由于游戏的 功能简单,也为了使游戏的操作尽可能的简便,我不在游戏进入时设计菜单,而是 直接开始对战,在对战界面,设置了重新开始和退出的按钮。即运行即玩,可以悔 档,存档,取档,重开1. Java发展到现在,按应用来分主要分为三大块:J2SEJ2ME和J2EE, 这也就是 Sun ONE(Open NetEnvironment) 体系。2. Java 语法:l/0 包,Util 包,La

17、ng 包.3.Servlet:就是服务器端小程序,他负责生成发送给客户端的 HTML 文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论 上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet 用来控制流程跳转还是挺方便的,也令程序更清晰。4.Javabean:可以把你的JSP中的Java代码圭寸装起来,便于调用也便 于重用参考文献1、 Java语言程序设计主编: 贾振华 副主编:黄荣盛 贾振旺2、 查询相关资料3、 王克宏.Java技术及其应用北京:高等教育出版社,19944、林邦杰,彻底研究Java2。北京:电子工业出版社,20025、温平进、

18、张威等。Instant Java2实例解析。北京:北京希望电子出版社,20026、林建铭精通Java2.北京:科学出版社,20017、 王胜捷.Java程序设计。北京:中国铁道出版社,20028、东方华人.Java2入门与提高北京:清华大学出版社,20009、 洪威恩.Java2面向对象程序设计北京:中国铁道出版社200210、 杜江、沈应逵。Java2实例教程北京:清华大学出版社,200311、 金勇化、曲俊生等.Java网络高级教程北京:北京希望电子出版社,200212、 张利国.Java实用案例教程。北京:清华大学出版社,200313、 孙一林.Java语言程序设计北京:清华大学出版社,

19、200114、殷兆麟.Java语言程序设计.北京:高等教育出版社,200215、殷兆麟.Java网络编程基础.北京大学出版社,200416、 教育部考试中心.全国计算机等级考试大纲(2004年)版.北京:高等教育出版社,200417、 孙燕.Java程序设计培训教程.北京:清华大学出版社,2002附录(代码)import java.util.*;import java.io.*;import java.awt.*;import java.awt.eve nt.*;import java.applet.*;import javax.swi ng.*;class Goba ng exte nds

20、JFrame impleme nts Runn able, Action Liste nerfinal static int Player=1;final static int AI =-1;ClassLoader cl = this.getClass().getClassLoader();Toolkit tk = Toolkit.getDefaultToolkit();int len gth=14, game_state, winner, check, step;int grid = new in tle ngthle ngth;只竚*/,*/int locX, locY /* 囱只竚 */

21、, count /* 硈囱计 */, x, y /* 既 displace_x=O, displace_y=O /* 只簿秖 */, direct ion;ArrayList steps = new ArrayList(); /* 癘魁囱*/JPopupMe nu con trol_me nu = new JPopupMe nu(); /*龄匡虫JMe nultem comma nd = new JMe nultem4;Stri ng comma nd_str="囱","郎",”弄郎"," 秨"in t dir = -1,

22、-1, -1,0, -1, 1, 0, -1, 0, 1, 1, -1, 1,0, 1,1 ;boolea n dir2 = new boolea n 8;boolea n tur n;String message;fin al JDialog dialog = new JDialog(this," 叫匡 ", true);Font font=new Fon t(" new_fo nt", Fon t.BOLD, 20);Grid grids = new Gridle ngthle ngth;Imagewhite= tk.getlmage(cl.getR

23、esource("res/white.p ng");Imageblack= tk.getlmage(cl.getResource("res/black.p ng");Image title= tk.getlmage(cl.getResource("res/title.p ng");Image temp;JPa nel boardPa nel, bigpa nel;JRadioButto n choice = new JRadioButt on2;final static int Start =0;final static int Se

24、lect =1;final static int Playing =2;final static int End =3;final static int nil=-1; /* 礚/*/final static int oblique_1 =0; /*/final static int oblique_2 =1; /*/final static int horizontal =2; /*/final static int vertical=3; /*/Goba ng ( )super(” 吉囱");boardPa nel = new JPa nel();boardPa nel.setL

25、ayout (new GridLayout(le ngth, le ngth, 0, 0);boardPa nel.setComp onen tOrie ntatio n(Comp onen tOrie ntatio n.RIGHT_TO_LEFT);for(int i=0; i<length; i+)for(i nt j=0; j<le ngth; j+)gridsij = new Grid(i, j);boardPa nel.add(gridsij);bigpa nel = new JPa nel();bigpa nel.add(boardPa nel, BorderLayou

26、t.CENTER);getCo nte ntPa ne().add(bigpa nel, BorderLayout.SOUTH);game_state=Start;ThreadStart();dialog.setSize(160, 100);dialog.setResizable(false);dialog.setLocati on RelativeTo( nu II);Butt on Group choice_group = new Butt on Group();JPa nel choice_me nu = new JPa nel();choice0 = new JRadioButt on

27、 (”堵 ", new ImageIc on (black), true);choice1 = new JRadioButt on (”7 ", new ImageIco n( white);for(int i=0; i<choice.length; i+) choice_me nu .add(choicei);choice_group.add(choicei); for(int i=0; ivcommand.length; i+)comma ndi =new JMe nultem(comma nd_stri);comma ndi.addActio nListe ne

28、r(this);con trol_me nu.add(comma ndi);JButton select = new JButton("紘)");JPa nel select_me nu = new JPa nel();select_me nu.add(select);select.addActio nListe ner(this);dialog.getContentPane().add(choice_menu, BorderLayout.NORTH);dialog.getContentPane().add(select_menu, BorderLayout.CENTER)

29、; setIc onl mage(title);setResizable(false);setSize(300, 335);setVisible(true);setLocationRelativeT o(null); Goba ng();public static void main( Stri ng arg) Goba ngapplicati on=new即 plicati on .setDefaultCloseOperatio n(J Frame.EXIT_ON_CLOSE); public void acti on Performed(Act ion Eve nt eve nt) if(

30、 eve nt.getSource().equals(comma nd0) )if(steps.size()!=O)un do();else if(event.getSource().equals(command1)Save();else if(event.getSource().equals(command2)Load();else if(eve nt.getSource().equals(comma nd3)ReStart();elseif(choice1.isSelected()temp=white; white=black; black=temp; dialog.dispose();

31、public void Win Check() check = tur n? Player: Al;directi on=oblique_1;Win Check2(); public void Win Check2() coun t=1;switch(directio n)case oblique_1: displace_x=1; displace_y=-1; directio n=oblique_2; break;case oblique_2: displace_x=displace_y=1; direct ion=horiz on tal; break;case horiz on tal:

32、 displace_x=1; displace_y=0; directi on=vertical; break;case vertical: displace_x=0;displace_y=1;directi on=n il;break; x=locX+displace_x;y=locY+displace_y;while(x>=0 && x<le ngth && y>=0 && y<le ngth && gridxy=check) coun t=co un t+1;x=x+displace_x;y=y+di

33、splace_y; x=locX-displace_x;y=locY-displace_y;while(x>=0 && x<le ngth && y>=0 && y<le ngth && gridxy=check) coun t=co un t+1;x=x-displace_x;y=y-displace_y; if(co un t>=5)game_state=E nd;winn er=check;ThreadStart();else if(directio n!=nil)Win Check2(); p

34、ublic void ReStart() for(i nt i=0; i<le ngth; i+)for(i nt j=0; jvle ngth; j+)gridsij.l ni tial();winn er=0;steps.clear();game_state=Play in g; public void goba ngRa ndom() displace_y=0;do displace_x=(i nt)(Math.ra ndom()*8);x =locX+dirdisplace_x0;y =locY+dirdisplace_x1;if(!dir2displace_x)displace

35、_y=displace_y+1;dir2displace_x=true;&&while(x<0 | x>=length| y<0 | y>=length| gridxy!=O)displace_y<8);for(i nt i=0; i<8; i+)dir2i=false;if(x>=0 && x<length && y>=0 && y<length && gridxy=0)setMark(x, y);elsegoba ngRa ndom2(); priva

36、te void goba ngRa ndom2() do x=(i nt)(Math.ra ndom()*le ngth);y=(i nt)(Math.ra ndom()*le ngth);while(gridxy!=0);setMark(x, y);private void goba ngAI()boolea n play=true;for(int i=2; i>0; i-)play=!play;goba ngAI4(play);if(turn)return;for(int i=7; i>=4; i-)play=!play;step=i/2;goba ngAI2(play);if

37、(turn)return;goba ngAI5();if(!turn)goba ngRa ndom();private void goba ngAI2(boolea n player)check = player? Player: Al;for(i nt i=0; i<le ngth; i+)for(int j=0; j<length; j+) if(turn)break;if(gridij = check)coun t=1;directi on=oblique_1;gobangAI3(i, j); private void goba ngAI3(i nt x, int y) if

38、(cou nt=1) locX=x;locY=y;switch(directio n)case oblique_1: displace_x=1;displace_y=-1;break;case oblique_2: displace_x=displace_y=1;break;case horiz on tal: displace_x=1;displace_y=0;break;case vertical: displace_x=0;displace_y=1;break;x=x+displace_x;y=y+displace_y;if(x>=0 && x<length

39、&& y>=0 && y<length && gridxy=check)coun t=co un t+1;if(co un t=step)if(x+displace_x>=0 && x+displace_x<le ngth && y+displace_y>=0 &&y+displace_y<le ngth && gridx+displace_xy+displace_y=O)if(x-step*displace_x<O|x-step*displ

40、ace_x>=le ngth|y-step*displace_y<0|y-step*displace_y>=le ngth|!goba ng_SpaceAI(x+displace_x,y+displace_y)|(gridx-step*displace_xy-step*displace_y!=0 && step<3) )/* 癸翴 猵 */goba ngAI3_2();elsesetMark2(x+displace_x, y+displace_y); elsegoba ngAI3_2();elsegobangAI3(x, y);elsegoba ngAI

41、3_2(); private void goba ngAI3_2() if(direct ion!=vertical)coun t=1;direct ion=directi on+1;goba ngAI3(locX, locY); private void goba ngAI4(boolea n player) check = player? Player: AI;for(i nt i=0; i<le ngth; i+)for(int j=0; j<length; j+) if(turn)break;if(gridij=O) directi on=oblique_1;locX=i;

42、locY=j;goba ngAI4();private void goba ngAI4() coun t=0;switch(directio n) case oblique_1: displace_x=1;displace_y=-1;directio n=oblique_2;break;case oblique_2: displace_x=displace_y=1;direct ion=horiz on tal;break;case horiz on tal: displace_x=1;displace_y=0;directi on=vertical;break;case vertical:

43、displace_x=0;displace_y=1;directi on=n il;break; x=locX+displace_x;y=locY+displace_y;while(x>=0 && x<le ngth && y>=0 && y<le ngth && gridxy=check)coun t=co un t+1;x=x+displace_x;y=y+displace_y;x=locX-displace_x;y=locY-displace_y;while(x>=0 && x&

44、lt;le ngth && y>=0 && y<le ngth && gridxy=check) coun t=co un t+1;x=x-displace_x;y=y-displace_y; if(co un t>=4)setMark(locX, locY);else if(directio n!=nil)goba ngAI4(); private void goba ngAI5() for(i nt i=0; i<le ngth; i+)for(i nt j=0; j<le ngth; j+)if(turn)br

45、eak;if(gridij=-1)directi on=oblique_1;locX=i;locY=j; goba ngAI5_2(); private void goba ngAI5_2()coun t=0;switch(directio n)case oblique_1: displace_x=1;displace_y=-1;directio n=oblique_2; break;case oblique_2: displace_x=displace_y=1;direct ion=horiz on tal; break;case horiz on tal: displace_x=1;dis

46、place_y=0;directi on=vertical;break;case vertical: displace_x=O;displace_y=1;directi on=n il;break; x=locX+displace_x;y=locY+displace_y;while(x>=0 && x<le ngth && y>=0 && y<le ngth && gridxy=O &&coun t<4) coun t=co un t+1;x=x+displace_x;y=y+disp

47、lace_y;x=locX-displace_x;y=locY-displace_y;&&if(cou nt=4&&x>=0 && x<le ngth&& y>=0 && yvle ngthgridxy=0)setMark(locX+displace_x, locY+displace_y);else if(cou nt>1)count = coun t=4? 3: count;while(x>=0 && x<le ngth && y>=0 &

48、amp;& yvle ngth && gridxy=O &&coun t<4)coun t=co un t+1;x=x-displace_x;y=y-displace_y; if(co un t=4)setMark(locX+displace_x, locY+displace_y);else if(directio n!=nil)goba ngAI5_2();else if(directio n!=nil)goba ngAI5_2(); private boolean gobang_SpaceAI(int x, int y) /*璸衡逞緇7 尺竚

49、*/ int space=0;do space=space+1;x=x+displace_x;y=y+displace_y;while(x>=0 && x<le ngth && y>=0 && y<le ngth && gridxy=0 &&space<4);if(space+count>=5)/* 逞緇 J 场疋 T吉結*/return true;elsespace=0;x=locX-displace_x;y=locY-displace_y;while(x>=0 &

50、;& x<le ngth && y>=0 && y<le ngth && gridxy=O && space<4)space=space+1;x=x-displace_x;y=y-displace_y;if(space+count>=5) /* 逞緇 J 场疋 T吉結 Z */return true;elsereturn false;public void ThreadStart() new Thread(this).start(); private void setMark(i nt x,

51、int y) steps.add(gridsxy);gridsxy.setValue(-1);Win Check();turn=true;/*璸衡e T隔*/private void setMark2(i nt x, int y) int space=0, temp_x=x, temp_y=y;do space=space+1;temp_x=temp_x+displace_x;temp_y=temp_y+displace_y; temp_y<le ngthwhile(temp_x>=0 && temp_x<length && temp_y>

52、;=0 &&&& gridtemp_xtemp_y=0 && space<4);if(space+step>=5)setMark(x, y);elsesetMark(x-(step+1)*displace_x, y-(step+1)*displace_y); public void run() try switch(game_state) case Sta rt: Thread.sleep(2000);dialog.show();game_state=Play ing;repai nt();break;case End: repa i

53、n t();Thread.sleep(1500);ReStart();repai nt();break; catch(I nterruptedExcepti on ex)public void pain "Graphics g) super.pa in t(g);switch(game_state) case Sta rt: g.drawStri ng("2005.7 by Yu Lin Tao", 91,240);g.setF on t(fo nt);g.setColor(Color.BLUE);g.drawStri ng("Goba ng"

54、, 112, 120);g.drawlmage(title, 134, 135, this);break;case Play ing:case End:g.drawStri ng("產:筿福:",105, 40);g.drawlmage(black, 132, 30, this);g.drawlmage(white, 182, 30, this);if(wi nn er!=0)g.setF on t(fo nt);g.setColor(Color.RED);message = winn er=1?" 墓 ":" 块 "g.drawStri ng(message, 120, 185);break; public void un d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论