赞
踩
目录
黄金矿工小游戏
- package com.sxt;
-
- import java.awt.*;
-
- public class Bg {
-
- //关卡数
- static int level = 1;
- //目标得分
- int goal = level*15;
- //总分
- static int count=0;
- //药水数量
- static int waterNum = 3;
- //药水状态,默认F,T 正在使用 F 无法使用
- static boolean waterFlag = false;
- //开始时间
- long startTime;
- //结束时间
- long endTime;
- //药水价格
- int price = (int) (Math.random()*10);
- //是否进入商店 f 不购买
- boolean shop = false;
-
- //载入图片
- Image bg = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");
- Image bg1 = Toolkit.getDefaultToolkit().getImage("imgs/bg1.jpg");
- Image peo = Toolkit.getDefaultToolkit().getImage("imgs/peo.png");
- Image water = Toolkit.getDefaultToolkit().getImage("imgs/water.png");
-
- //绘制
- void paintSelf(Graphics g){
- g.drawImage(bg1,0,0,null);
- g.drawImage(bg,0,200,null);
- switch (GameWin.state){
- case 0:
- drawWord(g,80,Color.green,"准备开始",200,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,30,Color.black,"是否购买?",300,550);
- if(shop){
- count = count-price;
- waterNum++;
- shop=false;
- GameWin.state=1;
- startTime=System.currentTimeMillis();
- }
- break;
- case 3:
- drawWord(g,80,Color.cyan,"失败",250,350);
- drawWord(g,80,Color.cyan,"积分:"+count,200,450);
- break;
- case 4:
- drawWord(g,80,Color.red,"成功",250,350);
- drawWord(g,80,Color.red,"积分:"+count,200,450);
- break;
- default:
- }
-
-
- }
- //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 正在使用 F 无法使用
- 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);
- }
- }

- 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;
-
- 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);
- {
- //是否可以放置
- 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("尚学堂黄金矿工");
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
-
- addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- super.mouseClicked(e);
- switch (state){
- case 0:
- if(e.getButton()==3){
- state=1;
- bg.startTime = System.currentTimeMillis();
- }
- break;
- case 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:
- }
-
- }
- });
-
- 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 gameWin1 = new GameWin();
- gameWin1.launch();
- }
-
- }
-
- @Override
- public 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);
- }
- g.drawImage(offScreenImage,0,0,null);
- }
-
- public static void main(String[] args) {
- GameWin gameWin=new GameWin();
- gameWin.launch();
- }
- }

- 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;
-
- 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);
- {
- //是否可以放置
- 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("尚学堂黄金矿工");
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
-
- addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- super.mouseClicked(e);
- switch (state){
- case 0:
- if(e.getButton()==3){
- state=1;
- bg.startTime = System.currentTimeMillis();
- }
- break;
- case 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:
- }
-
- }
- });
-
- 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 gameWin1 = new GameWin();
- gameWin1.launch();
- }
-
- }
-
- @Override
- public 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);
- }
- g.drawImage(offScreenImage,0,0,null);
- }
-
- public static void main(String[] args) {
- GameWin gameWin=new GameWin();
- gameWin.launch();
- }
- }

- package com.sxt;
-
- 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.count+=obj.count;
- Bg.waterFlag=false;
- state=0;
- }
- if(Bg.waterFlag){
- if(obj.type==1){
- //金块
- m=1;
- }else 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 com.sxt;
-
- 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);
- }
- }

- package com.sxt;
-
- 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");
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。