package com.sxt;
import java.awt.*;
//创建Object类来存放金块和石块的相同属性
public class Object
{
//坐标
int x;
int y;
//宽高
int width;
int height;
//图片
Image img;
//创建标记flag用于修改BUG金块同时消失
boolean flag;
//质量
int m;
//定义绘制方法
//定义积分
int count;
void paintSelf(Graphics g)
{
g.drawImage(img,x,y,null);
}
//用Getter方法来获取宽度
public int getWidth() {
return width;
}
//获取矩形
public Rectangle getRec(){
return new Rectangle(x,y,width,height);
}
}
package com.sxt;
import java.awt.*;
//创建Object类来存放金块和石块的相同属性
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.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()
{
//重置x
this.x=(int)(Math.random()*650);
this.width=105;
this.height=105;
this.m=15;
this.count=8;
this.img= Toolkit.getDefaultToolkit().getImage("imgs/gold2.gif");
}
}
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.img= Toolkit.getDefaultToolkit().getImage("imgs/rock1.png");
}
}
package com.sxt;
import java.awt.*;
public class Line {
//起点坐标,保证线左右摇摆时起点不变,仅是终点坐标改变
int x=380;
int y=180;
//终点坐标
int endx=500;
int endy=500;
//定义线长length,角度n,方向dir
double length=100;
//定义线最大值
double MAX_length=750;
//定义线最小值
double MIX_length=100;
double n=0;
int dir=1;
//定义状态 0摇摆 1延长 2收回 3抓取放回
int state;
//添加钩爪
Image hook=Toolkit.getDefaultToolkit().getImage("imgs/hook.png");
//用有参构造方法来接收窗口GameWin中元素
GameWin frame;
Line(GameWin frame)
{
this.frame=frame;
}
//设置碰撞判断
void logic()
{
//用for来遍历元素
for (Object obj: this.frame.objectList)
{
if (endx>obj.x&&endxobj.y&&endy0.9){dir=-1;}
//让n变化来实现线的移动,同时线的终点坐标也要发生变化
n=n+0.005*dir;
lines(g);
break;
case 1:
//实现线的延长
if (lengthMIX_length)
{
length=length-5;
lines(g);
}
else
{
state=0; //线变短后要变回摇摆状态;
}
break;
//实现抓取放回,线返回,金块也要接着放回
case 3:
//创建临时变量m
int m=1;
if (length>MIX_length)
{
length=length-5;
lines(g);
for (Object obj:this.frame.objectList)
{
//加入flag为true,则返回,flase不返回
if (obj.flag)
{
//传入质量
m=obj.m;
obj.x=endx-obj.getWidth()/2; //金块要随着线返回 //获取宽度
obj.y=endy;
if (length<=MIX_length)
{
//金块返回后要消失
obj.x=-150; //金块要随着线返回
obj.y=-150;
state=0; //线变短后要变回摇摆状态;
//再改变flag标记
obj.flag=false;
Bg.count+=obj.count;
}
}
}
}
//用质量来判断刷新率
try {
Thread.sleep(m);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
default:
}
//判断方向,让它一只在1,2,象限移动
}
}
package com.sxt;
import java.awt.*;
public class Bg { //构造背景类
//设置积分
static int count=0;
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
void panintSelf(Graphics g) //构造paintSelf方法来实现图片的显示,Graphics是画笔,
{
g.drawImage(bg,0,200,null); //绘画出bg
g.drawImage(bg1,0,0,null); //绘画出bg1
g.drawImage(peo,310,50,null); //绘画出peo
//打印积分
drawWord(g,30,Color.black,"积分"+count,30,150);
}
//创建打印字符串的方法
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);
}
}