0

Okay, I kind of need lots of help, so whatever advice anyone has would be much appreciated! I am trying to write a running/jumping game where the player/ball must avoid the blocks to reach the finish line as quickly as possible. Right now, my two main issues are the jumping action and creating a timer. When my player jumps, it goes up, and then down. I have included the following code in my Circle class:

public void horiz(int val){

    for(int c = 0; c<val+1; c++){
        x++;
        repaint();}
}
public void vert(int val){
    y += val;
}
public void down(int val){
    y += val;
}

And then It is executed through buttons:

public void actionPerformed(ActionEvent e){
    if(e.getSource() instanceof Button){
        if(e.getSource() == run)
            player.horiz(10);
        else if (e.getSource()== jump){
            player.vert(-10);
            }
        repaint();
        collision();
}

In order to get the player to go up, and then back down, I had tried this...

public void actionPerformed(ActionEvent e){
    if(e.getSource() instanceof Button){
        if(e.getSource() == run)
            player.horiz(10);
        else if (e.getSource()== jump){
            player.vert(-10);
            repaint();
            player.down(10);
            }
        repaint();
        collision();
}

But I think I need to have it wait a few seconds before coming back down. I have read a bunch about swing, util, and robot timers, but I do not know which/how to implement them here.

My other problem is creating a timer that displays the time elapsed since the game has started. I thing This could be execute similarly to the jumping timer, but, again, I am unsure which type of timer I should be using. If I am right, I cannot use swing because my program is written in AWT? Please excuse the awful colors, I am still figuring out the basics. Thanks so much for any advice of help you can give me! :)

Here is the full code:

import java.awt.*;
import java.awt.Rectangle;
import java.awt.Shape;

import javafx.scene.shape.*;
import java.awt.event.*;
import java.util.Random;
import java.util.Timer;
import javax.swing.JOptionPane;
import java.awt.Toolkit;
import java.util.Timer;
import java.util.TimerTask;

import java.applet.Applet;

public class TryingAgain extends Applet
implements ActionListener{

//creates arrays of rect values
int[]xA = new int[10];
int[]yA = new int[10];
int[]widthA = new int[10];
int[]heightA = new int[10];

private Rectangle rectangle;
//creates buttons to move player
private Button run = new Button("Run");
private Button jump = new Button("Jump");
//creates player and obstacles
private Circle player = new Circle(110,110,20);
private makeRect block = new makeRect();
private finishLine line = new finishLine();
//initiates the buttons with actionListener
public void init(){
    this.setSize(new Dimension(1300,500));
    setBackground(Color.GREEN);
    add(run);
    add(jump);
    run.addActionListener(this);
    jump.addActionListener(this);
}
//draws the player and blocks on the screen 
public void paint(Graphics g){
    player.draw(g);
    block.draw(g);
    line.draw(g);
}

//if methods to be control movement 
public void actionPerformed(ActionEvent e){
    if(e.getSource() instanceof Button){
        if(e.getSource() == run)
            player.horiz(10);
        else if (e.getSource()== jump){
            player.vert(-10);
            }
        repaint();
        collision();
}


    }
public void collision(){
    if(crashTest() == true){
        JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION);
        System.exit(ABORT);
    }
    if(winTest() == true){
        JOptionPane.showMessageDialog(this, "You Finished!", "You Finished!", JOptionPane.PLAIN_MESSAGE);
    }

}
class Circle{

private int radius;
private int x,y;
public Circle(){
    x = 110; y = 110;
    radius = 20;
}
public Circle(int x0, int y0, int rad){
    x = x0; y = y0; radius = rad;
}
public void draw(Graphics g){
    g.setColor(Color.CYAN);
    g.fillOval(x - radius,  y-radius,  2*radius,  2*radius);

}
public void horiz(int val){

    for(int c = 0; c<val+1; c++){
        x++;
        repaint();}
}
public void vert(int val){
    y += val;
}
public void down(int val){
    y += val;
}
public Rectangle getBounds(){
    return new Rectangle(x-radius, y-radius, 2*radius, 2*radius);
} 
}

class makeRect{
private int Xmax = 150;
private int Xmin = 50;
private int Wmax = 50;
private int Hmax = 25;
private int Wmin = 10;
private int Hmin = 5;
Random rand = new Random();
int randx = rand.nextInt((Xmax-Xmin)+1)+Xmin;
int randh = rand.nextInt((Hmax-Hmin)+1)+Hmin;
int randw = rand.nextInt((Wmax-Wmin)+1)+Wmin;


//fills arrays
{for(int i = 0; i < 10; i++){
    Random rand = new Random();
    int randx = rand.nextInt((Xmax-Xmin)+1)+Xmin;
    int randh = rand.nextInt((Hmax-Hmin)+1)+Hmin;
    int randw = rand.nextInt((Wmax-Wmin)+1)+Wmin;
    if(i>0)
        xA[i] = (randx+xA[i-1]);
    else
        xA[i] = 160;
    yA[i] = randh+110;
    widthA[i] = randw;
    heightA[i] = randh;
}   
}
private int x, y, width, height;
public makeRect(){
x = 150; y = 120; width = 30; height = 10;
}
public void makeRect(int x0, int y0, int w0, int h0){
x = x0; y = y0; width = w0; height = h0;
}
public void draw(Graphics g) {
g.setColor(Color.ORANGE);
{for(int i = 0; i < 10; i++){
    g.fillRect(xA[i], yA[i], heightA[i], widthA[i]);
    }}
}
public Rectangle getBounds(){
return new Rectangle(randx, 110+randh, 30, 10);
}
}
class finishLine{
private int x, y, width, height;
public void finishLine(int x0, int y0, int w0, int h0){
    x = x0; y = y0; width = w0; height = h0;    
}
public void draw(Graphics g){
    g.setColor(Color.MAGENTA);
    g.fillRect(1200, 80, 30, 30);
}
}
public boolean crashTest(){
boolean end = false;
{for(int i = 0; i<10; i++){
if(player.getBounds().intersects(new Rectangle(xA[i], yA[i], heightA[i], widthA[i])))
    end = true;
}
return end;
}
}
public boolean winTest(){
boolean win = false;
if(player.getBounds().intersects(new Rectangle(1200, 80, 30, 30)))
    win = true;
return win;
}
}
  • For [example](http://stackoverflow.com/questions/16493809/how-to-make-sprite-jump-in-java/16494178#16494178), [example](http://stackoverflow.com/questions/13318574/why-does-the-height-of-the-rectangles-jump-vary/13319161#13319161), [example](http://stackoverflow.com/questions/19626338/japplet-creates-a-ball-that-bounces-and-gets-progressively-less-high-in-java/19626396#19626396) – MadProgrammer Mar 26 '16 at 21:04
  • FYI: `Applet` was out of date 16+ years ago, but `JApplet`s are officially a dead technology, see [Java Plugin support deprecated](http://www.gizmodo.com.au/2016/01/rest-in-hell-java-plug-in/) and [Moving to a Plugin-Free Web](https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free) for more details – MadProgrammer Mar 26 '16 at 21:05

0 Answers0