栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021 JAVA课程设计——集大矿工 个人博客

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021 JAVA课程设计——集大矿工 个人博客

2021 JAVA课程设计——集大矿工 个人博客

文章目录

2021 JAVA课程设计——集大矿工 个人博客 一、负责板块二、选题与前期调查

2.1选题2.2前期调查 三.系统简述

3.1 构想界面3.2主要类

Objects类BombMiniBookMiddleBookPlusBook BackGround 类

属性 :方法 :

打印图形界面倒计时函数设计重新开始游戏函数GUI界面对应程序文字样式 四.脱离IDE运行,方便传播游戏

java工程项目导出为jar包常见错误解决办法(仅供参考)jar 包转为exeexe 转化为安装包 五.功能框架图


一、负责板块

陈锐 GUI图形界面的编写,类的设计及代码编写,实现脱离IDE运行

二、选题与前期调查 2.1选题

集大矿工 模仿经典游戏黄金矿工

2.2前期调查

以黄金矿工游戏为例,正常进行游戏需要构建 “黄金” “石块” “抓钩抓取” “碰撞检测 ” 等 ,我主要负责这些图形界面的设计,因为黄金矿工网上做的人也很多,所以我们决定重新设计背景以及抓取物品类型

三.系统简述 3.1 构想界面

3.2主要类

Objects类

炸弹,大书,小书,中等书籍 都继承自物品类 ,每个物品都有其对应的坐标,对应权重,对应长短,拥有自己的图片

定义坐标(x,y)表示该物品位于坐标轴的位置,均使用Random自定义随机生成。定义长和宽,根据长宽及坐标构造出矩形,就可以表示物品具体所在位置,中间加入物品图片

代码:

public class Objects {

	
	public int x;
	public int y;

	
	public int width;
	public int height;
	
	Image image;
	
	public boolean isMove;
	
	public int mass;
	
	public int score;
	
	public int type;

	public void paintSelf(Graphics g) {
		g.drawImage(image, x, y, null);
	}

	public int getWidth() {
		return width;
	}

	
	public Rectangle getRecangle() {
		return new Rectangle(x, y, width, height);
	}
}
Bomb

炸弹类
抓到炸弹 分数-2,所以其对应的权重为-2
选取图片

代码



public class Bomb extends Objects {
    public Bomb() {
        this.x = new Random().nextInt(701);
        this.y = new Random().nextInt(300, 550);
        this.width = 71;
        this.height = 71;
        this.isMove = false;
        this.mass = 50;
        this.score = -2;
        this.type = 2;
        this.image = Toolkit.getDefaultToolkit().getImage("imgs/bomb.png");
    }
}
MiniBook

小号书籍,分数最少,质量最小
选取图片



public class MiniBook extends Objects {
	public MiniBook() {
		this.x = new Random().nextInt(701);
		this.y = new Random().nextInt(300, 700);
		this.width = 36;
		this.height = 36;
		this.mass = 15;
		this.score = 2;
		this.image = Toolkit.getDefaultToolkit().getImage("imgs/c.png");
	}
}
MiddleBook

中等大小书籍 ,分数
选取图片



public class MiddleBook extends Objects {
	public MiddleBook() {
		this.x = new Random().nextInt(701);
		this.y = new Random().nextInt(300, 600);
		this.width = 52;
		this.height = 52;
		this.isMove = false;
		this.mass = 30;
		this.score = 4;
		this.type = 1;
		this.image = Toolkit.getDefaultToolkit().getImage("imgs/jz.png");
	}
}
PlusBook

大号书籍,分数最大,质量最大,相应设计时候的体积也最大
选取图片

public class PlusBook extends MiddleBook {

	public PlusBook() {
		this.x = new Random().nextInt(701);
		this.y = new Random().nextInt(500, 700);
		this.width = 85;
		this.height = 85;
		this.mass = 60;
		this.score = 8;
		this.image = Toolkit.getDefaultToolkit().getImage("imgs/jw.png");
	}
}
BackGround 类

游戏背景类
选取图片

人物选择可爱的皮卡丘

属性 :

关卡,电池数量,当前分数,目标分数,倒计时

方法 : 打印图形界面
	 
	void paintSelf(Graphics g) {
		switch (GameWin.gameState) {
			case 0:
				g.drawImage(startPicture, 0, 0, null);
				drawWord(g, 80, Color.ORANGE, "集大矿工", 40, 150);
				drawWord(g, 40, Color.lightGray, "轻触右键开始", 40, 210);

				break;
			case 1:
				g.drawImage(backGroundPicture, 0, 200, null);
				g.drawImage(backGroundPicture1, 0, 0, null);

				g.drawImage(minerPicture, 310, 50, null);
				drawWord(g, 30, Color.black, "积分:" + count, 30, 150);
				
				g.drawImage(batteryPicture, 550, 40, null);
				drawWord(g, 30, Color.black, "*" + batteryNum, 610, 70);
				 
				drawWord(g, 20, Color.black, "第" + level + "关", 30, 60);
				  
				drawWord(g, 30, Color.black, "目标" + goal, 30, 110);
				
				endTime = System.currentTimeMillis();
				long tim = 20 - (endTime - startTime) / 1000;
				drawWord(g, 30, Color.black, "时间:" + (tim > 0 ? tim : 0), 520, 150);
				break;
			case 2:
				g.drawImage(backGroundPicture, 0, 200, null);
				g.drawImage(backGroundPicture1, 0, 0, null);
				g.drawImage(batteryPicture, 300, 400, null);
				drawWord(g, 30, Color.black, "价格:" + price, 300, 500);
				drawWord(g, 30, Color.black, "左键购买 右键取消", 250, 600);
				if (shop) {
					count = count - price;
					batteryNum++;
					shop = false;
					GameWin.gameState = 1;
					startTime = System.currentTimeMillis();
				}
				break;
			case 3:
				g.drawImage(defeatPicture, 0, 0, null);
				drawWord(g, 80, Color.red, "失败  " + "积分:" + count, 100, 100);
				drawWord(g, 40, Color.gray, "左键重新开始游戏", 150, 150);
				break;
			case 4:
				g.drawImage(winPicture, 0, 0, null);
				drawWord(g, 80, Color.red, "成功  " + "积分:" + count, 100, 100);
				drawWord(g, 40, Color.gray, "左键重新开始游戏", 200, 520);

				break;
			default:
		}

	}

倒计时函数设计
每一关设计游戏时间为20秒
	
	boolean gameTime() {
		int gameTime = 20;
		long time = (endTime - startTime) / 1000;
		if (time > gameTime) {
			return true;
		}
		return false;

	}
重新开始游戏函数
		
	void reGame() {
		
		level = 1;
		
		goal = level * 10;
		
		count = 0;
		
		batteryNum = 3;
		
		batteryState = false;
	}
GUI界面对应程序文字样式

默认使用黑体


	public static void drawWord(Graphics g, int size, Color color, String string, int x, int y) {
		g.setColor(color);
		g.setFont(new Font("黑体", Font.BOLD, size));
		g.drawString(string, x, y);
	}
}

四.脱离IDE运行,方便传播游戏

我们平时在下一个软件,使用一个软件的时候,都不能让看到源代码,一方面是对开发者的开发权益保护,另一方面是为了让用户使用的时候更加方便不容易让程序出错,所以将程序打包,脱离IDE运行是很有必要的

java工程项目导出为jar包

网上关于vscode 导出jar包的教程较少,描述也都有不同的方法,大部分都是eclipse的使用方法. 所以这里主要介绍vscode 的导出jar方法
点开项目目录,找到 “->”,单击,选择好main函数,jar即可导入到项目文件夹下


最后在程序窗口看到这行命令,jar就成功导出了

看上去好像很简单,似乎是非常方便,接下来我们尝试运行jar包,就会出现各种各样的问题。不同的机型,vscode插件的配置方法, 使用JDK的版本,都会导致运行Jar包时出现各种各样的错

常见错误解决办法(仅供参考)

因为本人才疏学浅,所以解决问题的办法都比较暴力,欢迎老师同学批评指正
我在尝试运行jar包的时候大致遇到以下几种情况:
因为课设时间比较急迫,遇到的问题没有全部截屏,所以采用口头叙述

(1)显示 “你的jar包 生成依靠的JDK版本是 11.x, 但系统依靠的版本JDK是13.x…… ” ,出现这种情况,一般是vscode 安装配置好java环境过后,又安装过其他的java编程软件如“eclipse” ,然后又重复配置系统jdk环境,安装新版本后导致新旧版本冲突导致的错误。
解决办法:找到系统安装目录删除所有版本的jdk,统一安装最新版本的jdk,
输入 电脑控制台 和 vscode 控制台 输入 javac -version 查看jdk版本是否一致,一致后更改完成,jar即可正常运行

vscode 控制台

电脑端cmd控制台

(2) 显示“无法加载主类,找不到主类”,这种情况我估计是vscode 脑袋比较笨的原因了,或者是其他什么我不知道的原因,大致是因为变成jar包最后我找不到main ,不知道怎么运行,这种情况的话,就把主类单独提出来,作为一个类,不要把主函数写到别的类里面

(3)显示 “加载主类 windows.Main 时出现 linkageError
java.lang.UnsupportedClassVersionError: Preview features are not enabled for windows/Main (class file version 61.65535). Try running with ‘–enable-preview’” 安装中文翻译的意思,这种情况是文件格式所引起的,复制好报错问题文件的代码,删除文件,重新添加文件

jar 包转为exe

想要转成.exe,需要有其他软件的支持,这里使用的是:exe4j :官网:www.exe4j.com
参考博客 https://blog.csdn.net/qq_45964209/article/details/105889616

最终根据教程成功转化为 exe ,存放在exe文件夹当中

exe 转化为安装包

使用软件 Inno Setup 编译器

这一步尝试了很久一直在找问题,但是最终还是没有完全成功 、

根据网上教程下载了对应软件,但最终生成安装包安装成功后并不能正常运行

问题猜测:因为我使用的JDK 17文件夹当中并没有找到对应的jre,所以在网上下载了对应的jre,但是因为我生成jar的时候使用的并不是jre版本,而是jdk17所以导致出错,目前没有想到对应的解决办法,希望假期可以解决这个问题

五.功能框架图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号