基于Java的连连看游戏设计与实现(论文正文+源代码+答辩PPT+任务书)课程设计论文模板

👭 作者主页:国度技术团队
🍅 欢迎点赞 👍 收藏 ⭐留言 

🍅 查看文末<微信号>1对1马上沟通

📝 选题、开题报告、任务书、正文、图纸、程序全都有

🌈 全学科1对1咨询,承接各种定制系统,有问题可以留言咨询,帮助到更多的人

基于Java的连连看游戏设计与实现-课程设计论文(论文正文+源代码+答辩PPT+任务书)

第一章 目录

摘  要

Abstract

目录

1. 绪论

1.1. 课题背景

1.2. Java游戏开发的现状

1.2.1. Java日益趋向成熟

1.2.2. Java极大的方便了游戏脚本的使用

1.2.3. Java平台无关特性

1.2.4. Java在手机游戏开发方面的优势

1.2.5. Java在网络方面的良好表现

1.2.6. 游戏速度

1.3. 项目开发的目标

1.4. 项目开发的意义

1.5. 本文章节安排

1.6. 本章小结

2. 开发环境和相关技术简介

2.1. 开发环境

2.1.1.Eclipse

Java

2.1.2.

2.2. 相关技术简介

2.2.1. Eclipse的图形界面开发

2.2.2. Java技术在游戏开发中的应用

2.3. 本章小结

3. 需求分析

3.1. 可行性分析

3.1.1. 技术可行性

3.1.2. 经济可行性

3.1.3. 社会可行性

3.1.4. 操作可行性

3.2. 连连看游戏需求描述及规则描述

3.3. 系统需求分析

3.3.1. 业务需求

3.3.2. 用户需求

3.3.3. 功能需求

3.3.4. 非功能需求

3.4. 本章小结

4. 概要设计

4.1. 模块设计

4.1.1. 连连看系统总体结构

4.1.2. 连连看系统模各模块介绍

4.1.3. 游戏界面模块

4.1.4. 处理模块

4.2. 确定类

4.3. 游戏素材

4.3.1. 背景图片

4.3.2. 游戏图片

4.4. 本章小结

5. 详细设计和实现

5.1. 界面设计

5.1.1. 界面实现

5.1.2. 倒计时沙漏的设计

5.2. 游戏执行的实现

5.2.1. 点击图片的实现及其部分代码

5.2.2. 记分、记关数的实现

5.2.3. 刷新功能的实现

5.2.4. 重新开始游戏功能的实现

5.3. 游戏的连接算法

5.3.1. 连连看连接方式的类型

5.3.2. 连连看连接方式的分析

5.3.3. 部分核心代码

5.4. 本章小结

6. 系统测试

6.1. 软件测试目的及意义

6.1.1. 测试目的

6.1.2. 测试意义

6.2. 测试方法分类

6.3. 测试步骤

6.4. 测试用例

6.5. 测试结果

6.6. 本章小结

结  论

致  谢

参考文献

基于Java的连连看游戏设计与实现-课程设计论文(论文正文+源代码+答辩PPT+任务书)

第二章 部分正文核心内容

在Java语言中,所有的组件都以类的形式给出,AWT组件放在java.awt包中,Swing组件放在java.swing包中。如图2-3所示,java.awt包中控件类的体系结构。

图 2-3  java.awt包中控件类的体系结构图

Javax.swing包包含了一系列Swing控件,如果要使用该包中的类,则必须显式声明import javax.swing.*。Javax.swing包中类有:Japplet、JFrame、JDialog、Jcomponent。Swing组件类的设计原理建立在MVC(Model-view-Controller)结构基础上。MVC模式由图2-4所示。

图 2-4 MVC模式图

Swing是在AWT的基础上构建的图形界面系统,它最初是为解决AWT不能满足用户需求的发展。Swing提供了AWT能提供的所有功能,并且用纯粹的Java代码对AWT的功能进行了扩充。Swing遵从组件按照某种布局摆放在容器里的原理。当界面完成之后,必须能进行事件处理,AWT和Swing之间的事件处理基本是一致的。Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。Swing采用了一种MVC的设计范式,即“模型-视图-控制”。 Swing构建界面包括以下几个步骤:导入Swing包;选择界面风格;设置顶层容器;设置按钮和标签;将组件放到容器上;为组件增加边框;处理事件;辅助技术支持。Swing组件的层次结构图如图2-5所示。

图 2-5 Swing组件的层次结构图

通过用例图能更清晰的分析用户需求,如图3-1连连看游戏的用例图。用户在连连看游戏中,能开始游戏、重新开始游戏、重排列游戏、结束游戏、退出游戏、消除图片、查看得分和闯关数等。

图 3-1 用例图

 以“重排列游戏”用例为例,其活动图如下图3-2所示。

图 3-2 “重排列游戏”活动图

根据上文游戏规则描述以及需求描述,游戏规则是模仿网络上普通的连连看游戏,主要需求是解决鼠标两次点击的图片能否消去的问题。当然,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予以处理。在两张相同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予以处理。这也是游戏的基本功能,给定任意具有相同图形的两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。如果这个最优路径的转弯数目少于3 ,则这两个格子可以消去。

根据难度的不同该游戏由4、8、12、15种不同的图片组成,游戏开始将会出现64张随机组合的图片,在规则下点击两张相同的图片后,图片将会消失。图片全部消完为游戏成功,将进入下一关。游戏还将设置刷新功能,重新开始功能的按钮,并实现该功能,方便用户进行操作。游戏的主要功能将通过程序中的线程、布局功能、事件监听进行有效实现。

本系统将划分为以下几个模块,如图3-3系统功能模块图。将连连看游戏按照功能划分为:

消除模块:完成连连看游戏消除动作的模块。

重新开始模块:完成连连看游戏中重新开始新一局游戏功能的模块。

刷新模块:完成连连看游戏中,将游戏中未消除的图片个数记录并重新随机放置等数量图片的功能模块。

选择难度模块:完成游戏中切换游戏难度并开始新一局游戏的模块。

计时模块:完成游戏中倒计时并显示提示信息的模块。

状态显示模块:完成游戏中对游戏得分、闯关数记录的模块。

图 3-3 系统功能模块图

部分代码如下:

if (remainTimes == 0) {

JOptionPane.showMessageDialog(null, "游戏开始?");

单击确定按钮进入游戏主界面,默认进入简单模式下的游戏主界面,如图5-3。

图 5-16刷新前系统截图          

刷新功能一关游戏只能使用一次,不论是那一个难度下,一关内刷新功能只能使用一次,只有通过这一关,下一关中刷新功能才能使用。使用一次之后,按钮将不能点击。

部分核心代码

// 判断在一列之内两图片之间是否全部是空白或直接相邻
// 直接相连,因而不包含空白
			if (Math.abs(posY1 - posY2) == 0) {
				return true;
			}
			int a = posY1 < posY2 ? posY1 : posY2;
			int b = posY1 < posY2 ? posY2 : posY1;
			for (int j = a + 1; j < b; j++) {
				if (map[posX1][j] != 0) {
					return false;
				}
			}
// 是否可以一直线相连
if (posX1 != posX2 && posY1 != posY2) {
				return false;
			}
			if (posX1 == posX2) {
				if (containsAllOrNoneZeroInColumn(posX1, posY1, posX2, posY2)) {
					return true;
				}
			}
			if (posY1 == posY2) {
				if (containsAllOrNoneZeroInRow(posX1, posY1, posX2, posY2)) {
					return true;
				}
			}
// 是否可以三直线相连,似之字形N
			if (isOnZigzagWith1Row2Cols(posX1, posY1, posX2, posY2)) {
				return true;
			}
			if (isOnZigzagWith2Rows1Col(posX1, posY1, posX2, posY2)) {
				return true;
			}
// 是否处于游戏区域的4条边的同一边上
			if ((posY1 == posY2 && posY2 == 0)
|| (posY1 == posY2 && posY2 == 8 - 1)
					|| (posX1 == posX2 && posX2 == 0)
					|| (posX1 == posX2 && posX2 == 8 - 1)) {
				return true;
			}		
// 是否可以三直线相连,似之字形, 两行一列 Z
			int moreX = posX1 < posX2 ? posX2 : posX1;
			int lessX = posX1 < posX2 ? posX1 : posX2;
			for (int i = lessX + 1; i < moreX; i++) {
				if (containsAllOrNoneZeroInColumn(i, posY1, i, posY2)
						&& containsAllOrNoneZeroInRow(i, posY1, posX1, posY1)
						&& containsAllOrNoneZeroInRow(i, posY2, posX2, posY2)
						&& map[i][posY1] == 0 && map[i][posY2] == 0) {
					return true;
				}

加微信,获取正文+源码:
适合初学者作为课程设计和毕业论文设计参考;

🍅 查看文末<微信号>1对1马上沟通;

📝 选题、开题报告、任务书、正文、图纸、程序全都有;

🌈 全学科1对1咨询,承接各种定制系统,有问题可以留言咨询,帮助到更多的人。

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值