当前位置:   article > 正文

Java实现黄金矿工小游戏_黄金矿工java源代码

黄金矿工java源代码

目录

一.游戏视频

二.游戏代码

1.Bg

2.GameWin

3.Gold.java

Gold

GoldMini

GoldPlus

4.Line

5.Object

6.Rock

三.图片素材


一.游戏视频

黄金矿工小游戏

二.游戏代码

1.Bg

  1. package com.sxt;
  2. import java.awt.*;
  3. public class Bg {
  4. //关卡数
  5. static int level = 1;
  6. //目标得分
  7. int goal = level*15;
  8. //总分
  9. static int count=0;
  10. //药水数量
  11. static int waterNum = 3;
  12. //药水状态,默认F,T 正在使用 F 无法使用
  13. static boolean waterFlag = false;
  14. //开始时间
  15. long startTime;
  16. //结束时间
  17. long endTime;
  18. //药水价格
  19. int price = (int) (Math.random()*10);
  20. //是否进入商店 f 不购买
  21. boolean shop = false;
  22. //载入图片
  23. Image bg = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");
  24. Image bg1 = Toolkit.getDefaultToolkit().getImage("imgs/bg1.jpg");
  25. Image peo = Toolkit.getDefaultToolkit().getImage("imgs/peo.png");
  26. Image water = Toolkit.getDefaultToolkit().getImage("imgs/water.png");
  27. //绘制
  28. void paintSelf(Graphics g){
  29. g.drawImage(bg1,0,0,null);
  30. g.drawImage(bg,0,200,null);
  31. switch (GameWin.state){
  32. case 0:
  33. drawWord(g,80,Color.green,"准备开始",200,400);
  34. break;
  35. case 1:
  36. g.drawImage(peo,310,50,null);
  37. drawWord(g,30,Color.black,"积分:"+count,30,150);
  38. //药水组件
  39. g.drawImage(water,450,40,null);
  40. drawWord(g,30,Color.black,"*"+waterNum,510,70);
  41. //关卡数
  42. drawWord(g,20,Color.black,"第"+level+"关",30,60);
  43. //目标积分
  44. drawWord(g,30,Color.black,"目标"+goal,30,110);
  45. //时间组件
  46. endTime = System.currentTimeMillis();
  47. long tim = 20-(endTime-startTime)/1000;
  48. drawWord(g,30,Color.black,"时间:"+(tim>0?tim:0),520,150);
  49. break;
  50. case 2:
  51. g.drawImage(water,300,400,null);
  52. drawWord(g,30,Color.black,"价格:"+price,300,500);
  53. drawWord(g,30,Color.black,"是否购买?",300,550);
  54. if(shop){
  55. count = count-price;
  56. waterNum++;
  57. shop=false;
  58. GameWin.state=1;
  59. startTime=System.currentTimeMillis();
  60. }
  61. break;
  62. case 3:
  63. drawWord(g,80,Color.cyan,"失败",250,350);
  64. drawWord(g,80,Color.cyan,"积分:"+count,200,450);
  65. break;
  66. case 4:
  67. drawWord(g,80,Color.red,"成功",250,350);
  68. drawWord(g,80,Color.red,"积分:"+count,200,450);
  69. break;
  70. default:
  71. }
  72. }
  73. //t倒计时完成 f正在倒计时
  74. boolean gameTime(){
  75. long tim = (endTime-startTime)/1000;
  76. if(tim>20){return true;}
  77. return false;
  78. }
  79. //重置元素
  80. void reGame(){
  81. //关卡数
  82. level = 1;
  83. //目标得分
  84. goal = level*15;
  85. //总分
  86. count=0;
  87. //药水数量
  88. waterNum = 3;
  89. //药水状态,默认F,T 正在使用 F 无法使用
  90. waterFlag = false;
  91. }
  92. //绘制字符串
  93. public static void drawWord(Graphics g,int size,Color color,String str,int x,int y){
  94. g.setColor(color);
  95. g.setFont(new Font("仿宋",Font.BOLD,size));
  96. g.drawString(str,x,y);
  97. }
  98. }

2.GameWin

  1. package com.sxt;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class GameWin extends JFrame {
  9. //0未开始 1 运行中 2 商店 3 失败 4 胜利
  10. static int state;
  11. //存储金块,石块
  12. List<Object> objectList = new ArrayList<>();
  13. Bg bg = new Bg();
  14. Line line = new Line(this);
  15. {
  16. //是否可以放置
  17. boolean isPlace = true;
  18. for (int i = 0; i < 11; i++) {
  19. double random =Math.random();
  20. Gold gold;//存放当前生成的金块
  21. if(random<0.3){gold = new GoldMini();}
  22. else if(random<0.7){ gold = new Gold();}
  23. else { gold = new GoldPlus();}
  24. for(Object obj:objectList){
  25. if(gold.getRec().intersects(obj.getRec())){
  26. //不可放置,需要重新生成
  27. isPlace=false;
  28. }
  29. }
  30. if(isPlace){objectList.add(gold);}
  31. else {isPlace=true;i--;}
  32. }
  33. for (int i = 0; i < 5; i++) {
  34. Rock rock=new Rock();
  35. for(Object obj:objectList){
  36. if(rock.getRec().intersects (obj.getRec()))
  37. { isPlace=false; }
  38. }
  39. if(isPlace){ objectList.add(rock); }
  40. else{isPlace=true;i--;}
  41. }
  42. }
  43. //缓存画布
  44. Image offScreenImage;
  45. //窗口设置
  46. void launch(){
  47. this.setVisible(true);
  48. this.setSize(768,1000);
  49. this.setLocationRelativeTo(null);
  50. this.setTitle("尚学堂黄金矿工");
  51. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  52. addMouseListener(new MouseAdapter() {
  53. @Override
  54. public void mouseClicked(MouseEvent e) {
  55. super.mouseClicked(e);
  56. switch (state){
  57. case 0:
  58. if(e.getButton()==3){
  59. state=1;
  60. bg.startTime = System.currentTimeMillis();
  61. }
  62. break;
  63. case 1:
  64. //左右摇摆,点击左键
  65. if(e.getButton()==1&&line.state==0)
  66. {line.state=1;}
  67. //抓取返回,点击右键
  68. if(e.getButton()==3&&line.state==3&&Bg.waterNum>0){
  69. Bg.waterFlag=true;
  70. Bg.waterNum--;
  71. }
  72. break;
  73. case 2:
  74. if(e.getButton()==1){
  75. bg.shop=true;
  76. }
  77. if (e.getButton()==3){
  78. state=1;
  79. bg.startTime = System.currentTimeMillis();
  80. }
  81. break;
  82. case 3:
  83. case 4:
  84. if(e.getButton()==1){
  85. state=0;
  86. bg.reGame();
  87. line.reGame();
  88. }
  89. break;
  90. default:
  91. }
  92. }
  93. });
  94. while (true){
  95. repaint();
  96. nextLevel();
  97. try {
  98. Thread.sleep(10);
  99. } catch (InterruptedException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. }
  104. //下一关
  105. public void nextLevel(){
  106. if(bg.gameTime() && state==1){
  107. if(Bg.count >= bg.goal)
  108. {
  109. if(Bg.level==5) {
  110. state=4;
  111. }
  112. else {
  113. state = 2;
  114. Bg.level++;
  115. }
  116. }else {state=3;}
  117. dispose();
  118. GameWin gameWin1 = new GameWin();
  119. gameWin1.launch();
  120. }
  121. }
  122. @Override
  123. public void paint(Graphics g) {
  124. offScreenImage = this.createImage(768,1000);
  125. Graphics gImage = offScreenImage.getGraphics();
  126. bg.paintSelf(gImage);
  127. if(state==1){
  128. //绘制物体
  129. for(Object obj:objectList)
  130. {
  131. obj.paintSelf(gImage);
  132. }
  133. line.paintSelf(gImage);
  134. }
  135. g.drawImage(offScreenImage,0,0,null);
  136. }
  137. public static void main(String[] args) {
  138. GameWin gameWin=new GameWin();
  139. gameWin.launch();
  140. }
  141. }

3.Gold.java

Gold

GoldMini

GoldPlus

  1. package com.sxt;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class GameWin extends JFrame {
  9. //0未开始 1 运行中 2 商店 3 失败 4 胜利
  10. static int state;
  11. //存储金块,石块
  12. List<Object> objectList = new ArrayList<>();
  13. Bg bg = new Bg();
  14. Line line = new Line(this);
  15. {
  16. //是否可以放置
  17. boolean isPlace = true;
  18. for (int i = 0; i < 11; i++) {
  19. double random =Math.random();
  20. Gold gold;//存放当前生成的金块
  21. if(random<0.3){gold = new GoldMini();}
  22. else if(random<0.7){ gold = new Gold();}
  23. else { gold = new GoldPlus();}
  24. for(Object obj:objectList){
  25. if(gold.getRec().intersects(obj.getRec())){
  26. //不可放置,需要重新生成
  27. isPlace=false;
  28. }
  29. }
  30. if(isPlace){objectList.add(gold);}
  31. else {isPlace=true;i--;}
  32. }
  33. for (int i = 0; i < 5; i++) {
  34. Rock rock=new Rock();
  35. for(Object obj:objectList){
  36. if(rock.getRec().intersects (obj.getRec()))
  37. { isPlace=false; }
  38. }
  39. if(isPlace){ objectList.add(rock); }
  40. else{isPlace=true;i--;}
  41. }
  42. }
  43. //缓存画布
  44. Image offScreenImage;
  45. //窗口设置
  46. void launch(){
  47. this.setVisible(true);
  48. this.setSize(768,1000);
  49. this.setLocationRelativeTo(null);
  50. this.setTitle("尚学堂黄金矿工");
  51. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  52. addMouseListener(new MouseAdapter() {
  53. @Override
  54. public void mouseClicked(MouseEvent e) {
  55. super.mouseClicked(e);
  56. switch (state){
  57. case 0:
  58. if(e.getButton()==3){
  59. state=1;
  60. bg.startTime = System.currentTimeMillis();
  61. }
  62. break;
  63. case 1:
  64. //左右摇摆,点击左键
  65. if(e.getButton()==1&&line.state==0)
  66. {line.state=1;}
  67. //抓取返回,点击右键
  68. if(e.getButton()==3&&line.state==3&&Bg.waterNum>0){
  69. Bg.waterFlag=true;
  70. Bg.waterNum--;
  71. }
  72. break;
  73. case 2:
  74. if(e.getButton()==1){
  75. bg.shop=true;
  76. }
  77. if (e.getButton()==3){
  78. state=1;
  79. bg.startTime = System.currentTimeMillis();
  80. }
  81. break;
  82. case 3:
  83. case 4:
  84. if(e.getButton()==1){
  85. state=0;
  86. bg.reGame();
  87. line.reGame();
  88. }
  89. break;
  90. default:
  91. }
  92. }
  93. });
  94. while (true){
  95. repaint();
  96. nextLevel();
  97. try {
  98. Thread.sleep(10);
  99. } catch (InterruptedException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. }
  104. //下一关
  105. public void nextLevel(){
  106. if(bg.gameTime() && state==1){
  107. if(Bg.count >= bg.goal)
  108. {
  109. if(Bg.level==5) {
  110. state=4;
  111. }
  112. else {
  113. state = 2;
  114. Bg.level++;
  115. }
  116. }else {state=3;}
  117. dispose();
  118. GameWin gameWin1 = new GameWin();
  119. gameWin1.launch();
  120. }
  121. }
  122. @Override
  123. public void paint(Graphics g) {
  124. offScreenImage = this.createImage(768,1000);
  125. Graphics gImage = offScreenImage.getGraphics();
  126. bg.paintSelf(gImage);
  127. if(state==1){
  128. //绘制物体
  129. for(Object obj:objectList)
  130. {
  131. obj.paintSelf(gImage);
  132. }
  133. line.paintSelf(gImage);
  134. }
  135. g.drawImage(offScreenImage,0,0,null);
  136. }
  137. public static void main(String[] args) {
  138. GameWin gameWin=new GameWin();
  139. gameWin.launch();
  140. }
  141. }

4.Line

  1. package com.sxt;
  2. import java.awt.*;
  3. public class Line {
  4. //起点坐标
  5. int x=380;
  6. int y=180;
  7. //终点坐标
  8. int endx=500;
  9. int endy=500;
  10. //线长
  11. double length = 100;
  12. //线长最小值
  13. double MIN_length = 100;
  14. //线长最大值
  15. double MAX_length = 750;
  16. //角度百分比
  17. double n = 0;
  18. //方向
  19. int dir = 1;
  20. //状态 0 摇摆 1 抓取 2 收回 3 抓取返回
  21. int state;
  22. //钩爪图片
  23. Image hook = Toolkit.getDefaultToolkit().getImage("imgs/hook.png");
  24. GameWin frame;
  25. Line(GameWin frame){this.frame=frame;}
  26. //碰撞检测,检测物体是否被抓取
  27. void logic(){
  28. for(Object obj:this.frame.objectList){
  29. if(endx>obj.x && endx<obj.x+obj.width
  30. && endy>obj.y && endy< obj.y+obj.height){
  31. state=3;
  32. obj.flag=true;
  33. }
  34. }
  35. }
  36. //绘制方法
  37. void lines(Graphics g){
  38. endx = (int) (x +length*Math.cos(n* Math.PI));
  39. endy = (int) (y +length*Math.sin(n*Math.PI));
  40. g.setColor(Color.red);
  41. g.drawLine(x-1,y,endx-1,endy);
  42. g.drawLine(x,y,endx,endy);
  43. g.drawLine(x+1,y,endx+1,endy);
  44. g.drawImage(hook,endx-36,endy-2,null);
  45. }
  46. void paintSelf(Graphics g){
  47. logic();
  48. switch (state){
  49. case 0:
  50. if(n<0.1){ dir = 1;}
  51. else if (n>0.9){dir = -1;}
  52. n=n+0.005*dir;
  53. lines(g);
  54. break;
  55. case 1:
  56. if(length<=MAX_length){
  57. length=length+5;
  58. lines(g);
  59. }else {state=2;}
  60. break;
  61. case 2:
  62. if(length>=MIN_length){
  63. length=length-5;
  64. lines(g);
  65. }else {
  66. state=0;
  67. }
  68. break;
  69. case 3://抓取返回
  70. int m=1;
  71. if(length>=MIN_length){
  72. length=length-5;
  73. lines(g);
  74. for(Object obj:this.frame.objectList){
  75. if(obj.flag){
  76. m=obj.m;
  77. obj.x=endx-obj.getWidth()/2;
  78. obj.y=endy;
  79. if(length<=MIN_length){
  80. obj.x=-150;
  81. obj.y=-150;
  82. obj.flag=false;
  83. //加分
  84. Bg.count+=obj.count;
  85. Bg.waterFlag=false;
  86. state=0;
  87. }
  88. if(Bg.waterFlag){
  89. if(obj.type==1){
  90. //金块
  91. m=1;
  92. }else if(obj.type==2){
  93. //石块
  94. obj.x=-150;
  95. obj.y=-150;
  96. obj.flag=false;
  97. Bg.waterFlag=false;
  98. state=2;
  99. }
  100. }
  101. }
  102. }
  103. }
  104. try {
  105. Thread.sleep(m);
  106. } catch (InterruptedException e) {
  107. e.printStackTrace();
  108. }
  109. break;
  110. default:
  111. }
  112. }
  113. //重置线
  114. void reGame(){
  115. n=0;
  116. length=100;
  117. }
  118. }

5.Object

  1. package com.sxt;
  2. import java.awt.*;
  3. public class Object {
  4. //坐标
  5. int x;
  6. int y;
  7. //宽高
  8. int width;
  9. int height;
  10. //图片
  11. Image img;
  12. //标记,是否能移动
  13. boolean flag;
  14. //质量
  15. int m;
  16. //积分
  17. int count;
  18. //标记 1为金块,2为石块
  19. int type;
  20. void paintSelf(Graphics g){
  21. g.drawImage(img,x,y,null);
  22. }
  23. public int getWidth() {
  24. return width;
  25. }
  26. //获取矩形
  27. public Rectangle getRec(){
  28. return new Rectangle(x,y,width,height);
  29. }
  30. }

6.Rock

  1. package com.sxt;
  2. import java.awt.*;
  3. public class Rock extends Object {
  4. Rock(){
  5. this.x=(int)(Math.random()*700);
  6. this.y=(int)(Math.random()*550+300);
  7. this.width=71;
  8. this.height=71;
  9. this.flag=false;
  10. this.m=50;
  11. this.count=1;
  12. this.type=2;
  13. this.img = Toolkit.getDefaultToolkit().getImage("imgs/rock1.png");
  14. }
  15. }

三.图片素材

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/804635
推荐阅读
相关标签
  

闽ICP备14008679号