Java黄金矿工 21.计时效果

package com.sxt;

import java.awt.*;

public class Bg {        //构造背景类
    //设置积分
    static int count=0;
    //定义关卡数
    static int level=1;
    //定义目标得分
    int goal=level*5;
    //定义药水状态
    static boolean waterFlag=false;
    //定义开始时间和结束时间
    long stareTime;
    long endTime;
    //定义药水数量
    static int waterNum=3;
    Image bg=Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");  //存入图片进bg
    Image bg1=Toolkit.getDefaultToolkit().getImage("imgs/bg1.jpg");  //存入图片进bg1
    Image peo=Toolkit.getDefaultToolkit().getImage("imgs/peo.png");   //存入图片进peo
    //添加药水
    Image water=Toolkit.getDefaultToolkit().getImage("imgs/water.png");
    void panintSelf(Graphics g)       //构造paintSelf方法来实现图片的显示,Graphics是画笔,
    {
       g.drawImage(bg,0,200,null);    //绘画出bg
       g.drawImage(bg1,0,0,null);     //绘画出bg1
        if (GameWin.state==1)
        {
            switch (GameWin.state)
            {
                case 0:
                    drawWord(g,80,Color.black,"准备开始",100,100);
                    break;
                case 1:
                    g.drawImage(peo,310,50,null);    //绘画出peo
                    //绘制药水图片
                    g.drawImage(water,450,40,null);
                    //打印积分
                    drawWord(g,30,Color.black,"积分"+count,30,150);
                    drawWord(g,30,Color.black,"*"+waterNum,510,70);
                    //绘制关卡数和目标得分
                    drawWord(g,30,Color.black,"第"+level+"关",30,60);
                    drawWord(g,30,Color.black,"目标得分",30,110);
                    //设置结束时间
                    endTime=System.currentTimeMillis();
                    //计算时间
                    long tim=20-(endTime-stareTime)/1000;
                    drawWord(g,30,Color.black,"倒计时"+(tim>0?tim:0),520,150);
                    break;
                case 2:break;
                case 3:break;
                case 4:break;
                default:
            }

        }

    }
    //创建打印字符串的方法
    public static void drawWord(Graphics g,int size,Color color,String str,int x,int y)
    {
        g.setColor(Color.BLACK);
        g.setFont(new Font("仿宋",Font.BOLD,30));
        g.drawString(str,x,y);
    }
}
package com.sxt;

import javax.swing.*;     //导出Jframe类的方法,在继承Jframe类时会自己生成。
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class GameWin extends JFrame    //创建GameWin类继承JFrame类,Jframe类本身包含鼠标事件,可以实现点击鼠标按键来不同操作。
{
    //定义游戏状态 0未开始 1运行中 2商店 3失败 4胜利
    static int state;
    //创建数组来存储金块
   List<Object> objectList=new ArrayList<>();
    Bg bg=new Bg();//创建Bg类的bg实例对象
    Line line=new Line(this);    //创建line的实例对象        //接受line中碰撞判断
    Image offScreenImage;      //创建画布


    {
        //判断重叠变量
        boolean isPlace=true;
        //利用for循环来存放金块
        for (int i = 0; i < 10; 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;
                    i--;
                }
            }
            //添加未重叠元素
            if (isPlace=true)
            {
                objectList.add(gold);
            }
            else
            {
                isPlace=true;i--;
            }

        }
        for (int i= 0; i < 3; i++) {
            Rock 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--;
            }
        }

    }
    //新建下一关类
    public void nextLevel()
    {
        if (state==1)
        {
            if(Bg.count>=bg.goal)
            {
                //关卡数加一
                Bg.level++;
                //释放窗体状态
                dispose();
                //刷新窗体
                GameWin gameWin1=new GameWin();
                gameWin1.launch();
            }
        }


    }

    void launch(){              //定义窗口事件,无参构造方法
        this.setVisible(true);    //窗口可见
        this.setSize(768,1000);  //窗口大小
        this.setLocationRelativeTo(null);  //窗口位置
        this.setTitle("李星沐牌黄金矿工");   //窗口名称
        setDefaultCloseOperation(EXIT_ON_CLOSE);  //关闭窗口操作
        //在launch中添加鼠标事件
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                switch (state)
                {
                    case 0:
                        if (e.getButton()==3)
                        {
                            state=1;
                            //设置开始时间
                            bg.stareTime=System.currentTimeMillis();
                        }
                        break;
                    case 1:
                        if (e.getButton()==1&&line.state==0)       //1左键 2滑轮 3右键
                        {
                            line.state=1;
                        }
                        //设置右键事件
                        if (e.getButton()==3&&line.state==3&&Bg.waterNum>0)
                        {
                            Bg.waterNum--;
                            bg.waterFlag=true;
                        }
                        break;
                    case 2:break;
                    case 3:break;
                    case 4:break;
                    default:
                }

            }
        });
        //用死循环来实现窗口的重新绘制
        while (true)
        {
           repaint();
           //调用下一关
            nextLevel();
            //降低刷新率,在循环里面设置
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    @Override
    public void paint(Graphics g)            //构造paint方法实现BG中的paintSelf方法
    {
        //创建画布窗口
        offScreenImage=this.createImage(768,1000);
        //传入画笔来让他可以绘制东西
        Graphics gImage=offScreenImage.getGraphics();

        bg.panintSelf(gImage);
        if (state==1)
        {
//用for来遍历元素
            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();     //在主函数里引用launch方法来实现窗口出现。
        gameWin.launch();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值