1、JAVA课程设计扑克游戏课程设计说明书 NO.1扑克游戏1.课程设计的目的Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,使我们能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与
2、手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。本设计使用JAVA语言开发扑克游戏程序,将电脑多次分发给你的牌按照相同的花色由大至小排列起来。2.设计方案论证2.1设计思路 用java语言,编程实现纸牌游戏,拥有如下规则,将电脑多次分发给你的牌按照相同的花色由大至小排列起来。游戏分为三个难度,简单,普通,困难。简单为单一花色。困难所分发给的牌有四种花色。将大小相邻的纸牌依次排列到一起当每种花色的全部纸牌都按顺序排列到一起,则游戏结束。2.2设计方法将程序设计成为4个类,AboutDialog类用于实现全部的对话。
3、PKCard类用于实现游戏的规则。SpiderMenuBar类用于实现各个模块的功能。Spider为主界面。在SpiderMenuBar建立主界面菜单,通过构造函数public SpiderMenuBar构造函数,生成JMenuBar的图形界面,对菜单中各按钮进行事件监听。在该方法中调用spider的构造方法,在其中生成SpiderMenuBar对象,并放置在框架之上,同时设置框架标题 沈 阳 大 学课程设计说明书 NO.2框架大小背景颜色,布局为空。public Spider() setTitle(陶时扑克); setDefaultCloseOperation(javax.swing.JFr
4、ame.EXIT_ON_CLOSE); setSize(1024, 742); setJMenuBar(new SpiderMenuBar(this); pane = this.getContentPane(); pane.setBackground(new Color(14, 25, 26); pane.setLayout(null); clickLabel = new JLabel(); clickLabel.setBounds(883, 606, 121, 96); pane.add(clickLabel);在Spider类中有如下方法:newGame新游戏的方法,setGrade设置等
5、级方法,初始化等级方法。setGrade,randomCards随即函数。PKCard getPreviousCard获得card上面的那张牌的方法等。由PKCard getPreviousCard,PKCard getNextCard,getLastCardLocation方法对类PKCard调用,代码如下:public PKCard getPreviousCard(PKCard card) Point point = new Point(card.getLocation(); point.y -= 5; card = (PKCard) table.get(point); if (card
6、!= null) return card; point.y -= 15; card = (PKCard) table.get(point); 沈 阳 大 学课程设计说明书 NO.3 return card;public PKCard getNextCard(PKCard card) Point point = new Point(card.getLocation(); point.y += 5;card = (PKCard) table.get(point); if (card != null) return card; point.y += 15; card = (PKCard) table
7、.get(point); return card;public Point getLastCardLocation(int column) Point point = new Point(20 + column * 101, 25); PKCard card = (PKCard) this.table.get(point); if (card = null) return null; while (card != null) point = card.getLocation(); card = this.getNextCard(card); return point;public Point
8、getGroundLabelLocation(int column) return new Point(groundLabelcolumn.getLocation();public void setGroundLabelZOrder() for (int i = 0; i 10; i+) 沈 阳 大 学课程设计说明书 NO.4pane.setComponentZOrder(groundLabeli, 105 + i); 23功能模块图 图1 功能模块图 沈 阳 大 学课程设计说明书 NO.52.4程序流程图图2 程序流程图3.设计结果与分析(1)首先是对游戏中主菜单的设计,设计的菜单包括两个大
9、部分,选项和帮助,如图3所示: 沈 阳 大 学课程设计说明书 NO.6图3 显示菜单通过如下代码实现:JMenu jNewGame = new JMenu(选项); JMenu jHelp = new JMenu(帮助);(2)在选项菜单下面包含7级子菜单,如图4所示:图4 显示菜单 沈 阳 大 学课程设计说明书 NO.7通过如下代码实现:JMenuItem jItemOpen = new JMenuItem(开局);JMenuItem jItemPlayAgain = new JMenuItem(重发牌);JRadioButtonMenuItem jRMItemEasy = new JRad
10、ioButtonMenuItem(简单);JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem(较难);JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem(困难);JMenuItem jItemExit = new JMenuItem(退出);JMenuItem jItemValid = new JMenuItem(显示可执行行操作);(3)帮助下面包含2级子菜单,分别为游戏规则和声明,如图5所示:图5 显示帮助通过如下代码实现:JTabbedPane jT
11、abbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JPanel jPanel2 = new JPanel();(4)主窗体通过类Spider实现。将窗体名称设置为“陶时扑克”,框架的大小设置为1024*742,背景颜色设置为黑色,布局管理设置为空,通过如下代码实现: 沈 阳 大 学课程设计说明书 NO.8public Spider()setTitle(陶时扑克);setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);setSize
12、(1024, 742);setJMenuBar(new SpiderMenuBar(this); pane = this.getContentPane(); pane.setBackground(new Color(14, 25, 26); pane.setLayout(null);(5)进入游戏之后,首先选择开始新游戏,通过类Spider调用它的方法newGame方法,采用随机函数随机初始化牌的顺序(这样做的目的是,使游戏性增加可玩性,使每次出现牌的顺序不同),如图6所示。图6 进入新游戏界面用如下代码实现:public void newGame() this.randomCards();
13、this.setCardsLocation();this.setGroundLabelZOrder();this.deal(); public int getC() return c; public void setGrade(int grade) this.grade = grade; public void initCards() if (cards0 != null) for (int i = 0; i 104; i+) pane.remove(cardsi); int n = 0; if (this.grade = Spider.EASY) n = 1; else if (this.g
14、rade = Spider.NATURAL) n = 2; else n = 4; for (int i = 1; i = 8; i+) 沈 阳 大 学课程设计说明书 NO.9for (int j = 1; j = 13; j+) cards(i - 1) * 13 + j - 1 = new PKCard(i % n + 1) + - + j, this); this.randomCards(); public void randomCards() PKCard temp = null; for (int i = 0; i 52; i+) int a = (int) (Math.random
15、() * 104); int b = (int) (Math.random() * 104); temp = cardsa; cardsa = cardsb; cardsb = temp; (6)在游戏界面的右下角做一张图片,显示扑克牌的背面,同时点击图片,系统自动发牌(当游戏无法继续的时候,可以点击该图片,在每副纸牌上发一张牌,使得进入僵局的纸牌游戏得以继续进行),运行界面如图7,图8所示。 沈 阳 大 学课程设计说明书 NO.10图7 发牌功能界面图8 显示发牌 沈 阳 大 学课程设计说明书 NO.11用如下代码实现:首先在界面上添加纸牌背面的图片:public void turnRear
16、() this.setIcon(new ImageIcon(images/6.gif); this.isFront = false; this.canMove = false;public PKCard getPreviousCard(PKCard card) Point point = new Point(card.getLocation(); point.y -= 5; card = (PKCard) table.get(point); if (card != null) return card; point.y -= 15; card = (PKCard) table.get(point
17、);return card; public PKCard getNextCard(PKCard card) Point point = new Point(card.getLocation(); point.y += 5; card = (PKCard) table.get(point); if (card != null) return card; point.y += 15; card = (PKCard) table.get(point); return card; 沈 阳 大 学课程设计说明书 NO.12 public Point getLastCardLocation(int col
18、umn) Point point = new Point(20 + column * 101, 25); PKCard card = (PKCard) this.table.get(point); if (card = null) return null; while (card != null) point = card.getLocation(); card = this.getNextCard(card); return point; public Point getGroundLabelLocation(int column) return new Point(groundLabelc
19、olumn.getLocation(); public void setGroundLabelZOrder() for (int i = 0; i 10; i+) pane.setComponentZOrder(groundLabeli, 105 + i); (7)在游戏中每次开始游戏都由程序随机发牌,发牌的过程是,先设置纸牌的初始位置由随机函数产生,并随机生成牌号,设置纸牌的位置,初始化待展开的纸牌,将纸牌放置到固定位置(这里调用PKcard类中的setNextCardLocation方法调用图片文件夹里的纸牌图片),如图9,图10所示。 沈 阳 大 学课程设计说明书 NO.13图9 图片库
20、图10 图片被载入 沈 阳 大 学课程设计说明书 NO.14使用如下代码实现:for (int i = 0; i 6; i+) for (int j = 0; j 5; i-) for (int j = 0; j = 104) continue;pane.add(cardsn); cardsn.turnRear(); cardsn.moveto(new Point(x, y); table.put(new Point(x, y), cardsn); x += 101; x = 20; y -= 5; 沈 阳 大 学课程设计说明书 NO.15public void showEnableOpera
21、tor() int x = 0; out: while (true) Point point = null; PKCard card = null; do if (point != null) n+; point = this.getLastCardLocation(n); while (point = null) point = this.getLastCardLocation(+n); if (n = 10) n = 0; x+; if (x = 10) break out; card = (PKCard) this.table.get(point); while (!card.isCar
22、dCanMove(); while (this.getPreviousCard(card)!= null& this.getPreviousCard(card).isCardCanMove()card = this.getPreviousCard(card); if (a = 10) a = 0; for (; a 10; a+) if (a != n) 沈 阳 大 学课程设计说明书 NO.16Point p = null; PKCard c = null; do if (p != null) a+; p = this.getLastCardLocation(a); int z = 0; wh
23、ile (p = null) p = this.getLastCardLocation(+a); if (a = 10) a = 0; if (a = n) a+; z+; if (z = 10) break out; c = (PKCard) this.table.get(p); while (!c.isCardCanMove(); if (c.getCardValue() = card.getCardValue() + 1) card.flashCard(card); try Thread.sleep(800); catch (InterruptedException e)e.printS
24、tackTrace(); c.flashCard(c); 沈 阳 大 学课程设计说明书 NO.17a+; if (a = 10) n+; break out; n+; if (n = 10) n = 0; x+; if (x = 10) break out; 通过调用如下代码实现图片的调用:public void setNextCardLocation(Point point) PKCard card = main.getNextCard(this); if (card != null) if (point = null)card.setNextCardLocation(null); main
25、.table.remove(card.getLocation(); card.setLocation(card.initPoint);main.table.put(card.initPoint, card); 沈 阳 大 学课程设计说明书 NO.18 else point = new Point(point); point.y += 20; card.setNextCardLocation(point); point.y -= 20; main.table.remove(card.getLocation(); card.setLocation(point); main.table.put(ca
26、rd.getLocation(), card); card.initPoint = card.getLocation(); (8)进入游戏之后能对游戏的难度进行选择,难度分为三种,分别为简单,较难,困难,简单为单一花色的纸牌进行游戏,而较难和困难的纸牌花色相应的增多。在设计时首先在SpiderMenuBar类中,将三种难度的菜单实现,然后通过调用PKcard的方法实现各难度的功能,如图11,12所示。 沈 阳 大 学课程设计说明书 NO.19图11 难度选择图12 选择困难 沈 阳 大 学课程设计说明书 NO.20通过如下代码实现:实现菜单分成三种难度:JRadioButtonMenuItem
27、 jRMItemEasy = new JRadioButtonMenuItem(简单); JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem(较难);JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem(困难);jRMItemEasy.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) m
28、ain.setGrade(Spider.EASY); main.initCards(); main.newGame(); 分别对菜单进行事件监听,若选中相应的难度登记则触发Spider类中的方法进行实现:jRMItemNormal.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.NATURAL); main.initCards(); main.newGame(); jRMItemHard.addActionListener(new java.awt.event.Acti
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1