2352732 项目创新

news/2025/2/27 20:32:44/文章来源:https://www.cnblogs.com/lcy777/p/18741926

一、项目及来源
我选取的项目是一个用Java语言开发的拼图小游戏,来自https://www.cnblogs.com/get-elaina/p/17854791.html
该拼图游戏实现了拼图的打乱功能和移动功能,用户可以通过↑ ↓ ← → 键来对图片进行移动,并记录下用户所使用的步数,当用户将拼图复位后,游戏步数将不在增加,键盘监听也停止,↑ ↓ ← → 键不在响应,此时用户可以重新开始新一轮的游戏,重新打乱图片在此开始挑战。
以下是原项目的运行截图:
如图所示: image

二、运行环境
在jdk2.1环境下,开发环境为Intelij IDEA.

三、创新点
在测试并使用该项目后我认为该项目没有大问题,功能可以创新增加新功能。比如原项目中的拼图默认为4X4,拼图方块被切割的过小导致游戏难度加大,以至于难以通关,所以我决定可以对其增加难度等级,简单模式和困难模式,简单模式下的拼图为3X3,降低了游戏的难度,增加了用户的游戏体验。
此外,还可以多增加些图片供用户选择,可以减少游戏的单一性,增加游戏的趣味性,可以选取一些更好看的图片来增加用户想要玩游戏的意愿,

四、新增加的代码
新建一个二维数组3X3,用来储存图片默认顺序,将原始图片分为9份小图片,将他们的编号存入数组中,每次移动图片改变二维数组中编号位置,并更新图片。
以下是界面的详细参数设置,如宽高位置等:

int[][] date = new int[3][3];
int x = 0;
int y = 0;
int[][] win = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 0}};
int step = 0;public GameJFrame() {this.InitJFrame();
}private void InitJFrame() {this.setSize(862, 900);this.setTitle("拼图小游戏单机版 v1.0");this.setAlwaysOnTop(true);this.setLocationRelativeTo((Component)null);this.setDefaultCloseOperation(2);this.setLayout((LayoutManager)null);this.InitJMenu();this.puzledate();this.puzzlePicture();this.addKeyListener(this);this.setVisible(true);
}private void puzledate() {int[] tempArr = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8};Random r = new Random();int i;for(i = 0; i < tempArr.length; ++i) {int num = r.nextInt(tempArr.length);int temp = tempArr[i];tempArr[i] = tempArr[num];tempArr[num] = temp;}for(i = 0; i < tempArr.length; ++i) {this.date[i / 3][i % 3] = tempArr[i];if (tempArr[i] == 0) {this.x = i / 3;this.y = i % 3;}}}private void puzzlePicture() {this.getContentPane().removeAll();if (this.victory()) {ImageIcon bg = new ImageIcon("src\\com\\lcy\\ui\\puzzlePicture\\win2.png");JLabel bgJLabel = new JLabel(bg);this.getContentPane().add(bgJLabel);bgJLabel.setBounds(230, 230, 260, 260);}JLabel stepCount = new JLabel("步数" + this.step);stepCount.setBounds(50, 30, 150, 75);this.getContentPane().add(stepCount);for(int i = 0; i < 3; ++i) {for(int j = 0; j < 3; ++j) {ImageIcon icon = new ImageIcon("src\\com\\lcy\\ui\\puzzlePicture\\0" + this.date[i][j] + ".jpg");JLabel jLabel = new JLabel(icon);this.getContentPane().add(jLabel);jLabel.setBounds(200 * j + 133, 200 * i + 162, 200, 200);jLabel.setBorder(new BevelBorder(1));}}ImageIcon bg = new ImageIcon("src\\com\\lcy\\ui\\puzzlePicture\\background.png");JLabel bgJLabel = new JLabel(bg);this.getContentPane().add(bgJLabel);bgJLabel.setSize(862, 862);this.getContentPane().repaint();
}void InitJMenu() {JMenuBar jMenuBar = new JMenuBar();JMenu funcJMenu = new JMenu("功能");JMenu moreJMenu = new JMenu("更多");JMenuItem changeItem = new JMenuItem("更换图片");JMenuItem replayItem = new JMenuItem("重新开始");JMenuItem reLoginItem = new JMenuItem("重新登录");JMenuItem exitItem = new JMenuItem("退出");JMenuItem moreItem = new JMenuItem("更多功能");funcJMenu.add(changeItem);funcJMenu.add(replayItem);funcJMenu.add(reLoginItem);funcJMenu.add(exitItem);moreJMenu.add(moreItem);jMenuBar.add(funcJMenu);jMenuBar.add(moreJMenu);this.setJMenuBar(jMenuBar);
}

}

五、改进后截图:
下面是改进后的项目展示
打乱后:
image
打乱前:
image
.

六、思考总结
对于此次项目的改进,我认为其中的难点和耗时较久的部分主要为界面布置和图片代码逻辑的更改:需要找到合适的图片并分为九张像素合适小图片,存入文件中,还需要在界面中找到合适的像素点插入图片以免出现与背景图片贴合不好;由于图片的编号数组由4X4更改为3X3,所以数组的边界判定,↑ ↓ ← → 的操作也需要做出对应的调整;更换图片时对应的图片储存的文件夹不同,需要建立字符串数组来记录不同图片的文件路径。
这次项目的创新从用户的角度出发,考虑到了用户不同的喜好以及对游戏难易程度的需求,对该项目进行了创新,增加了部分功能,使该项目有更好的功能实现和更强的商业竞争力,贴合用户需求,各个方面都更加完善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890814.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring @conditional介绍及使用

💖简介 @Conditional 是 Spring 框架中用于条件化注册 Bean的核心注解,它允许开发者根据特定条件决定是否将某个Bean注册到 Spring 容器中。这一机制在实现多环境配置、模块化加载、动态依赖管理等场景中非常有用。 📖作用条件控制:根据预设条件(如环境变量、类路径、系…

7.1.2 AlexNet

本质和主要改进见下因为模型更大了,所以要用丢弃法做正则;\(\text{ReLu}\)则比\(\text{Sigmoid}\)更能支撑更深的网络(解决了梯度消失);最大汇聚层则让输出更大,梯度更大,训练更容易 还有一些主要区别如下步长也很大的原因也是当时的算力其实不是很够池化层更大了就允许…

学生信息管理项目更改

一、来源:原先的作品来自于大二上同寝室计科同学的期末大作业项目 二、运行环境基于intelij为运行软件,maven做框架依赖,tomacat浏览器展示,mysql数据库 运行截图由于代码较多,此处只展示部分代码 1、addStudent.jsp 点击查看代码 <%@ page language="java" …

Linux相关杂记

Windows通过ssh远程linux的Ubuntu 1.在Ubuntu上安装SSH服务 sudo apt update sudo apt insall openssh-server2.启动ssh sudo systemctl start ssh3.设置开机自启 sudo systemctl enable ssh2.获取Ubuntu的IP地址 ip a3.windows上使用SSH客户端 ssh 用户名@IP地址#####愿你一寸…

笔记本外接显示器,左右位置设置

笔记本电脑扩展的显示器 如何左右分屏或上下分屏显示? 留意屏幕布局。 若笔记本屏幕在左而外接显示器在右,则无需调整;反之,则需用鼠标选中2号屏,按住左键拖动至1号屏的左侧。

题解:P4586 [FJOI2015] 最小覆盖双圆问题

写了这么久终于过了,发篇题解记录一下。 第一次写黑题题解,写的不好请见谅。 目录本题思路 三点定圆 最小圆覆盖 关于最小圆覆盖时间复杂度 回到本题 二分法划分点集 总时间复杂度 最小覆盖双圆问题代码本题思路 首先,这道题叫做最小覆盖双圆问题,这道题涉及到一个叫做最小…

sed undefined label on MacOS, FreeBSD

A quick fix is to prepend your string expression with an empty string: For example: instead of sed -i s/foo/bar/g text.txt write: sed -i s/foo/bar/g text.txtThis should work across different OS (Linux, MacOS, Windows) --dopexxx来源:http://stackoverflow.…

软工作业1:自我介绍+软工5问

这个作业属于哪个课程 软工23级这个作业要求在哪里 自我介绍+软工五问这个作业的目标 熟悉博客园以及Github的相关操作,了解软件工程相关内容1.自我介绍兴趣爱好:羽乒人,爱听歌,电影,楷书,行楷 编程语言:C,JAVA 目标:后端开发2.软工五问软件工程在对就业上的帮助的具体…

对“推箱子”小游戏代码的改进

一.代码来源 https://www.cnblogs.com/heyu123/p/14844284.html 二.运行环境 DEV--C++ 三.原代码及其运行结果 原代码: int map[8][8]={{1,1,1,1,1,1,1,1},//0 空地 {1,0,0,0,1,0,0,1},//1 墙 {1,0,1,0,1,4,3,1},//3 目的地 {1,0,0,0,0,4,3,1},//4 箱子 {1,0,1,0,1,4,3,1},//5…

软件开发与创新课程设计作业——软件逆向设计

一、来源:软件工程2班李鹏飞去年的大作业`点击查看代码 #include <iostream> #include <string> #include <fstream> using namespace std;//定义客户类型 enum eGuestType // 在高版本VS中,需要用enum class,在低版本的vs中,直接用enum也可以 {e_member…

LVI_SAM 虚拟机安装复现(一)

0. 前言 高能警告:LVI_SAM 的安装步骤是繁琐的,一个坑接着一个坑,请预留48+小时的安装时间,和80%以上的san值。非战斗人员请尽快撤离。 预备知识:虚拟机安装步骤,ROS基本概念,Makefile工作原理 没有预备知识的话,也没关系,本文也不会给你解释的( 本文是第一大步骤,即…

大模型--三种三种检索方式-Dense retrieval / Lexical Retrieval / Multi-Vector Retrieval- 44

1. 参考 M3-Embedding https://github.com/FlagOpen/FlagEmbedding https://arxiv.org/pdf/2402.03216 https://huggingface.co/BAAI/bge-m3 2. Dense retrievalimport torch import torch.nn as nnclass DenseRetrieval(nn.Module):def __init__(self, embedding_dim):super(D…