ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:408.35KB ,
资源ID:23335937      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23335937.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(语言程序设计资料java五子棋小游戏.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

语言程序设计资料java五子棋小游戏.docx

1、语言程序设计资料java五子棋小游戏五子棋小游戏1.课程设计的目的 计算机技术的不断发展给人们的日常工作和生活都带来了许多益处, 从Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家开始,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能等特点。通过系统的学习,就可以使用它开发出功能齐全,满足特殊需求的应用程序。它对学习者掌握技能,开拓思维都有很大的帮助。如今Java语言

2、在开发休闲游戏上取得了不小的成就,这些休闲游戏凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。因此我将学过的Java语言技术综合起来,用JCreator Pro开发工具编写了一个五子棋小游戏,这一实践既是对自己学过的技能进行了一次检验,也系统对学过的知识的复习巩固。2.设计方案论证2.1设计思路(1)界面棋盘设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,white或者black, 游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一

3、个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类了。有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,然后计算机会自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或

4、实现线程类或接口,以便各自能随时单独控制接发消息。(2)算法设计对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。 对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5个连续的同类棋子(包含本位置棋子),则判断为“连五”并结束检测循环。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。 由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三

5、”,“活四”来实现目的。 活四:有两个点能形成“连五”的四就是活四; 冲四:只有一个点能形成“连五”的四叫做“冲四”,或者叫做“单四”; 活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 双三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 活 的局面。 双四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 四 的局面

6、。 四三:指某一方同时具备两个先手,其中一个是 四 ,一个是 活三 。 在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在8个移动方向,检测时需要对每个方向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。2.2需求分析 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过

7、程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。2.3设计方法(1)五子棋的游戏主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四个文件。ChessMap是该五子棋游戏的主运行类,其中有运行整个程序的main方法,该文件生成了ChessMap类的一个实例,从而生

8、成了五子棋游戏的界面。ChessMap类继承自JApplet类,applet 是一种不能单独运行但可嵌入在其他应用程序中的小程序。 Applet 类必须是任何嵌入 Web 页或可用 Java Applet Viewer 查看的 applet 的超类。Applet 类提供了 applet 及其运行环境之间的标准接口。而Japplet是applet的子类。ChessMap类将所有的功能集中到菜单栏中,并通过调用其他模块来实现五子棋游戏的各个功能。(2)机器人部分的设计机器人部分的设计是由ChessBot.java类来实现的。该java类首先导入了三个函数,分别是math,lang和awt。该程序定

9、义了棋盘的边长,棋盘的边长通过定义一个私有的int型变量来实现。将机器人定义成一个方法,通过0和1来确定按下的棋子是机器人自己下的,还是敌人的棋子。该ChessBot类中还包括了重开一局的方法,该方法通过for循环语句来实现,即重置棋子。另外一个方法是悔棋,悔棋同样是通过for语句循环来实现,首先通过二维数组算出最后一步棋下的位置,然后通过Step-实现。最后一个方法是计算当前位置type方是否有nn子相连,相连的情况。当横向五子连珠,纵向五子连珠,左斜线五子连珠或者是右斜线五子连珠时,比赛结束,同时显示出获胜方的棋子颜色。四种方向的连珠用for循环语句分别写出其二维数组也就是棋子的位置,从而

10、进行判断棋子有几个棋子相连。使用endfor语句结束for循环,利用return语句,重复判断棋子的位置以及是否连珠。(3)五子棋面板的设计首先导入swing,awt等java包。ChessPanel继承JPanel的属性类。定义一系列的私有变量,如棋盘的背景位图,黑棋子的位图,白棋子的位图,以及插入棋子的位置。该java包还调用了重开一局的方法,以及悔棋的方法。public void showMousePos(Point p)是用来调试用,显示鼠标位置。public Point addChess(int x,int y,int type)是调试下一步棋,参数为插入点像素坐标。public P

11、oint addChess(int x,int y,int type,boolean isMatrix)实现的功能是算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。当游戏结束的时候使用Graphics g调用方法,定义一个super.paint类,当winner是黑色方,弹出一个500*200的对话框,显示持GameOver黑色棋子的一方获胜。当winner是白色方,弹出一个500*200的对话框,显示GameOver持白色棋子的一方获胜。给棋盘画线代码如下:g.setColor(Color.BLACK); for(j=0;jN;j+) /画线 g.dra

12、wLine(h/N/2,h/N*j+h/N/2,w-w/N+(N%2)*(h/N/2),h/N*j+h/N/2); g.drawLine(w/N*j+h/N/2,h/N/2,w/N*j+h/N/2,h-h/N+(N%2)*(h/N/2); g.fillRect(w/N*7+h/N/2-3,h/N*7+h/N/2-3,6,6);/画5个黑方块 g.fillRect(w/N*3+h/N/2-3,h/N*3+h/N/2-3,6,6); g.fillRect(w/N*11+h/N/2-3,h/N*3+h/N/2-3,6,6); g.fillRect(w/N*3+h/N/2-3,h/N*11+h/N/2

13、-3,6,6); g.fillRect(w/N*11+h/N/2-3,h/N*11+h/N/2-3,6,6); (4)控制台的设计控制台的设计代码如下:/: com:bruceeckel:swing:Console.java/ Tool for running Swing demos from the/ console, both applets and JFrames./package fivelink;import javax.swing.*;import java.awt.event.*;public class Console / Create a title string from

14、the class name: public static String title(Object o) String t = o.getClass().toString(); / Remove the word class: if(t.indexOf(class) != -1) t = t.substring(6); return t; public static void run(JFrame frame, int width, int height) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(w

15、idth, height); frame.setVisible(true); public static void run(JApplet applet, int width, int height) JFrame frame = new JFrame(title(applet); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(width, height); applet.init(); applet.start(); frame.s

16、etVisible(true); public static void run(JPanel panel, int width, int height) JFrame frame = new JFrame(title(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(panel); frame.setSize(width, height); frame.setVisible(true); /:3.设计结果与分析(1)五子棋游戏的主界面,如图1所示。图1 程序主界面(2

17、)五子棋游戏的结束界面,如图2所示。图2 游戏结束界面(3)游戏Game栏中的各个选项,如图3所示。图3 Game栏中的选项(4)Configure设置栏中的各个选项,如图4所示。图4 Configure栏中的各个选项(5)Help帮助栏中的选项,如图5所示。图5 Help栏中的选项(6)点击Help栏中的About选项弹出的界面,如图6所示。图6 About选项弹出时的界面4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过

18、程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师原玥老师,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我,使我受益匪浅!5.参考文献1 埃史尔,陈昊鹏.Java编程思想(第4版)M.北京:机械工业出版社,2007.6:105-1212 李钟尉,马文强,陈丹丹.Java从入门到精通M.北京:清华大学出版社,2008.9:234-2503 Y.Daniel Liang,万波,郑海红,潘蓉.Java语言程序设计:基础篇(原书第6版)M.北京:机械工业出版社,2008.6:355-3634 Ian F.Darwin,关丽荣,张晓坤.Java经典实例(第2版)M.北京

19、:中国电力出版社,2009.2:179-203附录ChessMap.javaimport javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;import .*;import java.applet.*;public class ChessMap extends JApplet private ChessBot bot; /电脑AI private ImageIcon map; /棋盘背景位图 private ImageIcon blackchess; /黑子位图 private

20、ImageIcon whitechess; /白子位图 private ChessPanel cp; /棋盘 private JMenuBar menubar; /以下为下拉菜单 private JMenu menu=new JMenu(Game),new JMenu(Configure),new JMenu(Help); private JMenuItem menuitem1=new JMenuItem(Restart,KeyEvent.VK_R),new JMenuItem(Rollback,KeyEvent.VK_O),new JMenuItem(Exit,KeyEvent.VK_X);

21、 private JMenuItem menuitem2=new JMenuItem(Configure.,KeyEvent.VK_C),new JMenuItem(About.,KeyEvent.VK_A),new JMenuItem(Human,KeyEvent.VK_U); private int player; /人执黑子还是白子 private boolean haveai=true; /人与人下还是人与电脑下,true与电脑下 class Mouseclicked extends MouseAdapter /判断鼠标左击并通知棋盘和电脑 public void mouseClick

22、ed(MouseEvent e) Point p1=new Point(); Point p2=new Point(); p1=cp.addChess(e.getX(),e.getY(),player); /play(sound); if(cp.isSuccess(player)=true) cp.gameOver(player); if(player=cp.BLACK_ONE) JOptionPane.showMessageDialog(null,Game Over!Black Win!); else if(player=cp.WHITE_ONE) JOptionPane.showMessa

23、geDialog(null,Game Over!White Win!); else if(haveai) if(cp.isSuccess(-1)*player)=false) p2=bot.play(p1.x,p1.y); cp.addChess(p2.x,p2.y,(-1)*player,true); if(cp.isSuccess(-1)*player)=true) cp.gameOver(-1)*player); if(player=cp.BLACK_ONE) JOptionPane.showMessageDialog(null,Game Over!White Win!); else i

24、f(player=cp.WHITE_ONE) JOptionPane.showMessageDialog(null,Game Over!Black Win!); else player*=(-1); class MouseMoved implements MouseMotionListener /调试用,获得鼠标位置 public void mouseMoved(MouseEvent e) cp.showMousePos(e.getPoint(); public void mouseDragged(MouseEvent e) class Menuitemclicked implements A

25、ctionListener /菜单消息处理 public void actionPerformed(ActionEvent e) JMenuItem target = (JMenuItem)e.getSource(); String actionCommand = target.getActionCommand(); if(actionCommand.equals(Restart) /重开一局 cp.reset(); bot.restart(); / player=cp.BLACK_ONE; if(actionCommand.equals(Rollback) /悔棋 cp.rollback()

26、; bot.rollback() else if(actionCommand.equals(Exit) /退出 System.exit(1); else if(actionCommand.equals(Configure) /执黑子还是执白子 Object options = Black, White ; int sel = JOptionPane.showOptionDialog( null, Your side:, choose:, JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, option

27、s0); if(sel=1) cp.reset(); player=cp.WHITE_ONE; Point pt=new Point(bot.playfirst(); cp.addChess(pt.x,pt.y,cp.BLACK_ONE,true); else cp.reset(); player=cp.BLACK_ONE; else if(actionCommand.equals(Human) /与人下 haveai=false; else if(actionCommand.equals(About) /版权与帮助 JOptionPane.showConfirmDialog(null,五子棋

28、nSong Yufeng 2011,About,JOptionPane.CLOSED_OPTION,JOptionPane.INFORMATION_MESSAGE); Mouseclicked mouseclicked=new Mouseclicked(); MouseMoved mousemoved=new MouseMoved(); Menuitemclicked menuclicked=new Menuitemclicked(); public void init() /初始化与默认值 int i; map=new ImageIcon(getClass().getResource(map

29、.gif); blackchess=new ImageIcon(getClass().getResource(blackchess.gif); whitechess=new ImageIcon(getClass().getResource(whitechess.gif); cp=new ChessPanel(map,blackchess,whitechess); bot=new ChessBot(cp.N); menubar=new JMenuBar(); menuitem10.setActionCommand(Restart); menuitem11.setActionCommand(Rollback); menuitem12.setActionCommand(Exit); menuitem20.setActionCommand(Configure); menuitem21.setActionCommand(About); menuitem22.setActionCommand(Human); for(i=0;i3;i+) menu0.add(menuitem1i); menu1.add(men

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1