Ask Experts Questions for FREE Help !
Ask
    ankushpruthi's Avatar
    ankushpruthi Posts: 1, Reputation: 1
    New Member
     
    #1

    Sep 27, 2013, 05:28 AM
    How to open one Jframe from main method call
    I have downloaded a snake game project in java. Initially the project contains three java files i.e "

    Engine.java

    Snake.java

    GameBoard.java

    And Engine.java have the main() method, when i run this Engine.java class game starts running.

    And to improve the user iteractivity i have created two JFrames :"PlayGame.java", Rules.java

    Now this project having five java classes in this project-

    Engine.java(containing main() method)
    Snake.java
    GameBoard.java
    PlayGame.java(is a JFrame)
    Rules.java(is a JFrame)

    PlayGame.java have three buttons

    Play - i want when play button getclicked snake game start/run.
    Rules - when clicked Rules.java Jframe should be opened
    Exit - exits the application

    Now what i want is at first "PlayGame.java" JFrame should appear and throw this game should start i.e when I click play button game should start But problem I am facing on running theapplication 'PlayGame.java' Jframe displaying on the window but when I click 'play button' SnakeFrame appears but snake is not moving. So please give me solution so that I can make project in running state.

    For better understandability of the prolem I am attachig some code in my question

    Main() method code:

    Code:
    public static void main(String[] args)  {
    		new PlayGame().setVisible(true);
     
    		/**JFrame frame = new JFrame("SnakeGame");
    		frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    		frame.setResizable(false);
     
    		Canvas canvas = new Canvas();
    		canvas.setBackground(Color.black);
    		canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
     
    		frame.getContentPane().add(canvas);
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true); 
     
    		new Engine(canvas).startGame();*/
     
     
                 }
    ActionPerformed() method of Play Button

    Code:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     
                    JFrame frame = new JFrame("SnakeGame");
    		frame.setVisible(true); 
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		frame.setResizable(true);
    		Canvas canvas = new Canvas();
    		canvas.setBackground(Color.black);
                    canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
     
                    frame.getContentPane().add(canvas); 
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                    new Engine(canvas).startGame();
        }
    And also I am attaching two classes which are major I this project or which involve the functioning of snake game

    First is Engie.java

    Code:
    package org.psnbtech;
    
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import javax.swing.JFrame;
    import org.psnbtech.GameBoard.TileType;
    import org.psnbtech.Snake.Direction;
    
    
    public class Engine extends KeyAdapter {
    
    	private static final int UPDATES_PER_SECOND = 15;
    	
    	private static final Font FONT_SMALL = new Font("Arial", Font.BOLD, 20);
    	
    	private static final Font FONT_LARGE = new Font("Arial", Font.BOLD, 40);
    		
    	public Canvas canvas;
    	
    	public GameBoard board;
    	
    	public Snake snake;
    	
    	public int score;
    	
    	public boolean gameOver;
           
    				
    	public Engine(Canvas canvas) {
                    this.canvas = canvas;
            	this.board = new GameBoard();
    		this.snake = new Snake(board);
    		
    		resetGame();
    		
    		canvas.addKeyListener(this);
                    //new Engine(canvas).startGame();
    	}
    
    	
    	public void startGame() {
    		canvas.createBufferStrategy(2);
    		
    		Graphics2D g = (Graphics2D)canvas.getBufferStrategy().getDrawGraphics();
    		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    		
    		long start = 0L;
    		long sleepDuration = 0L;
    		while(true) {
    			start = System.currentTimeMillis();
    
    			update();
    			render(g);
    
    			canvas.getBufferStrategy().show();
    
    			g.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
    			
    			sleepDuration = (1500L / UPDATES_PER_SECOND) - (System.currentTimeMillis() - start);
    
    			if(sleepDuration > 0) {
    				try {
    					Thread.sleep(sleepDuration);
    				} catch(Exception e) {
                                        e.printStackTrace();
    				}
    			}
    		}
    	}
                
    	public void update() {
    		if(gameOver || !canvas.isFocusable()) {
    			return;
    		}
    		TileType snakeTile = snake.updateSnake();
    		if(snakeTile == null || snakeTile.equals(TileType.SNAKE)) {
    			gameOver = true;
    		} else if(snakeTile.equals(TileType.FRUIT)) {
    			score += 10;
    			spawnFruit();
    		}
    	}
    	
    	public void render(Graphics2D g) {
    		board.draw(g);
    		
    		g.setColor(Color.WHITE);
    		
    		if(gameOver) {
    			g.setFont(FONT_LARGE);
    			String message = new String("Your Score: " + score);
    			g.drawString(message, canvas.getWidth() / 2 - (g.getFontMetrics().stringWidth(message) / 2), 250);
    			
    			g.setFont(FONT_SMALL);
    			message = new String("Press Enter to Restart the Game");
    			g.drawString(message, canvas.getWidth() / 2 - (g.getFontMetrics().stringWidth(message) / 2), 350);
    		} else {
    			g.setFont(FONT_SMALL);
    			g.drawString("Score:" + score, 10, 20);
    		}
    	}
    	
    	public void resetGame() {
    		board.resetBoard();
    		snake.resetSnake();
    		score = 0;
    		gameOver = false;
    		spawnFruit();
    	}
    	
    	public void spawnFruit() {
    		int random = (int)(Math.random() * ((GameBoard.MAP_SIZE * GameBoard.MAP_SIZE) - snake.getSnakeLength())); // if '*' replace by '/' then only one fruit is there for snake
    		
    		int emptyFound = 0;
    		int index = 0;
    		while(emptyFound < random) {
    			index++;
    			if(board.getTile(index % GameBoard.MAP_SIZE, index / GameBoard.MAP_SIZE).equals(TileType.EMPTY)) { // if '/' replaced by '*' then nothing displays on the board 
    				emptyFound++;
    			}
    		}
    		board.setTile(index % GameBoard.MAP_SIZE, index / GameBoard.MAP_SIZE, TileType.FRUIT); // it also show nothing when replacing '/' by '/' 
    	}
    	
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if((e.getKeyCode() == KeyEvent.VK_UP)||(e.getKeyCode() == KeyEvent.VK_W)) {
    			snake.setDirection(Direction.UP);
    		}
    		if((e.getKeyCode() == KeyEvent.VK_DOWN)||(e.getKeyCode() == KeyEvent.VK_S)) {
    			snake.setDirection(Direction.DOWN);
    		}
    		if((e.getKeyCode() == KeyEvent.VK_LEFT)||(e.getKeyCode() == KeyEvent.VK_A)) {
    			snake.setDirection(Direction.LEFT);
    		}
    		if((e.getKeyCode() == KeyEvent.VK_RIGHT)||(e.getKeyCode() == KeyEvent.VK_D)) {
    			snake.setDirection(Direction.RIGHT);
    		}
    		if(e.getKeyCode() == KeyEvent.VK_ENTER && gameOver) {
    			resetGame();
    		}
    	}
    	
    	     public static void main(String[] args)  {
    		new PlayGame().setVisible(true);
                   
    		/**JFrame frame = new JFrame("SnakeGame");
    		frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    		frame.setResizable(false);
    		
    		Canvas canvas = new Canvas();
    		canvas.setBackground(Color.black);
    		canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
    		
    		frame.getContentPane().add(canvas);
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true); 
    		
    		new Engine(canvas).startGame();*/
      
                    
                 }        
    }
    Second is PlayGame.java

    Code:
    package org.psnbtech;
    
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Dimension;
    import javax.swing.JFrame;
    
    
    public class PlayGame extends javax.swing.JDialog {
    
       
        public PlayGame(java.awt.Frame parent, boolean modal) {
            super(parent, modal);
            initComponents();
        }
     public PlayGame() {
            initComponents();
           
        }
        
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            jButton1 = new javax.swing.JButton();
            jButton2 = new javax.swing.JButton();
            jButton3 = new javax.swing.JButton();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    
            jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/psnbtech/play.png"))); // NOI18N
            jButton1.setText("Play");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
    
            jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/psnbtech/GUID-4ED364DF-2D44-40F5-9F05-31D451F15EF1-low.png"))); // NOI18N
            jButton2.setText("Rules");
            jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton2ActionPerformed(evt);
                }
            });
    
            jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/psnbtech/exit.png"))); // NOI18N
            jButton3.setText("Exit");
            jButton3.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton3ActionPerformed(evt);
                }
            });
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(223, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGap(74, 74, 74))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(45, 45, 45)
                    .addComponent(jButton1)
                    .addGap(40, 40, 40)
                    .addComponent(jButton2)
                    .addGap(40, 40, 40)
                    .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(53, Short.MAX_VALUE))
            );
    
            pack();
        }// </editor-fold>                        
    
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFrame frame = new JFrame("SnakeGame"); 
        frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        frame.setResizable(false);
     
        Canvas canvas = new Canvas();
        canvas.setBackground(Color.black);
        canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE *GameBoard.TILE_SIZE,GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
     
        frame.add(canvas);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); 
     
        new Engine(canvas).startGame();
        
        }                                        
    
        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
                    this.dispose();
                    new RulesDialog().setVisible(true);
        }                                        
    
        private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
                    System.exit(0);
        }                                        
    
        
       
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JButton jButton2;
        private javax.swing.JButton jButton3;
        // End of variables declaration                   
    }
    Please suggest me with some solution so that it would be helpful to me in order to complete the game

Check out some similar questions!

I just can do it with scanner.. can somebody help me with JFrame code? [ 0 Answers ]

A lecturer has a text file which includes a list of students name and final exam marks. Create a Java program which: • Allows lecturer to add new records to the file • Read all the records from the file • Sort all the records from the file and • Exit from application.

No main method/main method not being accepted. [ 0 Answers ]

Write a Java program that does the following: 1.Creates a grading program based on the Baker College grading standard. You will need to look up the current grade standard. You may use only the letter grades without the +/- signs. A = 93-100 etc. 2. Uses a char array to hold the...

Carrier Natural Gas Furnace main gas valve will not open every call for heat [ 1 Answers ]

We have a Carrier Weather Maker 8000 Natural Gas Furnace not functioning properly. We have replaced pressure switch, hot surface ignitor, flame sensor and control board. It will cycle 3 to 4 times and then not come back on. Is it possibly a bad coil on gas valve?:rolleyes:

Java: using an array from the main in a method [ 2 Answers ]

I have the array names in the main of my program and I want to use it in a method FindName.. How would I wright the method header and the call to the method in the main?


View more questions Search
 

Question Tools Search this Question
Search this Question:

Advanced Search

Add your answer here.