redgreenred
asked on
buttons to increase and decrease variables at runtime
Bellow is my code which shows the movement of the ball. Its bouncing with the parameters of gravity.
I want to add a button that should increase its movement and another button to decrease its movement.
==> to summarize, place two buttons: one should increase the value of gravity and another should decrease the value of gravity
import java.applet.Applet;
import java.applet.*;
import java.lang.*;
import java.awt.*;
//Creating a Main class Moving Ball
public class BouncingBall extends Applet implements Runnable {
//Variable Initialization
int Direction_On_X = 0;
int Direction_On_Y = 0;
int x_position = 0;
int y_position = 0;
int oldx_position = 0;
int oldy_position = 0;
int Squashed = 0;
//For movemnt Calculation
double gravity = 9.83;
double dist = 0.0;
double velocity = 0.0;
double BouncingFactor = 0.4;
double Temporaray;
Double Doublenum;
String bname;
//Initializing a thread
Thread thread_Instance;
//Method to squashed the ball
public void SquashedTheBall()
{
Squashed = 1;
repaint();
}
//Method to beginthe animation , calling by start method
public void Begin()
{
if (thread_Instance == null)
{
//
thread_Instance = new Thread(this);
thread_Instance.start();
}
}
//It will satrt the animation
public void start()
{
Begin();
}
public void run()
{
Thread.currentThread().set Priority(T hread.NORM _PRIORITY) ;
while (true)
{
motion();
try {
Thread.sleep(50);
}
catch (Exception sleepProblem)
{}
}
}
//Painting the ball , normaly and Squashed
public void paint(Graphics g)
{
g.setColor(getBackground() );
g.fillOval(oldx_position,o ldy_positi on,40,40);
g.setColor(Color.red);
if(Squashed == 1 )
{
g.fillOval(x_position, y_position, 33, 25);
Squashed = 0;
}
else
{
g.fillOval(x_position, y_position, 40, 40);
}
}
//It will display the ball motion
private void motion()
{
//Variables updation
oldx_position = x_position;
oldy_position = y_position;
if (Direction_On_Y == 0)
{
//calculate the distance
dist = velocity + (1/2)*gravity;
//Calculate the velocity
velocity = velocity + gravity;
//Calculate Y posiiton
y_position+=(int)dist/10;
//If ball reached bottom
if (y_position > 300)
{
SquashedTheBall();
Direction_On_Y = 1;
//Adjust for going below 390...
dist = y_position - 300;
velocity = Math.sqrt((velocity*veloci ty) - 2*gravity*dist);
Temporaray = velocity * (BouncingFactor/50); //Calculate the new velocity because of collision.
velocity = velocity - Temporaray;
y_position = 300;
}
}
//If Ball is bouncing up, do calculations and adjust y_position accordingly
else
{
if(velocity <= 0)
{
Direction_On_Y = 0;
}
else
{
dist = velocity + (1/2)*(gravity);
velocity = velocity - gravity;
y_position -= dist/20;
}
if(y_position <= 0)
{
Direction_On_Y = 0;
y_position = 0;
}
}
//If ball is moving on right hand
if (Direction_On_X == 0)
{
//Move the ball by the factor of 2
x_position+=2;
if (x_position > 800)
{
// If it is opposite
Direction_On_X = 1;
x_position = 390;
}
}
else
{
x_position-=2;
if (x_position <= 0)
{
Direction_On_X = 0;
x_position = 0;
}
}
repaint();
}
}
I want to add a button that should increase its movement and another button to decrease its movement.
==> to summarize, place two buttons: one should increase the value of gravity and another should decrease the value of gravity
import java.applet.Applet;
import java.applet.*;
import java.lang.*;
import java.awt.*;
//Creating a Main class Moving Ball
public class BouncingBall extends Applet implements Runnable {
//Variable Initialization
int Direction_On_X = 0;
int Direction_On_Y = 0;
int x_position = 0;
int y_position = 0;
int oldx_position = 0;
int oldy_position = 0;
int Squashed = 0;
//For movemnt Calculation
double gravity = 9.83;
double dist = 0.0;
double velocity = 0.0;
double BouncingFactor = 0.4;
double Temporaray;
Double Doublenum;
String bname;
//Initializing a thread
Thread thread_Instance;
//Method to squashed the ball
public void SquashedTheBall()
{
Squashed = 1;
repaint();
}
//Method to beginthe animation , calling by start method
public void Begin()
{
if (thread_Instance == null)
{
//
thread_Instance = new Thread(this);
thread_Instance.start();
}
}
//It will satrt the animation
public void start()
{
Begin();
}
public void run()
{
Thread.currentThread().set
while (true)
{
motion();
try {
Thread.sleep(50);
}
catch (Exception sleepProblem)
{}
}
}
//Painting the ball , normaly and Squashed
public void paint(Graphics g)
{
g.setColor(getBackground()
g.fillOval(oldx_position,o
g.setColor(Color.red);
if(Squashed == 1 )
{
g.fillOval(x_position, y_position, 33, 25);
Squashed = 0;
}
else
{
g.fillOval(x_position, y_position, 40, 40);
}
}
//It will display the ball motion
private void motion()
{
//Variables updation
oldx_position = x_position;
oldy_position = y_position;
if (Direction_On_Y == 0)
{
//calculate the distance
dist = velocity + (1/2)*gravity;
//Calculate the velocity
velocity = velocity + gravity;
//Calculate Y posiiton
y_position+=(int)dist/10;
//If ball reached bottom
if (y_position > 300)
{
SquashedTheBall();
Direction_On_Y = 1;
//Adjust for going below 390...
dist = y_position - 300;
velocity = Math.sqrt((velocity*veloci
Temporaray = velocity * (BouncingFactor/50); //Calculate the new velocity because of collision.
velocity = velocity - Temporaray;
y_position = 300;
}
}
//If Ball is bouncing up, do calculations and adjust y_position accordingly
else
{
if(velocity <= 0)
{
Direction_On_Y = 0;
}
else
{
dist = velocity + (1/2)*(gravity);
velocity = velocity - gravity;
y_position -= dist/20;
}
if(y_position <= 0)
{
Direction_On_Y = 0;
y_position = 0;
}
}
//If ball is moving on right hand
if (Direction_On_X == 0)
{
//Move the ball by the factor of 2
x_position+=2;
if (x_position > 800)
{
// If it is opposite
Direction_On_X = 1;
x_position = 390;
}
}
else
{
x_position-=2;
if (x_position <= 0)
{
Direction_On_X = 0;
x_position = 0;
}
}
repaint();
}
}
so - add two buttons, add ActionListeners and increase / decrease the 'gravity' variable value on button press.
ASKER
Code required
:)
I won't post code.
'no homework zone'.
I won't post code.
'no homework zone'.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
thanks