Hi there!
I’m starting a Quix clone based on kevglass source of one of his 4k games. How can I optimize the loop on the constructor below? Also the line should increase while I keep a directional key pressed but it is not working right. For example, if i keep pressing UP key the line increases and after a while it decrease to a single point again as if I have released the UP key (and I didn’t).
Tks
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
/*
* Created on 28/01/2005
*/
public class Q extends JFrame {
private int px;
private int py;
private int oldPx;
private int oldPy;
private boolean started;
private boolean gameOver;
private int[] keys = new int[] { KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT,
KeyEvent.VK_UP, KeyEvent.VK_DOWN};
private boolean[] controls = new boolean[4];
private Q() {
super("Quix");
super.setSize(400, 400);
super.setResizable(false);
super.show();
super.createBufferStrategy(2);
BufferStrategy strategy = getBufferStrategy();
this.init();
long lastLoopTime = System.currentTimeMillis();
while (true) {
int delta = (int) (System.currentTimeMillis() - lastLoopTime);
logic(delta);
lastLoopTime = System.currentTimeMillis();
this.render(strategy.getDrawGraphics());
strategy.show();
try {
Thread.sleep(1);
} catch(InterruptedException e) {
}
}
}
private void init() {
this.started = true;
this.gameOver = false;
this.px = 200;
this.py = 370;
}
private void logic(int delta) {
if(!this.started) {
return;
}
if(this.controls[2]) {
this.py -= delta * 0.1;
}
else if(this.controls[3]) {
this.py += delta * 0.1;
}
else if(this.controls[0]) {
this.px -= delta * 0.1;
}
else if(this.controls[1]) {
this.px += delta * 0.1;
} else {
this.oldPx = this.px;
this.oldPy = this.py;
}
}
private void render(Graphics g) {
// Clear screen.
g.setColor(Color.black);
g.fillRect(0, 0, 400, 400);
g.setFont(g.getFont().deriveFont(Font.BOLD, 20.0f));
if (!started) {
g.setColor(Color.red);
g.drawString("Quix", 90, 100);
g.drawString("4k Game", 80, 120);
g.setColor(Color.white);
g.drawString("Press Space", 65, 150);
return;
}
g.setColor(Color.blue);
g.drawRect(20,30,360,350);
g.setColor(Color.red);
g.drawLine(this.px,this.py,this.oldPx,this.oldPy);
}
protected void processKeyEvent(KeyEvent e) {
for (int i = 0; i < keys.length; i++) {
if (e.getKeyCode() == keys[i]) {
controls[i] = e.getID() == KeyEvent.KEY_PRESSED;
}
}
if (e.getKeyCode() == 27) {
System.exit(0);
} else if (e.getKeyCode() == 32) {
started = true;
if (this.gameOver) {
this.init();
}
}
}
public static void main(String[] args) {
new Q();
}
}