Two Player Starter Code

<< How to make a Web Launched Application | FinalProjectsTrailIndex | Gridworld Tile Game >>

A Hockey Example

To keep it simple, we will use the a and z keys for player1 on the left, and the quote and forward slash key for the player 2

Hockey.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Class Hockey - a Small Demonstration of the Key Listener combined with 
 * an instance of a Timer object that generates ActionListener events.
 * 
 * The user input is generated from key presses,
 * and once the puck it hit, it is animated by
 * starting the timer which causes Action events
 * at regular time intervals.  The ActionListener
 * can respond to them by drawing the puck in the new
 * location.
 *
 * @author Chris Thiel, OFMCap
 * @version 8 May 2008
 */
public class Hockey extends JApplet implements KeyListener,ActionListener
{

    private int keyCode;
    char c;
    int maxX,maxY;
    private char  p1up, p1down, p2up, p2down, hit;
    String action="none";
    Timer timer;
    Player p1,p2;
    Puck puck;
    public void init()
    {
        this.addKeyListener(this);
        p1up='a';
        p1down='z';
        p2up='\'';
        p2down=Character.toChars(47)[0];
        hit=Character.toChars(32)[0];
        maxX=getSize().width;
        maxY=getSize().height;
        p1=new Player(Color.RED, 20, 150, maxX, maxY);
        p2=new Player(Color.BLUE, maxX-40, 150, maxX, maxY);
        puck=new Puck(40, 150, maxX, maxY);
        timer = new Timer(10, this);
        timer.stop();
    }

    public void paint(Graphics g)
    {
        // simple text displayed on applet
        g.setColor(Color.white);
        g.fillRect(0, 0, 500, 500);
        g.setColor(Color.black);
        g.drawString("Hokey Hocky - KeyListener / ActionListener Demo - Press a Key", 20, 20);
        g.setColor(Color.blue);


        g.drawString("action is "+action, 20, 60);
        g.setFont(new Font("Arial", Font.PLAIN, 32));
        g.setColor(Color.red);
        g.drawString("\""+c+"\"", 50, 100);
        p1.draw(g);
        p2.draw(g);
        puck.draw(g);
    }


   /**
    * KeyListener Interface's Implementation
    */
   public void keyTyped(KeyEvent e) {}
   public void keyPressed(KeyEvent e) 
   { 
      keyCode=e.getKeyCode();
      c=e.getKeyChar();
      action="none";
      if (c==hit) {
          action="hit puck";
          timer.start();
        }
      if (c==p1up) {
          action="player 1 up";
          p1.setY(p1.getY()-4);
          puck.setY(puck.getY()-4);
        }
      if (c==p1down) {
          action="player 1 down";
          p1.setY(p1.getY()+4);
          puck.setY(puck.getY()+4);
        }
      if (c==p2up) {
          action="player 2 up";
          p2.setY(p2.getY()-4);
        }
      if (c==p2down) {
          action="player 2 down";
          p2.setY(p2.getY()+4);
        }
      repaint();
    }
   public void keyReleased(KeyEvent e) {}
 /**
 * ActionListener is an interface and
 * requires the actionPerformed() method
 * to be defined..in this case we
 * look for a timer event
 */
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
        if (source == timer) 
        // the passage of time, so we move our puck
        // if it was hit
        {
            if (timer.isRunning()){
                puck.move();
                if (puck.getX()+30>maxX)
                {
                    timer.stop();
                    if (puck.getY()>=p2.getY() &&
                        puck.getY()<=p2.getY()+40)
                    {
                        action="goalees wins";
                    }else{
                        action="goal!";
                    }
                }
            }
        }

        repaint();
    }
    public void update(Graphics g){
        paint(g);
    }
}

Player.java

import java.awt.*;
/**
 *  class Player 
 * 
 * @author Chris Thiel
 * @version 9 May 2009
 */
public class Player
{

    protected int xLoc;
    protected int yLoc;
    protected int maxX;
    protected int maxY;
    protected Color c;
    /**
     * Constructor for objects of class Player
     */
    public Player (Color color, int x, int y, int maximumX, int maximumY)
    {

        xLoc=x;
        yLoc=y;
        maxX=maximumX;
        maxY=maximumY;
        c=color;
    }

    public int getX()
    {
        return xLoc;
    }
    public int getY()
    {
        return yLoc;
    }
    public void setX(int x)
    {
        if (x>=0 && x<=maxX) xLoc=x;
    }
    public void setY(int y)
    {
        if (y>=0 && y<=maxY) yLoc=y;
    }
    public void draw(Graphics g)
    {
        g.setColor(c);
        g.fillRect(xLoc, yLoc, 10,40);
    }
}

Puck.java

import java.awt.*;
/**
 * Write a description of class Puck here.
 * 
 * @author Chris Thiel, OFMCap
 * @version 9 May 2009
 */
public class Puck extends Player
{
   public Puck (int x, int y, int maximumX, int maximumY)
    {
        super(Color.BLACK, x, y, maximumX, maximumY);
    }
    public void move()
	{
	    setX(xLoc+10);	        
	};
    public void draw(Graphics g)
    {
        g.setColor(c);
        g.fillOval(xLoc, yLoc, 6,6);
    }
}