游戏需要的图片在尾部进行获取。

运行结果如下:

游戏测试类,主要负责调用,进入,绘画

package game;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;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();{//是否可以放置boolean isPlace = true;for (int i = 0; i < 11; i++) {double random = Math.random();Gold gold;//存放当前生成的金块if (random < 0.3) {gold = new GoldMini();} else if (random < 0.7) {gold = new Gold();} else {gold = new GoldPlus();}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(WindowConstants.EXIT_ON_CLOSE);//创建鼠标点击事件addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);switch (state) {case 0:if (e.getButton() == 3) {state = 1;bg.startTime = System.currentTimeMillis();}break;case 1://左键编码为1//左右摇摆点击左键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:case 4:if (e.getButton() == 1) {state = 0;bg.reGame();line.reGame();}break;default:break;}}});while (true) {repaint();nextlevel();//设置延迟try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}//下一关public void nextlevel() {if (bg.gameTime() && state == 1) {if (Bg.count >= bg.goal) {if (Bg.level == 5) {state = 4;} else {state = 2;Bg.level++;}} else {state = 3;}dispose();GameWin gameWin = new GameWin();gameWin.launch();}}@Overridepublic void paint(Graphics g) {//解决图片闪动问题offScreenImage = this.createImage(768, 1000);Graphics gImage = offScreenImage.getGraphics();bg.paintSelf(gImage);if (state == 1) {//绘制物体for (Object obj : objectList) {obj.paintSelf(gImage);}line.paintSelf(gImage);}//gold.paintSelf(gImage);g.drawImage(offScreenImage, 0, 0, null);}public static void main(String[] args) {//调用上面类GameWin gameWin = new GameWin();//调用类中方法gameWin.launch();}
}

游戏实体类,父类object,该类主用于生成金块于石块的参数,然后以继承的方式去设置对应值

package game;import java.awt.*;public class Object {//坐标int x;int y;//宽高int width;int height;//图片Image img;//标记,是否可移动boolean flag;//质量int m;//积分int count;//类型 1金块 2石块int type;void paintSelf(Graphics g){g.drawImage(img,x,y,null);}public int getWidth() {return width;}//获取矩形public Rectangle getRec(){return new Rectangle(x,y,width,height);}
}

游戏实体类,金块类,该类继承object类,来设置金块的大小位置等

package game;import java.awt.*;/*金块类*/
public class Gold extends Object{/*普通金块*/Gold(){this.x=(int)(Math.random()*700);this.y=(int)(Math.random()*550+300);this.width=52;this.height=52;this.flag=false;this.m=30;this.count=4;this.type=1;this.img= Toolkit.getDefaultToolkit().getImage("imgs/gold1.gif");}
}
/*迷你金块*/
class GoldMini extends Gold{GoldMini(){this.width=36;this.height=36;this.m=15;this.count=2;this.img=Toolkit.getDefaultToolkit().getImage("imgs/gold0.gif");}
}
/*大号金块*/
class GoldPlus extends Gold{GoldPlus(){this.x=(int)(Math.random()*650);this.width=105;this.height=105;this.m=60;this.count=8;this.img=Toolkit.getDefaultToolkit().getImage("imgs/gold2.gif");}
}

游戏实体类,石块类,该类继承object类,来设置金块的大小位置等

package game;import java.awt.*;public class Rock extends Object{/*石块类*/Rock(){this.x=(int)(Math.random()*700);this.y=(int)(Math.random()*550+300);this.width=71;this.height=71;this.flag=false;this.m=50;this.count=1;this.type=2;this.img= Toolkit.getDefaultToolkit().getImage("imgs/rock1.png");}
}

游戏实体类线类,该类设置游戏的线条长度以及判断是否勾到

package game;import java.awt.*;public class line {//起点坐标int x=380;int y=180;//终点坐标int endx=500;int endy=500;//线长double length = 100;//线长最小值double MIN_length = 100;//线长最大值double MAX_length = 750;double n = 0;//方向int dir = 1;//状态 0 摇摆 1 抓取 2 收回 3 抓取返回int state;//钩爪图片Image hook = Toolkit.getDefaultToolkit().getImage("imgs/hook.png");GameWin frame;line(GameWin frame){this.frame=frame;}//碰撞检测,检测物体是否被抓取void logic(){for(Object obj:this.frame.objectList){if(endx>obj.x && endx<obj.x+obj.width&& endy>obj.y && endy< obj.y+obj.height){state=3;obj.flag=true;}}}//绘制方法void lines(Graphics g){endx = (int) (x +length*Math.cos(n*Math.PI));endy = (int) (y +length*Math.sin(n*Math.PI));//设置线的颜色g.setColor(Color.red);//绘制线g.drawLine(x-1,y,endx-1,endy);g.drawLine(x,y,endx,endy);g.drawLine(x+1,y,endx+1,endy);//绘制钩爪g.drawImage(hook,endx-36,endy-2,null);}void paintSelf(Graphics g){logic();switch (state){case 0://根据角度设置方向if(n<0.1){ dir = 1;}else if (n>0.9){dir = -1;}//设置线的旋转n=n+0.005*dir;lines(g);break;case 1://伸长if(length<MAX_length){length=length+5;lines(g);}else {state=2;}break;case 2://收回if(length>MIN_length){length=length-5;lines(g);}else {state=0;}break;case 3:int m=1;if(length>MIN_length){length=length-5;lines(g);for(Object obj:this.frame.objectList){if(obj.flag){m=obj.m;obj.x=endx-obj.getWidth()/2;obj.y=endy;if(length<=MIN_length){obj.x=-150;obj.y=-150;obj.flag=false;Bg.waterFlag=false;//加分Bg.count+=obj.count;state=0;}if (Bg.waterFlag){if (obj.type==1){m=1;}if (obj.type==2){obj.x=-150;obj.y=-150;obj.flag=false;Bg.waterFlag=false;state=2;}}}}}try {Thread.sleep(m);} catch (InterruptedException e) {e.printStackTrace();}break;default:}}//重置线void reGame(){n=0;length=100;}
}

游戏实体类背景类,该类用于设置背景,设置关卡数,设置过关得分项,以及药水等道具

package game;
import java.awt.*;
public class Bg {//管卡数static int level=1;//目标得分int goal = level*15;//总分static int count=0;//药水数量static int waterNum=3;//药水状态,默认为F,T标识正在使用static boolean waterFlag = false;//开始时间long startTime;//结束时间long endTime;//药水价格int price = (int) (Math.random()*10);//是否进入商店 f 不购买boolean shop=false;//载入药水图片Image water = Toolkit.getDefaultToolkit().getImage("imgs/water.png");//设置背景图片Image bg = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");Image bg1 = Toolkit.getDefaultToolkit().getImage("imgs/bg1.jpg");Image peo = Toolkit.getDefaultToolkit().getImage("imgs/peo.png");//传入画笔元素void paintSelf(Graphics g){g.drawImage(bg1,0,0,null);g.drawImage(bg,0,200,null);switch (GameWin.state){case 0:drawWord(g,20,Color.green,"准备开始(右键开始、左键抓取,右键快速收回)",180,400);break;case 1:g.drawImage(peo,310,50,null);//调用传参drawWord(g,30,Color.black,"积分:"+count,30,150);//绘制药水g.drawImage(water,450,40,null);drawWord(g,30,Color.black,"*"+waterNum,510,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(water,300,400,null);drawWord(g,30,Color.black,"价格:"+price,300,500);drawWord(g,20,Color.black,"是否购买?(左键购买)",300,550);if (shop){count=count-price;waterNum++;shop=false;GameWin.state=1;startTime=System.currentTimeMillis();}break;case 3:drawWord(g,40,Color.cyan,"失败(左键准备)",250,350);drawWord(g,80,Color.cyan,"积分:"+count,200,450);break;case 4:drawWord(g,40,Color.RED,"成功(左键准备)",250,350);drawWord(g,80,Color.RED,"积分:"+count,200,450);break;default:break;}}//t倒计时完成 f正在倒计时boolean gameTime(){long tim = (endTime-startTime)/1000;if (tim>20){return true;}return false;}//重置元素void reGame(){//管卡数level=1;//目标得分goal = level*15;//总分count=0;//药水数量waterNum=3;//药水状态,默认为F,T标识正在使用waterFlag = false;}//绘制字符串public  static void drawWord(Graphics g,int size,Color color,String str,int x,int y){g.setColor(color);g.setFont(new Font("仿宋",Font.BOLD,size));g.drawString(str,x,y);}}

游戏需要的场景图片

 

JAVA小游戏黄金矿工相关推荐

  1. java小游戏-java小游戏-黄金矿工

    java小游戏-java小游戏-黄金矿工 1 窗口绘制 2 绘制图片 3 红线绘制 4 红线摇摆 5 红线抓取 6 创建金块 7 双缓存技术 8 抓取判断 9 抓取返回 10 多个金块 11 Bug金 ...

  2. JAVA小游戏——黄金矿工

    Day 1:窗口绘制并导入背景图片 public class mygame extends JFrame {bj b=new bj();void launch() throws Interrupted ...

  3. 【Java基础项目】经典小游戏黄金矿工制作

    Java初学者的小伙伴们,相信大家肯定缺少很多的练手项目吧!今天就给大家推荐一款特别好上手的一个Java小游戏--黄金矿工. 大家听到这个名字的时候,童年的回忆肯定一下子,涌上心头,那如果让大家制作一 ...

  4. Java练手小游戏---黄金矿工

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  5. 用Java写个小游戏--黄金矿工代码实现

    黄金矿工 项目结构 前期准备 Stone类 Gold类(包含Gold类,GoldMini类,GoldPlus类) GameWin类 Line类 Parent类 Sky类 项目结构 GameWin类,游 ...

  6. C/C++项目:4399小游戏黄金矿工编译教程

    <黄金矿工中文版>是一款休闲益智小游戏,游戏中你需要看准时机出钩子勾取金子或者砖石来获得金钱的累加,达到一定的金钱数才能够闯关成功,游戏十分经典,强烈推荐大家学会编写这款游戏,休闲时没网也 ...

  7. java实现stg游戏_一些Java小游戏源码

    一些Java小游戏源码 2016-04-18·Mr.Xia 10092 次浏览 ## SRPGWar(黄金护卫队) 链接:[http://pan.baidu.com/s/1c2BHZUS](http: ...

  8. 各种经典java小游戏_Java是这个世界上最好的语言!

    为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...

  9. Java小游戏:模仿微信群发红包

    Java小游戏:模仿微信群发红包 微信群主发普通红包,普通红包规则: 群主的一笔金额,从群主余额中扣除,平均分成n等分,让群员领取. 成员领取红包后,保存到余额中. 请根据规则,完成案例中所有类的定义 ...

  10. 《Java小游戏实现》:坦克大战

    <Java小游戏实现>:坦克大战 前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用. 这个游戏的完成,我们也是分步完成,逐步累加,一个一个 ...

最新文章

  1. pymatgen读/写各种文件
  2. python文件中数字排序_Python 对输入的数字进行排序的方法
  3. 【迁移学习(Transfer L)全面指南】Deep CORAL几何特征变换
  4. yml配置文件中有特殊字符解决方案
  5. 历届试题 分考场(DFS,染色问题)
  6. 惹怒程序员的十件事!需求变更居然不被排第一!
  7. java集合set的使用_浅析Java中的set集合类型及其接口的用法
  8. Beats发布Beats Fit Pro耳机 停产Powerbeats等三款旧耳机
  9. 将ERF格式转换成PCAP格式
  10. android 梯形按钮_PLC编程入门梯形图实例讲解
  11. SpringBoot项目的mybatis逆向工程
  12. android框架连接mysql_三层架构 android访问MSSQL数据库 程序 (服务器端)
  13. Yii 2.0 权威指南 (2) 使用forms
  14. latex模板章节序号标签加粗
  15. android电话本导入iphone,如何将Android电话簿导入iPhone手机
  16. 阿里云免费ssl证书更换指南2021.4
  17. 大明湖畔昇腾绽放,趵突泉里智能奔涌
  18. linux脚本echo off,echo什么意思_@echo off的作用 - 编程语言及工具 - 电子发烧友网
  19. 机器学习笔记之深度信念网络(一)背景介绍与结构表示
  20. iOS Gif动画播放

热门文章

  1. Vue 的最大的优势是什么?
  2. 深富策略鸿蒙概念股继续领跌
  3. 百度地图LBS开放平台AK一直没有用
  4. 关于二代测序中duplication产生和占比问题的探讨
  5. 一些常用的开发软件,定期更新!
  6. android 开发闪屏动画,Android闪屏效果实现方法
  7. 对象的高级使用-插入图片对象(转)
  8. Swift 网络请求Moya框架简单二次封装
  9. Windows下进行域名映射并配置Nginx反向代理
  10. gitter 卸载_最佳Gitter渠道:iOS开发人员