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 n=0;
int dir=1;
//定义状态 0摇摆 1延长 2收回
int state;
//定义lines来放置重复代码
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,y,endx,endy);
}
//定义线的绘制方法
void paintSelf(Graphics g)
{
//用switch语句来判断状态
switch (state)
{
case 0:
if (n<0.1){dir=1;}
else if (n>0.9){dir=-1;}
//让n变化来实现线的移动,同时线的终点坐标也要发生变化
n=n+0.005*dir;
lines(g);
break;
case 1:
//实现线的延长
if (length<500)
{
length=length+10;
lines(g);
}
else
{
state=2; //线实现延长,返回状态2来减短
}
break;
case 2:
if (length>100)
{
length=length-10;
lines(g);
}
else
{
state=0; //线变短后要变回摇摆状态;
}
break;
default:
}
//判断方向,让它一只在1,2,象限移动
}
}
package com.sxt;
import javax.swing.*; //导出Jframe类的方法,在继承Jframe类时会自己生成。
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GameWin extends JFrame //创建GameWin类继承JFrame类,Jframe类本身包含鼠标事件,可以实现点击鼠标按键来不同操作。
{
Bg bg=new Bg();//创建Bg类的bg实例对象
Line line=new Line(); //创建line的实例对象
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);
if (e.getButton()==1) //1左键 2滑轮 3右键
{
line.state=1;
}
}
});
//用死循环来实现窗口的重新绘制
while (true)
{
repaint();
//降低刷新率,在循环里面设置
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics g) //构造paint方法实现BG中的paintSelf方法
{
bg.panintSelf(g);
line.paintSelf(g); //传入线的绘画方法
}
public static void main(String[] args) {
GameWin gameWin=new GameWin(); //在主函数里引用launch方法来实现窗口出现。
gameWin.launch();
}
}