package com.sxt;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
/**
* @author 谭梦寻
* @version 1.1
* 创建窗口
* 问题1 :红线有时候没有生成
* 问题2 :失败后药水没有刷新
*/
public class GameWin extends JFrame {
// 设置游戏状态 0表示未开始 1表示运行中 2表示商店 3 失败 4 胜利
static int state;
// 创建一个集合 存放多个金块 石块
List<Object> objectList = new ArrayList<>();
// 创建一个背景类
Bg bg = new Bg();
// 创建一个红线类
Line line = new Line(this);
// 创建一个金块
// Gold gold = new Gold();
//创建多个金块
// 在类当中不能直接写for循环 只能给他一个无参构造 或者设置一个代码块
{
// 设置布尔类型 表示是否可放置
boolean isPlace = true;
// 设置金块出现的概率
for (int i = 0; i < 8; i++) {
double random = Math.random();
// 检测物体堆叠
Gold gold;
if (random < 0.3) {
gold = new MinGold();//生成小金块
} else if (random < 0.7) {
gold = new Gold();//生成正常金块
} else {//生成大金块
gold = new MaxGold();
}
// 判断是否重叠
for (Object obj : objectList) {
if (gold.getRec().intersects(obj.getRec())) {
// 不可放置 需要重新生成
isPlace = false;
}
}
if (isPlace) {
objectList.add(gold);
} else {
isPlace = true;
// 重新执行循环生成金块
i--;
}
}
// 生成石块
for (int i = 0; i < 5; i++) {
Rock rock = new Rock();
for (Object obj : objectList) {
if (rock.getRec().intersects(obj.getRec())) {
// 如果重合
isPlace = false;
}
}
if (isPlace) {
// 没有重叠
objectList.add(rock);
} else {
isPlace = true;
i--;
}
}
}
/* 初始化一块画布 --双缓存解决闪烁问题
将所有绘制的图案放在一块画布中
然后将画布放入窗口
*/
Image offScreenImage;
// 初始化窗口信息
void launch() {
// 窗口是否可见
this.setVisible(true);
// 设置窗口大小
this.setSize(768, 1000);
// 设置窗口位置
this.setLocationRelativeTo(null);//使得窗口居中
// 设置窗口标题
this.setTitle("黄金矿工");
// 设置关闭窗口的方法
setDefaultCloseOperation(EXIT_ON_CLOSE);//点击右上角也能关闭窗口
// 创建一个点击事件
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
switch (state) { //默认值是0
case 0: //未开始 点击鼠标右键开始游戏
if (e.getButton() == 3) {//鼠标左键是1 右键是3 滚轮是2
state = 1;
bg.startTime = System.currentTimeMillis();
}
break;
case 1: //运行中
// 左右摇摆 鼠标左键是1 右键是3 滚轮是2
// 点击左键
if (e.getButton() == 1 && line.state == 0) {
line.state = 1;
}
// 鼠标右键事件 抓取返回
if (e.getButton() == 3 && line.state == 3 && Bg.waterNum > 0) {
// 药水减少
Bg.waterFlag = true;
Bg.waterNum--;
}
break;
case 2: //商店
// 点击鼠标左键购买
if (e.getButton() == 1) {
bg.shop = true;
}
if (e.getButton() == 3) {
// 直接进入下一一关 并重新计时
state = 1;
bg.startTime = System.currentTimeMillis();
}
break;
case 3: //失败
// break;
case 4: //胜利
if (e.getButton() == 1) {
// 返回状态 0 重置元素
state = 0;
bg.reGame();
line.reGame();
}
break;
default:
}
}
});
// 添加循环 让图片不停的绘制
while (true) {
repaint();
// 调用是否进入下一关的函数
nextLevel();
// 设置绘制间隔时间
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 进入下一关
public void nextLevel() {
if (bg.gameTime() && state == 1) {
// 如果我的积分大于目标积分 通过类名直接调用静态属性 通过对象名调用非静态属性
if (Bg.count >= bg.goal) {
if (Bg.level > 5) {//过5关成功
state = 4;
} else {
state = 2;
Bg.level++;
// 进入下一关重置时间
// bg.startTime = System.currentTimeMillis();
}
// System.out.println("进入下一关");
} else {//游戏失败
state = 3;
}
// 每次进入下一关 释放之前的窗体 且重置物体
dispose();
GameWin gameWin = new GameWin();
gameWin.launch();//重新绘制
}
}
// 写一个绘制方法
@Override
public void paint(Graphics g) {
offScreenImage = this.createImage(768, 1000);//大小和窗体大小相同
// 给画笔添加画笔
Graphics gImages = offScreenImage.getGraphics();
// 传入画笔
bg.paintSelf(gImages);
// 背景在任何时候都会绘制 但线和物体只有在游戏运行时才会绘制
if (state == 1) {
// 先画金块后画线
// 利用增强for循环遍历集合
for (Object obj : objectList) {
obj.paintSelf(gImages);
}
line.paintSelf(gImages);//画线
// 单个金块的绘制
// gold.paintSelf(gImages);
}
// 将画布绘制到窗口中
g.drawImage(offScreenImage, 0, 0, null);
}
// 程序的入口
public static void main(String[] args) {
GameWin gameWin = new GameWin();
gameWin.launch();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java小游戏之黄金矿工
共304个文件
sample:13个
class:9个
xml:7个
需积分: 0 1 下载量 6 浏览量
2024-01-18
19:00:42
上传
评论
收藏 477KB ZIP 举报
温馨提示
纯java编写的一个小游戏项目,利用数组、多态、继承等方法,符合java面向对象特点,满足初学java的编程里面要求,里面有理解难度的代码都有对应的注释,方便初学者阅读,也适合初学者培养java兴趣。有问题也可以私聊我,欢迎大家参考学习。值得注意的是,这是使用JDK1.8版本,所以出现版本问题的话,可以去我的博客中查看解决方法。另外,本项目纯作为分享,没有商业作用,希望大家多多支持!
资源推荐
资源详情
资源评论
收起资源包目录
java小游戏之黄金矿工 (304个子文件)
0029ca47e9c248c0162980b36449e0d646e740 847B
00a6f66e7ef4c6d01a587e130fb91c990e666c 96B
02118817cf342036e73d90b6e8196bd7aceae1 45B
024a479ea6e0af19c270c259a726001d332712 173B
03aa223d1507c66651be05398ae1faba6be48a 113B
046dff35959e89e9b4e081f9314c816b184e36 136B
04d7e374f4cf0253d986b0620b3751c8101cb3 46B
0559bfa8662b9797e810ed5a459083bcd87062 45B
05a110be236f55fd43281a5cee1a311dda343b 31KB
06f18b1aaeb5be149328472bbac7d141fc5abf 112B
06fb0cd03112ed73ea51e6298b5463fa795cf1 45B
06fe9eb56c393a395e719c072c5b4e2c671e12 2KB
07be6a63b327767bd681ef43b60efbffd4c2bc 287B
08a6de6984c9020f5f2a8fb5ccd4ac7a7873cc 2KB
099ff6f648989471929b9922a1892cb48e5f57 45B
0ab8475637f9692d6c8c8d0c91bb56bc12de40 2KB
0b87dfd2442a247cf5bb85dadd2702ce6e7145 45B
0c2f7084250c22155bce2fce80dfdd541a8a9f 45B
0c9e75ccdb14641e40fd0a6cd27db6b9b7b978 46B
0e9df537205559a5560b2cd9abcff71a95ab52 401B
0eae5bd385b6d36026eadf35ac10908f925d9e 57B
0f1d12bbf9cc1204890f7b376811ce1d454713 2KB
0f59eab491df5dd6dfedf727c3661cd03a7280 2KB
0fb66808393fac9123afafa16f0ff9505cac0a 345B
109018deb3740877f1cb13f274d0cbba2fac8b 46B
12fab94184a53962f4e7b048fb5f55c6cd400f 368B
13c1b3ca4fea2386f7fca6a359311cc12a813e 201B
1453e47421b7200aa824a8b401ae8558165e38 45B
14b86ed4e6425183e7f6892d257db67e759502 381B
151942600eead98a9bf668ad5c94c912b3cc9b 176B
1579ec49d16f81c49d60a1ef94db85c63ad811 46B
15ed9151e1cfbfb32bd8cb8bb5c649b557b646 56B
16f1c97dbd7fef65c60384ca7584ab0434ad8a 112B
17d68ee0a2f3ec2b5063211b3c7cc65d0a6bd2 46B
17d92dc5c6c03a9f2f9290cec1b5f28aa6f32b 257B
17eb4b5e338616dcc7b6581fc71b7505e2bd75 514B
18a2350879b0fb739a1030abeeb619bbbad160 100B
18cdd70de5936302630c13aa30674d5d82f425 217B
1942f2ddad692c2552cdd051878ea7e25f6d31 939B
1c8669c5d4f4aab6fb67d50f8276aa0d56843f 974B
1c8cb349df1947a83eaecf8a165a30d1b2532d 45B
1e19a219311263a6f5d4781f62139ed865e5cc 2KB
1eab35b9484259d2c8daf6d3e015af53ea4e53 3KB
1ee163acde593dadd81ad1dfd0231a1b0a8b81 2KB
1f03403478bd96e73ca2b1a2f8fa6f768b1169 112B
1f8827445255bb172fa1186b455c53804214e7 1KB
20407ac7f5daac39108783368dead1f90635c0 45B
204824775a0eb0110f476aa4c26114afcb36de 112B
206b16364c4e2e4d07af410b0b3129644bdf58 202B
20cdd64cfc677d3e3aca2344cb1a4ba1452741 180B
22ab04d2870df3ffb7c864fb19df3068649572 45B
22c2a27a5d03e7bce054d7838cd14c07a9a9ea 46B
239e59cd34e38c9999a80399bc56e7522e8683 45B
256ddbc9c5a64c6428b00ea115fd98544b18f8 45B
2586db0a3a0012b0c65e5a28af310d6c981756 112B
25cc124761822fd04a1f878066b9c11fb9e5ba 202B
264c59300a50edb46e1985dd312585260a234e 201B
267f07e016d630de162480d82c962bb6f96941 2KB
26a3e91f2b658312b891bd4b93ead90320f5f8 174B
2715ab91eee8b76bceb44f2ff2785bb01452d3 98B
2b55f0fe188746b946b1d8e379c1a2c612f081 363B
2c1066c38d083c5ba3768ea71572904073914c 1KB
2f5fb115d5cf0e2a4b2a523225b70c192bfad0 45B
2fa0cc4557935b701a124daaf572509fd33629 172B
312789196a16b4f1a523c34791b002760f3e31 361B
32a6f85cae9f22ec5f542bca5bede57ebc9cac 2KB
340c30eb8be4c388f162d2cdf289bd29178663 174B
3417b8d9d0a2fec34cf79ef2b46cc63a28b7d8 21B
344deb3626a050821dc66cedaa7336a18d7911 45B
35a4eea4691cfada0fa714cb631a3e371bd072 45B
373fd1b82b9d97595dbc38171a35d75d804ddb 2KB
374c82fd5306c8a9f6315fc2183c57c8b5eaae 178B
378383625e23987dbb0cdac0f1481f810c1419 631B
3b2cf85f4e309dab177c63d54dc1190ca8421d 112B
3c0c5ec5dcacd2236b29fc689b68e953b5a3af 45B
3c99efb2aace2bb7a658643e68297564566549 111B
3d3b7a89d077c77eba81bc20bcc9742a6414af 2KB
3eef6a1d8937dfd987026fe1f9038e7d6edddc 45B
3f15f7d30c0dbcf29a2e085280fa7c112fb096 1KB
3fa16b151acf7e385304bdd19f60c4a0267f1e 45B
3fac28d69bd60b6939df7ce8d672bb0365378e 99B
43511bb0bc62a2ba7203b01602fcdcc2a2eb7f 1KB
43b8061bb595ef37a63a5c0344cef1bf1a03c5 328B
455befd3766e653373c3753855ca464f0cc6d2 477B
4574e561adb7ebed828acafc627526685baf2e 1KB
48b506585f014664dc78f235806bd712532ad0 45B
4d61108a22d524ac3be50a93d37aada2d847e2 45B
4de36d6e9a361dfc6d25be78a81266a6cac6c9 210B
4e1026df9477de5d68679726fe138f3cf7dfe6 53B
4ece0236bae8df708a542cd7741c2485455014 959B
5067af53d52d95c28d7b09383ac1ac52c8124b 505B
5069cfbcdf69c3079c3cfd6c8bb2ab51244007 112B
51420e2f8e3f182ba494a6d4fe9a3f9eec0ef4 112B
51caeeed4a3a8ef10c192ee21667ffa6b30225 203B
52d311ca7b95bfc99aa36c0b7e5f24194e52f8 195B
52f1ea654fe9494fdbfa3adc9be7dfb36d8c14 73B
56c19724dd22c72709f944d9d5da8fc0383176 111B
572a3b615a5e62da7d48c7553e103a66e63fe7 100B
57ae4d0129ab516602355335aaa97194567b66 112B
58333fba46dc02b78445d4a9917fd664354785 3KB
共 304 条
- 1
- 2
- 3
- 4
资源评论
谭梦寻
- 粉丝: 646
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 非官方爵金微信小程序应用 - 掘金非官方微信小程序.zip
- PHP新版云进销存ERP销售库存仓库员工管理系统源码数据库 MySQL源码类型 WebForm
- 使用深度神经网络进行人脸识别
- vue admin,vue3 admin,vue3.0 admin,vue后台管理,vue-admin,vue3.0-admin,admin,vue-admin,vue-element-admin,a
- Neural Networks and Deep Learning 的代码示例
- web网页设计文件资源
- Unity Container suit
- java仿饿了么外卖点餐送餐平台源码带手机端带文档数据库 MySQL源码类型 WebForm
- Java并发编程中ThreadLocal的原理与应用分析
- linux常用命令大全.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功