| import javax.swing.*;
import java.awt.event.*;
 import java.awt.*;
 import java.applet.*;
 import java.net.*;
 import javax.swing.JFrame;
 import java.util.*;
 import java.util.ArrayList;
 
 public class Game extends JFrame
 {
 static final int WIDTH = 700;
 static final int HEIGHT = 400;
 JFrame frame = new JFrame("2D Shooter");
 Drawing drawing = new Drawing();
 Player1 player1 = new Player1();
 Player2 player2 = new Player2();
 ArrayList<Point> bullets2L = new ArrayList<Point>();
 ArrayList<Point> bullets1L = new ArrayList<Point>();
 ArrayList<Point> bullets2R = new ArrayList<Point>();
 ArrayList<Point> bullets1R = new ArrayList<Point>();
 static final int MARGINR = 40;
 static final int MARGINB = 75;
 static final int MAXHEIGHT = 80; //sets max height before falling
 // declare variable for total height jumped
 int heightJump = 0;
 int heightJump1 = 0;
 // variable for player hp
 int p1HP = 100;
 int p2HP = 100;
 int bx1L ,by1L, bx1R, by1R, bx2L, by2L, bx2R ,by2R; //sets the variables for the coordinate of the bullets
 boolean p1faceLeft, p2faceRight = true;
 boolean p1faceRight, p2faceLeft = false;
 boolean dead1 = false;
 boolean dead2 = false;
 String p1Name;
 String p2Name;
 int mouseX = 0;
 int mouseY = 0;
 boolean menu = true;
 boolean instruction = false;
 
 
 KeyboardInput keyboard = new KeyboardInput();
 
 class Player1 extends Thread
 {
 int x = WIDTH - 90, y = HEIGHT - 100;
 
 public void run()
 {
 try
 {
 while (true)
 {
 keyboard.poll();
 keyPressed();
 sleep(10);
 drawing.repaint();
 }
 }
 catch (InterruptedException e)
 {
 }
 }
 }
 
 class Player2 extends Thread
 {
 int x = 40, y = HEIGHT - 100;
 
 public void run()
 {
 }
 }
 
 public static void main (String[] args)
 {
 Game s = new Game();
 }
 
 public Game()
 {
 p1Name = JOptionPane.showInputDialog(frame, "What's the name of player 1?");
 p2Name = JOptionPane.showInputDialog(frame, "What's the name of player 2?");
 frame.getContentPane().add(drawing,"Center");
 frame.setLocation(WIDTH,HEIGHT);
 frame.setSize(WIDTH, HEIGHT);
 frame.setVisible(true);
 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 addKeyListener(keyboard);
 frame.addKeyListener(keyboard);
 frame.addMouseListener(new MouseListen());
 player1.start();
 }
 
 
 //moves the players when the right key is pressed
 public void keyPressed ()
 {
 // player 1
 if(dead1 != true)
 if(keyboard.keyDown( KeyEvent.VK_LEFT))
 {
 player1.x -= 3;
 p1faceLeft = true;
 p1faceRight = false;
 if (player1.x < 0)
 player1.x = 0;
 }
 if(dead1 != true)
 if( keyboard.keyDown( KeyEvent.VK_RIGHT))
 {
 player1.x += 3;
 p1faceLeft = false;
 p1faceRight = true;
 if( player1.x + 3 > WIDTH - MARGINR)
 player1.x = WIDTH - MARGINR;
 }
 if(dead1 != true)
 if( keyboard.keyDown( KeyEvent.VK_UP))
 {
 if(heightJump < MAXHEIGHT)
 {
 player1.y -= 9;
 heightJump += 5;
 }
 else player1.y = player1.y;
 if( player1.y <= 0)
 player1.y = 0;
 }
 if(dead1 != true)
 if(keyboard.keyDownOnce( KeyEvent.VK_UP))
 heightJump = 0;
 
 if(dead1 != true)
 if( keyboard.keyDown( KeyEvent.VK_DOWN ) )
 {
 player1.y += 3;
 if (player1.y + 3 > HEIGHT - MARGINB)
 player1.y = HEIGHT - MARGINB;
 }
 
 // player 2
 if(dead2 != true)
 if(keyboard.keyDown( KeyEvent.VK_A))
 {
 p2faceLeft = true;
 p2faceRight = false;
 player2.x -= 3;
 if (player2.x < 0)
 {
 player2.x = 0;
 }
 }
 if(dead2 != true)
 if( keyboard.keyDown( KeyEvent.VK_D))
 {
 p2faceLeft = false;
 p2faceRight = true;
 player2.x += 3;
 if( player2.x + 3 > WIDTH - MARGINR)
 player2.x = WIDTH - MARGINR;
 }
 
 if(dead2 != true)
 if( keyboard.keyDown( KeyEvent.VK_W))
 {
 if(heightJump1 < MAXHEIGHT)
 {
 player2.y -= 9;
 heightJump1 += 5;
 }
 else player2.y = player2.y;
 if( player2.y <= 0)
 player2.y = 0;
 }
 if(dead2 != true)
 if(keyboard.keyDownOnce( KeyEvent.VK_W))
 heightJump1 = 0;
 
 if(dead2 != true)
 if( keyboard.keyDown( KeyEvent.VK_S) )
 {
 player2.y += 3;
 if (player2.y + 3 > HEIGHT - MARGINB)
 player2.y = HEIGHT - MARGINB;
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_V))
 {
 bx2L = player2.x;
 by2L = player2.y;
 bullets2L.add((new Point(bx2L, by2L)));
 }
 
 if(keyboard.keyDownOnce( KeyEvent.VK_B))
 {
 bx2R = player2.x;
 by2R = player2.y;
 bullets2R.add((new Point(bx2R, by2R)));
 }
 
 if(keyboard.keyDownOnce( KeyEvent.VK_O))
 {
 bx1L = player1.x;
 by1L = player1.y;
 bullets1L.add((new Point(bx1L, by1L)));
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_P))
 {
 bx1R = player1.x;
 by1R = player1.y;
 bullets1R.add((new Point(bx1R, by1R)));
 
 }
 
 // respawn button
 if(keyboard.keyDownOnce(KeyEvent.VK_H))
 {
 if(dead1 == true || dead2 == true)
 {
 player1.x = WIDTH - 90;
 player1.y = HEIGHT - 100;
 player2.x = 40;
 player2.y = HEIGHT - 100;
 dead1 = false;
 dead2 = false;
 p1HP = 100;
 p2HP = 100;
 }
 }
 // end of key movement
 
 // collision detection for ground and platforms
 player2.y += 4;
 player1.y += 4;
 if (player1.y + 5 > HEIGHT - MARGINB)
 player1.y = HEIGHT - MARGINB;
 if (player2.y + 5 > HEIGHT - MARGINB)
 player2.y = HEIGHT - MARGINB;
 if (player1.y < 280 && player1.y > 270 && player1.x > 230 && player1.x < 350)
 player1.y = 275;
 if (player2.y < 280 && player2.y > 270 && player2.x > 230 && player2.x < 350)
 player2.y = 275;
 if (player2.y < 220 && player2.y > 210 && player2.x > 380 && player2.x < 530)
 player2.y = 215;
 if (player1.y < 220 && player1.y > 210 && player1.x > 380 && player1.x < 530)
 player1.y = 215;
 
 drawing.repaint();
 }
 
 //Mouse Listener
 class MouseListen extends MouseAdapter
 {
 public void mouseClicked(MouseEvent e)
 {
 mouseX = e.getX() - 11;
 mouseY = e.getY() - 35;
 drawing.repaint();
 }
 }
 
 
 
 class Drawing extends JComponent
 {
 // draws the default sprite of the players and the background
 ImageIcon player1D = new ImageIcon("player1StillL.gif");
 ImageIcon player2D = new ImageIcon("player2StillR.gif");
 ImageIcon background = new ImageIcon("background.gif");
 // sets the objects for player hp
 ImageIcon p1Hp = new ImageIcon();
 ImageIcon p2Hp = new ImageIcon();
 
 public Drawing()
 {
 repaint();
 }
 
 public void paint(Graphics g)
 {
 if (menu == false)
 {
 //draws rectangle around players for bullet collision
 Rectangle r2 = new Rectangle(player2.x, player2.y, 25,40);
 Rectangle r1 = new Rectangle(player1.x, player1.y, 25,40);
 
 // directs the player hp objects to the picture if the hp gets to that point
 if(p1HP == 100)
 p1Hp = new ImageIcon("P1100.jpg");
 if(p1HP == 80)
 p1Hp = new ImageIcon("p180.jpg");
 if(p1HP == 60)
 p1Hp = new ImageIcon("p160.jpg");
 if(p1HP == 40)
 p1Hp = new ImageIcon("p140.jpg");
 if(p1HP == 20)
 p1Hp = new ImageIcon("p120.jpg");
 if(p1HP == 0)
 p1Hp = new ImageIcon("p10.jpg");
 
 if(p2HP == 100)
 p2Hp = new ImageIcon("P2100.jpg");
 if(p2HP == 80)
 p2Hp = new ImageIcon("p280.jpg");
 if(p2HP == 60)
 p2Hp = new ImageIcon("p260.jpg");
 if(p2HP == 40)
 p2Hp = new ImageIcon("p240.jpg");
 if(p2HP == 20)
 p2Hp = new ImageIcon("p220.jpg");
 if(p2HP == 0)
 p2Hp = new ImageIcon("p20.jpg");
 
 
 // resets default sprite
 if(keyboard.keyDown( KeyEvent.VK_H))
 {
 player1D = new ImageIcon("player1StillL.gif");
 player2D = new ImageIcon("player2StillR.gif");
 }
 
 // changes sprite when keys are pressed for player 2
 if(dead2 != true)
 {
 if(keyboard.keyDown( KeyEvent.VK_A) && (keyboard.keyDown( KeyEvent.VK_V) == false))
 {
 player2D = new ImageIcon("player2L.gif");
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_V))
 {
 player2D = new ImageIcon("player2SL.gif");
 }
 
 if(keyboard.keyDown( KeyEvent.VK_D) && (keyboard.keyDown( KeyEvent.VK_B) == false))
 {
 player2D = new ImageIcon("player2R.gif");
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_B))
 {
 player2D = new ImageIcon("player2SR.gif");
 }
 if((keyboard.keyDown(KeyEvent.VK_A)) == false && p2faceLeft == true && keyboard.keyDown( KeyEvent.VK_V) == false && keyboard.keyDown( KeyEvent.VK_B) == false )
 player2D = new ImageIcon("Player2StillL.gif");
 if((keyboard.keyDown(KeyEvent.VK_D)) == false && p2faceRight == true  && keyboard.keyDown( KeyEvent.VK_V) == false && keyboard.keyDown( KeyEvent.VK_B) == false )
 player2D = new ImageIcon("Player2StillR.gif");
 }
 
 // changes sprite when keys are pressed for player 1
 if(dead1 != true)
 {
 if(keyboard.keyDown( KeyEvent.VK_LEFT) && (keyboard.keyDown( KeyEvent.VK_O) == false))
 {
 player1D = new ImageIcon("player1L.gif");
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_O))
 {
 player1D = new ImageIcon("player1SL.gif");
 }
 
 if(keyboard.keyDown( KeyEvent.VK_RIGHT) && (keyboard.keyDown( KeyEvent.VK_P) == false) )
 {
 player1D = new ImageIcon("player1R.gif");
 }
 if(keyboard.keyDownOnce( KeyEvent.VK_P))
 {
 player1D = new ImageIcon("player1SR.gif");
 }
 if((keyboard.keyDown(KeyEvent.VK_LEFT)) == false && p1faceLeft == true && keyboard.keyDown( KeyEvent.VK_O) == false && keyboard.keyDown( KeyEvent.VK_P) == false )
 player1D = new ImageIcon("Player1StillL.gif");
 if((keyboard.keyDown(KeyEvent.VK_RIGHT)) == false && p1faceRight == true  && keyboard.keyDown( KeyEvent.VK_O) == false && keyboard.keyDown( KeyEvent.VK_P) == false )
 player1D = new ImageIcon("Player1StillR.gif");
 }
 
 // draws death sprite for the players
 if(dead1 == true)
 player1D = new ImageIcon("player1Dead.gif");
 if(dead2 == true)
 player2D = new ImageIcon("player2Dead.gif");
 
 
 
 //Map 1
 g.drawImage(background.getImage(),0,0,this);
 g.setColor(Color.black);
 g.fillRect(250, 310 , 100, 10);
 g.fillRect(400, 250, 130, 10);
 //End of Map 1
 
 //Draws Player and hp
 g.drawImage(p2Hp.getImage(), 30, 20, this);
 g.drawImage(p1Hp.getImage(), 450, 20, this);
 g.setColor(Color.black);
 g.drawString(p1Name, 620, 40);
 g.drawString(p2Name, 30, 40);
 g.drawImage(player2D.getImage(), player2.x, player2.y - 6, this);
 g.drawImage(player1D.getImage(), player1.x, player1.y, this);
 g.setColor(Color.yellow);
 
 
 
 // Draws the bullets and also does bullet collision detection when player 1 aren't dead
 if(dead1 == false)
 {
 if (!bullets1L.isEmpty())
 {
 for (int i = 0; i < bullets1L.size(); i++)
 {
 Point bullet1L = bullets1L.get(i);
 bullet1L.x -= 4;
 if(r2.contains(bullet1L.x, bullet1L.y))
 {
 p2HP -= 1;
 if(p2HP == 0)
 dead2 = true;
 }
 g.fillOval(bullet1L.x, bullet1L.y + 10, 6,3);
 if (bullet1L.x <= 0)
 {
 bullets1L.remove(bullet1L);
 i--;
 }
 }
 }
 if (!bullets1R.isEmpty())
 {
 for (int k = 0; k < bullets1R.size(); k++)
 {
 Point bullet1R = bullets1R.get(k);
 bullet1R.x += 4;
 if(r2.contains(bullet1R.x, bullet1R.y))
 {
 p2HP -= 1;
 if(p2HP == 0)
 dead2 = true;
 }
 g.fillOval(bullet1R.x, bullet1R.y + 10, 6,3);
 if (bullet1R.x <= 0)
 {
 bullets1R.remove(bullet1R);
 k--;
 }
 }
 }
 }
 
 // Draws the bullets and also does bullet collision detection when player 2 aren't dead
 if(dead2 == false)
 {
 if (!bullets2L.isEmpty())
 {
 for (int s = 0; s < bullets2L.size(); s++)
 {
 Point bullet2L = bullets2L.get(s);
 bullet2L.x -= 4;
 if(r1.contains(bullet2L.x, bullet2L.y))
 {
 p1HP -= 1;
 if(p1HP == 0)
 dead1 = true;
 }
 g.fillOval(bullet2L.x, bullet2L.y + 10, 6,3);
 if (bullet2L.x >= 1000)
 {
 bullets2L.remove(bullet2L);
 s--;
 }
 }
 }
 if (!bullets2R.isEmpty())
 {
 for (int j = 0; j < bullets2R.size(); j++)
 {
 Point bullet2R = bullets2R.get(j);
 bullet2R.x += 4;
 if(r1.contains(bullet2R.x, bullet2R.y))
 {
 p1HP -= 1;
 if(p1HP == 0)
 dead1 = true;
 }
 
 g.fillOval(bullet2R.x, bullet2R.y + 10, 6,3);
 if (bullet2R.x <= 0)
 {
 bullets2R.remove(bullet2R);
 j--;
 }
 }
 }
 }
 }
 else if (menu == true)
 {
 main.start();
 //draws the menu
 ImageIcon menuBack = new ImageIcon("menu.jpg");
 g.drawImage(menuBack.getImage(),0,0,this);
 ImageIcon play = new ImageIcon("playgame.png");
 g.drawImage(play.getImage(),300,150,this);
 ImageIcon instru = new ImageIcon("instru.png");
 g.drawImage(instru.getImage(),300,200,this);
 Rectangle b1 = new Rectangle(300, 150,100,30);
 Rectangle b2 = new Rectangle(300,200,100,30);
 
 if (b1.contains(mouseX,mouseY))
 menu = false;
 if (b2.contains(mouseX,mouseY))
 instruction = true;
 }
 if (instruction == true)
 {
 ImageIcon instruBack = new ImageIcon("instruback.jpg");
 g.drawImage(instruBack.getImage(),0,0,this);
 ImageIcon back = new ImageIcon("back.png");
 g.drawImage(back.getImage(),290,320,this);
 Rectangle b3 = new Rectangle(290,320,100,30);
 
 if(b3.contains(mouseX,mouseY))
 instruction = false;
 }
 }
 }
 }
 
 
 
 
 |