2048小游戏 Java 课程设计报告书
java2048游戏课程设计
java2048游戏课程设计一、课程目标知识目标:1. 学生能理解2048游戏的基本规则和逻辑,掌握其核心算法。
2. 学生能运用Java语言实现2048游戏的各项功能,包括游戏界面展示、数字格移动、合并等。
3. 学生了解面向对象编程思想,并能运用到2048游戏的开发中,如定义类、创建对象等。
技能目标:1. 学生能够运用所学知识独立完成2048游戏的编写,提高编程实践能力。
2. 学生能够通过分析问题、设计算法、编写代码、调试程序等过程,培养解决问题的能力。
3. 学生能够运用Java语言编写功能模块,提高模块化编程能力。
情感态度价值观目标:1. 学生通过完成2048游戏的开发,增强对编程学习的兴趣和自信心,培养自主学习能力。
2. 学生在团队协作中,学会沟通、分享、互助,培养良好的团队协作精神。
3. 学生能够在编程过程中,体会到编程的美和乐趣,激发创新思维,培养探究精神。
本课程针对高中年级学生,结合Java编程语言的教学,以2048游戏为载体,让学生在实践中掌握编程知识和技能。
课程注重培养学生的编程思维和实际操作能力,提高学生分析问题、解决问题的能力,同时激发学生对编程的兴趣和热情,培养良好的团队协作精神。
通过本课程的学习,使学生能够达到上述课程目标,为后续的编程学习打下坚实基础。
二、教学内容1. 面向对象编程基础:复习Java类与对象的概念,理解封装、继承、多态等面向对象特性。
- 教材章节:第三章《面向对象编程》- 内容:类的定义、对象的创建、访问控制符、构造方法、继承、多态。
2. Java基本语法:巩固Java基本语法,包括数据类型、运算符、控制结构等。
- 教材章节:第二章《Java基本语法》- 内容:变量、数据类型、运算符、控制结构(循环、分支)。
3. Java Swing图形用户界面:学习Swing图形用户界面编程,为2048游戏设计界面。
- 教材章节:第六章《图形用户界面编程》- 内容:Swing组件、容器、布局管理器、事件处理。
2048设计报告
三、研究/设计方案(包括研究/设计方法、技术路线,理论分析、计算、实验方法和步骤及其可行性,可能出现的技术问题及解决办法)
可行性,可能出现的技术问题及解决办法)
步骤:
[10]
[11]
[12]/p-26393184.html
二、研究内容
要开发这一款游戏,要根据以下几步来完成:
1)首先是要对这款游戏的代码分析。对整一个游戏,要将各个部位分割成其对应部位的功能代码,并且逐一去分析实现其中不同的功能。
[2]/userlog6/81073/archives/2007/291252.shtml.
[3]信息管理系列.《商业网站的创建与管理》.中国人民大学出版社.2001.15-24.63-72.
[4]/Electronic/081021/10363416-2.html.
2)其次是游戏的流程。在做好每一个部分的代码之后,就需要把所创造的各个关键部分拼接起来,因此,就需要先把该游戏的流程一步一步的弄清楚。
3)再者是对《2048》这一款游戏的算法分析。对于整个游戏而言,最主要的心脏就是这一款游戏的算法,游戏好不好,就看这一款游戏的算法是不是符合逻辑。《2048》这一款游戏的算法分为上下左右自 2 个方向的,具体的下面分析。4)《2048》中每个格子的数据和颜色的刷新。在每一次移动之后,几乎在这4*4的每一个方格上的数据都会变化,因此在每一次移动之后,每一个方格上的数据都要刷新一次。相对的,每一个数的背景颜色是不同的,也就是说,在每一次数据刷新的时候,每一个方格上的颜色也要同样的刷新一次。
由于本人十分喜欢《2048》这款手游,在了解了本次课程设计是设计一个Android平台下的软件之后,
2048游戏的设计与实现 课程设计
Java语言程序设计课程设计题目2048游戏的设计与实现目录1. 需求分析 ...........................................................................................错误!未定义书签。
2. 系统运行环境 ....................................................................................错误!未定义书签。
3. 功能需求描述 ....................................................................................错误!未定义书签。
4. 总体设计 ...........................................................................................错误!未定义书签。
5. 程序模块设计 ....................................................................................错误!未定义书签。
6. 总结...................................................................................................错误!未定义书签。
一、需求分析《2048》是比较流行的一款数字游戏。
原版2048首先在github上发布,原作者是Gabriele Cirulli。
它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1] 。
随后2048便出现各种版本,走各大平台。
由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。
JAVA课程设计报告(小游戏)1
JAVA课程设计报告(小游戏)第一章总体设计1.1本系统的主要功能记忆测试游戏1.2系统包含的类及类之间的关系本系统共包括7个java源文件。
如图1-1所示。
图1-1 类之间的关系2.2 java源文件及其功能1.MemoryGame.java该文件负责创建记忆测试系统的主窗口,该类含有main方法,记忆测试系统从该类开始运行;2.MemoryTestArea.java该文件所包含的MemoryTestArea类是主类MemoryGame窗口的一个JPanel容器,所创建的对象成为测试区,这个测试区被添加到MemoryGame窗口的中心;3.Block.java该文件所包含的Block类是JButton的子类,负责为MemoryTestArea 类中的ArrayList数组表提供Block对象;4.Record.java该文件所包含的Record类是javax.swing包中JDialog对话框的子类,当用户成功单击出相应级别所要求的图标相同的方块后,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中;5.ShowRecordDialog.java该文件所包含的ShowRecordDialog类是javax.swing包中JDialog 对话框的子类,当用户单击查看排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩;6.People.java该文件所包含的People对象封装用户的名字和成绩,以便ShowRecordDialog 对象可以按成绩的高低排列用户。
第二章详细设计2.1主类MemoryGame.java(1)成员变量见表2-1表2-1 主要成员变量(属性)成员变量描述变量类型名称菜单条JMenuBar bar 字符串数组Sring imagename 测试区对象MemoryArea memoryarea 菜单JMenu menuGrade(2)方法见表2-2表2-2 主要方法成员变量描述功能备注MemoryGame() 完成窗口初始化构造函数actionPerformed(实现接口中的方法ActionEvent)Main(String[]) 软件运行的入口(3)源代码见文件×××.java2.2类×××××(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称测试区的行列数int Row,col用户的用时int usedtime 提供存储成绩的界面Record record(2)方法见表2-4表2-4 主要方法方法名功能备注MemoryTestArea() 创建memoryGame对象构造函数run() 显示图标1200毫秒2.3类Block(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称openStateIcon是方块上的图标ImageIcon openStateIcon (2)方法见表2-4表2-4 主要方法方法名功能备注setOpenStateIcon( ImageIcon)Block 对象调用setOpenStateIcon(ImageIcon)方法可也设置它上面的图标getOpenStateIcon()Block 对象调用getOpenStateIcon()方法可以获得它上面的图标2.4类ShowRecordDialog(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称gradeFile是对话框要读取的文件,该文件存储读取的成绩File gradeFile Clear是注册ActionEvent JButton clear事件的按钮showArea文本区显示对话从gradeFile文本中读出的成绩JTextArea showArea(2)方法见表2-4表2-4 主要方法方法名功能备注ShowRecorDialog()ShowRecorDialog()是构造方法,负责创建shoeDialog对象setGradeFile(File)ShowRecorDialog类创建的ShowRecorDialog对话框是主类MemoryGame窗口中的一个成员2.5 People类(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称用户的名字String name用户的用时int time(2)方法见表2-4表2-4 主要方法方法名功能备注getTime()返回timegetName()返回namecompareTo(Object)确定People对象的大小关系2.6 Record类(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称用户的用时int time 用来输入名字的文本框JTextField yourName保存成绩的按钮对象JButton enter 放弃保存成绩的按钮对象JButton cancel 级别文件File gradeFile(2)方法见表2-4表2-4 主要方法方法名功能备注Record()负责创建record对象的构造方法setGradeFile (File)Record类创建的Record对话框是测试区MemoryTextArea 中的一个成员。
小游戏Java课程设计报告书-V1
小游戏Java课程设计报告书-V1本篇文章主要介绍小游戏Java课程设计报告书的相关内容。
1. 引言本次小游戏Java课程设计的目的是提高学生对Java语言的掌握能力和实际开发能力。
该小游戏为一款基于Java语言的桌面游戏。
2. 开发环境本次小游戏的开发环境采用Eclipse编译器,并使用Java语言作为主要开发语言。
游戏使用了Swing界面库和各种Java类库来实现不同的功能。
3. 游戏功能分析游戏的主要功能分为三个部分:游戏界面、游戏规则和游戏控制。
3.1 游戏界面游戏的界面主要由几个部分组成:标题栏、游戏画面和控制按钮。
其中,游戏画面包括了地图、玩家、敌人以及游戏元素等。
控制按钮用来控制玩家移动或者其他相关操作。
3.2 游戏规则游戏的规则很简单,玩家需要通过操作控制按钮,使得玩家在地图上移动,同时避免敌人的攻击,并到达游戏终点。
3.3 游戏控制游戏的控制主要包括以下几个方面:1. 玩家移动控制;2. 敌人移动控制;3. 游戏胜负判断;4. 游戏关卡和等级控制。
4. 实现方法和关键技术本次小游戏的实现主要涉及以下几个技术和方法:1. Java GUI编程;2. Java面向对象编程;3. Java事件处理;4. 游戏逻辑设计。
5. 结论通过对小游戏Java课程设计的开发实现,学生对Java编程技术进一步深入学习和掌握,同时提高了学生的合作开发与沟通协作能力。
本次小游戏的开发实践活动是一次有效的教学方法,为以后的Java学习和实践工作奠定了坚实的基础。
java课程设计报告2048
java课程设计报告2048一、教学目标本课程旨在通过2048游戏的项目实践,让学生掌握Java编程的基本概念和方法。
知识目标包括理解Java的基本语法、数据结构、控制流程和类与对象的概念。
技能目标则是培养学生运用Java编程解决实际问题的能力,以及良好的编程习惯和团队协作能力。
情感态度价值观目标则是激发学生对计算机科学的兴趣,培养他们勇于探索和创新的科学精神。
二、教学内容教学内容以《Java编程思想》教材为基础,涵盖Java基本语法、数据类型、控制结构、面向对象编程、异常处理等核心知识点。
课程将从简单的Java程序设计开始,逐步深入到复杂的数据结构和算法,最后通过实现2048游戏,让学生运用所学知识解决实际问题。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
讲授法用于讲解Java的基本语法和概念,案例分析法用于分析实际编程问题,实验法用于让学生动手实践,巩固所学知识。
通过多样化的教学方法,激发学生的学习兴趣,提高他们的主动性和创新能力。
四、教学资源教学资源包括《Java编程思想》教材、相关参考书籍、网络资源以及实验设备。
教材为学生提供系统的学习材料,参考书籍用于拓展知识视野,网络资源提供丰富的学习资料和实践案例。
实验设备则为学生提供动手实践的机会,让他们在实践中加深对Java编程的理解。
五、教学评估本课程的评估方式包括平时表现、作业、考试和项目实践四个方面。
平时表现主要评估学生的课堂参与度和团队协作能力,作业则评估学生对知识点的理解和应用能力,考试则评估学生的知识掌握程度,项目实践则评估学生的实际编程能力和解决问题的能力。
评估方式将尽量客观、公正,全面反映学生的学习成果。
六、教学安排本课程的教学安排将紧凑合理,确保在有限的时间内完成教学任务。
课程将按照教材的章节顺序进行,每个章节都将有足够的时间进行讲解和实践。
同时,教学安排还会考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等,尽量使教学安排符合学生的需求。
程序设计报告——控制台游戏2048
控制台游戏——2048
学生姓名:刘阳
院系班级:电计1203
学号:201281303
联系电话:188-4085-1891
Email:rick@
完成日期:2014年7月1日
一、
设计目标:完成一个控制台小游戏,其中包括游戏、排名、存档和读档等功能。
函数原型19int average()
函数功能:根据数据文件求玩家纪录中的平均水平
入口参数:void
出口参数:void
算法描述:以读的方式打开数据文件,读进相应的数组,调用quntity函数求出文件中数据的个数,计算出平均值,结果直接输出在屏幕上。
下面是int game(int a[4][4],int step,int grade)函数的流程图。
函数原型7int read_rank(int x,int num)
函数功能:读取游戏排名
入口参数:int x,int num
出口参数:x值为1或2,num为数据文件中记录个数
算法描述:通过参数x的控制以读的方式打开相应的数据文件,将排名数据存入相应数组中,再通过gotoxy函数以及for循环打印。
函数原型8int save_record(int x,int a[4][4],int step,int grade);
函数功能:读取游戏存档。
入口参数:int x,int a[4][4],int b[2]
出口参数:x值为1或2,保存游戏数据的二维数组a[4][4],保存步数step和分数grade的数组b[2]。
算法描述:通过参数x的控制以读的方式打开相应的数据文件,将游戏数据信息读取到数组a[4][4]中,将分数等信息读取到b[2]中。
函数原型17int initialization(int a[4][4])
java课程设计
Java语言程序设计课程设计题目2048游戏的设计与实现学院数信学院专业计算机科学与技术班级计科121学号5131学生姓名郑帅兵指导教师赵利平编写日期2014-7-8目录1. 需求分析 (3)2. 系统运行环境 (3)3. 功能需求描述 (3)4. 总体设计 (3)5. 程序模块设计 (3)6. 总结 (3)一、需求分析《2048》是比较流行的一款数字游戏。
原版2048首先在github上发布,原作者是Gabriele Cirulli。
它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1]?。
随后2048便出现各种版本,走各大平台。
由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。
衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的board game中排进了前200。
安卓版非常火爆的有《挑战2048》,其版以后还加入了双人对战。
其次比较特别的有2048中国朝代版。
更有2048自定义版,可以自己定义文字和图片。
《2048》是IOS中流行的一款。
本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用二、系统运行环境1、硬件环境:2、软件环境:操作系统:WindowsXP/Windows7软件:集成开发环境Eclipse三、功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.......对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。
2048游戏设计_课程设计报告
2016-2017学年第一学期《Windows程序设计》课程设计报告题目:2048游戏设计专业:班级:姓名:指导教师:成绩:学院二0一六年十一月十五日目录1、实验要求及目的 (1)2、游戏需求分析及概要设计 (1)2.1需求分析 (1)2.2可行性分析 (1)2.3运行环境 (1)2.4游戏概要设计 (1)3、游戏详细设计 (2)3.1游戏主界面 (2)3.2游戏结束界面 (4)3.3新纪录界面 (6)3.4游戏规则 (8)4、游戏测试 (8)4.1测试过程 (8)4.2测试内容 (8)4.3测试结果 (9)5、小结 (10)6、参考文献 (11)7、附录 (12)1、实验要求及目的本课程设计旨在提高学生的软件编程能力。
本设计将进一步加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。
要求学生能实现基本的应用软件,为以后从事相关行业打下软件编程基础。
2、游戏需求分析及概要设计2.1需求分析现代社会对休闲小游戏的需求是:提高游戏的操作可行性,降低游戏的操作难度,降低游戏的上手难度,降低游戏的竞争需求,对使用设备的要求趋于简单化和多样化,游戏界面更加人性化,功能更加贴合使用。
2.2可行性分析1)技术可行性根据游戏设计的要求,可以通过 c#进行源代码的编辑,通过 windows 界面进行用户界面的编辑和优化,结合时间和目前学习水平等各项因素,项目所要求功能和性能完全可以实现。
2)运行可行性游戏基本要求是.netframework4.0 及以上,在大部分的用户设备上可以实现,并且游戏运行对硬件几乎无要求,项目运行可以得到保证。
3)可行性综合分析综合以上两点,项目开发可以得到技术和运行的保证,证明项目可行。
2.3运行环境操作系统:Windows7应用软件:Microsoft Visual Studio 20122.4游戏概要设计图-1 概要设计3、游戏详细设计3.1游戏主界面1)截图如“图-2主界面”所示图-2主界面2)主界面核心功能代码case 0:{ gra.FillRectangle(newSolidBrush(Color.BurlyWood),dian.X,dian.Y,90,90); } break;case 2:{ gra.FillRectangle(newSolidBrush(Color.LightSalmon),dian.X, dian.Y, 90, 90); } break;case 4:{ gra.FillRectangle(new SolidBrush(Color.Peru),dian.X, dian.Y, 90, 90); } break;case 8:{ gra.FillRectangle(newSolidBrush(Color.Chocolate),dian.X, dian.Y, 90, 90); } break;case 16:{ gra.FillRectangle(new SolidBrush(Color.Gray), dian.X, dian.Y, 90, 90); } break;case 32:{ gra.FillRectangle(newSolidBrush(Color.DarkSeaGreen), dian.X, dian.Y, 90, 90); } break;case 64:{ gra.FillRectangle(new SolidBrush(Color.Gold), dian.X, dian.Y,90, 90); } break;case 128:{ gra.FillRectangle(new SolidBrush(Color.HotPink), dian.X, dian.Y, 90, 90); } break;case 256:{ gra.FillRectangle(new SolidBrush(Color.DarkOrange), dian.X, dian.Y, 90, 90); } break;case 512:{ gra.FillRectangle(new SolidBrush(Color.LightPink), dian.X, dian.Y, 90, 90); } break;case 1024:{ gra.FillRectangle(new SolidBrush(Color.DarkRed), dian.X, dian.Y, 90, 90); } break;case 2048:{ gra.FillRectangle(new SolidBrush(Color.Red), dian.X, dian.Y, 90, 90); } break;3.2游戏结束界面1)截图如“图-3 结束界面”、“图-4 结束界面”所示图-3 结束界面图-4 结束界面2)结束界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender, KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.3新纪录界面1)截图如“图-5新纪录界面”、“图-6新纪录界面”所示图-5新纪录界面图-6新纪录界面2)新纪录界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender,KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.4游戏规则开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4,玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动,玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并,合并所得的所有新生成数字想加即为该步的有效得分,玩家选择的方向行或列前方有空格则出现位移,每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4)。
2048基于JAVA课设设计
靠下是一颗重置按钮,当游戏失败时可通过本按钮重置游戏。最下方 是本次游戏的提示,2048 刚出来时没有提示,很多玩家云里雾里, 通过提示可以一目了然地知道本游戏玩法。界面的设计体现了简洁 性。 2、操作性 游戏的体验是衡量一款游戏的关键,本游戏通过键盘 w,s,a,d 以及方 向键来控制方块的移动,左右手都可以操作~充分考虑便捷性。 三、 概要设计
《Java 程序设计》课程设计报告
题 目: 2048 小游戏
学 院: 计算机科学与工程学院
专 业:
软件工程
学生姓名:
陆彬
学 号:
1200350218
指导教师:
汪华登
2014 年 7 月 4 日
目录
1. 前言.................................................................. 错误!未定义书签。 2. 需求分析............................................................................ 3 3. 概要设计..........................................................错误!未定义书签。 4. 详细设计............................................................................ 5 5. 测试.................................................................. 错误!未定义书签。 6. 总结.....................................................................................7 参考文献...............................................................错误!未定义书签。 附录....................................................................... 错误!未定义书签。
2048设计报告
3)再者是对《2048》这一款游戏的算法分析。对于整个游戏而言,最主要的心脏就是这一款游戏的算法,游戏好不好,就看这一款游戏的算法是不是符合逻辑。《2048》这一款游戏的算法分为上下左右自 2 个方向的,具体的下面分析。4)《2048》中每个格子的数据和颜色的刷新。在每一次移动之后,几乎在这4*4的每一个方格上的数据都会变化,因此在每一次移动之后,每一个方格上的数据都要刷新一次。相对的,每一个数的背景颜色是不同的,也就是说,在每一次数据刷新的时候,每一个方格上的颜色也要同样的刷新一次。
毕业论文(设计)题目
基于Android系统小游戏之2048
一、选题依据(包括目的、意义、国内外现状和发展趋势,主要参考文献)
最近以来,移动手游越来越成为当下游戏产业中重要的一环,市场也在加大对这一产业的投入Байду номын сангаас涌现出了愤怒的小鸟,水果忍者,flappy bird,2048等诸多优秀的手游,然而任何一款手游能够风靡,主要还是依靠其简单的操作性,因此本次java课设我选择其中的典型2048PC版作为本次课设的课题
5)最后是可不可以继续游戏的检测。当屏幕上没有没有写有数据的方格并且屏幕上的数据没有哪两个相邻的数据是一样的两个数,那么就判定为游戏结束。
三、研究/设计方案(包括研究/设计方法、技术路线,理论分析、计算、实验方法和步骤及其可行性,可能出现的技术问题及解决办法)
可行性,可能出现的技术问题及解决办法)
步骤:
1、有关网站的构建和页面的开发,所以会去学习有关网页开发的知识,并通过其他类型的网页例子进行研究。
2.数据库的设计问题,由于采用的是MYSQL开源的数据库系统,而关于这种数据库的资料和网站的教程很多。
基于java的2048小游戏的设计文档
目录一、实现方案 (2)二、具体代码及程序框图分析 (3)三、参考资料 (13)一、实现方案本游戏采用Java语言编写,使用Eclipse编译器,jdk1.7.0_51编译环境。
游戏的UI主要运用Java图形界面编程(AWT),实现窗口化可视化的界面。
游戏的后台通过监听键盘方向键来移动数字方块,运用随机数的思想随机产生一个2或4的随机数,显示在随机方块中,运用二维数组存储、遍历查找等思想,在每次移动前循环查找二维数组相邻的移动方向的行或列可以合并与否,如果没有可以合并的数字方块同时又没有空余的空间产生新的数字则游戏宣告结束,同时,当检测到合并的结果中出现2048,也宣告游戏结束。
游戏设计了非常简单的交互逻辑,流程如下:为了增加游戏的用户体验,后期加入了操作音效(音效文件提取自百度移动应用商店——2048),在移动和合并方块时播放不同声音。
二、具体代码及程序框图分析整个游戏有三个类,分别为游戏的主类Game.class、事件处理类MyListener.class、声音处理类PlaySound.class,下面对Game.class和MyListener.class进行说明。
Game.class的简单程序框图如下:游戏的主类Game.class是窗体程序JFrame的扩展类,主要负责界面的搭建,完成界面绘图的工作。
该类作为主类,主方法public static void main(String[] args)中先新建一个该类的对象,接着调用用与创建界面控件的方法IntUI(),代码如下:public static void main(String[] args) {Game UI = new Game();UI.IntUI();}IntUI()方法用于JFrame控件及界面框架的搭建,代码解析如下:首先创建一个窗体,标题为“2048小游戏”,把坐标固定在屏幕的x=450,y=100的位置,把窗体大小设置为宽400像素高500像素,然后把JPlane的布局管理器设置为空,具体代码如下:this.setTitle("2048小游戏");this.setLocation(450,100);this.setSize(400, 500);this.setLayout(null);接下来分别是【新游戏】、【帮助】、和【退一步】的按钮,以【新游戏】按钮为例,创建一个新游戏的图片按钮,图片相对路径为res/start.png,为了达到更美观的显示效果,把聚焦,边线等特征设置为false,把相对窗体的坐标设置为(5, 10),大小设置为宽120像素高30像素,具体代码如下:ImageIcon imgicon = new ImageIcon("res/start.png");JButton bt = new JButton(imgicon);bt.setFocusable(false);bt.setBorderPainted(false);bt.setFocusPainted(false);bt.setContentAreaFilled(false);bt.setBounds(-15, 10, 120, 30);this.add(bt);而分数显示控件与按钮控件类似,不再赘述。
java课程设计2048
Java语言程序设计课程设计题目 2048游戏的设计与实现学院数信学院专业计算机科学与技术班级计科121 学号 5131学生姓名郑帅兵指导教师赵利平编写日期 2014-7-8目录1.需求分析错误!未定义书签。
2.系统运行环境错误!未定义书签。
3.功能需求描述错误!未定义书签。
4.总体设计错误!未定义书签。
5.程序模块设计错误!未定义书签。
6.总结错误!未定义书签。
一、需求分析《2048》是比较流行的一款数字游戏。
原版2048首先在github上发布,原作者是Gabriele Cirulli。
它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏[1] 。
随后2048便出现各种版本,走各大平台。
由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。
衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的board game中排进了前200。
安卓版非常火爆的有《挑战2048》,其版以后还加入了双人对战。
其次比较特别的有2048中国朝代版。
更有 2048自定义版,可以自己定义文字和图片。
《2048》是IOS中流行的一款。
本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用二、系统运行环境1、硬件环境:2、软件环境:操作系统:WindowsXP/Windows7软件:集成开发环境Eclipse三、功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.......对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。
java课程设计2048
java 课程设计2048一、教学目标本节课的教学目标是使学生掌握Java编程的基本语法和逻辑思维能力,通过学习2048游戏的设计与实现,让学生了解并实践面向对象编程思想,提高解决问题的能力。
1.掌握Java的基本数据类型、运算符、控制结构。
2.理解面向对象编程的基本概念,如类、对象、封装、继承、多态。
3.学习Java的集合框架,如List、Set、Map等。
4.能够使用Java编写简单的程序,实现基本的数据处理和算法。
5.能够运用面向对象的思想设计和实现程序。
6.能够独立完成2048游戏的设计与实现,包括游戏逻辑、用户界面等。
情感态度价值观目标:1.培养学生对编程的兴趣,增强自信心。
2.培养学生的团队合作精神,学会分享和交流。
3.培养学生面对挑战,勇于解决问题的精神。
二、教学内容本节课的教学内容主要包括Java基本语法、面向对象编程和集合框架。
1.Java基本语法:数据类型、运算符、控制结构。
2.面向对象编程:类与对象、封装、继承、多态。
3.集合框架:List、Set、Map的使用和原理。
4.2048游戏设计与实现:游戏逻辑、用户界面设计。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解Java基本语法、面向对象编程和集合框架的概念和原理。
2.案例分析法:通过分析2048游戏的案例,使学生理解和掌握面向对象编程思想和游戏设计方法。
3.实验法:让学生动手实践,独立完成2048游戏的设计与实现,提高编程能力。
四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用《Java编程思想》作为主教材,辅助以《Java核心技术》等参考书。
2.多媒体资料:制作课件、教学视频等,用于辅助讲解和演示。
3.实验设备:计算机、网络等,为学生提供动手实践的环境。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本节课采用多元化的评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问回答、小组讨论等表现,评估学生的学习态度和积极性。
2048java课程设计
2048 java课程设计一、教学目标本课程旨在通过学习2048 Java游戏的设计与开发,让学生掌握Java编程的基本语法和游戏开发的相关技术,培养学生的编程能力和创新思维。
具体的教学目标如下:1.知识目标:(1)理解Java编程语言的基本语法和结构;(2)掌握面向对象编程的思想和方法;(3)学习游戏开发的基本原理和技巧;(4)了解常用的游戏开发工具和库。
2.技能目标:(1)能够独立编写简单的Java程序;(2)能够运用面向对象编程思想解决实际问题;(3)具备设计和开发小型游戏的能力;(4)能够运用游戏开发工具和库进行游戏开发。
3.情感态度价值观目标:(1)培养学生的团队合作意识和沟通能力;(2)培养学生的问题解决能力和创新思维;(3)培养学生对计算机科学和游戏开发的兴趣和热情。
二、教学内容本课程的教学内容主要包括Java编程基础、面向对象编程、游戏开发技术和游戏开发工具的使用。
具体的教学大纲如下:1.Java编程基础:(1)Java语言的基本语法和结构;(2)数据类型、运算符和表达式;(3)控制结构和函数;(4)面向对象编程思想和方法。
2.面向对象编程:(1)类和对象的概念和创建;(2)继承、封装和多态的概念和应用;(3)接口和抽象类的定义和使用;(4)集合框架和泛型的使用。
3.游戏开发技术:(1)游戏开发的基本原理和流程;(2)游戏引擎的选择和使用;(3)游戏资源的处理和加载;(4)用户输入处理和游戏逻辑设计。
4.游戏开发工具的使用:(1)Eclipse和IntelliJ IDEA的安装和使用;(2)Swing和JavaFX的游戏界面设计;(3)Box2D和libGDX的游戏物理引擎的使用;(4)游戏测试和调试工具的使用。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。
具体的教学方法如下:1.讲授法:通过讲解Java编程基础和游戏开发技术的理论知识,让学生掌握相关概念和原理。
java课程设计2048
java课程设计2048一、教学目标本节课的教学目标是让学生掌握Java编程的基本概念,能够使用Java语言编写简单的程序,并通过实现2048游戏,提高学生的编程能力和逻辑思维能力。
具体来说,知识目标包括掌握Java的基本语法、数据结构、控制流程和函数;技能目标包括能够编写Java程序、调试程序和优化程序;情感态度价值观目标包括培养学生对编程的兴趣和热情,提高学生解决问题的自信心和耐心。
二、教学内容本节课的教学内容主要包括Java编程的基本概念和2048游戏的实现。
首先,介绍Java的基本语法、数据结构、控制流程和函数,通过实例讲解和练习,使学生能够熟练使用Java语言编写简单的程序。
然后,引导学生学习2048游戏的规则和逻辑,并指导学生使用Java语言实现游戏。
最后,通过讨论和演示,分析游戏的优化方法和技巧,提高学生的编程能力和逻辑思维能力。
三、教学方法本节课采用讲授法、讨论法和实验法相结合的教学方法。
首先,通过讲授法向学生介绍Java编程的基本概念和语法,使学生掌握Java编程的基础知识。
然后,通过讨论法引导学生探讨2048游戏的实现方法和策略,激发学生的思考和创新能力。
最后,通过实验法让学生动手编写和调试Java程序,提高学生的编程能力和实践能力。
四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于提供Java编程的基本概念和语法知识,多媒体资料用于辅助讲解和演示,实验设备用于学生动手实践。
此外,还可以利用网络资源,如在线编程平台和讨论区,为学生提供更多的学习资源和交流机会。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度、提问和回答问题的积极性和表现,通过观察和记录来进行评估。
作业主要评估学生的编程能力和理解能力,通过布置相关的编程题目和实践任务,要求学生在规定的时间内完成,并进行批改和反馈。
考试主要评估学生对Java编程的基本概念和2048游戏实现的掌握程度,通过设计相关的题目和任务,测试学生的编程能力和逻辑思维能力。
Java课程设计——2048小游戏(红红火火恍恍惚惚还很困)
Java课程设计——2048⼩游戏(红红⽕⽕恍恍惚惚还很困)1.团队成员介绍及任务分配何汐(组长)深受NetBeans折磨发誓再也不⽤了背景⾳乐线程开局模式界⾯美化设计GUI(主菜单及游戏页⾯)李永会(组员)在⽂件流⾥⾯险些淹死登录&&注册排⾏榜GUI(登录及排⾏榜)汪⾬(组员)哪⾥需要哪⾥搬读取进度后退⼀步排⾏榜数据处理2.项⽬git地址3.git提交记录3.项⽬功能架构图与主要功能流程图项⽬功能架构主要功能流程图4.项⽬UML图5.项⽬运⾏截图注册⽤户登录失败继续游戏新游戏返回主菜单关闭游戏帮助&&排⾏榜6.项⽬关键代码1.登录界⾯设计建⽴⼀个板块jp插⼊背景图JPanel构建背景图需要重构new JPanel分别将⽤户名和输⼊框、密码和输⼊框、按钮存为⼀个⾯板利⽤GridLayout对于上述三个⾯板进⾏布局其他窗⼝的界⾯设计均采⽤NetBeans⾃动⽣成public void window() {JLabel label1 = new JLabel("L O G I N");label1.setFont(new Font("Snap ITC", 0, 47));label1.setBounds(200, 10, 100, 10);label1.setForeground(Color.darkGray);JPanel jp1 = new JPanel();ImageIcon bg = new ImageIcon("/image/444.png") ;bg.setImage(bg.getImage().getScaledInstance(900, 600, Image.SCALE_DEFAULT)); JPanel jp = new JPanel(){@Overrideprotected void paintComponent(Graphics g) {ImageIcon icon = new ImageIcon("images/444.png");Image img = icon.getImage();g.drawImage(img, 0, 0, 400, 350, icon.getImageObserver());}};jp.setBorder(new EmptyBorder(10, 10, 10,10));jp.setBackground(null);jp.setOpaque(false);ImageIcon im=new ImageIcon();JLabel jl1 = new JLabel("账号");jl1.setFont(new Font("微软雅⿊", 0, 14));jl1.setOpaque(false);jl1.setIcon(bg);jtfNumber = new JTextField(15);jp1.add(jl1);jp1.add(jtfNumber);jp1.setOpaque(false);JPanel jp2 = new JPanel();JLabel jl2 = new JLabel("密码");jl2.setFont(new Font("微软雅⿊", 0, 14));jpf = new JPasswordField(15);jp2.add(jl2);jp2.add(jpf);jl2.setOpaque(false);jp2.setOpaque(false);JPanel jp3 = new JPanel();JLabel jl3 = new JLabel("姓名");jl3.setFont(new Font("微软雅⿊", 0, 14));jtfName = new JTextField(15);jp3.add(jl3);jp3.add(jtfName);jl3.setOpaque(false);jp3.setOpaque(false);JPanel jps = new JPanel();jps.setBackground(null);jps.setOpaque(false);Dimension preferredSize = new Dimension(80,40);jbLogin = new JButton("注册");jbLogin.setFont(new Font("微软雅⿊", 0, 14));jbLogin.setPreferredSize(preferredSize);jbLogin.addActionListener(this);//给按钮添加响应jbRegister = new JButton("登录");jbLogin.setFont(new Font("微软雅⿊", 0, 14));jbRegister.setPreferredSize(preferredSize);jbRegister.addActionListener(this);//给按钮添加响应jps.add(jbLogin);jps.add(jbRegister);jp.setBackground(null);jl1.setBackground(null);JPanel jpc = new JPanel(new GridLayout(4, 1));// 4⾏1列布局jpc.setBackground(null);jpc.setOpaque(false);jpc.add(jp1);jpc.add(jp2);jpc.add(jp3);jpc.add(jps);jp.add(label1);jp.add(jpc);add(jp);setTitle("登录窗⼝");//窗⼝标题setSize(400, 350);// 窗⼝⼤⼩setLocationRelativeTo(null);// 窗⼝居中}2.排⾏榜创建Player类,定义name、number、mark三个属性,⽤户游戏得分的⽂件存取格式也是这三个属性,⼀⾏⼀⾏地读取装有⽤户游戏得分的⽂件,⽤split()⽅法将读取出来的⼀⾏数据分装成数组,将这个数组赋值给Player类型的数组,调⽤Arrays.sort()⽅法将数组按升序排序,⽤这个排好序的数组去创建排⾏榜的界⾯,排⾏榜⾄多显⽰前五名public Player[] readChart(int k) throws IOException {final String PATH = "ABC.txt";//指定⽂件的路径File file = new File(PATH);int lines = 0;try {FileInputStream fos = new FileInputStream(file);InputStreamReader osw = new InputStreamReader(fos);BufferedReader bw = new BufferedReader(osw);// 使⽤缓冲区数据流封装输⼊流LineNumberReader lineNumberReader = new LineNumberReader(bw);//获取⽂件⾏数,即玩家⼈数lineNumberReader.skip(Integer.MAX_VALUE);lines = lineNumberReader.getLineNumber() + 1;//从0开始计数,所以这⾥算⾏数的时候需要+1}catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}int i = 0;Player factor[] = new Player[lines];//创建玩家类try {if (!file.exists()) {//判断⽂件是否存在,不存在就创建⼀个⽂件file.createNewFile();}FileReader fr = new FileReader(file); // 创建⽂件输⼊流(读取)BufferedReader br = new BufferedReader(fr); // 使⽤缓冲区数据流封装输⼊流String str = "";while ((str = br.readLine()) != null) {try {String[] data = str.split(" ");int a = Integer.parseInt(data[2]);factor[i]=new Player(data[0],data[1],a);//传⼊name、number、marki++;}catch (ArrayIndexOutOfBoundsException e){System.out.println("数组下标越界");}}Arrays.sort(factor);//根据分数从⾼到低排序}catch(NullPointerException e) {e.printStackTrace();}catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}if(k==0)windoow(factor);return factor;}7.代码静态扫描修改后8.尚待改进或者新的想法尚待改进Beans的默认代码只⽀持JLabel和JButton设置背景图⽚,定制相关的代码之后,还是不能对于⾯板甚⾄整个窗体设置背景图⽚,NetBeans设计页⾯和eclipse⾃⼰写页⾯差别也蛮⼤的,所以最后只是设置了背景颜⾊;2.时间紧任务重,只是构造了游戏的背景⾳乐,没有来的及设计游戏移动⾳效;3.团队协作上,任务分配上有冲突有重复,效率不⾼;4.代码规范上,采⽤插件之后发现有很多以前不会注意到的⼩细节,例如注释的格式是/**注释*/,有些地⽅需要标明@author;5.在GUI设计上,由于对⼀些复杂组件不是特别了解,只是采⽤JPanel⼀些⼩组件,还有很多更简单⽅便的组件没有去设计;新的想法1.将2048⼩游戏转变成安卓⼿机⼩游戏,这个开始有设想过,但是后⾯百度查资料的时候发现真的还挺难的,这个还是得慢慢来;2.加⼊⽅块移动的⾳效;3.在经典玩法之外设计出速度模式;4.增加签到功能获取钻⽯,以钻⽯获取后退⼀步或者开启特殊关卡的机会;5.增设双⼈对战模式;6.将数字⽅块转换成abcd字母或者其他具有递进性的元素;![]。
JAVA小游戏2048需求阐明
需求剖析目录游戏开发课程设计 (1)目录 (2)一.课程设计主要内容 (3)1. 题目 (3)2. 需求剖析 (3)3. 设计环境 (3)二.详尽设计说明 (4)1. 系统程序流程图 (4)2. 系统纲要说明 (5)3. 功能说明 (5)三.游戏运转说明 (6)1.游戏运转流程图 (6)一.课程设计主要内容1.题目20482.需求剖析游戏操作需求:1、可使用鼠标或↑、↓、→、←或W 、X 、A 、D 键进行操作;2、Play 按钮从头开始游戏;3、Undo 按钮撤消本次操作,回到上一步。
2048游戏算法1、游戏开始时随机的产生 2 个数值为 2/4 的方格,此中 1 个方格置于 4 个角中的一个地点,另一个方格随机的置于其他地点,其他方格值为0。
2、每次挪动鼠标或按方向键后,逐行计算挪动后的方格值。
每行挪动的算法是:先将全部值为 0 的数移至行首。
能后从行尾开始逐个和前一个数比较,假如相等则归并这 2 个格子。
3、每归并一次格子,将其值累计到游戏总分中。
4、一次挪动结束后,在全部值为0 的方格中随机的分派一个2/4 的值。
5、全部方格值不为0 且上下、左右相邻的方格都不相等,则游戏结束。
6、2 出现的概率为90%,4 出现的概率为为10%。
3.设计环境运转环境: Windows XP开发环境: Java编写语言: Java二.详尽设计说明1.系统程序流程图开始随机产生两个方块键盘控制挪动方块挪动方向最底部方块是否有方块方块移究竟部本来地点方块消除Y数字能否相等YNNY上一格方块数字是否相等Y N方块能否能够移动双方块数字相加把上边的行数据下移并置结束游戏2.系统纲要说明本程序是在 VS2010 环境下编写的Windows 应用程序,函数中利用了绘图函数绘制基本方块模型,并经过键盘或鼠标履行相应的操作。
在产生的方块中,调用随机方法,随机产生 1~100 中的任何一个数字,数字小于 90,方块显示数字为 2,不然显示为 4,每一 ,经过这类方式,实现了游戏中此中不一样模块的数字的随机产生。
java2048
JA V A程序课程实训报告题目:学号:姓名:班级:2048小游戏(一)程序介绍2048是一款益智小游戏,玩家需要在16个格子中通过数字叠加的方法将最初的数字2凑成数字2048。
有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。
2048是比较流行的一款数字游戏。
本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用(二)功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.......对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。
(三)玩法技巧:1、最大数尽可能放在角落。
2、数字按顺序紧邻排列。
3、首先满足最大数和次大数在的那一列/行是满的。
4、时刻注意活动较大数旁边要有相近的数。
5、以大数所在的一行为主要移动方向6、不要急于“清理桌面”(四)程序说明一个类Copy2048继承JFrame,类中包括,一个构造方法Copy2048,构造方法中设定游戏界面的大小,背景颜色,边框,字体,标签,布局,位置,记录剩余空方块数目,记录分数,用于判断游戏是否失败,用于判断游戏是否失败,设置字体类型和大小,为最高分标签添加按键监听器,一个KeyEvent按键事件,构造方法中创建游戏主面板,设置主面板位置尺寸,设置空布局,创建文本框二维数组,创建标签,调用时间处理方法,一个Create2方法,是在随机位置产生一个2号方块的方法,l1到l4同时被键盘赋值为1说明任何方向键都不能产生新的数字2,那就说明游戏失败GAME OVER !一个setColor方法,是为了产生2048小游戏方块的颜色。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
v1.0 可编辑可修改《JA V A语言程序设计》课程设计报告2048智力小游戏设计专业班级:计算机科学与技术嵌入13-1学生姓名:卓海有学生学号:小组成员:单建飞堵文斐李栋承梅孔伟指导教师姓名:宋强目录源代码清单 (9)一、前言最近以来,移动手游越来越成为当下游戏产业中重要的一环,市场也在加大对这一产业的投入,涌现出了愤怒的小鸟,水果忍者,flappy bird,2048等诸多优秀的手游,然而任何一款手游能够风靡,主要还是依靠其简单的操作性,因此本次java课设我选择其中的典型2048PC版作为本次课设的课题。
2048游戏规则很简单,玩家每次可以选择上下左右其中一个方向去移动,每移动一次,所有的数字方块都会往移动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。
系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。
二、游戏需求分析需求分析现代社会对休闲小游戏的需求是:提高游戏的操作可行性,降低游戏的操作难度,降低游戏的上手难度,降低游戏的竞争需求,对使用设备的要求趋于简单化和多样化,游戏界面更加人性化,功能更加贴合使用。
(1)界面一款的好的游戏其界面必须友好,简洁已经成为当今UI设计的主流,简单易上手才能得到玩家的青睐。
(2)功能需求能够显示游戏的当前得得分,并记录游戏的最高分并显示,当在次打开游戏时,能够显示最高分;在游戏进行的过程中循环播放音乐,并能够关闭音乐或者打开音乐;游戏的主界面上,相同的数字要显示相同的颜色。
游戏结束要有相应的提示。
游戏的主要目的是通过上下左右移动来将相邻相同的数字相加,通过不断地累加最终加到2048。
(3)操作性需求游戏的体验是衡量一款游戏的关键,本游戏可通过键盘w,s,a,d以及方向键来控制方块的移动,还可以通过在游戏的主面板中向上下左右拖动鼠标来控制方块的移动,左右手都可以操作,充分考虑便捷性。
不同的人有不一样习惯,通过多种方式来操作游戏,可以各种习惯的人的需求。
可行性分析(1)面向对象的程序设计方法Java面向对象程序设计的基本思想是通过构造和组织对象来求解问题的。
对象是很好理解的,任何一种物体都可以被认为是对象,例如,汽车就是一种对象。
对象具有两个最基本的属性:具有一定的物质基础和一定的功能,这两种基本属性在Java语言中表现为拥有一定的存储单元并具备一定的功能。
理解了Java的这种面向对象程序设计的基本思想之后,在以后的编程过程中,就应当个构造人们容易理解的更接近于真实物理世界物体的对象。
Java面向对象程序设计的过程非常简单。
这里介绍一种自顶向下的程序设计方法,首先构造一个类来处理需要解决的问题,然后根据已经拥有的类(例如以前求解其它问题时实现的类),分析和构造新的类,设法将问题分解下去,而最开始构造的类通过组织这些新构造的类、已有的类及由他们生成的实例来求解指定的问题。
这个过程可以继续递归下去,用在新构造的类上,直到最后解决了指定的问题,例如Java的应用程序和小应用程序都必须有一个类作为入口求解问题。
在计算机语言中,面向对象的类一般具有三个基本特性:封装性、继承性和多态性,这三种特性进一步简化了Java求解模型,提高了程序的复用性,节省了程序的代码量,从而提高了软件的生产率。
(2)java技术分析图形用户界面不仅可以提供各种数据的基本图形的直观表示形式,而且可以建立友好的交互方式,从而使计算机软件可以设计得十分简单易用。
从Java语言诞生到现在,Java语言已经提供了两代图形用户界面。
第一代图形用户界面AWT提供了基本的图形用户界面,它强烈地依赖于具体的计算机操作系统,而且缺少基本的剪贴板和打印支持功能。
现在第二代图形用户界面Swing对AWT进行了扩展,Swing不仅在功能上比AWT强大,而且在很大程度上克服了AWT的上述缺点,它所设计的图形用户界面与具体的计算机操作相关性很小,而且可以定制指定的操作系统风格的图形用户界面。
GUI(图形用户界面)组件构成了图形用户界面的基础。
在Java程序设计中,要求按照一定的布局方式将组件安排在容器中,然后通过事件处理的方式实现人机交互,而容器本身也是组件,这样在容器中也可以含有容器,从而可以通过这种嵌套方式方便地组合各种组件。
事件处理模型是Java语言提供的一种人机交互模型,它使得用户能够通过鼠标、键盘或其他输入设备来控制程序的执行流程,从而达到人机交互的目的。
对鼠标、键盘或其他输入设备的各种操作一般也称为事件。
Java 语言对这些事件的处理模型是采用面向对象的方法,即通过对象的形式把各种事件进行封装和处理。
这种事件处理模型的三个基本要素是事件源、事件对象以及事件监听器。
事件源是各种组件,是接受各种事件的对象。
在各种事件源上运用鼠标、键盘或其他输入设备进行各种操作,就会有事件发生。
每种操作一般都对应着事件,Java语言通过事件对象来包装这些事件。
对事件进行处理是通过事件监听器实现的。
因为鼠标事件也是一种事件,所以对鼠标事件进行处理要遵循事件处理模型。
鼠标事件的处理也是建立在事件源的基础之上,以事件对象本身,最后通过事件监听器进行处理。
类包装常用的鼠标事件,例如,按下鼠标键和放开鼠标键等。
类MouseEvent的实例对象记录了鼠标的当前位置和状态发生变化的鼠标键等。
对鼠标事件进行处理最关键的是实现事件监听器接口。
这些相关接口包括MouseListener,MouseMotionListener,MouseWheelListener,MouseInputListener。
前面三个是包中的接口,最后一个接口MouseInputlistener来自包。
接口主要用来处理按下鼠标键、放开鼠标键、单击鼠标键、鼠标进入组件内和鼠标离开组件区域等事件。
对鼠标事件进行处理,就是要设计类,实现上面的鼠标事件监听器接口,然后在事件源中注册处理鼠标事件监听器的对象,以便对鼠标事件进行处理。
三、概要设计四、详细设计(1)流程图(2)界面的整体布局分别构建mainPane,scoresPane两大模块放入游戏窗体,其中scoresPane包含2048字样的提示,当前得分和最高分,当得分超过最高分时,将得分存入工程文件夹下的,覆盖最高分,同时在最高分显示最新的内容。
通过Create方法随机产生2号方块或者4号方块,通过setColor方法设置每个数字代表的方块颜色。
(3)方法模块分析方法1:设置标签颜色,每次随机产生2或4和数字合并之后就要调用该方法来设置标签的颜色public void setColor(int i, int j, String str) {if ("".equals(str)) {texts[i][j].setBackground(new Color(120,221,247));return;}int result = (str);switch (result) {case 2: texts[i][j].setBackground(new Color(240,240,0)); break;case 4: texts[i][j].setBackground; break;case 8: texts[i][j].setBackground(new Color(240,150,10)); break;case 16: texts[i][j].setBackground; break;case 32: texts[i][j].setBackground; break;case 64: texts[i][j].setBackground(new Color(155,10,190));break;case 128: texts[i][j].setBackground; break;case 256: texts[i][j].setBackground; break;case 512: texts[i][j].setBackground; break;case 1024: texts[i][j].setBackground; break;case 2048: texts[i][j].setBackground; break;case 4096: texts[i][j].setBackground; break;default: break;}}方法2:在随机位置产生一个2号或4号方块的方法,同时该方法也用于判断游戏是否结束。
public void Create() {int i, j;etText();if (("") == 0)) {int ima = 2 * (int) (1 + () * 2);etText(imass);setColor(i, j, imass);times--;r = false;p1 = p2 = p3 = p4 = 0;}}quals(texts[p][q].getText()) )temp2[p][q] = 0;else temp2[p][q] = (texts[p][q].getText());}}temp1scores = temp2scores;temp2scores = scores;}else if (p1 > 0 && p2 > 0 && p3 > 0 && p4 > 0){v1.0 可编辑可修改械工业出版社..[2] 黄晓东.Java课程设计案例精编[M].北京:中国水利水电出版社,.[3] 求是科技. Java信息管理系统开发实例导航[M].北京:人民邮电出版社..源代码清单package my2048game;import .*;import .*;import .*;import .*;public class My2048Game extends JFrame{equestFocus();}pg"));(433,120,45,30);(jb1);etFont(font2);texts[i][j].setHorizontalAlignment; etText("");texts[i][j].setBounds(110 * j+15, 110 * i+15, 100, 100);etOpaque(true); etBorder(2, 2, 2,quals(texts[i][j].getText()) ) temp1[i][j] = temp2[i][j] = 0;else temp1 [i][j] = temp2[i][j] = (texts[i][j].getText());}}}quals(str)) {texts[i][j].setBackground(new Color(120,221,247));return;}int result = (str);switch (result) {case 2: texts[i][j].setBackground(new Color(240,240,0)); break;case 4: texts[i][j].setBackground; break;case 8: texts[i][j].setBackground(new Color(240,150,10)); break;case 16: texts[i][j].setBackground; break;case 32: texts[i][j].setBackground; break;case 64: texts[i][j].setBackground(new Color(155,10,190)); break;case 128: texts[i][j].setBackground; break;case 256: texts[i][j].setBackground; break;case 512: texts[i][j].setBackground; break;case 1024: texts[i][j].setBackground; break;case 2048: texts[i][j].setBackground; break;case 4096: texts[i][j].setBackground; break;default: break;}}etText();etText();etText(str);etText("");etText(str);etText("");etText();str1 = texts[i][j + 1].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i][j + 1].setText(str);setColor(i, j + 1, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && j != a&& j != a + 1) {num = (str);scores += num;times++;str = (2 * num);texts[i][j + 1].setText(str);setColor(i, j + 1, str);texts[i][j].setText("");setColor(i, j, "");a = j;biaoji = 1;}}}}p2 = 1; Create(); break;case :case :biaoji = 0;for (int j = 0; j < 4; j++) {a = 5;for (int k = 0; k < 3; k++) {for (int i = 1; i < 4; i++) {str = texts[i][j].getText();str1 = texts[i - 1][j].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i - 1][j].setText(str);setColor(i - 1, j, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && i != a&& i != a - 1) {num = (str);scores += num;times++;str = (2 * num);texts[i - 1][j].setText(str);setColor(i - 1, j, str);texts[i][j].setText("");setColor(i, j, "");a = i;biaoji = 1;}}}}p3 = 1; Create(); break;case :case :biaoji = 0;for (int j = 0; j < 4; j++) {a = 5;for (int k = 0; k < 5; k++) {for (int i = 2; i >= 0; i--) {str = texts[i][j].getText();str1 = texts[i + 1][j].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i + 1][j].setText(str);setColor(i + 1, j, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && i != a&& i != a + 1) {num = (str);scores += num;times++;str = (2 * num);texts[i + 1][j].setText(str);setColor(i + 1, j, str);texts[i][j].setText("");setColor(i, j, "");a = i;biaoji = 1;}}}}p4 = 1; Create(); break;case :if (p1 <= 0 || p2 <= 0 || p3 <= 0 || p4 <= 0){for(int i = 0; i < 4; ++i){for(int j = 0; j < 4; ++j){if(temp1[i][j] == 0) texts[i][j].setText("");else texts[i][j].setText( (temp1[i][j]) );temp2[i][j] = temp1[i][j];setColor(i, j, texts[i][j].getText());}}scores = temp1scores;temp2scores = temp1scores;}break;default: break;}if(maxscores<=scores){maxscores=scores;(maxscores);();}("<html>SCORE<br>"+(scores)+"</html>");("<html>BEST<br>"+(maxscores)+"</html>");etText();etText();etText(str);etTe xt("");etText(str);etText("");etText();str1 = texts[i][j + 1].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i][j + 1].setText(str);setColor(i, j + 1, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && j != a&& j != a + 1) {num = (str);scores += num;times++;str = (2 * num);texts[i][j + 1].setText(str);setColor(i, j + 1, str);texts[i][j].setText("");setColor(i, j, "");a = j;biaoji = 1;}}}}p2 = 1; Create(); break;case 3:biaoji = 0;for (int j = 0; j < 4; j++) {a = 5;for (int k = 0; k < 3; k++) {for (int i = 1; i < 4; i++) {str = texts[i][j].getText();str1 = texts[i - 1][j].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i - 1][j].setText(str);setColor(i - 1, j, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && i != a&& i != a - 1) {num = (str);scores += num;times++;str = (2 * num);texts[i - 1][j].setText(str);setColor(i - 1, j, str);texts[i][j].setText("");setColor(i, j, "");a = i;biaoji = 1;}}}}p3 = 1; Create(); break;case 4:biaoji = 0;for (int j = 0; j < 4; j++) {a = 5;for (int k = 0; k < 5; k++) {for (int i = 2; i >= 0; i--) {str = texts[i][j].getText();str1 = texts[i + 1][j].getText();if ("") == 0) {if ("") != 0)biaoji = 1;texts[i + 1][j].setText(str);setColor(i + 1, j, str);texts[i][j].setText("");setColor(i, j, "");} else if (str1) == 0 && i != a&& i != a + 1) {num = (str);scores += num;times++;str = (2 * num);texts[i + 1][j].setText(str);setColor(i + 1, j, str);texts[i][j].setText("");setColor(i, j, "");a = i;biaoji = 1;}}}}p4 = 1; Create(); break;default: break;}if(maxscores<=scores){maxscores=scores;(maxscores);();}("<html>SCORE<br>"+(scores)+"</html>");("<html>BEST<br>"+(maxscores)+"</html>");etText();if (("") == 0)) {int ima = 2 * (int) (1 + () * 2);etText(imass);setColor(i, j, imass);times--;r = false;p1 = p2 = p3 = p4 = 0;}}quals(texts[p][q].getText()) )temp2[p][q] = 0;else temp2[p][q] = (texts[p][q].getText());}}temp1scores = temp2scores;temp2scores = scores;}else if (p1 > 0 && p2 > 0 && p3 > 0 && p4 > 0){quals("shengyin")){if(jb1_flag2){setJb1_flag(false);jb1_flag2=false;(new ImageIcon("src/静音图标.jpg"));(false);pg"));(false);//让按钮失去焦点}(false);//设置焦点,不能用请求焦点}}}//记录类class Recorder{//定义一个变量记录最高分private static int maxscores_2048=0;public static int getMaxscores_2048() {return maxscores_2048;}public static void setMaxscores_2048(int maxscores_2048) { = maxscores_2048;}//定义文件输入流变量private static FileReader fr=null;private static BufferedReader br=null;private static FileWriter fw=null;private static BufferedWriter bw=null;//从文件中读取,记录public static void getRecording(){boolean flag=false;//用于判断文件是否是新创建的try {File f=new File("src/");if()){fr=new FileReader(f);br=new BufferedReader(fr);String n=();maxscores_2048=(n);}else{flag=();}} catch (Exception e) {// TODO: handle exception();}finally{try {//关闭文件流的顺序,先开的后关闭if(!flag){();();}} catch (Exception e2) {// TODO: handle exception();}}}//保存最高分纪录public static void keepRecording(){//创建try {File f=new File("src/");fw=new FileWriter(f);bw=new BufferedWriter(fw);(maxscores_2048+"\r\n");} catch (IOException e) {// TODO Auto-generated catch block();}finally{//关闭流try {();();} catch (IOException e) {// TODO Auto-generated catch block();}}}}//播放声音的类class AePlayWave extends Thread{private static String filename;public AePlayWave(String wavefile){filename=wavefile;}public AePlayWave(){}public void run(){while(true){File soundFile=new File(filename); AudioInputStream audioInputStream=null; try {audioInputStream=(soundFile);} catch (Exception e) {// TODO: handle exception();return ;}AudioFormat format=();SourceDataLine auline=null;info=new , format);try {auline=(SourceDataLine)(info);();} catch (Exception e) {// TODO: handle exception();return ;}();int nBytesRead=0;byte[]abData=new byte[1024];try {while(nBytesRead!=-1){nBytesRead=(abData);if()){if(nBytesRead>=0){(abData,0,nBytesRead);}}else{while(!());}}} catch (Exception e) {// TODO: handle exception();return ;}finally{();();}}}}。