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();
}
}