
-----------------------------------
-PseudoNymX-
Sat Feb 16, 2008 12:42 pm

Need help with KeyListener issues in Java Pong Applet
-----------------------------------
Heya. I sent an email to my teacher regarding this issue, but I figured I'd post it too, in case he didn't get to it. The KeyListener functions (keyPressed, keyReleased) in this code don't seem to be triggering at all. I imported all the right things (I think) and I can't find any issues with my code... can anyone tell me why this isn't working? (Code listed and .java file attached for those too lazy to copy+paste)

// Quinn Strahl's Pong

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.io.*;
import java.awt.event.*;

public class Pong extends JApplet implements Runnable, KeyListener {
	Image dbImage;
	Graphics dbg;
	boolean[] keys = new boolean[256];
	
	Random die = new Random();
	
	Paddle player1 = new Paddle(20, 125, 0);
	Paddle player2 = new Paddle(470, 125, 0);
	
	int x = 250;
	int y = 150;
	int xv, yv = 0;
	
	public void init() {
		addKeyListener(this);
	}
	
	public void start() {
		player1.points = 0;
		player2.points = 0;
		for (int i = 0; i < 256; i++) {
			keys[i] = false;
		}
		relaunch();
		Thread th = new Thread(this);
		th.start();
	}
	
	public void stop() {
	}
	
	public void destroy() {
	}
	
	public void keyTyped(KeyEvent e) {
	}

        public void keyPressed(KeyEvent e) {
            keys[e.getKeyCode()] = true;
            System.out.println((char)e.getKeyCode() + " down");
            repaint();
        }

        public void keyReleased(KeyEvent e) {
            keys[e.getKeyCode()] = false;
            System.out.println((char)e.getKeyCode() + " up");
            repaint();
        }
	
	public void delay(int t) {
		try {
			Thread.sleep(t);
		}catch (InterruptedException e) {
			System.out.println(e);
		}
	}
	
	public void checkBounds() {
		System.out.println("checkBounds");
		if (player1.y >= 250) {
			player1.y = 250;
			player1.yv = -player1.yv / 2;
		}else if (player1.y = 250) {
			player2.y = 250;
			player2.yv = -player2.yv / 2;
		}else if (player2.y  497) {
			relaunch();
			player1.points += 1;
		}
		if (y > 297 || y < 3) {
			yv = -yv;
		}
		if (hitPaddle()) {
			xv = -xv;
		}
		if (player1.yv > 10) {
			player1.yv = 10;
		}else if (player1.yv < -10) {
			player1.yv = -10;
		}
		if (player2.yv > 10) {
			player2.yv = 10;
		}else if (player2.yv < -10) {
			player2.yv = -10;
		}
	}
	
	public void checkKeys() {
		System.out.println("checkKeys");
		if (keys[(int)'q']) {
			player1.yv += 1;
			System.out.println("player1 ^");
		}
		if (keys[(int)'a']) {
			player1.yv -= 1;
			System.out.println("player1 v");
		}
		if (keys[(int)'o']) {
			player2.yv += 1;
			System.out.println("player2 ^");
		}
		if (keys[(int)'l']) {
			player2.yv -= 1;
			System.out.println("player2 v");
		}
	}
	
	public void updateLocations() {
		System.out.println("updateLocations");
		player1.y += player1.yv;
		player2.y += player2.yv;
		x += xv;
		y += yv;
	}
	
	public void relaunch() {
		x = 250;
		y = 150;
		if (die.nextInt(2) == 0) {
			xv = 1;
		}else {
			xv = -1;
		}
		yv = die.nextInt(3) - 1;
	}
	
	public boolean hitPaddle() {
		if (x == player1.x + 10 && y >= player1.y && y < player1.y + 50)
			return true;
		else if (x == player2.x - 3 && y >= player2.y && y < player2.y + 50)
			return true;
		else
			return false;
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.BLACK);
		g.fillRect(0,0,500,300);
		g.setColor(Color.GREEN);
		g.fillRect(player1.x, player1.y, 10, 50);
		g.fillRect(player2.x, player2.y, 10, 50);
		g.fillOval(x,y,6,6);
		g.drawString("" + player1.points,240,10);
		g.drawString("" + player2.points,255,10);
	}
	
	public void run() {
		while (player1.points < 10 && player2.points < 10) {
			checkKeys();
			updateLocations();
			checkBounds();
			repaint();
			delay(5);
		}
	}
}

class Paddle {
	int x, y, yv, points;
	
	public Paddle(int newX, int newY, int newYv) {
		x = newX;
		y = newY;
		yv = newYv;
		points = 0;
	}
}
