import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class DGame extends Thread{
Container c;
JLabel player;
public DGame(Container c, JLabel player) {
this.c = c;
this.player = player;
}
public void run() {
while(true) {
int px = player.getX();
int py = player.getY();
int ran = (int) (Math.random() * 450);
ImageIcon wheelimg = new ImageIcon("uwheel.png");
JLabel wheel = new JLabel(wheelimg);
wheel.setLocation(ran,250);
wheel.setSize(50,50);
c.add(wheel);
int ax = wheel.getX();
int ay = wheel.getY();
for (int i = 0; i < 30; i++) {
ay = ay-1;
wheel.setLocation(ax, ay);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(3000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class XGame extends Thread {
Container c;
JLabel player;
public XGame(Container c, JLabel player) {
this.c = c;
this.player = player;
}
public void run() {
while (true) {
int px = player.getX();
int py = player.getY();
int ran = (int) (Math.random() * 100);
if (ran < 50) {
ImageIcon wheelimg = new ImageIcon("wheel.png");
JLabel wheel = new JLabel(wheelimg);
wheel.setLocation(400, py);
wheel.setSize(50, 50);
c.add(wheel);
XGameDetect dth = new XGameDetect(wheel, player,c);
dth.start();
int ax = wheel.getX();
int ay = wheel.getY();
for (int i = 0; i < 200; i++) {
ax = ax - i / 10;
wheel.setLocation(ax, ay);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
c.remove(wheel);
}
else if(ran>50) {
ImageIcon wheelimg = new ImageIcon("wheel.png");
JLabel wheel = new JLabel(wheelimg);
wheel.setLocation(0, py);
wheel.setSize(50, 50);
c.add(wheel);
XGameDetect dth = new XGameDetect(wheel, player,c);
dth.start();
int ax = wheel.getX();
int ay = wheel.getY();
for (int i = 0; i < 200; i++) {
ax = ax + i / 10;
wheel.setLocation(ax, ay);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
c.remove(wheel);
}
try {
sleep(ran/5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class XGameDetect extends Thread {
JLabel wheel;
JLabel player;
Container c;
public XGameDetect(JLabel wheel, JLabel player, Container c) {
this.wheel = wheel;
this.player = player;
this.c=c;
}
public void run() {
while (true) {
int ax = wheel.getX();
int ay = wheel.getY();
int px = player.getX();
int py = player.getY();
int hitbox=15;
if((ax<px+hitbox&&ax>px-hitbox)&&(ay<py+hitbox&&ay>py-hitbox)) {
c.removeAll();
c.repaint();
c.revalidate();
JPanel end = new JPanel();
end.setSize(400,400);
end.setOpaque(true);
end.setBackground(Color.white);
c.add(end);
JLabel endtxt=new JLabel("Game Over");
endtxt.setSize(100,50);
end.add(endtxt);
}
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class YGame extends Thread {
Container c;
JLabel player;
public YGame(Container c, JLabel player) {
this.c = c;
this.player = player;
}
public void run() {
while (true) {
int px = player.getX();
int py = player.getY();
int ran = (int) (Math.random() * 100);
if (ran < 50) {
ImageIcon wheelimg = new ImageIcon("wheel.png");
JLabel wheel = new JLabel(wheelimg);
wheel.setLocation(px, py-300);
wheel.setSize(50, 50);
c.add(wheel);
YGameDetect dth = new YGameDetect(wheel, player,c);
dth.start();
int ax = wheel.getX();
int ay = wheel.getY();
for (int i = 0; i < 200; i++) {
ay = ay + i / 10;
wheel.setLocation(ax, ay);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(ran/8);
} catch (InterruptedException e) {
e.printStackTrace();
}
c.remove(wheel);
}
}
}
}
class YGameDetect extends Thread {
JLabel wheel;
JLabel player;
Container c;
public YGameDetect(JLabel wheel, JLabel player, Container c) {
this.wheel = wheel;
this.player = player;
this.c=c;
}
public void run() {
while (true) {
int ax = wheel.getX();
int ay = wheel.getY();
int px = player.getX();
int py = player.getY();
int hitbox=15;
if((ax<px+hitbox&&ax>px-hitbox)&&(ay<py+hitbox&&ay>py-hitbox)) {
c.removeAll();
c.repaint();
c.revalidate();
JPanel end = new JPanel();
end.setSize(400,400);
end.setOpaque(true);
end.setBackground(Color.white);
c.add(end);
JLabel endtxt=new JLabel("Game Over");
endtxt.setSize(100,50);
end.add(endtxt);
}
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Jump extends Thread {
JLabel player;
int px, py;
public Jump(JLabel player, int px, int py) {
this.player = player;
this.px = px;
this.py = py;
}
synchronized public void run() {
if (py != 209)
return;
Container c = player.getParent();
for (int i = 30; i >= 1; i--) {
py = py - i / 4;
player.setLocation(px, py);
c.repaint();
c.revalidate();
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 30; i >= 1; i--) {
py = py + i / 4;
player.setLocation(px, py);
c.repaint();
c.revalidate();
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Timer extends Thread{
JPanel ground;
public Timer(JPanel ground) {
this.ground=ground;
}
public void run() {
int time=0;
JLabel timer=new JLabel();
timer.setSize(50,30);
timer.setLocation(150,300);
ground.add(timer);
while(true) {
timer.setText("Time: "+Integer.toString(time));
time++;
try {
sleep(1000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Main extends JFrame {
ImageIcon playerimg = new ImageIcon("player.png");
JLabel player = new JLabel(playerimg);
int dx = 10;
Container c = getContentPane();
Main() {
c.setLayout(null);
c.setFocusable(true);
c.addKeyListener(new playermove());
JPanel ground = new JPanel();
ground.setLocation(0, 250);
ground.setSize(400, 150);
ground.setOpaque(true);
ground.setBackground(Color.GREEN);
c.add(ground);
player.setSize(50, 50);
player.setLocation(200, 209);
c.add(player);
YGame ygth = new YGame(c, player);
ygth.start();
XGame xgth = new XGame(c, player);
xgth.start();
DGame dgth = new DGame(c, player);
dgth.start();
Timer tth=new Timer(ground);
tth.start();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 400);
setVisible(true);
}
class playermove implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int px = player.getX();
int py = player.getY();
if (e.getKeyCode() == KeyEvent.VK_LEFT && px > -10) {
for (int i = 0; i < dx; i++) {
player.setLocation(px -= 1, py);
}
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT && px < 340) {
for (int i = 0; i < dx; i++) {
player.setLocation(px += 1, py);
}
}
else if (e.getKeyCode() == KeyEvent.VK_SPACE) {
Jump jth = new Jump(player, px, py);
jth.start();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
public static void main(String[] args) {
new Main();
}
}