【课程设计报告】Java实现游戏连连看(有源代码).doc_第1页
【课程设计报告】Java实现游戏连连看(有源代码).doc_第2页
【课程设计报告】Java实现游戏连连看(有源代码).doc_第3页
【课程设计报告】Java实现游戏连连看(有源代码).doc_第4页
【课程设计报告】Java实现游戏连连看(有源代码).doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

课程设计说明书 no.26更多计算机类课程设计、毕业设计、论文请访问:/mydoc-5887523-1.html&folderid=72986java语言实现连连看游戏1.课程设计目的java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。 学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握java程序开发的全过程。进一步熟悉掌握java程序设计语言的基础内容,如用户图形界面设计、java多线程编程、applet程序的设计、文件和网络输入输出流编程、java数据库编程等。通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力2.设计方案论证2.1设计思路2.1.1用户可以通过点击菜单中的“开始游戏”选项,开始新游戏程序。程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。记录图片坐标,以方便计算图片是否可以相连。确定图片大小,以确定用户点击的是那张图片。2.1.2用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。如果用户选择的是相同的图片,那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。以便用户可以进行以后的选择。2.1.3用户也可使通过使用“炸弹”功能进行消除图片。方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片。2.1.4 炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。2.1.5当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。2.1.6 当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。2.1.6 如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。2.2设计方法在设计连连看小游戏是,需要编写6个java源文件:mainframe.java,chessbutton.java,mapui.java,settings.java,arraypoint.java,map.java。2.2.1 mainframe.java 主窗口部分定义了程序用函数,实现了程序菜单(initmenubar)的使用。2.2.2 chessbutton.java 按键部分定义按键的位置,代表的值。2.2.3 mapui.java 游戏部分判断点击的图片,判断两图片是否可连,是否相同。判断是否胜利。实现炸弹功能。2.2.4 settings.java 数组确定了游戏各种参数属性。2.2.5 arraypoint.java 取值部分定义图片的值。2.2.6 map.java 算法部分通过算法确定两张图片是否连通。2.3功能模块 此设计共有以下几个功能模块。2.3.1 开始游戏程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。记录图片坐标,以方便计算图片是否可以相连。确定图片大小,以确定用户点击的是那张图片。2.3.2 使用“炸弹”用户点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片。2.3.3 限制炸弹“数目”炸弹 默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。2.3.4 对用户游戏时的判断用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。如果用户选择的是相同的图片,那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。以便用户可以进行以后的选择。2.4流程图如下图2 主函数流程图 开始程序开始游戏接收用户点击是否使用炸弹 y n是否二次点击 n消除点击计数两张图片是否相同 y n消除两张一样的可以相连的图片 y两张图片是否可以相连 n消除用户点击 的两张图片 y消除点击计数是否还有图片未消除 y结束 n 图3 游戏进行流程图图4 使用炸弹流程图图5 计算时间流程图 2.5类、方法、属性说明成员变量成员变量描述变量类型名称行数introws列数intcolumns图片后缀名stringrelex每局所花时间(秒)intpertime判断的时间间隔intper炸弹的使用次数intbombcount方法方法名功能备注menubar()实用程序菜单无备注bomb()设置炸弹无备注point()定义按键的位置无备注chesses()初步定义游戏界面,功能无备注timer()时间限制无备注3.设计结果与分析用户可以通过点击菜单中的“开始游戏”选项,开始新游戏程序。程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。记录图片坐标,以方便计算图片是否可以相连。确定图片大小,以确定用户点击的是那张图片。图6 开始游戏后画面用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。以便用户可以进行以后的选择。图7 消除三对后画面用户也可使通过使用“炸弹”功能进行消除图片。方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。 图8 使用炸弹后画面炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。 图9 炸弹使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。图10 时间到时的画面当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。图11 点击确定时的画面如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。图12 通关画面4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。因而,通过课程设计之后,把以前所学过的知识重新温故。有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获。总之这次课程设计使我更多的掌握了所学的知识,并运用到实践上,了解了java的重要性,对以后的学习起了重要作用。在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。5.参考文献1 印旻. java语言与面向对象程序设计m,北京: 清华大学出版社,2005.4: 58-722 朱站立、沈伟. java程序设计实用教程m, 北京: 电子工业出版社, 2007.5: 82-953 朱福喜、尹为民、余振坤等. java语言与面向对象程序设计m, 第2版. 武汉: 武汉大学出版社,2006.1:123-1304 艾力江. java 2 范例入门与提高m,北京:清华大学出版社 6. 附录mainframe.java:import java.awt.borderlayout;import java.awt.event.actionevent;import java.awt.event.actionlistener;import javax.swing.jframe;import javax.swing.jmenu;import javax.swing.jmenubar;import javax.swing.jmenuitem;import javax.swing.joptionpane;import javax.swing.jpanel;import javax.swing.swingutilities;import javax.swing.timer;import cn.elva.settings;import cn.elva.model.map;public class mainframe extends jframeprivate static final long serialversionuid = 1l;private int bombcount = settings.bombcount;private jpanel jcontentpane = null;private jmenubar menubar = null;private jmenu filemenu = null;private jmenuitem reloaditem = null;private jmenuitem startitem = null;private jmenuitem bombitem = null;private jmenuitem exititem = null;private mapui mapui = null;private long starttime;private long endtime;private timer timer = null;private jmenubar initmenubar()if (menubar = null)menubar = new jmenubar();filemenu = new jmenu(文件);startitem = new jmenuitem(开始游戏);startitem.addactionlistener(new actionlistener()public void actionperformed(actionevent e)reload(););reloaditem = new jmenuitem(重来一次);reloaditem.addactionlistener(new actionlistener()public void actionperformed(actionevent e)reload(););exititem = new jmenuitem(退出);exititem.addactionlistener(new actionlistener()public void actionperformed(actionevent e)system.exit(0););filemenu.add(startitem);filemenu.add(reloaditem);filemenu.add( bombitem ); filemenu.add(exititem);menubar.add(filemenu);return menubar;public static void main(string args)swingutilities.invokelater(new runnable()public void run()mainframe thisclass = new mainframe();thisclass.setdefaultcloseoperation(jframe.exit_on_close);thisclass.setvisible(true););public mainframe()super();initialize();private void initialize()this.setsize(900, 900);this.settitle(llk);this.setjmenubar(initmenubar();/ this.setcontentpane(getjcontentpane();this.settitle(连连看);private void reload()mapui = new mapui();starttime = system.currenttimemillis() / 1000;endtime = starttime + settings.pertime;jcontentpane = new jpanel();jcontentpane.setlayout(new borderlayout();jcontentpane.add(mapui);this.setcontentpane(jcontentpane);this.validate();map.leftcount = settings.rows * settings.columns; inittimer();bombitem.setenabled(true);bombcount=settings.bombcount;private void inittimer()actionlistener actionlistener = new actionlistener()public void actionperformed(actionevent e)starttime = system.currenttimemillis() / 1000;if (starttime = endtime)joptionpane.showmessagedialog(mainframe.this, 时间到了!);int result = joptionpane.showconfirmdialog(mainframe.this,重玩一次?, again, joptionpane.yes_no_cancel_option);if (result = joptionpane.yes_option)reload();elsejcontentpane.setvisible(false);validate();timer = new javax.swing.timer(1000, actionlistener);timer.start();chessbutton.javapublic class chessbutton extends jbuttonprotected arraypoint point = null;public chessbutton(int row, int col, int value)this(new arraypoint(row, col, value);public chessbutton(arraypoint point) this.point = point;string name =resource/+point.getvalue() + settings.relex;url url = chessbutton.class.getresource(name);imageicon icon = new imageicon( url );this.seticon(icon);public chessbutton()this(new arraypoint(0, 0, 0);public arraypoint getpoint()return point;public void setpoint(arraypoint point)this.point = point; mapui.javaimport java.awt.gridlayout;import java.awt.event.actionevent;import java.awt.event.actionlistener;import javax.swing.joptionpane;import javax.swing.jpanel;import cn.elva.settings;import cn.elva.model.arraypoint;import cn.elva.model.map;public class mapui extends jpanel implements actionlistenerprivate static final long serialversionuid = 1l;private chessbutton chesses = null;private map map = new map();private boolean two = false;private arraypoint priviouspoint;private arraypoint currpoint;public mapui()super();initialize();private void initialize() initchesses();gridlayout gridlayout = new gridlayout(settings.rows + 2,settings.columns + 2);gridlayout.sethgap(2);gridlayout.setvgap(2);this.setlayout(gridlayout);this.setsize(300, 200);for (int row = 0; row settings.rows + 2; row+)for (int col = 0; col settings.columns + 2; col+)add(chessesrow * (settings.columns + 2) + col);private void initchesses()int values = map.getmap(); this.chesses = new chessbutton(settings.rows + 2)* (settings.columns + 2);for (int row = 0; row 10; row+)for (int col = 0; col 10; col+)int index = row * (settings.columns + 2) + col;chessesindex = new chessbutton(row, col, valuesrowcol);chessesindex.addactionlistener(this);if (row = 0 | row = (settings.rows + 2 - 1) | col = 0| col = (settings.columns + 2 - 1)chessesindex.setvisible(false);public void clearcheese(arraypoint priviouspoint, arraypoint currpoint)int values = map.getmap();valuespriviouspoint.geti()priviouspoint.getj() = 0;valuescurrpoint.geti()currpoint.getj() = 0;int index1 = priviouspoint.geti() * (settings.columns + 2)+ priviouspoint.getj();int index2 = currpoint.geti() * (settings.columns + 2)+ currpoint.getj();chessesindex1.setvisible(false);chessesindex2.setvisible(false);if (map.leftcount = 0)joptionpane.showmessagedialog(this, 恭喜您通过!);public void actionperformed(actionevent e)chessbutton button = (chessbutton) e.getsource();arraypoint p = button.getpoint();if (two)currpoint = p;if( map.match(this.priviouspoint, this.currpoint)clearcheese(this.priviouspoint, this.currpoint);two = false;elsethis.priviouspoint = p;two = true;public void bomb()int values = map.getmap();arraypoint p1 = null;arraypoint p2 = null;for (int row = 1; row settings.rows + 1; row+)for (int col = 1; col settings.columns + 1; col+)if (valuesrowcol != 0) p1 = new arraypoint(row, col, valuesrowcol);for (int i = 1; i settings.rows + 1; i+)for (int j = 1; j settings.columns + 1; j+)if (valuesij != 0)p2 = new arraypoint(i, j, valuesij);elsecontinue;/system.out.println(p1 + | + p2);if (map.match(p1, p2)clearcheese(p1, p2);return; settings.javapackage cn.elva;public interface settingspublic static final int rows = 8;public static final int columns=8;public static final string relex=.gif;public static final int pertime = 600;public static final int per = 1;public static final int bombcount = 3;arraypoint.javapackage cn.elva.model;public class arraypoint protected int i;protected int j;protected int value;public arraypoint( int i,int j,int value )this.i =i;this.j =j;this.value = value;public string tostring( )return i+,+j+,+value;public int geti()return i;public void seti(int i)this.i = i;public int getj()return j;public void setj(int j)this.j = j;public int getvalue()return value;public void setvalue(int value)this.value = value;map.javapackage cn.elva.model; import java.util.random;import cn.elva.settings;public class mappublic static int leftcount = settings.rows * settings.columns;private int map = new intsettings.rows + 2settings.columns + 2;private int maxkinds = 4;public map()init();public int getmap()return map;private void init()int temparr = new intsettings.rows * settings.columns;int len = temparr.length;for (int i = 0; i len / maxkinds; i+)temparri * 4 = i + 1;temparri * 4 + 1 = i + 1;temparri * 4 + 2 = i + 1;temparri * 4 + 3 = i + 1;random(temparr);for (int i = 1; i settings.rows + 1; i+)for (int j = 1; j 0; i-) int j = random.nextint(i);int temp = arrayi - 1;arrayi - 1 = arrayj;arrayj = temp;public boolean onelinewithoutvalue(arraypoint p1, arraypoint p2)if (horizonmatch(p1, p2)return true;else if (verticalmatch(p1, p2)return true;return false;public boolean oneline(arraypoint p1, arraypoint p2)if (p1.value != p2.value)return false;if (onelinewithoutvalue(p1, p2)return true;return false;public boolean verticalmatch(arraypoint p1, arraypoint p2)if (p1.j != p2.j)return false;if (p1.i p2.i)arraypoint temp = null;temp = p1;p1 = p2; p2 = temp;int spacecount = p2.i - p1.i;if (spacecount = 1 & p1.value = p2.value)return true;for (int i = p1.i + 1; i p2.j)arraypoint temp = null;temp = p1;p1 = p2;p2 = temp;int spacecount = p2.j - p1.j;if (spacecount = 1 & p1.value = p2.value)return true;for (int i = p1.j + 1; i = 0; col-)temp = new arraypoint(p1.i, col, mapp1.icol);if (temp.value = 0) & this.onelinewithoutvalue(p1, temp)if (this.oneconnerwithoutvalue(temp, p2)return true;elsebreak;count = settings.columns + 2 - p1.j;for (int col = p1.j; col = 0; row-)temp = new arraypoint(row, p1.j, maprowp1.j);if (temp.value = 0) & onelinewithoutvalue(p1, temp)if (oneconnerwithoutvalue(temp, p2)return true;for (int row = p1.i + 1; row settings.rows + 2; row+)temp = new arraypoint(row, p1.j, maprowp1.j);if (temp.value = 0) & onelinewithoutvalue(p1, temp)if (oneconnerwithoutvalue(temp, p2)return true;return false;public boolean match(arraypoint p1, arraypoint p2)if (this.issameone(p1, p2)return false;if (oneline(p1, p2)mapp1.ip1.j = 0;mapp2.ip2.j = 0;l

温馨提示

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

评论

0/150

提交评论