package swing;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
public class runGame extends JFrame{
//在主窗体添加一个按钮,添加点击事件,点击按钮的时候,
//触发该事件,改变图片对象的x轴的位移就可以达到跑步的效果。每个图片都是
//一个线程类,点击开始按钮的时候开启线程,重绘窗体。
public static JButton startAnNiu,endAnNiu,
AnNiu1,AnNiu2,AnNiu3,AnNiu4;
public static void main(String[] args) {
new runGame();
JOptionPane.showMessageDialog
(null,"500px赛跑,点击下方名字的按钮,"
+ "\n就可以给这个人物开挂加速");
}
public runGame(){
this.setLayout(null);
this.setSize(666,666);
this.setLocationRelativeTo(null);
paintClass paintClass=new paintClass();
paintClass.setBounds(0,0,555,555);
this.add(paintClass);
Thread Thread=new Thread(paintClass);
Thread.start();
startAnNiu=new JButton("开始");
endAnNiu=new JButton("暂停");
AnNiu1=new JButton("蜡笔小新");
AnNiu2=new JButton("飞仙");
AnNiu3=new JButton("熊猫人");
AnNiu4=new JButton("帽子人");
AnNiu1.setBounds(230,580, 100,30);
AnNiu2.setBounds(360,580, 70,30);
AnNiu3.setBounds(460,580, 80,30);
AnNiu4.setBounds(550,580, 80,30);
//__
//绑定事件的部分:
AnNiu1.addActionListener(paintClass);
AnNiu2.addActionListener(paintClass);
AnNiu3.addActionListener(paintClass);
AnNiu4.addActionListener(paintClass);
//__
this.add(AnNiu1);this.add(AnNiu2);
this.add(AnNiu3);this.add(AnNiu4);
startAnNiu.setBounds(30,580,70,30);
endAnNiu.setBounds(130,580,70,30);
startAnNiu.addActionListener(paintClass);
endAnNiu.addActionListener(paintClass);
this.add(startAnNiu);this.add(endAnNiu);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class paintClass extends JPanel implements ActionListener,Runnable{
//tuPianDuiXiang:图片对象
tuPianDuiXiang tuPianDuiXiang1,tuPianDuiXiang2,
tuPianDuiXiang3,tuPianDuiXiang4;
public paintClass(){
//在实例化paintClass的时候,给每个图片进行赋值
Image Image1=Toolkit.getDefaultToolkit().getImage("gif1.gif");
Image Image2=Toolkit.getDefaultToolkit().getImage("gif2.gif");
Image Image3=Toolkit.getDefaultToolkit().getImage("gif3.gif");
Image Image4=Toolkit.getDefaultToolkit().getImage("gif4.gif");
tuPianDuiXiang1=new tuPianDuiXiang(0,80,Image1);
tuPianDuiXiang2=new tuPianDuiXiang(0,200,Image2);
tuPianDuiXiang3=new tuPianDuiXiang(0,320,Image3);
tuPianDuiXiang4=new tuPianDuiXiang(0,440,Image4);
}
//构造方法里实例化,paint方法(画图方法)里画:
public void paint(Graphics g){
//System.out.println("给诗书画唱三连关注");
g.clearRect(0,0,this.getWidth(),this.getHeight());
g.setColor(Color.red);
g.setFont(new Font("微软雅黑",Font.BOLD,30));
g.drawString("起跑线",5,30);
//用drawLine画线:
g.drawLine(110,0,110,555);
//用drawImage绘制图片:
g.drawImage(tuPianDuiXiang1.img,tuPianDuiXiang1.x,
tuPianDuiXiang1.y,100,100,this);
g.drawImage(tuPianDuiXiang2.img,tuPianDuiXiang2.x,
tuPianDuiXiang2.y,100,100,this);
g.drawImage(tuPianDuiXiang3.img,tuPianDuiXiang3.x,
tuPianDuiXiang3.y,100,100,this);
g.drawImage(tuPianDuiXiang4.img,tuPianDuiXiang4.x,
tuPianDuiXiang4.y,100,100,this);
}
@Override
public void actionPerformed(ActionEvent e) {
Thread Thread1=new Thread(tuPianDuiXiang1,"蜡笔小新");
Thread Thread2=new Thread(tuPianDuiXiang2,"飞仙");
Thread Thread3=new Thread(tuPianDuiXiang3,"熊猫人");
Thread Thread4=new Thread(tuPianDuiXiang4,"帽子人");
if(e.getActionCommand().equals("开始")){
Thread1.start();Thread2.start();Thread3.start();
Thread4.start();
runGame.startAnNiu.setEnabled(false);
//设置开始只能点击一次,点击开始按钮后,
//开始的按钮就会变的不能够编辑,隐藏掉,消失掉,如果
//有“残影”,就是用clearRect方法清空原来的范围
//没有包括开始的按钮。
}else if(e.getActionCommand().equals("暂停")){
tuPianDuiXiang1.zanTingFangFa();tuPianDuiXiang2.zanTingFangFa();
tuPianDuiXiang3.zanTingFangFa();
tuPianDuiXiang4.zanTingFangFa();
runGame.endAnNiu.setText("继续");
}else if(e.getActionCommand().equals("继续")){
tuPianDuiXiang1.kaiShiFangFa();tuPianDuiXiang2.kaiShiFangFa();
tuPianDuiXiang3.kaiShiFangFa();
Thread1.start();Thread2.start();Thread3.start();
runGame.endAnNiu.setText("暂停");
}
if(e.getActionCommand().equals("蜡笔小新")){
System.out.println("蜡笔小新");
Thread1.setPriority(10);
Thread2.setPriority(1);
Thread3.setPriority(1);
Thread4.setPriority(1);
tuPianDuiXiang1.fasterFangFa("蜡笔小新");
}else if(e.getActionCommand().equals("飞仙")){
System.out.println("飞仙");
Thread1.setPriority(1);
Thread2.setPriority(10);
Thread3.setPriority(1);
Thread4.setPriority(1);
tuPianDuiXiang2.fasterFangFa("飞仙");
}else if(e.getActionCommand().equals("熊猫人")){
System.out.println("熊猫人");
Thread1.setPriority(1);
Thread2.setPriority(1);
Thread3.setPriority(10);
Thread4.setPriority(1);
tuPianDuiXiang3.fasterFangFa("熊猫人");
}
else if(e.getActionCommand().equals("帽子人")){
System.out.println("帽子人");
Thread1.setPriority(1);
Thread2.setPriority(1);
Thread3.setPriority(1);
Thread4.setPriority(10);
tuPianDuiXiang4.fasterFangFa("帽子人");
}
}
//下面这个线程(的run方法的调用)是刷新面板的意思,
//在刷新面板的时候,判断x轴方向上的位移是否有达到500米目的地。
@Override
public void run() {
while(true){
try {
Thread.sleep(30);
//如果有一个人的x轴到达500的时候,
//就调用含b=false暂停的方法zanTingFangFa(),
//让他们所有的人停止掉。
if(tuPianDuiXiang1.x>=500||tuPianDuiXiang2.x>=500
||tuPianDuiXiang3.x>=500||tuPianDuiXiang4.x>=500){
tuPianDuiXiang1.zanTingFangFa();tuPianDuiXiang2.zanTingFangFa();
tuPianDuiXiang3.zanTingFangFa();tuPianDuiXiang4.zanTingFangFa();
if(tuPianDuiXiang1.x>=500){
JOptionPane.showMessageDialog(null,"蜡笔小新先到达终点,胜利!");
}
if(tuPianDuiXiang2.x>=500){
JOptionPane.showMessageDialog(null,"飞仙先到达终点,胜利!");
}
if(tuPianDuiXiang3.x>=500){
JOptionPane.showMessageDialog(null,"熊猫人先到达终点,胜利!");
}
if(tuPianDuiXiang4.x>=500){
JOptionPane.showMessageDialog(null,"帽子人先到达终点,胜利!");
}
break;
}
this.repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//使用面向对象的思想去声明一个图片类:
class tuPianDuiXiang implements Runnable{
int x;
int y;
Image img;
boolean b=true;
String name;
public tuPianDuiXiang(int x,int y,Image img){
this.x=x;
this.y=y;
this.img=img;
}
@Override
public void run() {
//在人物的线程里,判断人是否小于500,
//当b=true时,启动线程,让图片进行移动。
while(this.x<=500&&b){
try {
if(this.name!=null){
if(this.name.equals(Thread.currentThread().getName())){
this.x+=5;
}
}
Thread.sleep(100);
this.x+=new Random().nextInt(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void zanTingFangFa(){
this.b=false;
}
//开始的方法:kaiShiFangFa
public void kaiShiFangFa(){
this.b=true;
}
//加速的方法:fasterFangFa
public void fasterFangFa(String name){
this.name=name;
}
}