PDA

View Full Version : Java Applet



4th gen
05-03-2004, 06:59 AM
Was just wondering how hard it'd be to make an applet out of this game? It's three classes (GUI, Extended JButton and randomiser class). Thanks in advance for any help/advice :)

It's pretty messy, sorry :(



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

public class mineBoard extends JFrame implements MouseListener, ActionListener
{
Border loweredbevel;    
mineRandomiser random1;
int numRows = 10;    
int numColumns = 10;
int numMines = 100;
EJButton [][] mineGUI;
int noFlags = numMines;
   protected JLabel numberFlags, numberFlags2, gameResult;
   JMenuBar menubar1;
   JMenuItem beginner, amateur, expert;
   JMenu menu1;
protected JPanel p1, p2, p3;
protected JButton newGame, quitButton, revealGame;

   public mineBoard(String title, int numberRows, int numberColumns, int numberMines)
{  
 numRows = numberRows; // Initialises the number of rows of buttons according to skill level selected
 numColumns = numberColumns; // Initalises number of columns according to skill level
 numMines = numberMines; // Initialises number of mines according to skill level
 
 this.setTitle(title); // Sets title of the board according to skill level
 p1 = new JPanel(); // New panel for displaying EJButtons
 p1.setLayout(new GridLayout(numRows, numColumns)); // Sets the layout of the Panel in a grid layout according to dimensions of grid

 mineGUI = new EJButton[numRows][numColumns]; // Creates an instance of the mineGUI with dimensions specified through skill level selected
 
 for(int i=0; i<numRows; i++)
 {
  for(int j=0; j<numColumns; j++)
  {
   mineGUI[i][j] = new EJButton(i, j); // Fills array with EJButtons
   mineGUI[i][j].setPreferredSize(new Dimension(30, 30)); // Sets buttons to 30x30 pixels
   mineGUI[i][j].addMouseListener(this); // Adds mouse listener to EJButtons
   mineGUI[i][j].setFlagged(false); // Sets the newly created EJButtons to be unflagged
   p1.add(mineGUI[i][j]); // Add newly created button to JPanel
  }
 }
 
 menubar1 = new JMenuBar();
    this.setJMenuBar(menubar1);
    menu1 = new JMenu("Game");
    beginner = new JMenuItem("Beginner");
    beginner.addActionListener(this);
    menu1.add(beginner);
    amateur = new JMenuItem("Amateur");
    amateur.addActionListener(this);
    menu1.add(amateur);
    expert = new JMenuItem("Expert");
    expert.addActionListener(this);
    menu1.add(expert);
    menubar1.add(menu1);
 
    random1 = new mineRandomiser(numRows, numColumns, numMines); // Instance of the mineRandomiser class, passing in number of rows, columns and mines
 random1.mineRandom(); // Randomises mine position in the mineRandomiser class
 
 p2 = new JPanel();
 p2.setLayout(new GridLayout(1, 1));
 
 newGame = new JButton("New Game");
 newGame.addActionListener(this);
 quitButton = new JButton("Quit");
 quitButton.addActionListener(this);
 
       p2.add(newGame);
       p2.add(quitButton);
       
       p3 = new JPanel();
       p3.setLayout(new GridLayout(2, 1));
       
       numberFlags = new JLabel();
       numberFlags.setText("Flags: " +noFlags);
       
       revealGame = new JButton("Reveal Game");
       revealGame.addActionListener(this);
       
       gameResult = new JLabel("Win/Lose");
       
       p3.add(numberFlags);
       p3.add(revealGame);
       p3.add(gameResult);
 
 this.getContentPane().add("North", p3);
 this.getContentPane().add("Center", p1);
 this.getContentPane().add("South", p2);
 this.pack();
}

public static void main(String args[])
   {
    mineBoard board1 = new mineBoard("Board", 10, 10, 10); // Creates instance of GUI, with title "Board", 10 rows, 10 columns and 10 mines
    board1.setLocation(100, 100);  // Sets the board position (100x100 pixels in from top left hand corner
    board1.setVisible(true); // Shows the board
   
   }

   public void mouseClicked(MouseEvent event)
   {
       EJButton button = (EJButton)event.getSource();
       int x = button.getxCo(); // Sets variable x to be the x co-ordinate of the clicked button
       int y = button.getyCo(); // Sets variable y to be y co-ordinate of clicked button
       
       if(event.getButton() == MouseEvent.BUTTON1) // If the user clicked with the left mouse button
        leftClicked(x, y); // Pass x and y to the left clicked method
       else if(event.getButton() == MouseEvent.BUTTON3) // If the user clicked with right mouse button
        rightClicked(x, y); // Pass y to right clicked method  
   }
   public void mouseReleased(MouseEvent event){}
   public void mousePressed(MouseEvent event){}
   public void mouseExited(MouseEvent event){}
   public void mouseEntered(MouseEvent event){}
   
   public void leftClicked(int iPos3, int jPos3)
   {
    if(!mineGUI[iPos3][jPos3].isFlagged()) // If the clicked button is not flagged
    {
     mineGUI[iPos3][jPos3].setBorder(loweredbevel); // Set the clicked button to look pressed down
     if(random1.isMine(iPos3, jPos3)) // If the clicked button is a mine
     {
         revealMines(); // Show the position of all the mines
         for(int i=0; i<numRows; i++)
    for(int j=0; j<numColumns; j++)
    {
     mineGUI[i][j].setEnabled(false); // Set all buttons to be disabled
     mineGUI[i][j].removeMouseListener(this); // Remove mouselisteners from all buttons
     revealGame.removeActionListener(this); // Remove actionlistener from "Reveal Game" button
    }
        }
        else // If the button clicked is not flagged
        {
        // Set the text on the button to be the number of mines around the clicked button
        mineGUI[iPos3][jPos3].setText(String.valueOf(random1.countMines(iPos3, jPos3, numRows, numColumns)));
        mineGUI[iPos3][jPos3].removeMouseListener(this); // Remove mouselistener from clicked button
        mineGUI[iPos3][jPos3].setEnabled(false); // Set clicked button disabled
           }
       }
   }
 
   public void rightClicked(int iPos4, int jPos4)
   {
    if(mineGUI[iPos4][jPos4].isFlagged) // If the clicked button is flagged
    {
     mineGUI[iPos4][jPos4].setFlagged(false); // Set the clicked button to be not flagged
     mineGUI[iPos4][jPos4].setText(""); // Remove the "F" (denoting "Flag" from button
     noFlags++; // Increment the number of flags remaining by one
     numberFlags.setText("Flags remaining: " + noFlags); // Show the user the updated number of flags remaining
    }
    else
    {
     mineGUI[iPos4][jPos4].setFlagged(true); // Set the clicked button to be flagged
     mineGUI[iPos4][jPos4].setText("F"); // Set clicked button text to "F" (signifying "Flagged")
     noFlags--; // Decrement number of flags remaining by one
     numberFlags.setText("Flags remaining: " + noFlags); // Show user num of flags left
       }
   }
   
public void actionPerformed(ActionEvent event)
{
 if(event.getSource() == newGame) // If the user clicks on the "New Game" button
 {
  this.dispose(); // Get rid of the current instance of the GUI
  random1 = new mineRandomiser(numRows, numColumns, numMines); // New instance of mineRandomiser class
  random1.mineRandom(); // Randomise mine positions
  mineBoard board1 = new mineBoard("Board", 10, 10, 100);
     board1.setLocation(100, 100);
     board1.setVisible(true);
 }
 else if(event.getSource() == quitButton) // If the user clicks on the "Quit" button
 {
  this.dispose(); // Get rid of current instance of GUI
  System.exit(0); // Exit the game
 }
 else if(event.getSource() == revealGame && noFlags == 0) // If user clicks on "Reveal game" button and there are no flags remaining
 {
  if(reveal()) // If the user has placed all the flags correctly
   gameResult.setText("Congratulations"); // Tell them they've won
  else // If the user hasn't set the flags correctly
   gameResult.setText("Bad luck, try again"); // Tell them they've lost
   
  for(int i=0; i<numRows; i++)
    for(int j=0; j<numColumns; j++)
    {
     mineGUI[i][j].setEnabled(false); // Set all buttons disabled
     mineGUI[i][j].removeMouseListener(this); // Remove mouse listeners from all buttons
     revealGame.removeActionListener(this); // Remove actionlistener from "Reveal game" button
    }
 }
 else if(event.getSource() == beginner) // If the user clicks on "Beginner" game
 {
  this.dispose(); // Get rid of current instance of GUI
  random1 = new mineRandomiser(10, 10, 100); // New instance of MineRandomiser class
  random1.mineRandom(); // Ramdomise mine position
  mineBoard board1 = new mineBoard("Beginner Board", 10, 10, 100); // New instance of GUI
     board1.setLocation(75, 75);
     board1.setVisible(true);
    }

    else if(event.getSource() == amateur)
    {
     this.dispose(); // As above (with different number of rows, columns, mines and a different title)
  random1 = new mineRandomiser(15, 15, 50);
  random1.mineRandom();
  mineBoard board1 = new mineBoard("Amateur Board", 15, 15, 50);
     board1.setLocation(75, 75);
     board1.setVisible(true);
    }
    else if(event.getSource() == expert)
    {
     this.dispose(); // As above...
  random1 = new mineRandomiser(20, 20, 200);
  random1.mineRandom();
  mineBoard board1 = new mineBoard("Expert Board", 20, 20, 200);
     board1.setLocation(75, 75);
     board1.setVisible(true);
    }
   }

public boolean reveal()
{
 boolean winner = true; // Create a new boolean value called winner and set it true
 
 for(int i = 0; i < numRows; i++)
 {
  for(int j = 0; j < numColumns; j++)
  {
   // If button is not flagged and is a mine
   if(((EJButton) mineGUI[i][j]).isFlagged() && !random1.isMine(i, j))
    winner = false; // Set boolean winner to false (i.e. game is lost)
  }      
 }
   
 return winner;
}

public void revealMines()
{
 for(int i = 0; i < numRows; i++)
 {
  for(int j = 0; j < numColumns; j++)
  {
   if(random1.isMine(i, j))
    mineGUI[i][j].setText("M"); // Print "M" on all mines
  }
 }
   }
}




public class mineRandomiser
{
int numRows;
int numColumns;
int numMines;
int [][] mineField;

public mineRandomiser()
{
 numRows = 0;
 numColumns = 0;
 numMines = 0;
}

public mineRandomiser(int nR, int nC, int nM)
{
 numRows = nR;
 numColumns = nC;
 numMines = nM;
 mineField = new int [nR][nC];
   }
   
public void mineRandom()
{
 for(int h = 0; h < numMines; h++) // Continue placing mines until the desired number has been reached
 {
     int i = 0, j = 0;
     i = (int) (Math.random()*numRows); // Generate random i (between 0 and end of row)
  j = (int) (Math.random()*numColumns); // Generate random j (between 0 and end of column)
 
  while(mineField[i][j]==1) // While the randomly generated square is a mine
  {
   i = (int) (Math.random()*numRows); // Generate a new square
      j = (int) (Math.random()*numColumns);
  }
 
  mineField[i][j] = 1; // Set the random square to be 1 (i.e. make it a mine)
   System.out.println("("+i+", "+j+") is a mine"); // Print to system the position of mine
 }
}

public boolean isMine(int iPos, int jPos)
{
 boolean mine = false;
 
 if(mineField[iPos][jPos]==1)
  mine = true;
 
 return mine;
}

public int countMines(int iClick, int jClick, int nRow, int nCol)
{  
 int numMines2 = 0;
 
 for(int iStart = iClick - 1; iStart <= iClick + 1; iStart++)
 {
  for(int jStart = jClick - 1; jStart <= jClick + 1; jStart++)
  {
   if(iStart >= 0 && iStart < nRow && jStart >= 0 && jStart < nCol)
   {
    if(mineField[iStart][jStart] == 1)
    {
     numMines2++;
    }
   }
  }
   
 }
 return numMines2;  
}
}




import javax.swing.*;

public class EJButton extends JButton
{
protected int xCo, yCo;  
protected boolean isFlagged;

public EJButton()
{
 xCo = 0;
 yCo = 0;
}

public EJButton(int i, int j)
{
 xCo = i;
 yCo = j;
}

public int getxCo()
{
 return xCo;
}

public int getyCo()
{
 return yCo;
}

public void setFlagged(boolean flagged)
{
 isFlagged = flagged;
}

public boolean isFlagged()
{
 return isFlagged;
}
}

Lamsey
05-03-2004, 11:11 AM
Not too difficult but as it's in Swing, anyone viewing it will need a v1.3 or later version of the JRE, meaning that they'll either need the full Java installation or the Java Plug-in (the M$ VM 'supports' v1.1 only).

4th gen
05-03-2004, 11:14 AM
Originally posted by Lamsey@3 May 2004 - 10:11
Not too difficult but as it's in Swing, anyone viewing it will need a v1.3 or later version of the JRE, meaning that they'll either need the full Java installation or the Java Plug-in (the M$ VM 'supports' v1.1 only).
Step-by-step guide for a n00b? Preferably with lots of colourful pictures :rolleyes:

Lamsey
05-03-2004, 11:16 AM
Originally posted by 4th gen+3 May 2004 - 11:14--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (4th gen @ 3 May 2004 - 11:14)</td></tr><tr><td id='QUOTE'> <!--QuoteBegin-Lamsey@3 May 2004 - 10:11
Not too difficult but as it&#39;s in Swing, anyone viewing it will need a v1.3 or later version of the JRE, meaning that they&#39;ll either need the full Java installation or the Java Plug-in (the M&#036; VM &#39;supports&#39; v1.1 only).
Step-by-step guide for a n00b? Preferably with lots of colourful pictures :rolleyes: [/b][/quote]
Understanding Java Applets in general (http://java.sun.com/docs/books/tutorial/applet/index.html)

Understanding Swing Applets (http://java.sun.com/docs/books/tutorial/uiswing/components/applet.html)