ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:60.91KB ,
资源ID:10701911      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10701911.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(游戏的设计与实现 课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

游戏的设计与实现 课程设计.docx

1、游戏的设计与实现 课程设计 Java语言程序设计课程设计题 目 2048游戏的设计与实现 一、 需求分析2048是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于1024和小3传奇的玩法开发而成的新型数字游戏1。随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。衍生版中最 出名的是2048六边形版本,先后在全球81个国家中的board game中排进了前200。安卓版非常火爆的有挑战2048,其2.0.0版以后还加入了双人对战。其次比较特别的有2

2、048中国朝代版。更有 2048自定义版,可以自己定义文字和图片。2048是IOS中流行的一款。本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用二、 系统运行环境1、硬件环境:2、软件环境:操作系统:WindowsXP/Windows7 软件:集成开发环境Eclipse 三、 功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩

3、游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。功能图如下:四、 总体设计简要设计流程:程序结构说明:/重新开始,若是初次运行游戏,则从文件中读入最高分void restart()/控制方法public void keyPressed(KeyEvent e)/绘图方法 public void p

4、aint(Graphics g)/判断是否已经失败,若失败则返回true,否则返回false public boolean judgeFail()/向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true; public void moveDown()/向左滑动,若各行均没有方块相消或移动,则返回false,否则返回true; public void moveLeft()/向右滑动,若各行均没有方块相消或移动,则返回false,否则返回true; public void moveRight()/向上滑动,若各行均没有方块相消或移动,则返回false,否则返回true; Publ

5、ic void moveUp()/在游戏区空闲处随机生成2或4 public void generateRandom2or4()五、 程序模块设计源码如下:Main类:import javax.swing.JFrame;public class Main public static void main(String args) JFrame frame=new Java2048(); frame.setTitle(Java2048); frame.setSize(455,610); frame.setLocationRelativeTo(null); frame.setDefaultClose

6、Operation(JFrame.EXIT_ON_CLOSE ); frame.setVisible(true); Java2048类:import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;public class Java2048 extends JFrame implements KeyListener private static final long serialVersionUID = 1L; Color background = new C

7、olor(190, 173, 160);/ 背景色 Color foreground = new Color(204, 192, 178);/ 前景色 Color wordColor = new Color(232, 216, 203);/ 单词色 Font wordFont = new Font(微软雅黑, Font.PLAIN, 20);/ 单词字体 Font numberFont = new Font(微软雅黑, Font.BOLD, 40);/ 数字字体 Random random=new Random();/随机数发生器 int array;/游戏用2维数组 /逐行或逐列处理数组,第

8、一个参数为实际数字,第二个为判断值,用来判断是否应该消除相同的数字 int process=new int 42; int score;/分数,初始化为零 int highestScore;/游戏中最高分 int highestScore2=0;/文件中最高分 int biggestNumber=0; boolean ifGenerate2or4; int rd=new int16;/生成随机2或4的位置 private Graphics gBuffer; /构造方法 public Java2048() addKeyListener(this); addWindowListener(new W

9、indowAdapter() public void windowClosing(WindowEvent e) if(JOptionPane.showConfirmDialog(null, 确定退出?, 提示, JOptionPane.YES_NO_OPTION)=JOptionPane.YES_NO_OPTION) if(highestScorehighestScore2)/若在本次游戏中破了纪录,则更新文件中的最高分 highestScore2=highestScore; File file=new File(Java2048beta1.txt); BufferedWriter bw; t

10、ry bw=new BufferedWriter(new FileWriter(file); bw.write(String.valueOf(highestScore2),0,String.valueOf(highestScore2).length(); bw.close(); catch(Exception e1) JOptionPane.showMessageDialog(null,找不到同目录下Java2048beta1.txt文件或文件已损坏!, 提示, JOptionPane.INFORMATION_MESSAGE); ; System.exit(0); ); restart();

11、void restart()/重新开始 /若是初次运行游戏,则从文件中读入最高分 if(highestScore=0) File file=new File(Java2048beta1.txt); BufferedReader br; try br=new BufferedReader(new FileReader(file); highestScore2=Integer.valueOf(br.readLine(); br.close(); catch(Exception e) JOptionPane.showMessageDialog(this,找不到同目录下Java2048beta1.tx

12、t文件或文件已损坏!, 提示, JOptionPane.INFORMATION_MESSAGE); System.exit(0); ; highestScore=highestScore2; array=new int44;/清空游戏用2维数组 score=0;/重置分数为零 biggestNumber=0;/重置最大数字为零 /在游戏区随机生成两个2或4 generateRandom2or4(); generateRandom2or4(); /绘图方法public void paint(Graphics g) gBuffer=g;gBuffer.setColor(background);gB

13、uffer.drawRoundRect(30, 40, 185, 90, 20, 20);/ 画分数显示区gBuffer.fillRoundRect(30, 40, 185, 90, 20, 20);gBuffer.drawRoundRect(245, 40, 185, 90, 20, 20);/ 画最高分显示区 gBuffer.fillRoundRect(245, 40, 185, 90, 20, 20); gBuffer.drawRoundRect(0, 150, 454, 460, 10, 10);/ 画主游戏区 gBuffer.fillRoundRect(0, 150, 454, 46

14、0, 10, 10); gBuffer.setFont(wordFont); gBuffer.setColor(wordColor); gBuffer.drawString(SCORE, 90, 70);/ 画SCORE gBuffer.drawString(BEST, 315, 70); / 画BEST gBuffer.setFont(numberFont); gBuffer.setColor(Color.white);if(score10) gBuffer.drawString(String.valueOf(score), 110, 115);/画分数数字 else if(score100

15、) gBuffer.drawString(String.valueOf(score), 100, 115);/画分数数字 else if(score1000) gBuffer.drawString(String.valueOf(score), 85, 115);/画分数数字 else if(score10000) gBuffer.drawString(String.valueOf(score), 73, 115);/画分数数字 else if(score100000) gBuffer.drawString(String.valueOf(score), 60, 115);/画分数数字 else

16、if(score1000000) gBuffer.drawString(String.valueOf(score), 50, 115);/画分数数字 else gBuffer.drawString(String.valueOf(score), 37, 115);/画分数数字 if(highestScore10) gBuffer.drawString(String.valueOf(highestScore), 325, 115);/画分数数字 else if(highestScore100) gBuffer.drawString(String.valueOf(highestScore), 315

17、, 115);/画分数数字 else if(highestScore1000) gBuffer.drawString(String.valueOf(highestScore), 300, 115);/画分数数字 else if(highestScore10000) gBuffer.drawString(String.valueOf(highestScore), 288, 115);/画分数数字 else if(highestScore100000) gBuffer.drawString(String.valueOf(highestScore), 275, 115);/画分数数字 else if

18、(highestScore1000000) gBuffer.drawString(String.valueOf(highestScore), 265, 115);/画分数数字 else gBuffer.drawString(String.valueOf(highestScore), 252, 115);/画分数数字 gBuffer.setColor(foreground); for (int i = 0; i 4; i+) for (int j = 0; j 4; j+) gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100,

19、10, 10); gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); for(int i=0;i4;i+) for(int j=0;j4;j+) switch (arrayij) case 2: gBuffer.setColor(new Color(238, 228, 218);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 1

20、12, 100, 100, 10, 10);gBuffer.setColor(new Color(122, 113, 104); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 50); gBuffer.drawString(2, 45 + j * 112, 230 + i * 113); break; case 4: gBuffer.setColor(new Color(236, 224, 200);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fi

21、llRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(119, 110, 103); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 50); gBuffer.drawString(4, 45 + j * 112, 230 + i * 113); break; case 8: gBuffer.setColor(new Color(242, 177, 121);gBuffer.drawRoundRect(10 + j * 112, 160 +

22、 i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(250, 248, 235); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 50);gBuffer.drawString(8, 45 + j * 112, 230 + i * 113); break; case 16: gBuffer.setColor(new Color(245, 149, 101);gBu

23、ffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(252, 244, 242);gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 45);gBuffer.drawString(16, 33 + j * 112, 230 + i * 111); break; case 32: gBuffer

24、.setColor(new Color(245, 124, 95);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.setColor(new Color(255, 241, 249); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 45);gBuffer.drawString(32, 33 + j * 112, 23

25、0 + i * 111); break; case 64: gBuffer.setColor(new Color(246, 93, 59);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(247, 249, 235);gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 45);gBu

26、ffer.drawString(64, 33 + j * 112, 230 + i * 111); break; case 128: gBuffer.setColor(new Color(237, 206, 113);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(248, 246, 255); gBuffer.s

27、etFont(new Font(微软雅黑, Font.BOLD, 40); gBuffer.drawString(128, 23 + j * 112, 228 + i * 111); break; case 256: gBuffer.setColor(new Color(237, 204, 97);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.set

28、Color(new Color(245, 244, 249); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 40);gBuffer.drawString(256, 23 + j * 112, 228 + i * 111); break; case 512: gBuffer.setColor(new Color(235, 201, 78);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 +

29、 i * 112, 100, 100, 10, 10);gBuffer.setColor(new Color(255, 241, 248); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 40);gBuffer.drawString(512, 23 + j * 112, 228 +i * 111); break; case 1024: gBuffer.setColor(new Color(237, 197, 63);gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.setColor(new Color(240, 246, 244); gBuffer.setFont(new Font(微软雅黑, Font.BOLD, 35); gBuffer.drawString(1024, 17 + j * 112, 225 + i * 113); break; case 2048:

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

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