Guest User

Frogger Game

a guest
Apr 22nd, 2013
552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.00 KB | None | 0 0
  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3. import java.io.IOException;
  4.  
  5. import javax.swing.Box;
  6. import javax.swing.BoxLayout;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JPanel;
  10.  
  11. public class Frogger {
  12.    
  13.     static JFrame frame;
  14.     JButton newGame;
  15.     JButton loadGame;
  16.     startMenuActionListener actionListener = new startMenuActionListener();
  17.    
  18.     public Frogger(){
  19.         JPanel panel = new JPanel();
  20.         panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
  21.        
  22.         newGame = new JButton("New Game");
  23.         newGame.addActionListener(actionListener);
  24.         panel.add(newGame);
  25.         panel.add(Box.createVerticalGlue());
  26.        
  27.         loadGame = new JButton("Load Game");
  28.         loadGame.addActionListener(actionListener);
  29.         panel.add(loadGame);
  30.         panel.add(Box.createVerticalGlue());
  31.     }
  32.    
  33.     private void newGame(){
  34.        
  35.     }
  36.    
  37.     private void loadGame(){
  38.        
  39.     }
  40.    
  41.     public static void main(String[]args) throws IOException
  42.     {
  43.         frame = new JFrame("CS125 Frogger");
  44.         Frogger startPanel = new Frogger();
  45.         FroggerPanel panel = new FroggerPanel();
  46.        
  47.         frame.addKeyListener(panel);
  48.         frame.setFocusable(true);
  49.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  50.         frame.getContentPane().add(panel);
  51.         frame.pack();
  52.         frame.setVisible(true);
  53.     }
  54.    
  55.     private class startMenuActionListener implements ActionListener {
  56.  
  57.         @Override
  58.         public void actionPerformed(ActionEvent e) {
  59.             Object source = e.getSource();
  60.             if(source == newGame){
  61.                 newGame();
  62.             }else if(source == loadGame){
  63.                 loadGame();
  64.             }
  65.            
  66.         }
  67.        
  68.     }
  69. }
  70.  
  71. import java.awt.*;
  72. import java.awt.image.BufferedImage;
  73. import java.awt.image.ImageObserver;
  74. import java.awt.image.ImageProducer;
  75. import java.io.File;
  76. import java.io.IOException;
  77.  
  78. import javax.imageio.ImageIO;
  79. import javax.swing.*;
  80. import java.util.ArrayList;
  81. import java.util.Random;
  82.  
  83. /**
  84.  * Display panel for the Frogger game
  85.  *
  86.  * @author cs125
  87.  */
  88. public class FroggerDisplayPanel extends JPanel {
  89.  
  90.     /**
  91.      *
  92.      */
  93.     private static final long serialVersionUID = 1L;
  94.     private ArrayList<ArrayList<Rectangle>> cars = new ArrayList<ArrayList<Rectangle>>();
  95.     private int car_size;
  96.     private Color carColor;
  97.    
  98.     private int fx;
  99.     private int fy;
  100.     BufferedImage img;
  101.     Random r = new Random();
  102.     /*
  103.      * Constructor is told some general information
  104.      * about the drawing characteristics required
  105.      */
  106.     public FroggerDisplayPanel(int dims)
  107.     {
  108.         setBackground(Color.black);
  109.         setPreferredSize(new Dimension(dims,dims));
  110.         //try {
  111.             //img =  ImageIO.read(new File("C:/examples/bot2.png"));
  112.         //} catch (IOException e) {
  113.             // TODO Auto-generated catch block
  114.         //  e.printStackTrace();
  115.         //}
  116.     }
  117.    
  118.     /*
  119.      * (non-Javadoc)
  120.      * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
  121.      */
  122.     public void paintComponent(Graphics page)
  123.     {      
  124.         super.paintComponent(page);            
  125.         int lanes = cars.size(); //to get even spacing between boxes
  126.         car_size = this.getHeight() / lanes; //boxes and empty lanes will have the same vertical dimension 
  127.         for (int i = 0; i < cars.size(); i++) {        
  128.             switch(i){
  129.             case 0: carColor = Color.red;break;
  130.             case 1: carColor = Color.orange;break;
  131.             case 2: carColor = Color.yellow;break;
  132.             case 3: carColor = Color.pink;break;
  133.             case 4: carColor = Color.green;break;
  134.             case 5: carColor = Color.blue;break;
  135.             }
  136.             for(int j = 0; j < cars.get(i).size(); j++){   
  137.                 //page.drawImage(img, cars.get(i).get(j).x, cars.get(i).get(j).y, car_size, car_size, this);               
  138.                 page.setColor(carColor);   
  139.                 page.drawRect(cars.get(i).get(j).x, cars.get(i).get(j).y, car_size, car_size);
  140.             }
  141.         }  
  142.         page.setColor(Color.green);
  143.         page.fillRect(fx, fy, car_size, car_size); //draws frog
  144.     }
  145.    
  146.     /*
  147.      * Update the game elements and redraw
  148.      */
  149.     public void setLocations(ArrayList<ArrayList<Rectangle>> cars1, Rectangle Frog) {
  150.         this.cars = cars1; //makes this copy, so Points can't be modified elsewhere
  151.         fx = Frog.x; //sets frog location
  152.         fy = Frog.y;
  153.         repaint();
  154.     }
  155.    
  156.    
  157. }
  158.  
  159. import java.awt.BorderLayout;
  160. import java.awt.Rectangle;
  161. import java.awt.event.ActionEvent;
  162. import java.awt.event.ActionListener;
  163. import java.awt.event.KeyEvent;
  164. import java.awt.event.KeyListener;
  165. import java.awt.image.BufferedImage;
  166. import java.io.File;
  167. import java.io.IOException;
  168. import java.util.ArrayList;
  169. import java.util.Random;
  170.  
  171. import javax.imageio.ImageIO;
  172. import javax.swing.Box;
  173. import javax.swing.BoxLayout;
  174. import javax.swing.ButtonGroup;
  175. import javax.swing.ImageIcon;
  176. import javax.swing.JButton;
  177. import javax.swing.JLabel;
  178. import javax.swing.JPanel;
  179. import javax.swing.JRadioButton;
  180. import javax.swing.Timer;
  181.  
  182. /*
  183.  * @author cs125
  184.  *
  185.  * The Frogger Panel is responsible for constructing the game elements,
  186.  * managing the layouts and events and running the game.
  187.  *
  188.  * The FroggerDisplayPanel is responsible for drawing the game
  189.  */
  190. public class FroggerPanel extends JPanel implements KeyListener
  191. {
  192.     private static final long serialVersionUID = 1L;
  193.     // constants
  194.     private final int MAX_LANEGROUPS = 4;
  195.     private final int TIMER_DELAY = 50;
  196.     private final int DISPLAY_DIM = 500;
  197.     private int X_STEP_SIZE = 2;   
  198.    
  199.     // JStuff
  200.     private JRadioButton[] boption;
  201.     private JButton startPause;
  202.     private JButton upArrow;
  203.     private JButton downArrow;
  204.     private JButton leftArrow;
  205.     private JButton rightArrow;
  206.     private JLabel ticker;
  207.    
  208.     // game elements
  209.     private FroggerDisplayPanel display;
  210.     private Random r = new Random();
  211.     private Timer timer;
  212.     private int currentLevel = 0;
  213.    
  214.     //Frog stuff
  215.     public Rectangle Frog;
  216.     private int frogStartX;
  217.     private int frogStartY;
  218.    
  219.     //Traffic stuff
  220.     private ArrayList<ArrayList<Rectangle>> cars = new ArrayList<ArrayList<Rectangle>>();
  221.     private int laneAmt;
  222.     public int rUnit;
  223.    
  224.     public FroggerPanel() throws IOException
  225.     {
  226.         // our listener
  227.         FroggerActionListener actionListener = new FroggerActionListener();
  228.        
  229.         // our option panel
  230.         JPanel bpanel = new JPanel();
  231.         bpanel.setLayout(new BoxLayout(bpanel, BoxLayout.Y_AXIS));
  232.         ButtonGroup bgroup = new ButtonGroup();
  233.         boption = new JRadioButton[MAX_LANEGROUPS-1];
  234.         bpanel.add(Box.createVerticalGlue());
  235.         for (int i = 0; i < MAX_LANEGROUPS-1; i++) {
  236.             boption[i] = new JRadioButton(String.valueOf(i + 2), i + 2 == MAX_LANEGROUPS);
  237.             bgroup.add(boption[i]);
  238.             bpanel.add(boption[i]);
  239.             boption[i].addActionListener(actionListener);
  240.         }
  241.         boption[0].setSelected(true);
  242.         bpanel.add(Box.createVerticalGlue());
  243.        
  244.         // control panel
  245.         JPanel cpanel = new JPanel();
  246.         cpanel.setLayout(new BoxLayout(cpanel, BoxLayout.X_AXIS));
  247.        
  248.         startPause = new JButton("Start");
  249.         cpanel.add(startPause);
  250.         startPause.addActionListener(actionListener);      
  251.        
  252.         //BufferedImage up = ImageIO.read(new File("C:/examples/arrowUp.gif"));
  253.         upArrow = new JButton("^");
  254.         //upArrow = new JButton(new ImageIcon(up));
  255.         cpanel.add(upArrow);
  256.         upArrow.addActionListener(actionListener);
  257.        
  258.         //BufferedImage down = ImageIO.read(new File("C:/examples/arrowDown.gif"));
  259.         downArrow = new JButton("v");
  260.         //downArrow = new JButton(new ImageIcon(down));
  261.         cpanel.add(downArrow);
  262.         downArrow.addActionListener(actionListener);
  263.        
  264.         //BufferedImage left = ImageIO.read(new File("C:/examples/arrowLeft.gif"));
  265.         leftArrow = new JButton("<");
  266.         //leftArrow = new JButton(new ImageIcon(left));
  267.         cpanel.add(leftArrow);
  268.         leftArrow.addActionListener(actionListener);                                   
  269.        
  270.         //BufferedImage right = ImageIO.read(new File("C:/examples/arrowRight.gif"));
  271.         rightArrow = new JButton(">");
  272.         //rightArrow = new JButton(new ImageIcon(right));
  273.         cpanel.add(rightArrow);
  274.         rightArrow.addActionListener(actionListener);
  275.        
  276.        
  277.         JPanel cpanelWrapper = new JPanel(); //to center buttons
  278.         cpanelWrapper.add(cpanel);
  279.        
  280.         // header
  281.         ticker = new JLabel("Paused");
  282.         JPanel tickerWrapper = new JPanel(); //to center label
  283.         tickerWrapper.add(ticker);
  284.        
  285.         // display panel
  286.         display = new FroggerDisplayPanel(DISPLAY_DIM);
  287.         // Create a timer to step the game
  288.         timer = new Timer(TIMER_DELAY, actionListener);
  289.        
  290.         // primary panel layout
  291.         setLayout(new BorderLayout());
  292.         add(bpanel, BorderLayout.WEST);
  293.         add(cpanelWrapper, BorderLayout.SOUTH);
  294.         add(tickerWrapper, BorderLayout.NORTH);
  295.         add(display, BorderLayout.CENTER);     
  296.        
  297.         // configure game elements
  298.         reconfigGame();
  299.     }
  300.    
  301.     private int currentXPos;
  302.     private int currentYPos;
  303.     private int carSpace;
  304.     private void reconfigGame() {
  305.         cars.clear();
  306.         for(int i = 0; i < boption.length; i++){
  307.             if(boption[i].isSelected()){
  308.                 switch(i){
  309.                 case 0: laneAmt = 10; break;
  310.                 case 1: laneAmt = 16; break;
  311.                 case 2: laneAmt = 23; break;
  312.                 }
  313.             }          
  314.         }                                  
  315.         currentXPos = 0;
  316.         currentYPos = 0;
  317.         rUnit = DISPLAY_DIM / (laneAmt);   
  318.         carSpace = rUnit*2 + rUnit;
  319.         for(int j = 0; j < laneAmt; j++){
  320.             cars.add(new ArrayList<Rectangle>());                      
  321.         }
  322.         for (int lane = laneAmt-1; lane > 0; lane--){
  323.             currentXPos = 0;
  324.             if(lane == 4 || lane == 9 || lane == 15 || lane == 22){
  325.                 currentYPos +=rUnit;
  326.                 lane--;            
  327.             }                              
  328.             while(currentXPos <= DISPLAY_DIM){ 
  329.                 int x = r.nextInt(3);
  330.                 switch(x){
  331.                 case 0: cars.get(lane).add(new Rectangle(currentXPos, currentYPos, rUnit, rUnit)); currentXPos += carSpace;break;
  332.                 case 1: cars.get(lane).add(new Rectangle(currentXPos, currentYPos, rUnit, rUnit)); currentXPos += rUnit;
  333.                         cars.get(lane).add(new Rectangle(currentXPos, currentYPos, rUnit, rUnit)); currentXPos += carSpace;break;
  334.                 case 2: currentXPos += carSpace; break;                
  335.                 }                  
  336.             }
  337.             currentYPos += rUnit;
  338.         }          
  339.         frogStartX = DISPLAY_DIM/2;
  340.         frogStartY = currentYPos;
  341.         Frog = new Rectangle(frogStartX, frogStartY, rUnit, rUnit);
  342.         display.setLocations(cars, Frog);
  343.     }
  344.    
  345.     private int current_x_step = 0;
  346.     private int lane_bounds = 0;
  347.     private int new_pos = 0;
  348.     private void stepGame() {
  349.        
  350.         for (int i = 0; i < laneAmt; i++) {
  351.             if(i == 0 || i % 2 == 0){
  352.                 current_x_step = X_STEP_SIZE;
  353.                 lane_bounds = display.getWidth()+rUnit;
  354.                 new_pos = -rUnit;
  355.             }else if((i-1) == 0 || (i-1) % 2 == 0){
  356.                 current_x_step = -X_STEP_SIZE;
  357.                 lane_bounds = -rUnit;
  358.                 new_pos = DISPLAY_DIM + rUnit;
  359.             }
  360.            
  361.             for(int j = 0; j < cars.get(i).size(); j++){
  362.                 cars.get(i).get(j).x += current_x_step;                    
  363.                 if (cars.get(i).get(j).x == lane_bounds) {                     
  364.                     cars.get(i).get(j).x = new_pos;            
  365.                 }
  366.                 if(cars.get(i).get(j).intersects(Frog)){
  367.                     timer.stop();
  368.                     startPause.setText("Retry?");
  369.                     break;
  370.                 }
  371.             }
  372.         }          
  373.         display.setLocations(cars, Frog);  
  374.         if(Frog.y == 0){
  375.             stepLevel();           
  376.         }
  377.     }
  378.    
  379.     public void stepLevel(){
  380.         currentLevel++;
  381.         switch(currentLevel){
  382.         case 1: X_STEP_SIZE++;
  383.         case 2: X_STEP_SIZE++;
  384.         case 3: X_STEP_SIZE++;
  385.         case 4: X_STEP_SIZE++;
  386.         case 5: X_STEP_SIZE=1; boption[1].setSelected(true);
  387.        
  388.         case 6: X_STEP_SIZE++;
  389.         case 7: X_STEP_SIZE++;
  390.         case 8: X_STEP_SIZE++;
  391.         case 9: X_STEP_SIZE++;
  392.         case 10: X_STEP_SIZE=1; boption[2].setSelected(true);
  393.         }
  394.         timer.stop();
  395.         ticker.setText("Level Completed");
  396.         startPause.setText("Next Level");
  397.     }
  398.    
  399.     public void keyPressed(KeyEvent e) {
  400.         switch(e.getKeyCode()){
  401.         case KeyEvent.VK_W: upArrow.doClick(); System.out.print("w"); break;
  402.         case KeyEvent.VK_S: downArrow.doClick(); break;
  403.         case KeyEvent.VK_A: leftArrow.doClick(); break;
  404.         case KeyEvent.VK_D: rightArrow.doClick(); break;           
  405.         }
  406.         display.setLocations(cars, Frog);
  407.     }
  408.  
  409.     @Override
  410.     public void keyReleased(KeyEvent e) {
  411.        
  412.     }
  413.  
  414.     @Override
  415.     public void keyTyped(KeyEvent e) {
  416.         switch(e.getKeyCode()){
  417.         case KeyEvent.VK_W: upArrow.doClick(); break;
  418.         case KeyEvent.VK_S: downArrow.doClick(); break;
  419.         case KeyEvent.VK_A: leftArrow.doClick(); break;
  420.         case KeyEvent.VK_D: rightArrow.doClick(); break;           
  421.         }  
  422.         display.setLocations(cars, Frog);
  423.     }  
  424.  
  425.     /*
  426.      * Action listener listening for the controls in the various panels
  427.      */
  428.     private class FroggerActionListener implements ActionListener {
  429.  
  430.         public void actionPerformed(ActionEvent e) {
  431.             Object source = e.getSource();         
  432.             if (source == timer) {
  433.                 stepGame();
  434.             } else if (source == startPause) {
  435.                 if(startPause.getText().equals("Start") ){
  436.                     startPause.setText("Pause");                   
  437.                     timer.start();
  438.                     ticker.setText("Running");
  439.                 } else if(startPause.getText().equals("Retry?")){
  440.                     startPause.setText("Pause");                   
  441.                     reconfigGame();
  442.                     timer.start();
  443.                     ticker.setText("Running");
  444.                 } else if(startPause.getText().equals("Pause")){
  445.                     startPause.setText("Start");
  446.                     timer.stop();
  447.                     ticker.setText("Paused");
  448.                 } else if(startPause.getText().equals("Next Level")){
  449.                     startPause.setText("Pause");
  450.                     reconfigGame();
  451.                     timer.start();
  452.                     currentLevel++;
  453.                     boption[currentLevel].setSelected(true);
  454.                 }
  455.             }
  456.             else if(source == upArrow) {
  457.                 Frog.y -= rUnit;
  458.                 }
  459.             else if(source == downArrow) {
  460.                 Frog.y += rUnit;
  461.                 }
  462.             else if(source == leftArrow) {
  463.                 Frog.x -= rUnit;
  464.                 }
  465.             else if(source == rightArrow) {
  466.                 Frog.x += rUnit;
  467.                 }
  468.             else { reconfigGame();
  469.             }  
  470.         }
  471.     }      
  472. }
Advertisement
Add Comment
Please, Sign In to add comment