Hello,
Thank you for your time!
I have an applet where I have two blocks moving:
When the program starts:
a)The first block is constantly moving with a time delay of 100 ms about the horizontal direction at the top end of the applet (x starts at 0 and is increased in steps of 10 until it hits the corner and then x is decreased and so on).
b) The second block is stationary at first and when the enter key is pressed, it starts moving every 10 ms in either of the four directions depending on the arrow key movements (using KeyListener).The boundaries are checked and the directions are changed when the block bumps against the four walls.The second block stops when a shift key is pressed.It resumes when an enter key is pressed again.
My issue:
When the program starts, the first block is moving every 100 ms and soon as I press the enter key, both the blocks start moving every 10 ms. As soon as I press the shift key, the second block stops moving as it should and first block goes back to moving at 100 ms. Obviously, this is not what I want.
Kindly let me know how can I fix this issue sothat when I press the enter key, the first block moves at 100ms and the second block moves at 10 ms. My program is below
Thank you!
Jet
import java.awt.*;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class SnakeBoards extends JApplet implements KeyListener
{
private int x = 100, y = 100, x1 = 10, y1 = 10;
private int flag = 0, flag1 = 0;
private BufferedImage image;
private Timer timer1, timer2;
public void init()
{
addKeyListener (this);
setFocusable(true); // setting the KeyListener Focus on the JPanel to enable Key Events
timer1 = new Timer (10,
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (flag1 == 0)
{
x1+= 10;
}
else
{
x1 -= 10;
}
if (flag == 1)
{
x += 10;
}
else if (flag == 2)
{
x -= 10;
}
else if (flag == 3)
{
y -= 10;
}
else if (flag == 4)
{
y += 10;
}
if (x1 >= getWidth())
{
x1 = x1 - 10;
flag1 = 1;
}
if (x1 <= 0)
{
x1 = x1 + 10;
flag1 = 0;
}
if (x >= getWidth())
{
x = x - 10;
flag = 2;
}
if (x <= 0)
{
x = x + 10;
flag = 1;
}
if (y <= 0)
{
y = y + 10;
flag = 4;
}
if (y >= getWidth())
{
y = y - 10;
flag = 3;
}
repaint();
}
}
);
timer2 = new Timer (100,
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (flag1 == 0)
{
x1+= 10;
}
else
{
x1 -= 10;
}
if (x1 >= getWidth())
{
x1 = x1 - 10;
flag1 = 1;
}
if (x1 <= 0)
{
x1 = x1 + 10;
flag1 = 0;
}
repaint();
}
}
);
timer2.start();
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_RIGHT ) //right shift key
{
flag = 1;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT ) //left shift key
{
flag = 2;
}
if (e.getKeyCode() == KeyEvent.VK_UP ) // up arrow key
{
flag = 3;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN ) //down arrow key
{
flag = 4;
}
if (e.getKeyCode() == KeyEvent.VK_SHIFT ) //shift key
{
timer1.stop();
}
if (e.getKeyCode() == KeyEvent.VK_ENTER ) //enter key
{
flag = 1;
timer1.start();
}
}
public void keyReleased (KeyEvent e)
{
}
public void keyTyped (KeyEvent e)
{
}
public void paint(Graphics g)
{
g.setColor(Color.BLACK);
g.fillRect (0, 0, getWidth(), getHeight());
g.setColor (Color.WHITE);
g.fillRect (x, y, 30, 30);
g.setColor (Color.WHITE);
g.fillRect (x1, y1, 30, 30);
}
}"