版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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个人。星期一进行蜘蛛纸牌游戏的内容和规则设计。星期二查找资料解决具体的技术问题。星期三用JA
3、VA语言实现程序。星期四精星课堂演示程序以及完成课程设计报告。星期五提交程序和课程设计报告。本组由组成任务下达日期 年 月 日完成日期 年 月 日指导教师 (签名)学 生 (签名) 目录第一章 课程设计要求1题目名称1题目类型1课程设计目的1实验原理1实验内容1第二章 设计概要22.1 功能设计22.2 程序流程22.3功能分析31. 主要界面:32初始化纸牌及发牌操作:43纸牌移动放置操作:74.回收纸牌操作:85.帮助菜单功能的实现:96.退出功能的实现:10第三章 调试分析与测试结果11第四章 设计总结15第五章 参考文献16第一章 课程设计要求题目名称:蜘蛛纸牌游戏题目类型:设计型课程
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(关于);JMenuItem jItemOpen = new JMenuItem(开始新游戏);JMenuItem jItemDeal = new JMenuItem(发牌);JMenuItem jItemExit = new JMenuItem(退出);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.add(jRMItemEasy);j
8、NewGame.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.add(jNewGame);this.add(jHelp);/添加
9、到菜单栏以下是游戏窗口界面初始化的主要代码:pane = this.getContentPane(); / 获得容器pane.setBackground(new Color(0, 112, 26);/ 设置背景颜色clickLabel = new JLabel(); / 发牌区的鼠标点击响应区域clickLabel.setBounds(890, 580, 110, 96); / 设置响应区域大小与坐标clickLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.
10、RAISED);pane.add(clickLabel); / 将响应区域添加到容器中this.initCards();/ 纸牌初始化this.randomCards();/ 随机分配纸牌this.setCardsLocation();/ 为纸牌设置坐标位置this.deal(); / 从右下角发出一叠纸牌。游戏刚开始时,需要先发出一叠纸牌。groundLabel = new JLabel10;/ 创建背景框数组,一共有10个背景框。int x = 20;/ 背景框的x坐标,10个背景框是并排放置的,y坐标相等。第一个背景框的x坐标为20。for (int i = 0; i 10; i+) /
11、 循环创建背景框,并设置其坐标大小等属性groundLabeli = new JLabel();/ 创建背景框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);/ 将背景框添
12、加到容器中this.setVisible(true);/ 显示窗口2初始化纸牌及发牌操作: 初始化纸牌的主要代码(包括所有纸牌生成及存入数组,右下角发牌区纸牌初始化以及表面显示纸牌初始化):所有纸牌的生成及存入数组代码:public void initCards() / 如果纸牌已被赋值,即将其从框架的面板中移去if (cards0 != null) for (int i = 0; i 104; i+) pane.remove(cardsi);int n = 0;/ 通过难度等级,为n赋值if (this.grade = Spider.EASY) n = 1; else if (this.gr
13、ade = Spider.NATURAL) n = 2; 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,全是黑桃。其他等级类似。 /纸牌随机分配public void randomCards() / 将纸牌的顺序打乱,否则牌号的将是从A到K的出现规
14、律PKCard temp = null;/ 随机生成牌号for (int i = 0; i 52; i+) int a = (int) (Math.random() * 104);int b = (int) (Math.random() * 104);temp = cardsa;cardsa = cardsb;cardsb = temp;右下角发牌区纸牌的初始化代码:int x = 883;/ 将坐标定位到右下角发牌区int y = 580;for (int i = 0; i 6; i+) / 初始化右下角发牌区的纸牌,共6叠for (int j = 0; j 5; i-) / 初始化玩牌区的
15、纸牌,共5行for (int j = 0; j = 104) / 如果索引值超出数组下标continue; / 退出本次循环,执行外层循环pane.add(cardsn); / 将索引处的纸牌添加到容器中cardsn.turnRear(); / 将纸牌转向背面cardsn.moveto(new Point(x, y); / 将纸牌放在固定的位置上map.put(new Point(x, y), cardsn); / 将纸牌及其坐标值存入map中x += 101; / 每两列之间的x坐标相距101个像素x = 20; / x坐标回到起点位置y -= 5; / 主坐标向上移5个像素发牌操作功能代码
16、: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 (int i = 0; i 10; i+) Point lastPoint = this.getLastCardLocation(i);/ 这张
17、牌应“背面向上”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(new Point(lastPoint), cardsc + i);cardsc + i.turnFront();cardsc + i.setCanM
18、ove(true);/ 将组件card移动到容器中指定的顺序索引。this.pane.setComponentZOrder(cardsc + i, 1);Point point = new Point(lastPoint);if (cardsc + i.getValue() = 1) int n = cardsc + i.whichColumnAvailable(point);point.y -= 240;PKCard card = (PKCard) this.map.get(point);if (card != null & card.isCanMove() this.haveFinish(
19、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);/* * 方法:放置纸牌 */public void setNextCardLocation(Point point) PKCard card = main.getNextCard(this);if (card
20、!= 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中 else point = new Point(point);point.y += 20;card.setNextCardLocation(point);point.y -=
21、 20;main.map.remove(card.getLocation();card.setLocation(point);main.map.put(card.getLocation(), card);card.initPoint = card.getLocation();4.回收纸牌操作:回收纸牌及过关判定功能主要代码:public void haveFinish(int column) Point point = this.getLastCardLocation(column);PKCard card = (PKCard) this.map.get(point);do this.map.
22、remove(point);card.moveto(new Point(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
23、 (card != null & card.isCanMove();finish+;/ 如果8付牌全部组合成功,则显示成功的对话框if (finish = 8) JOptionPane.showMessageDialog(this, 恭喜你,顺利通过!, 成功,JOptionPane.PLAIN_MESSAGE);if (card != null) card.turnFront();card.setCanMove(true);5.帮助菜单功能的实现:主要代码如下:public class AboutDialog extends JDialog JPanel jMainPanel = new J
24、Panel();JTabbedPane jTabbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JTextArea jt1 = new JTextArea(将电脑多次分发给你的牌按照相同的花色由大至小排列起来。直到桌面上的牌全都消失。);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.Fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45107-2024表土剥离及其再利用技术要求
- 福建省宁德市中考语文模拟试卷三套【附参考答案】
- 2024年精简版:高端装备零部件采购与技术支援合同
- 2024年度艺术品抵押贷款艺术品展览展示合同3篇
- 2024殡仪馆殡葬服务协议书
- 个人信贷简易协议样式 2024年规范版
- 精神科重大意外伤害事故护理急救工作规定
- 福建省南平市武夷山第二中学高二物理下学期期末试题含解析
- 福建省南平市文化武术学校2021年高一数学文期末试卷含解析
- 福建省南平市外屯中学高二物理测试题含解析
- 稷下街道中心小学校币使用方案含班币
- 110kV电力变压器参数表
- 卡西欧手表GW-M5610中文使用说明书
- 2024年天津三源电力集团限公司社会招聘33人高频难、易错点500题模拟试题附带答案详解
- 校(园)廉政风险防控预警处置制度
- TB 10106-2023铁路工程地基处理技术规程
- 三年级下册综合实践活动教学设计- 岭南水果|粤教版 52张
- 沪教版数学六年级(上)第二章分数课课练和单元练习卷及参考答案
- 中医护理学 课件 模块七 中医护理操作 项目四麦粒灸技术
- 小学心理健康教师资格考试面试2024年下半年试题与参考答案
- 二级MS操作题真题
评论
0/150
提交评论