Java课程设计报告蜘蛛纸牌.docx

上传人:b****6 文档编号:7277327 上传时间:2023-01-22 格式:DOCX 页数:18 大小:251KB
下载 相关 举报
Java课程设计报告蜘蛛纸牌.docx_第1页
第1页 / 共18页
Java课程设计报告蜘蛛纸牌.docx_第2页
第2页 / 共18页
Java课程设计报告蜘蛛纸牌.docx_第3页
第3页 / 共18页
Java课程设计报告蜘蛛纸牌.docx_第4页
第4页 / 共18页
Java课程设计报告蜘蛛纸牌.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Java课程设计报告蜘蛛纸牌.docx

《Java课程设计报告蜘蛛纸牌.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告蜘蛛纸牌.docx(18页珍藏版)》请在冰豆网上搜索。

Java课程设计报告蜘蛛纸牌.docx

Java课程设计报告蜘蛛纸牌课程设计报告蜘蛛纸牌面向对象程序设计课程设计报告JAVA程序设计课程设计之蜘蛛纸牌学院:

年级:

班级:

指导老师:

小组成员:

时间:

课程设计题目JAVA课程设计蜘蛛纸牌学院计算机学院专业网络工程年级2009已知参数和设计要求:

蜘蛛纸牌的主要功能模块包括:

a、游戏界面的布局以及纸牌的设定;b、能够设定不同等级以实现游戏难易度的不同;c、实现游戏主功能;d、实现帮助功能;e、实现退出功能。

要求以小组为单位,用JAVA实现蜘蛛纸牌的主要功能模块;可以根据自己对蜘蛛纸牌游戏的理解,对实现的内容进行扩展最后需要提供的材料包括课程设计报告1份,程序拷贝1份(包括源代码和可执行程序)。

学生应完成的工作:

根据JAVA程序设计的思想和编程技术,设计实现蜘蛛纸牌游戏。

上机调试并能正确运行,并提交完整的设计报告和软件程序拷贝。

目前资料收集情况(含指定参考资料):

Java程序设计,朱庆生,古平等著,清华大学出版社,2011,1Java编程,王伟平等著,清华大学出版社,2010,5Java课程设计案例精编黄晓东编著,中国水利水电出版社出版Java程序设计实用教程张永常主编,电子工业出版社出版课程设计时间为一周,从15周星期一开始(2011年12月12日),到15周星期五结束(2011年12月16日)。

课程设计以组为单位进行。

每组34个人。

星期一进行蜘蛛纸牌游戏的内容和规则设计。

星期二查找资料解决具体的技术问题。

星期三用JAVA语言实现程序。

星期四精星课堂演示程序以及完成课程设计报告。

星期五提交程序和课程设计报告。

本组由组成任务下达日期年月日完成日期年月日指导教师(签名)学生(签名)第一章第一章课程设计要求课程设计要求题目名称:

蜘蛛纸牌游戏题目类型:

设计型课程设计目的:

学会综合运用已学的JAVA知识,用面向对象的技术实现一个小型的应用程序。

实验原理:

面向对象程序分析与设计、类的灵活运用、继承技术、多态技术、异常处理、GUI程序设计等。

实验内容:

参照windows游戏蜘蛛纸牌,自己编写设计实现其功能,它具有如下一些功能:

(1)设计一个游戏界面,包括玩牌区、发牌区和回收区。

(2)纸牌以及其背景的设定。

(3)移动纸牌。

使用鼠标将较小的纸牌拖放到较大的纸牌下方,可以拖动一组纸牌,当要求这组纸牌是同一个花色,并且这一组纸牌从上到下是从大到小排列的,且不间断。

(4)回收纸牌。

当某列出现同一花色,从上到下依次是从K到A的不间组合时,这组纸牌将被回收到回收区中。

(5)发牌。

用鼠标单击发牌区,若发牌区还有剩余的纸牌,则将发出一叠纸牌共10张,依次添加到玩牌区的10列纸牌最下方,但要求这10列纸牌没有空白列。

(6)若玩家不了解游戏规则可以点击帮助获得游戏方法。

(7)级别设定。

点击“游戏”菜单中选取游戏难以级别,有3种级别,分别对应初级、中级、高级。

(8)退出游戏。

第二章第二章设计概要设计概要2.1功能设计功能设计编写程序以实现游戏蜘蛛纸牌的功能。

1、设计游戏界面。

2、纸牌以及其背景的设定。

3、移动纸牌。

4、回收纸牌。

5、发牌。

6、若玩家不了解游戏规则可以点击帮助获得游戏方法。

7、级别设定。

8、退出游戏。

2.2程序流程程序流程2.3功能分析功能分析1.主要界面:

主要界面:

以下是主菜单界面的主要代码:

JMenujNewGame=newJMenu(游戏);JMenujHelp=newJMenu(帮助);JMenuItemjItemAbout=newJMenuItem(关于);JMenuItemjItemOpen=newJMenuItem(开始新游戏);JMenuItemjItemDeal=newJMenuItem(发牌);JMenuItemjItemExit=newJMenuItem(退出);JRadioButtonMenuItemjRMItemEasy=newJRadioButtonMenuItem(初级:

单花色);/菜单中的可选项按钮JRadioButtonMenuItemjRMItemNormal=newJRadioButtonMenuItem(中级:

双花色);JRadioButtonMenuItemjRMItemHard=newJRadioButtonMenuItem(高级:

四花色);publicSpiderMenuBar(Spiderspider)this.main=spider;jNewGame.add(jItemOpen);jNewGame.add(jItemDeal);jNewGame.addSeparator();/添加划分线jNewGame.add(jRMItemEasy);jNewGame.add(jRMItemNormal);jNewGame.add(jRMItemHard);jNewGame.addSeparator();jNewGame.add(jItemExit);ButtonGroupgroup=newButtonGroup();/(用来获取JRadioButtonMenuItem的值)group.add(jRMItemEasy);group.add(jRMItemNormal);group.add(jRMItemHard);jHelp.add(jItemAbout);this.add(jNewGame);this.add(jHelp);/添加到菜单栏以下是游戏窗口界面初始化的主要代码:

pane=this.getContentPane();/获得容器pane.setBackground(newColor(0,112,26);/设置背景颜色clickLabel=newJLabel();/发牌区的鼠标点击响应区域clickLabel.setBounds(890,580,110,96);/设置响应区域大小与坐标clickLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED);pane.add(clickLabel);/将响应区域添加到容器中this.initCards();/纸牌初始化this.randomCards();/随机分配纸牌this.setCardsLocation();/为纸牌设置坐标位置this.deal();/从右下角发出一叠纸牌。

游戏刚开始时,需要先发出一叠纸牌。

groundLabel=newJLabel10;/创建背景框数组,一共有10个背景框。

intx=20;/背景框的x坐标,10个背景框是并排放置的,y坐标相等。

第一个背景框的x坐标为20。

for(inti=0;i10;i+)/循环创建背景框,并设置其坐标大小等属性groundLabeli=newJLabel();/创建背景框groundLabeli.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED);/为Label设置边框/,/形成背景框groundLabeli.setBounds(x,25,71,96);/设置背景框的大小与坐标x+=101;/相邻的背景框的x坐标差值为101。

this.pane.add(groundLabeli);/将背景框添加到容器中this.setVisible(true);/显示窗口2初始化纸牌及发牌操作:

初始化纸牌及发牌操作:

初始化纸牌的主要代码(包括所有纸牌生成及存入数组,右下角发牌区纸牌初始化以及表面显示纸牌初始化):

所有纸牌的生成及存入数组代码:

publicvoidinitCards()/如果纸牌已被赋值,即将其从框架的面板中移去if(cards0!

=null)for(inti=0;i104;i+)pane.remove(cardsi);intn=0;/通过难度等级,为n赋值if(this.grade=Spider.EASY)n=1;elseif(this.grade=Spider.NATURAL)n=2;elsen=4;/为card赋值for(inti=1;i=8;i+)for(intj=1;j=13;j+)cards(i-1)*13+j-1=newPKCard(i%n+1)+-+j,this);/当n为1时,i%8的值永远是0,所以i%8+1的值永远是1,因此n为1时,创建的card的名称是1/-1到1-13,全是黑桃。

其他等级类似。

/纸牌随机分配publicvoidrandomCards()/将纸牌的顺序打乱,否则牌号的将是从A到K的出现规律PKCardtemp=null;/随机生成牌号for(inti=0;i52;i+)inta=(int)(Math.random()*104);intb=(int)(Math.random()*104);temp=cardsa;cardsa=cardsb;cardsb=temp;右下角发牌区纸牌的初始化代码:

intx=883;/将坐标定位到右下角发牌区inty=580;for(inti=0;i6;i+)/初始化右下角发牌区的纸牌,共6叠for(intj=0;j5;i-)/初始化玩牌区的纸牌,共5行for(intj=0;j=104)/如果索引值超出数组下标continue;/退出本次循环,执行外层循环pane.add(cardsn);/将索引处的纸牌添加到容器中cardsn.turnRear();/将纸牌转向背面cardsn.moveto(newPoint(x,y);/将纸牌放在固定的位置上map.put(newPoint(x,y),cardsn);/将纸牌及其坐标值存入map中x+=101;/每两列之间的x坐标相距101个像素x=20;/x坐标回到起点位置y-=5;/主坐标向上移5个像素发牌操作功能代码:

publicvoiddeal()/发牌,指从右下角的发牌区发牌this.setNA();/判断10列中是否有空列for(inti=0;i10;i+)if(this.getLastCardLocation(i)=null)JOptionPane.showMessageDialog(this,有空位不能发牌!

提示,JOptionPane.WARNING_MESSAGE);return;intx=20;for(inti=0;i10;i+)PointlastPoint=this.getLastCardLocation(i);/这张牌应“背面向上”if(c=0)/当还没有发过牌时,玩牌区的纸牌列中,每两张纸牌之间的y坐标值相差5,/指的是背面牌与背面牌之间以及背面牌与第一张正面牌之间的y距离lastPoint.y+=5;/这张牌应“正面向上”else/两张正面牌之间的y距离lastPoint.y+=20;map.remove(cardsc+i.getLocation();cardsc+i.moveto(lastPoint);map.put(newPoint(lastPoint),cardsc+i);cardsc+i.turnFront();cardsc+i.setCanMove(true);/将组件card移动到容器中指定的顺序索引。

this.pane.setComponentZOrder(cardsc+i,1);Pointpoint=newPoint(lastPoint);if(cardsc+i.getValue()=1)intn=cardsc+i.whichColumnAvailable(point);point.y-=240;PKCardcard=(PKCard)this.map.get(point);if(card!

=null&card.isCanMove()this.haveFinish(n);x+=101;c+=10;3纸牌移动放置操作:

纸牌移动放置操作:

/用鼠标拖动纸牌publicvoidmouseDragged(MouseEventarg0)if(canMove)intx=0;inty=0;Pointp=arg0.getPoint();x=p.x-point.x;y=p.y-point.y;this.moving(x,y);/*方法:

放置纸牌*/publicvoidsetNextCardLocation(Pointpoint)PKCardcard=main.getNextCard(this);if(card!

=null)if(point=null)card.setNextCardLocation(null);main.map.remove(card.getLocation();/先从HashMap中删除cardcard.setLocation(card.initPoint);/为card设置新的坐标main.map.put(card.initPoint,card);/再将card添加到HashMap中elsepoint=newPoint(point);point.y+=20;card.setNextCardLocation(point);point.y-=20;main.map.remove(card.getLocation();card.setLocation(point);main.map.put(card.getLocation(),card);card.initPoint=card.getLocation();4.回收纸牌操作:

回收纸牌操作:

回收纸牌及过关判定功能主要代码:

publicvoidhaveFinish(intcolumn)Pointpoint=this.getLastCardLocation(column);PKCardcard=(PKCard)this.map.get(point);dothis.map.remove(point);card.moveto(newPoint(20+finish*10,580);/将组件移动到容器中指定的顺序索引。

pane.setComponentZOrder(card,1);/将纸牌新的相关信息存入HashMapthis.map.put(card.getLocation(),card);card.setCanMove(false);point=this.getLastCardLocation(column);if(point=null)card=null;elsecard=this.map.get(point);while(card!

=null&card.isCanMove();finish+;/如果8付牌全部组合成功,则显示成功的对话框if(finish=8)JOptionPane.showMessageDialog(this,恭喜你,顺利通过!

成功,JOptionPane.PLAIN_MESSAGE);if(card!

=null)card.turnFront();card.setCanMove(true);5.帮助菜单功能的实现:

帮助菜单功能的实现:

主要代码如下:

publicclassAboutDialogextendsJDialogJPaneljMainPanel=newJPanel();JTabbedPanejTabbedPane=newJTabbedPane();privateJPaneljPanel1=newJPanel();privateJTextAreajt1=newJTextArea(将电脑多次分发给你的牌按照相同的花色由大至小排列起来。

直到桌面上的牌全都消失。

);publicAboutDialog()setTitle(蜘蛛牌);setSize(300,200);setResizable(false);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);Containerc=this.getContentPane();jt1.setSize(260,200);jt1.setEditable(false);jt1.setLineWrap(true);jt1.setFont(newFont(楷体,java.awt.Font.BOLD,13);jt1.setForeground(Color.BLUE);jPanel1.add(jt1);jTabbedPane.setSize(300,200);jTabbedPane.addTab(游戏规则,null,jPanel1,null);jMainPanel.add(jTabbedPane);c.add(jMainPanel);pack();this.setVisible(true);6.退出功能的实现:

退出功能的实现:

主要代码如下:

/“退出”jItemExit.addActionListener(newActionListener()publicvoidactionPerformed(ActionEvente)main.dispose();System.exit(0););第第3章章调试分析与测试结果调试分析与测试结果通过对游戏的运行,包括移牌、发牌、开始游戏、选择等级等等。

未发现明显异常现象。

在这里:

我们将测试的结果图片贴在了下面:

进入游戏主界面:

游戏菜单:

打开帮助菜单:

拖动纸牌:

发牌以及收牌:

完成游戏:

选择难度(高级):

有空位不能发牌:

第第4章章设计总结设计总结通过这次JAVA课程设计实验,我发现java作为一种面向对象的编程语言,具有可移植性高,安全,可靠等优点,最初设计时就是本着一次编写到处执行设计的。

可以开发各种应用程序和游戏。

在实验中开始我们遇到了很多问题,但小组成员一起努力查找资料,一起讨论提出各自的想法,最终把问题很好的解决掉了.这也让我们知道了团队在计算机编程小组中的重要性.它提醒着我们无论在生活中还是在以后的工作中都要记住团队的重要性。

第第5章章参考文献参考文献Java程序设计,朱庆生,古平等著,清华大学出版社,2011,1Java编程,王伟平等著,清华大学出版社,2010,5Java课程设计案例精编黄晓东编著,中国水利水电出版社出版Java程序设计实用教程张永常主编,电子工业出版社出版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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