JAVA拼图大作业实验报告课案
Java课程设计拼图报告
![Java课程设计拼图报告](https://img.taocdn.com/s3/m/aa9682a287c24028915fc3a9.png)
Java应用技术实训报告题目多功能拼图游戏软件所在院系软件学院所在单位软件教研室一.总体设计本系统共包括11个java源文件和2文件。
这是个功能比较齐全的拼图游戏,最关键的不用自己手动切割图片,再进行加载。
而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。
另外,该程序会根据图片的大小自动生成窗口大小,不会造成切割图片错误和切割错位。
程序最后以*.rc格式的文件来保存游戏记录。
1.类之间的关系如图1所示。
2.java源文件及其功能如表1所示。
二、详细设计该拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。
在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。
在游戏开始后会更新“开始“菜单,增加“显示图片”菜单项。
拼图结束时可以显示游戏成绩和记录的存档。
1.主类Puzzle(1)成员变量见表2(2)方法见表2-1表2-1(3)源代码见文件Puzzle.java2.类CardFrame(1)成员变量见表3(2)方法见表3-1(3)源代码见文件CardFrame.java3.类MenuFrame(1)成员变量见表4(2)方法见表4-1(3)源代码见文件MenuFrame.java4类ShowImage(1)成员变量见表5(2)方法见表5-1(3)源代码见文件ShowImage.java5类Split(1)成员变量见表6(2)方法见表6-1(3)源代码见文件Split.java6类Matrix (1)成员变量见表7(2)方法见表7-1(3)源代码见文件Matrix.java7.类Grades(1)成员变量见表8(2)方法见表8-1(3)源代码见文件CardFrame.java8.类GameOver(1)成员变量见表9(2)方法见表9-1(3)源代码见文件GameOver.java9.类point(1)成员变量见表10(2)方法见表10-1(3)源代码见文件point.java10. 类ButtonClick(1)成员变量见表11(2)方法见表11-1(3)源代码见文件ButtonClick.java11类Arg(1)成员变量见表12(2)代码见文件Arg.java三.运行效果游戏启动后的初始界面图1图1选择“关于”菜单下的“帮助“菜单弹出如下对话框:图2图2选择“关于”菜单下的“关于“菜单弹出如下对话框:图3图3选择难度级别–中级和背景图片,按开始后就可进入游戏画面如图4图4在游戏过程中可以按“开始”菜单下面的“显示图片”来查看完整图片如图5图5游戏成功后会显示你游戏所用时间和移动图块的步数如图6图6如果你的游戏时间打破记录就会首先显示如下画面如图7图7输入名字后,按确定就可以查看所有成绩排名了如图8(也可以通过“开始”菜单下的“分数排名”来查看成绩)图8所有游戏截图完毕四.工作总结经过这段时间的学习我收获不小,总结起来有如下几点:1 更进一步理解了JAVA编程的思想,体会到JAVA与其他编程语言的不同。
java拼图小游戏课程设计
![java拼图小游戏课程设计](https://img.taocdn.com/s3/m/126c4d9cab00b52acfc789eb172ded630b1c98ae.png)
java拼图小游戏课程设计一、课程目标知识目标:1. 学生能理解Java基本语法和面向对象编程的概念;2. 学生能掌握使用Java编写图形用户界面(GUI)的方法;3. 学生能了解数组的使用以及二维数组在拼图游戏中的应用;4. 学生能掌握基本的事件处理和逻辑判断方法。
技能目标:1. 学生能运用所学知识,设计并编写出一个简单的Java拼图小游戏;2. 学生能通过调试和优化代码,提高程序的稳定性和用户体验;3. 学生能在团队协作中发挥个人优势,共同完成项目任务。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发探究精神;2. 学生在项目实践中,树立自信心,勇于面对挑战;3. 学生通过团队协作,学会沟通、分享和承担责任;4. 学生在编程实践中,遵循道德规范,尊重他人成果。
本课程针对初中年级学生,结合Java编程语言的教学要求,注重培养学生的编程兴趣和实际动手能力。
课程以拼图小游戏为载体,让学生在实践过程中掌握Java编程基础和面向对象编程思想,提高解决问题的能力和团队协作精神。
通过本课程的学习,期望学生能够达到上述具体、可衡量的学习成果。
二、教学内容1. Java基本语法与面向对象编程:- 数据类型、变量、运算符- 控制结构:条件语句、循环语句- 面向对象:类、对象、构造方法、封装、继承、多态2. Java图形用户界面(GUI)设计:- Swing组件:窗口、标签、按钮、面板- 布局管理器:边界布局、流布局、网格布局- 事件处理:事件监听器、事件适配器3. 数组与二维数组:- 数组的声明、初始化、遍历- 二维数组的操作与应用4. 拼图游戏原理与实现:- 游戏逻辑设计- 图片切割与显示- 拼图移动与验证5. 程序调试与优化:- 代码调试技巧- 性能优化方法6. 团队协作与项目管理:- 项目任务分配- 团队沟通与协作- 项目进度管理本教学内容根据课程目标,结合教材相关章节,以科学性和系统性为原则进行组织。
拼图游戏java课程设计
![拼图游戏java课程设计](https://img.taocdn.com/s3/m/8a5ec301302b3169a45177232f60ddccda38e6b6.png)
拼图游戏java 课程设计一、教学目标本课程的目标是让学生了解和掌握Java编程语言的基本知识,通过拼图游戏的项目实践,培养学生的编程能力、逻辑思维能力和问题解决能力。
知识目标包括Java语言的基本语法、数据结构、控制流程、文件操作等;技能目标包括使用Java开发工具进行代码编写、调试和运行;情感态度价值观目标包括培养学生的团队合作意识、创新精神和对计算机科学的兴趣。
二、教学内容教学内容主要包括Java语言的基本语法、数据结构、控制流程、文件操作等。
具体安排如下:1.第一章:Java语言概述,介绍Java语言的发展历程、特点和应用领域;2.第二章:基本语法,学习Java语言的基本数据类型、运算符、表达式和语句;3.第三章:面向对象编程,学习类的定义、创建对象、继承、多态和封装;4.第四章:数据结构,学习数组、链表、栈和队列的基本概念和应用;5.第五章:控制流程,学习条件语句、循环语句和异常处理;6.第六章:文件操作,学习文件的读写、目录的操作和文件过滤器。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
在讲授基本语法和概念时,通过生动的案例进行讲解,让学生更好地理解和掌握;在实践环节,引导学生动手编写代码,通过实验法培养学生的实际操作能力。
同时,鼓励学生进行小组讨论,共同解决问题,培养团队合作意识。
四、教学资源教学资源包括教材、多媒体资料和实验设备。
教材选用《Java编程思想》作为主教材,辅助以《Java核心技术》等参考书;多媒体资料包括教学PPT、视频教程等,通过图文并茂的方式帮助学生理解;实验设备包括计算机、网络和编程工具,为学生提供实践操作的环境。
五、教学评估教学评估主要包括平时表现、作业和考试三个部分。
平时表现占30%,主要评估学生的课堂参与度、提问和回答问题的积极性等;作业占30%,主要评估学生的代码编写能力、问题解决能力和团队合作精神;考试占40%,主要评估学生对Java语言基本概念和编程技能的掌握程度。
JAVA拼图大作业实验报告课案
![JAVA拼图大作业实验报告课案](https://img.taocdn.com/s3/m/0e9018de910ef12d2af9e736.png)
2016秋季学期《Java语言》大作业系统说明报告目录1项目目的与意义 (3)1.1项目背景说明 (3)1.2项目目的与意义 (3)2 软件开发环境与技术说明 (4)2.1软件开发环境 (4)2.2软件开发技术描述 (4)3系统分析与设计 (5)3.1项目需求分析说明 (5)3.2系统设计方案 (5)4系统源代码 (8)4.1系统源代码文件说明 (8)4.2源代码 (8)5系统使用说明书 (41)6参考资料 (49)7附件说明 (49)1项目目的与意义1.1项目背景说明JAVA语言2016年学期期末大作业-44拼图游戏的设置1.2项目目的与意义目的:实现简单的4X4JAVA拼图游戏的简单功能,可以进行用户的登录和拼图游戏的完成,给用户以良好的游戏体验,再加入更多个性化的内容意义:从用户角度,设计一个简单但是十分考验人的小型拼图游戏,让人们在简单方便的操作中舒缓自己一天的疲惫,和朋友一起进行挑战,不断地突破,展现游戏的美丽,实现游戏的价值从开发者角度,这是对我半年JAVA语言学习的检测,同时我也自学了许多东西,比如数据库的链接,SQL语句和JAVA的各种函数,让我可以真正的体会到开发一个项目的过程和需要付出的不懈努力,也让我享受到了自己尽全力完成一个项目的过程和完成后的喜悦。
2 软件开发环境与技术说明2.1软件开发环境JAVA开发环境-EclipseJAVA支持包:import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;import javax.swing.*;mysql-connector-java-5.1.40-bin.jar(MySql驱动jar 包)数据库环境:MySql数据库(使用的是Navicat图形界面)2.2软件开发技术描述1.拼图游戏界面设计主要使用了JAVA的GUI图形界面,主登录界面和账号注册界面使用的是流式FlowLayOut布局进行登录框和按钮的设置,而拼图游戏界面则是使用的网格式GridFlowOut布局.2.通过连接MySql数据库,(名称:user),创建数据表user_info 列名称为:username(账号),password(密码),score(过关时间), Count(过关所用步数);实现了游戏的账号注册和登录功能,以及每个账号成绩的记录和储存,并可以再推行界面中显示每个用户的游戏记录3.通过Timer类实现了拼图游戏计时功能4.图片存储在项目文件夹下image文件夹中,通过名字的巧妙设置实现了打乱图片顺序,切换图片,判断拼图是否完成。
java拼图游戏的课程设计
![java拼图游戏的课程设计](https://img.taocdn.com/s3/m/72e09ab2f9c75fbfc77da26925c52cc58ad69008.png)
java拼图游戏的课程设计一、课程目标知识目标:1. 学生能理解Java编程语言中面向对象的基本概念,包括类、对象、继承和封装。
2. 学生能够掌握Java中事件处理、图形用户界面(GUI)设计和数组的使用,以实现拼图游戏功能。
3. 学生能够运用算法思维,实现拼图游戏的逻辑和图像的随机打乱、移动和复原。
技能目标:4. 学生能够运用Eclipse或其它IDE创建Java项目,编写、调试和运行拼图游戏的代码。
5. 学生通过实践,提高问题解决能力,能够独立完成类似规模的小型程序开发。
6. 学生能够进行基本的代码重构,提升代码的可读性和可维护性。
情感态度价值观目标:7. 学生通过团队合作开发拼图游戏,培养团队协作能力和沟通技巧。
8. 学生在游戏编程中体会编程的乐趣,增强对计算机编程和信息技术学科的兴趣和热情。
9. 学生通过编程实践,培养创新意识和动手能力,增强自信心和成就感。
本课程针对高中年级学生设计,他们已经具备了一定的编程基础和逻辑思维能力。
课程性质为实践性较强的信息技术课程,旨在通过拼图游戏的开发,使学生将理论知识与实践操作相结合,提升实际编程能力。
教学要求注重培养学生的自主学习和问题解决能力,鼓励学生在实践中创新,形成积极的情感态度和价值观。
通过具体学习成果的分解,后续教学设计和评估将更有针对性和有效性。
二、教学内容1. 面向对象基础:- 类的定义与使用- 对象的创建与操作- 继承与多态的概念及应用- 封装原则及实现方法2. Java图形用户界面(GUI)设计:- Swing库的简介与使用- JFrame、JPanel等容器组件的应用- 常用组件如按钮、标签、文本框等的添加与布局3. 事件处理机制:- 事件监听器与适配器的使用- 鼠标事件、键盘事件的处理- 事件响应与拼图游戏逻辑的结合4. 数组与算法:- 数组的声明、创建与操作- 图像数组的使用与拼图布局- 算法思维训练,实现拼图打乱、移动与复原5. 编程实践:- 使用Eclipse或其它IDE创建Java项目- 分步骤编写拼图游戏代码,实现游戏功能- 代码调试与优化,提高程序性能与可读性6. 团队合作与沟通:- 分组进行项目开发,明确分工与协作- 交流编程思路与问题解决方案- 提交项目报告,分享开发经验教学内容依据课程目标,结合课本知识体系进行组织,确保科学性和系统性。
Java拼图游戏面向对象课程设计报告
![Java拼图游戏面向对象课程设计报告](https://img.taocdn.com/s3/m/56325f18e2bd960591c67716.png)
图1、游戏初始界面图2、游戏运行界面} catch (IOException e) {//捕获自定义的异常e.printStackTrace();}initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度setLayout(new BorderLayout());//设置此布局方法,加入控件add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小add(canvas, BorderLayout.CENTER);panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上panel.add(start);panel.add(show);panel.add(showStep);showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体setSize(720, 425);setResizable(false);//表示生成的窗体大小,不可改变大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//执行关闭按钮,关闭窗体}//具体实现Canvas,进行初始化void initScreen(){canvas = new Canvas(){public void paint(Graphics g) { //覆写canvas的paint 方法gs = getGraphics(); //得到Canvas的Graphicsif (isRunning) {drawScreen();//运行,调用此方法} else {g.drawImage(image, 0, 0, this);//在指定的位置使用原始物理大小绘制指定的 Imageg.setColor(Color.gray);//设置前景颜色,变为灰色}}};canvas.addMouseListener(new MouseAdapter() {//添加鼠标事件监听器//覆写mousePressed 方法,实现鼠标点击时,图片移动public void mousePressed(MouseEvent me) {if (!isRunning) {});}//容器内游戏运行时图片的显示方法void initMap() {long time = System.nanoTime();//得到系统当前时间作为随机数种子java.util.Random rnd = new java.util.Random(time);int temp, x1, y1, x2, y2;//随机交换图片for (int i = 0; i < 100; i++) {x1 = rnd.nextInt(3);x2 = rnd.nextInt(3);y1 = rnd.nextInt(3);y2 = rnd.nextInt(3);temp = map[x1][y1];map[x1][y1] = map[x2][y2];map[x2][y2] = temp;}outer: //标记8号图片(即空白图片)for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 8) {point.setLocation(i, j);break outer;//跳转到带有空白标号的行}}}}//把整个canvas上的所有对象都绘制一遍void drawScreen() {int sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2;int t1, t2;gb.setColor(Color.white);gb.clearRect(0, 0, sx * 3, sy * 3);//清空整个缓冲区图片for (int x = 0; x < 3; x++){//图片在横行的显示for (int y = 0; y < 3; y++){//图片在列上的显示if(map[x][y] != 8) {// 目的地址dx1 = x * sx; dy1 = y * sy; // 移动的左上角坐标dx2 = dx1 + sx - 1; dy2 = dy1 + sy - 1; // 移动的右下角坐标// 源地址t1 = map[x][y] % 3 ; t2 = map[x][y] / 3 ;sx1 = t1 * sx; sy1 = t2 * sy; // 移动的左上角图标sx2 = sx1 + sx - 1; sy2 = sy1 + sy - 1; // 移动的右下角坐标gb.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, Color.white, canvas);//绘制缓冲区图片}}}gs.drawImage(buff, 0, 0, canvas);//将缓冲区图片绘制到 canvas 上}//主方法,实现Jpgsaw类的使用,运行游戏public static void main(String[] args) {Jpgsaw pintu = new Jpgsaw("JpgsawGame");new Thread().start();//新建一个ThreadStart对象并传入一个方法给线程调用pintu.setVisible(true);//最后调用,避免组件不显示,利用线程设置组件可见}}/*播放背景音乐*/public class PlayMe {public static void playMe() {try {String file = "/JpgSaw/JpgsawGame/src/test.mp3"; //音乐文件路径FileInputStream fis = new FileInputStream(file); //路径设置BufferedInputStream bis = new BufferedInputStream(fis);//带有缓冲区的输入流new Player(bis).play(); //jar包中定义好的‘播放’方法}catch (Exception e){System.out.print("ERROR " + e);}}}6.上机调试及问题分析1、图片的存放位置出现错误,图片引用路径报错。
拼图java课程设计
![拼图java课程设计](https://img.taocdn.com/s3/m/607ad7b6185f312b3169a45177232f60ddcce797.png)
拼图java课程设计一、课程目标知识目标:1. 掌握Java基本语法和编程结构,如变量、数据类型、运算符、控制语句等。
2. 学会使用Java中的面向对象编程思想,包括类、对象、继承、封装、多态等概念。
3. 理解Java异常处理机制,能够编写具有良好错误处理能力的程序。
4. 掌握Java图形用户界面编程,能够设计和实现简单的拼图游戏界面。
技能目标:1. 培养学生运用Java编程解决问题的能力,能够独立完成拼图游戏的代码编写和调试。
2. 提高学生的逻辑思维能力,通过设计拼图游戏的算法,锻炼学生的算法设计和实现技巧。
3. 培养学生团队合作能力,分组完成拼图游戏项目,学会与他人协作、沟通和解决问题。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生学习Java及相关计算机技术的积极性。
2. 培养学生面对困难时的坚持和毅力,鼓励学生在编程过程中不断尝试、克服困难。
3. 培养学生的创新意识,鼓励学生在拼图游戏中发挥创意,设计出独特的游戏玩法和界面。
课程性质:本课程为实践性较强的Java编程课程,以项目为导向,注重培养学生的编程能力和团队合作精神。
学生特点:学生具备一定的计算机基础和编程能力,对Java编程有一定了解,具有较强的学习兴趣和动手能力。
教学要求:教师应注重理论与实践相结合,引导学生通过实际操作掌握Java编程知识,关注学生个体差异,提供有针对性的指导。
同时,鼓励学生积极参与团队协作,提高沟通与表达能力。
通过本课程的学习,使学生能够独立完成拼图游戏项目,达到预期学习成果。
二、教学内容1. Java基本语法和数据类型- 变量和常量的定义与使用- 基本数据类型及类型转换- 运算符与表达式- 控制语句(条件语句、循环语句)2. 面向对象编程基础- 类与对象的概念- 构造方法与成员方法- 封装、继承和多态- 抽象类与接口3. 异常处理- 异常的概念与分类- try-catch语句- 异常的抛出与自定义异常4. Java图形用户界面编程- Swing组件及布局管理器- 事件处理机制- 图形绘制与图像处理5. 拼图游戏设计与实现- 游戏规则与界面设计- 游戏逻辑实现(数据存储、移动判断、胜利条件等)- 图像切割与重组- 游戏测试与优化教学内容安排和进度:1. Java基本语法和数据类型(2课时)2. 面向对象编程基础(4课时)3. 异常处理(2课时)4. Java图形用户界面编程(4课时)5. 拼图游戏设计与实现(6课时)教材章节关联:1. Java基本语法和数据类型(教材第1、2章)2. 面向对象编程基础(教材第3、4章)3. 异常处理(教材第5章)4. Java图形用户界面编程(教材第6章)5. 拼图游戏设计与实现(教材第7章)三、教学方法1. 讲授法:- 对于Java基本语法、数据类型、面向对象编程基础等理论知识,采用讲授法进行教学,结合教材内容,系统讲解相关概念、原理和编程技巧。
java拼图游戏报告
![java拼图游戏报告](https://img.taocdn.com/s3/m/fe4c7519b52acfc789ebc9a0.png)
目录1 需求分析 (2)1.1功能需求 (2)1.2系统需求 (2)2游戏详细设计 (3)2.1 程序类主要功能介绍 (3)2.2 程序源代码 (3)1)Arg.java (3)2) ButtonClick.java (4)3) CardFrame.java (5)4) GameOver.java (7)5) Grades.java (8)6) Matrix.java (11)7) MenuFrame.java (12)8) point.java (18)9) Puzzle.java (19)10) ShowImage.java (22)11) Split.java (23)12)FileTest.java (24)13)MusicPlay.java (25)3测试过程 (27)1 需求分析1.1功能需求1)让玩家能够用鼠标控制进行菜单的选择2)玩家可以通过点击空白区域来移动有图方块3)给玩家提供暂停游戏的功能4)提供图片预览,方便玩家查看5)提供图片导入功能,是玩家可以用自己喜爱的图片进行游戏6)提供背景音乐功能,优化玩家的游戏氛围7)提供游戏记录功能,让玩家可以不断挑战自己的水平,激发游戏乐趣8)提供关卡难度选择,使得游戏适应人群更为广泛9)提供游戏帮助功能,帮助玩家更快适应游戏10)游戏成功后能给出提示1.2系统需求1)性能需求:实时性好,可靠性强2)设计约束:1.开发工具:jdk 6.0以上2.运行环境:windows xp以上3.满足所定义的各种需求2游戏详细设计2.1 程序类主要功能介绍该游戏程序中包括11个类。
包括:ButtonClick.class、CardFrame.class、GameOver.class、Grades.class、Matrix.class、MenuFrame.class、point.class、Puzzle.class、ShowImage.class、Split.class、FileTest.class、MusicPlay.class。
java_课程设计报告_拼图游戏
![java_课程设计报告_拼图游戏](https://img.taocdn.com/s3/m/ae1937ad336c1eb91b375d5f.png)
目录一、题目介绍.... . (3)1、题目 (3)2、任务 (3)3、要求 (3)二、需求分析 (3)三、概要设计 (4)1、功能分析 (4)2、界面初始化 (4)3、事件处理(1)鼠标事件 (4)4、事件处理(2)键盘事件 (5)5、状态判断 (5)6、程序流程图 (5)四、详细设计 (6)1、.html代码设计 (6)2、.java代码设计 (6)五、调试结果 (19)第一个大图的拼图界面 (19)第一个拼图全图预览 (19)第二个大图的拼图界面 (20)第二个拼图全图预览 (20)第三个大图的拼图界面 (21)第三个拼图全图预览 (21)六、心得总结 (22)七、参考资料 (22)一、题目介绍1、题目:拼图游戏设计2、任务:利用java的图形用户界面设计,设计一个拼图游戏界面,能够实现基本的游戏功能。
3、要求:(1)游戏者可以选择不同的图片。
(2)按完成的时间计算成绩。
(3)记录拼图完成的总步数。
二、需求分析拼图游戏是一个简单的小程序,游戏规则如下:将一张大图打散成9张小图,然后在游戏里任意挑8张图,贴在3行3列的矩阵中的任意位置。
通过鼠标或键盘的方向键移动打乱的8张图片,让其复原成原来的顺序,玩家就胜利了,游戏就结束了。
在游戏结束之后,算出玩家的得分。
三、概要设计1、功能分析由于要计算游戏的时间,需要引入线程,通过实现Runnable 接口和创建Thread类来实现线程的功能。
使用多线程机制来计算时间的流逝。
引入AWT绘图包,实现图片的绘制。
引入事件处理机制,要求对鼠标事件,键盘事件进行相应,实现移动图片,预览全图等功能。
按键“Y”实现临时的原图整体预览。
按键“1或者2或者3”实现大图选择、2、界面初始化调用public void init()通过接收html数据,加载三张源图片,安装媒体监视器和鼠标键盘监听器,实现界面初始化;调用public void initData()将加载的一张大图分割成九个随机分布的小图部分;调用public void paint(Graphics g)划分提示信息区域和拼图区域;3、事件处理(1)鼠标事件调用public void mouseClicked(MouseEvent e)方法实现鼠标事件处理。
课程设计报告-拼图游戏
![课程设计报告-拼图游戏](https://img.taocdn.com/s3/m/f57a7eb1960590c69ec37661.png)
void draxSegment(int seg,int x,int y){ int dx=seg%4*sx, dy=seg/4*sy;
创建按钮并做事件处理算法: void initButtons(){ bStart.addActionListener(new ActionListtener(){ public void actionPerformed(ActionEvent ae){ initMap(); drawScreen(); running=true; bSee.setLabel("显示正确图像"); } }); bSee.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ //bSee 按钮标题为“继续游戏” if(bSee.getLabel().equals("继续游戏")){ drawScreen(); bSee.setLabel("显示正确图像"); } else{ //bSee gs.draxImage(imgPuzzle,0,0,screen); bSee.setLabel("继续游戏"); } } 绘制图画,将全部图像绘制在 screen 中算法:
Байду номын сангаас
buff=createImage(imgPuzzle.getWidth(this),imgPuzzle.getHeight(this)); gb=buff.getGraphics(); } 初始化 map 并使用 Rondom 混排图像块算法: void initMap(){ java.util.Random rnd=new java.util.Random(); int temp,x1,y1,x2,y2; for(int i=0;i<100;i++){ x1=rnd.nextInt(4); x2=rnd.nextInt(4); y1=rnd.nextInt(4); y2=rnd.nextInt(4); temp=map[x1][y1]; map[x1][y1]=map[x2][y2]; map[x2][y2]=temp; } outer:for(int j=0;j<4;j++) for(int i=0;i<4;i++)
java拼图课程设计
![java拼图课程设计](https://img.taocdn.com/s3/m/30f42a79ae45b307e87101f69e3143323968f5a5.png)
java拼图课程设计一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和编程逻辑,能运用面向对象的方法进行简单的程序设计。
2. 让学生了解并掌握Java中图形用户界面(GUI)设计的相关知识,尤其是布局管理器和事件处理。
3. 使学生理解拼图游戏的逻辑结构和实现原理。
技能目标:1. 培养学生运用Java语言解决实际问题的能力,能够独立设计和编写简单的拼图游戏。
2. 培养学生的逻辑思维和问题分析能力,通过编程解决拼图过程中的难题。
3. 提高学生团队协作和沟通能力,能够在小组合作中发挥个人优势,共同完成拼图游戏项目。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣和热情,培养其主动探索新知识的习惯。
2. 培养学生积极面对挑战和困难,勇于尝试和解决问题的精神。
3. 引导学生认识到编程在生活中的应用价值,激发其创新意识和实践能力。
课程性质:本课程为实践性较强的学科,注重培养学生的实际操作能力和编程思维。
学生特点:学生具备一定的Java基础,对编程有一定兴趣,但可能对图形用户界面设计和游戏开发较为陌生。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,充分调动学生的积极性,提高其动手实践能力。
通过小组合作、讨论和分享,促进学生的团队协作和沟通能力。
同时,注重培养学生面对挑战的勇气和解决问题的能力,使学生在完成课程任务的过程中,不断提升自身编程水平和综合素质。
二、教学内容1. Java基本语法和面向对象编程:- 复习Java基本数据类型、运算符、控制结构等基础语法。
- 强化面向对象编程思想,重点讲解类、对象、继承、多态等概念。
2. 图形用户界面(GUI)设计:- 介绍Swing库的基本组件和布局管理器。
- 讲解事件处理机制,包括事件监听器和事件适配器。
3. 拼图游戏设计:- 分析拼图游戏的逻辑结构,讲解游戏实现的原理。
- 引导学生设计拼图游戏的类和对象,以及游戏界面布局。
4. 教学内容的安排与进度:- 第一周:复习Java基本语法,面向对象编程思想。
Java拼图游戏面向对象课程设计报告
![Java拼图游戏面向对象课程设计报告](https://img.taocdn.com/s3/m/75207cf6fab069dc5022015f.png)
姓名Name学号Student No.20137045 班级Class代码总行数Code Lines 222项目名称Item1.实验目的本次课程设计旨在通过一个完整项目的开发,巩固面向对象程序设计、软件工程、数据库技术等课程的相关知识,加深学生对Java语言的理解,尤其是对面向对象思想、Java编码规范、JDBC访问数据库的理解,使学生进一步掌握环境构建、代码编写、文档阅读与理解、文档编写、软件测试、发行与部署等技能,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。
2.实验内容本次课程设计选定的实验项目是使用JAVA语言编写一个拼图游戏并实现其基本功能。
不用自己手动切割图片,再进行加载。
而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。
利用了Graphics中的public abstract boolean drawImage()方法把img 中由(sx1, sy1)(sx2, sy2)指定的矩形区域画到observer 中由(dx1, dy1)(dx2, dy2)指定的矩形区域内进行构思拼图游戏的具体实现。
导入了一个可播放背景音乐的jar包,在玩游戏时可以欣赏背景音乐。
3.类图4.运行界面图1、游戏初始界面图2、游戏运行界面图3、拼图成功界面5.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息)//定义一个Pintu类public class Jpgsaw extends JFrame{private Image image, buff; //原始图片,缓存图片private int[][] map = {{0, 1, 2},{3, 4, 5},{6, 7, 8}}; //定义数组map,给分割后的图片标号private Point point = new Point(2, 2); //记录第九块图片位置private int sx; //分割后每一个图片的宽度private int sy; //分割后每一个图片的高度private Canvas canvas; //加载图片容器,定义可以显式定位子元素使用坐标是相对 Canvas 区域的区域,绘制图形private Graphics gs; //gs画出Canvas图片坐标private Graphics gb; //gb画出buff图像private boolean isRunning = false; //游戏是否正在进行private JButton start = new JButton("开始新的游戏"); // 按钮1private JButton show = new JButton("显示正确图片"); //按钮2private JTextArea showStep = new JTextArea("显示步骤");//设置步骤显示private JPanel panel = new JPanel(); //一般轻量级面板容器,装在上面2个按钮private int steps = 0; // 记录移动的步骤public Jpgsaw(String title) { //构造方法,初始化变量super(title);//调用了当前类Jpgsaw的父类JFrame的构造方法try { //异常抛出image = ImageIO.read(new File("gg.jpg")); //装载图片} catch (IOException e) {//捕获自定义的异常e.printStackTrace();}initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度setLayout(new BorderLayout());//设置此布局方法,加入控件add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小add(canvas, BorderLayout.CENTER);panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上panel.add(start);panel.add(show);panel.add(showStep);showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体setSize(720, 425);setResizable(false);//表示生成的窗体大小,不可改变大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//执行关闭按钮,关闭窗体 }//具体实现Canvas,进行初始化void initScreen(){canvas = new Canvas(){public void paint(Graphics g) { //覆写canvas的paint 方法gs = getGraphics(); //得到Canvas的Graphicsif (isRunning) {drawScreen();//运行,调用此方法} else {g.drawImage(image, 0, 0, this);//在指定的位置使用原始物理大小绘制指定的 Imageg.setColor(Color.gray);//设置前景颜色,变为灰色}}};canvas.addMouseListener(new MouseAdapter() {//添加鼠标事件监听器//覆写mousePressed 方法,实现鼠标点击时,图片移动public void mousePressed(MouseEvent me) {if (!isRunning) {return; // 如果未运行,说明图片未分割,直接返回}int x = me.getX() / sx;//判断鼠标点击的图片在map中的编号int y = me.getY() / sy;int fx = (int) point.getX();//记录第九块图片(未显示图片)的位置int fy = (int) point.getY();int canMove = Math.abs(fx - x) + Math.abs(fy - y); // 如鼠标点击位置与第九块图片(可移动的位置)相邻,则canMove 必为 1if (canMove != 1 ){return; // canMove 不为1,不能移动图片}map[fx][fy] = map[x][y]; //点击图片坐标赋给第九块图片map[x][y] = 8; //第九块图片给掉点击图片point.setLocation(x, y); //point 坐标改变drawScreen(); //重绘屏幕,实现图片移动showStep.setText("移动步骤:" + ++steps); //步骤加一 }});//为Start按钮添加事件start.addActionListener(new ActionListener() {@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent ae) {initMap();drawScreen();isRunning = true;steps = 0;showStep.setText("移动步骤:" + steps);show.setLabel("显示正确图片");}});//为show按钮添加事件show.addActionListener(new ActionListener() {@SuppressWarnings("deprecation")public void actionPerformed(ActionEvent ae) {if (show.getLabel().equals("继续游戏")) {drawScreen();isRunning = true;show.setLabel("显示正确图片");} else {gs.drawImage(image, 0, 0, canvas);isRunning = false;show.setLabel("继续游戏");}}});}//容器内游戏运行时图片的显示方法void initMap() {long time = System.nanoTime();//得到系统当前时间作为随机数种子 java.util.Random rnd = new java.util.Random(time);int temp, x1, y1, x2, y2;//随机交换图片for (int i = 0; i < 100; i++) {x1 = rnd.nextInt(3);x2 = rnd.nextInt(3);y1 = rnd.nextInt(3);y2 = rnd.nextInt(3);temp = map[x1][y1];map[x1][y1] = map[x2][y2];map[x2][y2] = temp;}outer: //标记8号图片(即空白图片)for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (map[i][j] == 8) {point.setLocation(i, j);break outer;//跳转到带有空白标号的行}}}}//把整个canvas上的所有对象都绘制一遍void drawScreen() {int sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2;int t1, t2;gb.setColor(Color.white);gb.clearRect(0, 0, sx * 3, sy * 3);//清空整个缓冲区图片for (int x = 0; x < 3; x++){//图片在横行的显示for (int y = 0; y < 3; y++){//图片在列上的显示if(map[x][y] != 8) {// 目的地址dx1 = x * sx; dy1 = y * sy; // 移动的左上角坐标dx2 = dx1 + sx - 1; dy2 = dy1 + sy - 1; // 移动的右下角坐标// 源地址t1 = map[x][y] % 3 ; t2 = map[x][y] / 3 ;sx1 = t1 * sx; sy1 = t2 * sy; // 移动的左上角图标sx2 = sx1 + sx - 1; sy2 = sy1 + sy - 1; // 移动的右下角坐标gb.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, Color.white, canvas);//绘制缓冲区图片}}}gs.drawImage(buff, 0, 0, canvas);//将缓冲区图片绘制到 canvas 上}//主方法,实现Jpgsaw类的使用,运行游戏public static void main(String[] args) {Jpgsaw pintu = new Jpgsaw("JpgsawGame");new Thread().start();//新建一个ThreadStart对象并传入一个方法给线程调用pintu.setVisible(true);//最后调用,避免组件不显示,利用线程设置组件可见}}/*播放背景音乐*/public class PlayMe {public static void playMe() {try {String file = "/JpgSaw/JpgsawGame/src/test.mp3"; //音乐文件路径FileInputStream fis = new FileInputStream(file); //路径设置BufferedInputStream bis = new BufferedInputStream(fis);//带有缓冲区的输入流new Player(bis).play(); //jar包中定义好的‘播放’方法}catch (Exception e){System.out.print("ERROR " + e);}}}6.上机调试及问题分析1、图片的存放位置出现错误,图片引用路径报错。
java拼图课程设计
![java拼图课程设计](https://img.taocdn.com/s3/m/35c161645627a5e9856a561252d380eb629423b9.png)
java拼图课程设计一、课程目标知识目标:1. 学生能理解Java语言中面向对象编程的基本概念,掌握类与对象的关系及其应用。
2. 学生能运用Java编程实现拼图游戏的基本逻辑,理解二维数组的使用。
3. 学生能够掌握Java中事件处理机制,实现对用户操作的响应。
技能目标:1. 学生通过编写拼图游戏代码,提高问题分析能力和编程实践技能。
2. 学生能够运用所学知识解决实际问题,培养创新意识和逻辑思维能力。
3. 学生通过小组合作完成项目,提升团队协作和沟通能力。
情感态度价值观目标:1. 学生在探索拼图游戏的编程过程中,培养对计算机编程的兴趣和热情。
2. 学生在项目实施中,学会面对挑战,培养坚持不懈、勇于尝试的精神。
3. 学生通过课程学习,认识到编程在生活中的应用,提升信息素养和社会责任感。
二、教学内容本课程以《Java编程思想》教材中面向对象编程为基础,结合拼图游戏的实际案例,组织以下教学内容:1. 面向对象编程基础:复习类与对象的概念,重点讲解封装、继承和多态性。
- 教材章节:第3章《面向对象的基本概念》,第4章《类与对象》。
2. 二维数组的使用:介绍二维数组的定义、初始化和使用,通过案例展示二维数组在拼图游戏中的应用。
- 教材章节:第6章《数组与字符串》,重点讲解二维数组部分。
3. 事件处理机制:讲解Java中事件处理的基本原理,以及如何在拼图游戏中实现鼠标和键盘事件处理。
- 教材章节:第11章《事件处理》。
4. 图形用户界面(GUI)设计:介绍Swing库中常用组件的使用,设计拼图游戏的界面。
- 教材章节:第10章《图形用户界面》。
5. 拼图游戏编程实践:将所学知识应用于实际项目中,分组完成拼图游戏的编程与实现。
- 教材章节:综合应用前面所学内容。
教学内容按照以上安排,逐步引导学生从理论到实践,掌握Java编程的基本技能,并在项目实践中培养解决问题的能力。
三、教学方法本课程采用以下多样化的教学方法,旨在激发学生的学习兴趣,提高教学效果:1. 讲授法:教师通过PPT和板书,系统地讲解面向对象编程的基本概念、二维数组的使用和事件处理机制等理论知识。
拼图游戏_java课设_含可运行程序
![拼图游戏_java课设_含可运行程序](https://img.taocdn.com/s3/m/4674bfd928ea81c758f578f9.png)
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
图3 游戏初始界面
单击start按钮开始游戏,界面自动加载并切割图片,玩家此时就可以通过鼠标来完成游戏了,单击空白区域旁边的图快就会移动,移动方向是向着空缺块移动,也就是说孔雀块四周都是可移动的块,而不是紧邻空缺块的图快则不能移动,结果如图4所示。
沈阳大学
图4 开始后的界面
当玩家想有提示信息时可单击数字提示,单击后会在图块上出现带有顺序的数字,玩家可以通过数字更加容易的完成拼图游戏,如图5所示。
沈阳大学
如果不想显示数字提示则可单击清除提示,结果则如同上图4所示。
图5 数字提示界面图
在游戏中,玩家每移动一块图快,状态栏中的步数就会自动加1,并在游戏状态中显示出来,游戏完成时会弹出一个对话框,提示玩家完成拼图游戏并显示所用步数,完成游戏结果图如图6所示。
图6 完成游戏对话框
玩家若想换一个图片进行游戏,则可通过image下拉框实现,玩家可以根据自己的
沈阳大学
兴趣爱好进行选择,如图7所示
图7 image下拉框
例如可以选择下拉框中的唯美,运行界面则如图8所示
图8 唯美拼图界面
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学。
java拼图游戏设计报告
![java拼图游戏设计报告](https://img.taocdn.com/s3/m/8788a2572b160b4e767fcff4.png)
《Web程序开发》课程大作业拼图游戏一、题目说明拼图游戏不仅可以帮助人们打发时间,还可以用于锻炼儿童脑力,帮助少儿开发大脑思维,拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。
在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。
本游戏使用Java语言设计,开发平台为JDK。
开发工具Eclipse。
JDK是Sun Microsystems针对Java开发员的产品。
自从Java推出以来,JDK已经成为使用最广泛的Java SDK。
JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。
JDK是学好Java的第一步。
从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
二、题意分析因为要制作拼图游戏,所以首先要实现图片的导入。
这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。
然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。
Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达到图片位置摆放的随意性和随机性。
最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this) 和addMouseMotionListener(this)来完成的。
这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。
游戏操作流程:开始游戏操作游戏游戏完成三、设计目的本游戏的设计目的在于休闲娱乐,玩家可以在学习、编程等工作后用来休息放松,让集中的心态得到释放,对于小孩可以通过精美的卡通的图片来吸引孩子的兴趣,加强动脑动手能力。
java课程设计拼图游戏
![java课程设计拼图游戏](https://img.taocdn.com/s3/m/277e2e1300f69e3143323968011ca300a6c3f68d.png)
java课程设计拼图游戏一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和逻辑思维能力,通过编写Java程序实现一个简单的拼图游戏。
具体目标如下:1.知识目标:–掌握Java的基本数据类型、运算符、控制结构。
–了解面向对象编程的基本概念,如类、对象、封装、继承。
–学习Java的图形用户界面编程,如Swing组件、事件处理等。
2.技能目标:–能够运用Java编程语言编写简单的程序。
–能够运用面向对象的思想设计程序。
–能够使用Java图形用户界面库编写用户友好的界面。
3.情感态度价值观目标:–培养学生的编程兴趣,提高学生解决问题的能力。
–培养学生团队合作的精神,学会分享和交流。
–培养学生对技术的热爱,提高学生对计算机科学的认知。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java基本语法和逻辑思维能力的培养。
2.面向对象编程的基本概念和应用。
3.Java图形用户界面编程,包括Swing组件的使用和事件处理。
具体的教学大纲如下:1.第一课时:Java基本语法和逻辑思维能力的培养。
–数据类型、运算符、控制结构。
–简单的数学计算程序编写。
2.第二课时:面向对象编程的基本概念和应用。
–类和对象的概念。
–封装、继承的应用。
–简单的图形界面程序编写。
3.第三课时:Java图形用户界面编程。
–Swing组件的使用。
–事件处理机制。
–拼图游戏的实现。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
1.讲授法:用于讲解Java基本语法、面向对象编程概念和图形用户界面编程的基础知识。
2.讨论法:通过小组讨论,让学生深入理解面向对象编程的优势和应用。
3.案例分析法:分析实际的拼图游戏案例,让学生了解图形用户界面编程的实现方法。
4.实验法:让学生动手编写拼图游戏程序,巩固所学知识。
四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016秋季学期《Java语言》大作业系统说明报告目录1项目目的与意义 (3)1.1项目背景说明 (3)1.2项目目的与意义 (3)2 软件开发环境与技术说明 (4)2.1软件开发环境 (4)2.2软件开发技术描述 (4)3系统分析与设计 (5)3.1项目需求分析说明 (5)3.2系统设计方案 (5)4系统源代码 (8)4.1系统源代码文件说明 (8)4.2源代码 (8)5系统使用说明书 (41)6参考资料 (49)7附件说明 (49)1项目目的与意义1.1项目背景说明JAVA语言2016年学期期末大作业-44拼图游戏的设置1.2项目目的与意义目的:实现简单的4X4JAVA拼图游戏的简单功能,可以进行用户的登录和拼图游戏的完成,给用户以良好的游戏体验,再加入更多个性化的内容意义:从用户角度,设计一个简单但是十分考验人的小型拼图游戏,让人们在简单方便的操作中舒缓自己一天的疲惫,和朋友一起进行挑战,不断地突破,展现游戏的美丽,实现游戏的价值从开发者角度,这是对我半年JAVA语言学习的检测,同时我也自学了许多东西,比如数据库的链接,SQL语句和JAVA的各种函数,让我可以真正的体会到开发一个项目的过程和需要付出的不懈努力,也让我享受到了自己尽全力完成一个项目的过程和完成后的喜悦。
2 软件开发环境与技术说明2.1软件开发环境JAVA开发环境-EclipseJAVA支持包:import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;import javax.swing.*;mysql-connector-java-5.1.40-bin.jar(MySql驱动jar 包)数据库环境:MySql数据库(使用的是Navicat图形界面)2.2软件开发技术描述1.拼图游戏界面设计主要使用了JAVA的GUI图形界面,主登录界面和账号注册界面使用的是流式FlowLayOut布局进行登录框和按钮的设置,而拼图游戏界面则是使用的网格式GridFlowOut布局.2.通过连接MySql数据库,(名称:user),创建数据表user_info 列名称为:username(账号),password(密码),score(过关时间), Count(过关所用步数);实现了游戏的账号注册和登录功能,以及每个账号成绩的记录和储存,并可以再推行界面中显示每个用户的游戏记录3.通过Timer类实现了拼图游戏计时功能4.图片存储在项目文件夹下image文件夹中,通过名字的巧妙设置实现了打乱图片顺序,切换图片,判断拼图是否完成。
3系统分析与设计3.1项目需求分析说明立足于用户的角度,首先,我们实现了个性化的服务,即账号的注册和登录功能,不同的用户可以进行使用,使游戏具备了最重要的竞技性,只有这样才不会让用户感到无聊,并且我们实现了4X4拼图游戏的基本功能,而且配有游戏的时间的所用步骤,可以实时地反映给游戏用户,让用户清楚地了解到自己的分数,同时还可以记录游戏过关的时间和步数,满足了用户的冲击记录的心理需求,调高了游戏的可玩性,不会被用户快速地玩腻。
3.2系统设计方案从用户的角度,我们需要有以下数据类型数据库user数据表user_info列名称类型长度数据username varchar 255 JAVA2016password varchar 255 Java2016score varchar 255 01:30count int 11 56username和password是用户的必有属性,可以进行登录和注册score和count 即用户所用的时间和步骤,双重分数完美呈现了每个人的实力从系统设计角度首先,最主要的是实现最最基本的游戏功能,即设计拼图游戏的核心程序1.拼图表格式的布局,容易让我想到使用按钮进行网格式布局2.为每个按钮添加背景图片(这些背景图片需要经过事先的裁剪),3.需要进行按钮背景图片的打乱,容易想到使用随机数RANDOM()函数,然后会想到在背景图片的名字上做文章来进行背景图片的随机设置4.我们把16个按钮存储在数组中,便于操作,然而数组最大的方便之处在于他的随机存储,我们可以通过下标访问任意一个按钮,于是想到把图片的名字与下标联系在一起,解决了图片的随机排列5.如何设置背景图片?我们需要有图片的路径,而图片的路径仅仅是图片名字的不同,所以我们将固定的图片存储路径存放到字符串数组中,然后通过循环进行图片的设置,SetIcon()函数可以做到这一切.6.切换下一张,实质还是背景图片的变化,所以我们继续在图片名字上做文章,设置一个表示数字代表是第几张的图片,把他设置到图片名字里面。
然后切换下一张被简化为改变一个数字(编程思路要清晰),数字变即路径变,也就是背景图发生变化总结:拼图-》背景图片的变化-》背景图片路径的变化-》图片名字的变化接下来,实现一个项目的登录和注册,我们需要数据库,而游戏的记录也需要数据库来存放,所以我么必须首先确立自己的数据库体系,如上所示,然后就是实现注册,将数据写入数据库和登录,在数据库中进行匹配,游戏记录的写入和读取。
在游戏成功时,获取当时的时间和步数,写入对应的用户的数据表中,然后另一个界面中设置表格,从数据库中读取信息,然后写入到表格里面进行展示最后,我考虑了游戏的一些具体实现,游戏界面的设计,如何才能让用户看得舒心,玩的自在,和暂停等实用小功能,无限满足用户的需求。
以上,就是我在设计拼图游戏是系统设计方案,以后还会不断地完善自己的程序!4系统源代码4.1系统源代码文件说明拼图游戏源代码结构-分为4个窗口介绍1.Frame1 主登录窗口(属性)包括3个标签组件,4个按钮组件,2个文本域组件和1个布局,4个按钮的鼠标点击监听事件(方法)包括1个函数来进行组件的添加和布局的设置,1个函数进行数据库的连接和读取,4个监听类进行事件的编写2.Frame2 注册窗口(属性)包括2个按钮,4个标签和3个文本域以及2个按钮的点击事件(方法)包括1个函数进行组件的添加和布局的设置,1个函数进行数据库的连接和写入,2个监听类进行点击事件的编写3.Frame3历史记录窗口(属性)包括1个表格(方法)包括1个函数进行表格的属性设置和数据库数据的读取并写入到表格中4.Frame4 游戏窗口(属性)包括4个按钮,3个标签,16个按钮和85张图片(方法)包括1个函数进行组件的添加和布局的设置,4个按钮的点击事件函数,1个计时器的计时事件其他:还有每个窗口中的字体的设置,面板位置的设置,等4.2源代码import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;import javax.swing.*;public class Test {MyListenner1 myListenner1=new MyListenner1();MyListenner2 myListenner2=new MyListenner2();MyListenner3 myListenner3=new MyListenner3();MyListenner4 myListenner4=new MyListenner4();MyListenner5 myListenner5=new MyListenner5();MyListennerFanHui myListenner18=new MyListennerFanHui();JFrame frame=new JFrame();//登录主窗口JFrame frame2=new JFrame();//注册窗口JFrame frame5=new JFrame();//注册窗口JPanel pane00=new JPanel();//历史记录JPanel pane0=new JPanel();JPanel pane1=new JPanel();JPanel pane2=new JPanel();JPanel pane3=new JPanel();JPanel pane4=new JPanel();JPanel pane5=new JPanel();//注册界面JPanel pane6=new JPanel();//注册界面JPanel pane7=new JPanel();//注册界面JPanel pane8=new JPanel();//返回按钮JButton button7=new JButton("返回");JLabel lab=new JLabel("☆简易拼图游戏☆"); //注册界面JLabel lab1=new JLabel("游戏开始");//登录界面/注册JLabel lab7=new JLabel("☆账号注册界面☆");JLabel lab2=new JLabel("账号:");//注册JLabel lab3=new JLabel("密码:");//zhuceJLabel lab4=new JLabel("确认密码:");JTextField text1=new JTextField(10);//注册账号JPasswordField text2=new JPasswordField(10);//注册密码JPasswordField text3=new JPasswordField(10);JButton button6=new JButton("注册");JLabel lab5=new JLabel("账号");//登录JLabel lab6=new JLabel("密码");//dengluJButton button2=new JButton("进入游戏");JButton button1=new JButton("注册账号");JButton button3=new JButton("游戏记录");JButton button5=new JButton("退出游戏");JTextField text4=new JTextField(10);//登录账号JPasswordField text5=new JPasswordField(10);//登录密码GridLayout lay1=new GridLayout(2,2,5,3);GridLayout lay2=new GridLayout(4,2);FlowLayout lay3=new FlowLayout(FlowLayout.LEFT,15,20);Font font1=new Font("楷体",Font.BOLD,25);Font font0=new Font("楷体",Font.BOLD,30);int num=0;int Count=0;int a=0,b=0,c=0,d=0;JFrame frame4=new JFrame();MyListenner1_1 mylistenner11=new MyListenner1_1();MyListenner2_1 mylistenner12=new MyListenner2_1();MyListenner3_1 mylistenner13=new MyListenner3_1();MyListenner4_1 mylistenner14=new MyListenner4_1();MyListenner5_1 mylistenner15=new MyListenner5_1();MyTimerlisterner mytimerlisterner=new MyTimerlisterner(frame4);MyListennerJilu mylistenner16=new MyListennerJilu();JPanel pane1_1=new JPanel();JPanel pane1_2=new JPanel();JPanel pane1_3=new JPanel();JPanel pane1_4=new JPanel();JPanel pane1_5=new JPanel();JPanel pane1_6=new JPanel();Timer timer;//计时器//游戏界面按钮JButton button1_1=new JButton("开始");JButton button1_2=new JButton("下一张");JButton button1_3=new JButton("暂停");JButton button1_4=new JButton("返回");JButton EmptyButton=new JButton();JButton button_1[][]=new JButton[4][4];//游戏界面标签JLabel YuanTu=new JLabel();JLabel BuShu=new JLabel();JLabel ShiJian=new JLabel();JLabel BuShu_num=new JLabel("步数:"+Count);JLabel ShiJian_num=new JLabel();JLabel label_time=new JLabel("时间:"+"00:00");GridLayout TuLay=new GridLayout(4,4,0,0);FlowLayout LeftLay=new FlowLayout(FlowLayout.LEFT,0,15);void jiLu(){int number=0;String[] colname = {"编号","账号","时间","步数","日期"};String[][] data=new String[10][5];Connection conn=ConnectSql();String sql="select username,score,count from user_info";try {Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery(sql);while(rs.next()){String username=rs.getString(1);String score=rs.getString(2);int count =rs.getInt(3);String num=""+number;String count1=""+count;if(count!=0){data[number][0] =num;data[number][1] =username;data[number][2] =score;data[number][3] =count1;data[number][4] ="";number++;}}} catch (SQLException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}JTable table = new JTable(data,colname);table.setEnabled(false);JScrollPane jsPane = new JScrollPane(table);pane00.add(jsPane,BorderLayout.CENTER);frame5.add(pane00);}private String[][] order() {String[][] exactnessOrder = new String[4][4];for (int i=0; i<4; i++) {for (int j=0; j<4; j++) {exactnessOrder[i][j] = "image/"+ num+ i+j+ ".jpg";}}return exactnessOrder;}//随机生成无序的图片给每个按钮private String[][] reorder() {String[][] exactnessOrder = new String[4][4];for (int i=0; i<4; i++) {for (int j=0; j<4; j++) {exactnessOrder[i][j] = "image/"+ num+ i+ j+ ".jpg";}}String[][] stochasticOrder = new String[4][4];for (int i=0; i<4; i++) {for (int j=0; j<4; j++) {while (stochasticOrder[i][j]==null) {int r = (int) (Math.random()*4);int c = (int) (Math.random()*4);if (exactnessOrder[r][c] != null) {stochasticOrder[i][j] =exactnessOrder[r][c];exactnessOrder[r][c] = null;}}}}return stochasticOrder;}//判断游戏是否完成public Boolean isSuccess(){int flag=1;String[][] exactnessOrder = order();for(int i=0;i<4;i++){for(int j=0;j<4;j++){if(!button_1[i][j].getIcon().equals(exactnessOrder[i][j] )){flag=0;}}}if(flag==0){return false;}else{return true;}}//数据库连接函数Connection ConnectSql(){String url = "jdbc:mysql://127.0.0.1/user?useUnicode=true&characterEncod ing=utf-8&useSSL=false";String username = "root";String password = "153478"; // 加载驱动程序以连接数据库try {Class.forName("com.mysql.jdbc.Driver" );returnDriverManager.getConnection( url,username, password );}//捕获加载驱动程序异常catch ( ClassNotFoundException cnfex ) {System.err.println("装载 JDBC/ODBC 驱动程序失败。