




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计课程设计报告JAVA程序设计 课程设计 之蜘蛛纸牌学院:年级:班级:指导老师:小组成员:时间:JAVA课程设计一一蜘蛛纸牌课程设计题目学院|计算机学院专业网络工程年级2009已知参数和设计要求:蜘蛛纸牌的主要功能模块包括:a、游戏界面的布局以及纸牌的设定;b、能够 设定不同等级以实现的戏难易度的不同;c、实现游戏主功能;d、实现帮助功能; e、实现退出功能。要求以小组为单位,用JAVA实现蜘蛛纸牌的主要功能模块;可以根据自己对 蜘蛛纸牌游戏的理解,对实现的内容进行扩展最后需要提供的材料包括课程设计报 告1份,程序拷贝1份(包括源代码和可执行程序)。学生应完成的工作:根据JAVA
2、程序设计的思想和编程技术,设计实现蜘蛛纸牌游戏。上机调试并 能正确运行,并提交完整的设计报告和软件程序拷贝。目前资料收集情况(含指定参考资料):Java程序设计,朱庆生,古平等著,清华大学出版社,2011, 1Java编程,王伟平等著,清华大学出版社,2010, 5Java课程设计案例精编黄晓东编著,中国水利水电出版社出版Java程序设计实用教程张永常主编,电子工业出版社出版课程设计时间为一周,从15周星期一开始(2011年12月12日),到15周星期五结束(2011年12月16日)。课程设计以组为单位进行。每组34个人。星期一进行蜘蛛纸牌游戏的内容和规则设计。星期二查找资料解决具体的技术问题
3、。星期三用JAVA语言实现程序。星期四精星课堂演示程序以及完成课程设计报告。星期五提交程序和课程设计报告。本组由组成任务下达日期一年一月一日完成日期一年月日指导教师 (签名)学生 (签名)目录第一章课程设计要求1题目名称1题目类型1课程设计目的1实验原理1实验内容1第二章设计概要22.1 功能设计22.2 程序流程22.3 功能分析31 .主要界面:32初始化纸牌及发牌操作: 43纸牌移动放置操作:74 .回收纸牌操作:85 .帮助菜单功能的实现: 96 .退出功能的实现: 10第三章调试分析与测试结果 11第四章设计总结15第五章参考文献16III第一章课程设计要求题目名称:蜘蛛纸牌游戏题目
4、类型:设计型课程设计目的:学会综合运用已学的JAVA知识,用面向对象的技术实现一个小型的应用 程序。实验原理:面向对象程序分析与设计、类的灵活运用、继承技术、多态技术、异常 处理、GUI程序设计等。实验内容:参照windows游戏蜘蛛纸牌,自己编写设计实现其功能,它具有如下一些功能:(1)设计一个游戏界面,包括玩牌区、发牌区和回收区。(2)纸牌以及其背景的设定。(3)移动纸牌。使用鼠标将较小的纸牌拖放到较大的纸牌下方,可以拖动 一组纸牌,当要求这组纸牌是同一个花色,并且这一组纸牌从上到下 是从大到小排列的,且不间断。(4)回收纸牌。当某列出现同一花色,从上到下依次是从K到A的不问组合时,这组纸
5、牌将被回收到回收区中。(5)发牌。用鼠标单击发牌区,若发牌区还有剩余的纸牌,则将发出一叠 纸牌共10张,依次添加到玩牌区的10列纸牌最下方,但要求这10列 纸牌没有空白列。(6)若玩家不了解游戏规则可以点击帮助获得游戏方法。(7)级别设定。点击“游戏”菜单中选取游戏难以级别,有 3种级别,分 别对应初级、中级、高级。(8)退出游戏。第二章设计概要2.1 功能设计编写程序以实现游戏蜘蛛纸牌的功能。1、设计游戏界面。2、纸牌以及其背景的设定。3、移动纸牌。4、回收纸牌。5、发牌。6、若玩家不了解游戏规则可以点击帮助获得游戏方法。7、级别设定。8、退出游戏。2.2 程序流程运行2.3 功能分析1.主
6、要界面:以下是主菜单界面的主要代码:JMenu jNewGame = new JMenu(游戏);JMenu jHelp = new JMenu(帮助);JMenuItem jItemAbout = new JMenuItem( 关于);JMenultemjItemOpen=newJMenuItem(开始新游戏);JMenuItemjItemDeal=newJMenuItem(发牌);JMenuItemjItemExit=newJMenuItem(退出);JRadioButtonMenuItem jRMItemEasy = new JRadioButtonMenuItem( 初级: 单花色);
7、/菜单中的可选项按钮JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem( 中级: 双花色”);JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem( 高级: 四花色);public SpiderMenuBar(Spider spider) this . main = spider;jNewGame.add(jItemOpen );jNewGame.add(jItemDeal );jNewGame.addSeparator();/ 添加划分线jNewGame.
8、add(jRMItemEasy );jNewGame.add(jRMItemNormal );jNewGame.add(jRMItemHard );jNewGame.addSeparator();jNewGame.add(jItemExit );ButtonGroup group =new ButtonGroup(); / (用来获取JRadioButtonMenuItem 的值) group.add(jRMItemEasy);group.add( jRMItemNormal ); group.add(jRMItemHard);jHelp .add( jItemAbout ); this .a
9、dd( jNewGame ); this .add( jHelp ); /添加到菜单栏以下是游戏窗口界面初始化的主要代码: pane = this .getContentPane();/ 获得容器pane .setBackground( new Color(0, 112, 26);/设置背景颜色clickLabel = new JLabel(); / 发牌区的鼠标点击响应区域 clickLabel.setBounds(890, 580,110, 96);/ 设置响应区域大小与坐标clickLabel.setBorder(javax.swing.BorderFactory3.createEtch
10、edBorder (javax.swing.border.EtchedBorder.RAISED );pane .add( clickLabel );/将响应区域添加到容器中this .initCards(); / 纸牌初始化this .randomCards(); / 随机分配纸牌this .setCardsLocation();/ 为纸牌设置坐标位置this .deal(); /从右下角发出一叠纸牌。游戏刚开始时,需要先发出一叠纸牌。groundLabel = new JLabel10; / 创建背景框数组,一共有10个背景框。int x = 20;/背景框的x坐标,10个背景框是并排放置
11、的,y坐标相等。第一个背景框的x坐标为20。for ( int i = 0; i 10; i+) / 循环创建背景框,并设置其坐标大小等属性groundLabeli = new JLabel(); / 创建背景框groundLabeli.setBorder(javax.swing.BorderFactory.createEtchedBorder (javax.swing.border.EtchedBorder.RAISED ); / 为Label设置边框/,/形成背景框groundLabel i.setBounds(x,25, 71, 96); / 设置背景框的大小与坐标x += 101;/
12、相邻的背景框的x坐标差值为101。this . pane .add( groundLabel i);/将背景框添加到容器中this .setVisible(true ); /显示窗口2初始化纸牌及发牌操作:初始化纸牌的主要代码(包括所有纸牌生成及存入数组,右下角发牌区纸牌初始化以及表面显示纸牌初始化):所有纸牌的生成及存入数组代码:public void initCards() /如果纸牌已被赋值,即将其从框架的面板中移去if ( cards 0 != null ) for ( int i = 0; i 104; i+) pane .remove( cards i); int n = 0;/通
13、过难度等级,为n赋值if ( this . grade = Spider. EASY) n = 1; else if ( this . grade = Spider. NATURAL) else n = 4;/ 为card赋值for ( int i = 1; i = 8; i+) for (int j = 1; j = 13; j+) cards (i - 1) *13 + j - 1 =new PKCard(i % n + 1) +-+ j,this ); /当n为1时,i%8的值永远是0 ,所以i%8+1的值永远是1, 因此n为1时,创建的card的名称是1/ -1 到1-13 ,全是黑桃
14、。其他等级类似。/纸牌随机分配/ 将纸牌的顺序打乱,否则牌号的将是从A到K的出public void randomCards() 现规律PKCard temp = null ;/随机生成牌号for ( int i = 0; i 52; i+) int a = (int ) (Math.random () * 104);int b = (int ) (Math.random () * 104);temp = cards a;cards a = cards b;cards b = temp;右下角发牌区纸牌的初始化代码:int x = 883;/将坐标定位到右下角发牌区/初始化右下角发牌区的纸牌,
15、共 6叠int y = 580;for ( int i = 0; i 6; i+) for ( int j = 0; j 5; i-) for (int j = 0; j = 104) continue ; /生成索引值/如果索引值超出数组下标 退出本次循环,执行外层循环pane .add( cards n);/将索引处的纸牌添加到容器中cards n.turnRear();/将纸牌转向背面cards n.moveto( new Point(x, y);/ 将纸牌放在固定的位置上map.put( new Point(x, y),cards n);/将纸牌及其坐标值存入map中x += 101;
16、/每两列之间的x坐标相距101个像素 x = 20;/ x坐标回到起点位置y -= 5;/ 主坐标向上移5个像素发牌操作功能代码:public void deal() /发牌,指从右下角的发牌区发牌this .setNA();/判断10列中是否有空列 for ( int i = 0; i 10; i+) if ( this .getLastCardLocation(i) =null ) JOptionPane. showMessageDialog (this ,有空位不能发牌! 提示,JOptionPane. WARNING_MESSAGE); return ; int x = 20;for
17、( int i = 0; i 10; i+) Point lastPoint =this .getLastCardLocation(i);/ 这张牌应胃面向上”if ( c = 0) /当还没有发过牌时,玩牌区的纸牌列中,每两张纸牌之间的y坐标值相差5,/指的是背面牌与背面牌之间以及背面牌与第一张正面牌之间的y距离lastPoint. y += 5;/ 这张牌应正面向上”else /两张正面牌之间的 y距离lastPoint. y += 20; map.remove( cards c + i.getLocation(); cards c + i.moveto(lastPoint);map.pu
18、t( new Point(lastPoint),cards c + i);cards c + i.turnFront();cards c + i.setCanMove( true );/将组件card移动到容器中指定的顺序索引。this . pane .setComponentZOrder( cards c + i, 1);Point point = new Point(lastPoint);if ( cards c + i.getValue() = 1) int n = cards c + i.whichColumnAvailable(point);point. y -= 240;PKCar
19、d card = (PKCard)this . map.get(point);if (card != null & card.isCanMove() this .haveFinish(n);x += 101;c += 10;3纸牌移动放置操作:/用鼠标拖动纸牌public void mouseDragged(MouseEvent arg0) if ( canMove ) int x = 0;int y = 0;Point p = arg0.getPoint();x = p.x -point. x;y = p.y -point. y;this .moving(x, y);/*方法:放置纸牌 */
20、public void setNextCardLocation(Point point) PKCard card = main .getNextCard( this ); if (card != null ) if (point = null ) card.setNextCardLocation(null );main . map.remove(card.getLocation();/ 先从 HashMap 中删除card card.setLocation(card.initPoint );/ 为card 设置新的坐标main . map.put(card. initPoint , card)
21、; /再将 card 添力至UHashMap 中 else point = new Point(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 .回收纸牌操作:回收纸牌及过关判定功能主要代码:public void
22、 haveFinish( int column) Point point = this .getLastCardLocation(column);PKCard card = (PKCard) | this . map.get(point); do this . map.remove(point);card.moveto( new Point(20 + finish * 10, 580);/将组件移动到容器中指定的顺序索引。pane .setComponentZOrder(card, 1);/ 将纸牌新的相关信息存入 HashMap this . map.put(card.getLocation
23、(), card);card.setCanMove( false);point = this .getLastCardLocation(column); if (point = null ) card = null ;else card = this . map.get(point); while (card != null & card.isCanMove();finish +;/如果8付牌全部组合成功,则显示成功的对话框if ( finish = 8) JOptionPane. showMessageDialog (this ,恭喜你,顺利通过!,成功, JOptionPane. PLAI
24、N_MESSAGE );if (card != null ) card.turnFront();card.setCanMove( true );5 .帮助菜单功能的实现:主要代码如下:public class AboutDialog extends JDialog JPanel jMainPanel = new JPanel();JTabbedPane jTabbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JTextArea jt1 = new JTextArea(将电脑多次分发给你的牌按照相
25、同的花色由大至小排列起来。直到桌面上的牌全都消失。”);public AboutDialog() setTitle( 蜘蛛牌); setSize(300, 200); setResizable(false);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE );Container c = this .getContentPane(); jt1 .setSize(260, 200); jt1 .setEditable(false );jt1 .setLineWrap(true );jt1 .setFont( new Font(楷体 _GB2312” , java.awt.Font.BOLD, 13);jt1 .setForeground(Color.BLUE);jPanel1 .add( jt1 ); jTabbedPane .setSize(300, 200); jTabbedPane
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人车位租赁合同集合15篇
- 国际赛事策划及组训培训资源
- 旅游智能安全行业市场调研报告:消费者需求与市场趋势分析
- 外地患者异地就医的透析指导
- 2025商场店铺租赁合同范本
- 中国银行兴安盟科尔沁右翼前旗2025秋招英文群面案例角色分析
- 中国银行佳木斯市抚远市2025秋招笔试金融学专练及答案
- 邮储银行甘孜藏族自治州九龙县2025秋招笔试思维策略题专练及答案
- 邮储银行中卫市中宁县2025秋招英文面试20问及高分答案
- 工商银行成都市蒲江县2025秋招笔试管理营销专练及答案
- 2025年辅警招聘考试试题库附答案(能力提升)
- 搅拌车司机安全培训课件
- 2025年易制毒试题(含答案)
- 2025年医院药事管理自查报告及整改措施
- 工程地质学 第3版 课件 第3章 地质构造
- 2025标准建设银行贷款合同范本
- 2025年沥青搅拌站试题库(含答案)
- 2024北京一零一中高三10月月考语文试题及答案
- 软件开发项目分包管理实施框架
- 个人成长与职业发展心理学
- 《思想道德与法治》(23版):绪论 担当复兴大任 成就时代新人
评论
0/150
提交评论