Tuesday, May 26, 2015

Java Program - Snakes and Ladders

I have written simple program for Snakes and Ladders in java using java swing. And same i have converted into javascript as well. You can play Snakes and Ladders here. Java source code is given below, you can copy and play in your machine.

Start playing Snakes and Ladders

                   
                   
                   
                   
                   
                   
                   
                   
                   
●●                  


Computer


Java Code

package javaexperts;

import java.awt.Color;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.Random;

public class SnakeAndLadder extends JFrame implements ActionListener{

JLabel lblComp = new JLabel("Computer");
JButton btnYou = new JButton("Play");
JButton newGame = new JButton("New Game");

JLabel lblCompNo = new JLabel("");
JLabel lblYouNo = new JLabel("");

JLabel lblCompPos = new JLabel("");
JLabel lblYouPos = new JLabel("");

HashMap<Integer,Integer> ladder = new HashMap<Integer,Integer>();
HashMap<Integer,Integer> snake = new HashMap<Integer,Integer>();

int youCount = 1;
int compCount = 1;

int w=15,h=15;
int x=0,y=0;

StringBuffer compList = null;
StringBuffer youList = new StringBuffer();

Random dies = new Random();

public SnakeAndLadder()  throws Throwable{
super("SnakeAndLadder");
setLayout(null);
// setLayout(new BorderLayout());
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//getContentPane().setBackground(Color.LIGHT_GRAY);
setBounds(10, 10, 700, 580);
JLabel background=new JLabel(new ImageIcon("E:\\blog\\pgms\\snakesandladders\\a.png"));
background.setBounds(0, -10, 550, 570);
add(background);

btnYou.setBounds(560, 200, 60, 30);
add(btnYou);

lblComp.setBounds(560, 250, 60, 30);
add(lblComp);

lblYouNo.setBounds(640, 200, 60, 30);
lblYouNo.setOpaque(true);
lblYouNo.setBackground(Color.BLUE);
lblYouNo.setForeground(Color.GREEN);
add(lblYouNo);

lblCompNo.setBounds(640, 250, 60, 30);
lblCompNo.setOpaque(true);
lblCompNo.setBackground(Color.RED);
lblCompNo.setForeground(Color.GREEN);
add(lblCompNo);

newGame.setBounds(580, 140, 90, 30);
add(newGame);
coinPosition(1,compCount);
lblCompPos.setBounds(x, y, w, h);
lblCompPos.setOpaque(true);
lblCompPos.setBackground(Color.RED);
background.add(lblCompPos);

coinPosition(2,youCount);
lblYouPos.setBounds(x, y, w, h);
lblYouPos.setOpaque(true);
lblYouPos.setBackground(Color.BLUE);
background.add(lblYouPos);

repaint();

ladder.put(3, 51);
ladder.put(6, 27);
ladder.put(20, 70);
ladder.put(36, 55);
ladder.put(63, 95);
ladder.put(68, 98);

snake.put(25, 5);
snake.put(34, 1);
snake.put(47, 19);
snake.put(65, 52);
snake.put(87, 57);
snake.put(91, 61);
snake.put(99, 69);

newGame.addActionListener(this);
btnYou.addActionListener(this);


}
  public static void main(String args[])  throws Throwable {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new SnakeAndLadder();
  }
  public void actionPerformed(ActionEvent e) {
 if (e.getSource() == newGame) {
 youCount = 1;
 compCount = 1;
 coinPosition(1,compCount);
 lblCompPos.setBounds(x, y, w, h);
 coinPosition(2,youCount);
 lblYouPos.setBounds(x, y, w, h);
 lblYouNo.setText("");
 lblCompNo.setText("");
 btnYou.setVisible(true);
 repaint();
 } else if (e.getSource() == btnYou) {
 compList = new StringBuffer();

 int playAgain = playDies(2);
 coinPosition(2,youCount);
 lblYouPos.setBounds(x, y, w, h);
 repaint();
 if(ladder.containsKey(youCount)) {
 youCount = ladder.get(youCount);
 } else if (snake.containsKey(youCount)){
 youCount = snake.get(youCount);
 }
 coinPosition(2,youCount);
 lblYouPos.setBounds(x, y, w, h);
 repaint();
 if(youCount == 100) {
 btnYou.setVisible(false);
 JOptionPane.showMessageDialog(this, "You win");
 } else if(playAgain == 0) {
 youList = new StringBuffer();
 do {
 playAgain = playDies(1);
 coinPosition(1,compCount);
 lblCompPos.setBounds(x, y, w, h);
 repaint();
 if(ladder.containsKey(compCount)) {
 compCount = ladder.get(compCount);
 } else if (snake.containsKey(compCount)){
 compCount = snake.get(compCount);
 }
 coinPosition(1,compCount);
 lblCompPos.setBounds(x, y, w, h);
 repaint();
 if(compCount == 100) {
 btnYou.setVisible(false);
 JOptionPane.showMessageDialog(this, "Computer win");
 break;
 }

 } while(playAgain == 1);
 }

 }
  }
 
  private int playDies(int player) {
 int playAgain = 0;
 int diesResult = 0;
 while(diesResult == 0) {
 diesResult = dies.nextInt(7);
 }
 if(player == 2){
 youList.append(String.valueOf(diesResult));
 youList.append(",");
 lblYouNo.setText(youList.toString());
 if(youCount+diesResult <= 100) {
 youCount = youCount+diesResult;
 if(diesResult == 1 || diesResult == 5 || diesResult == 6) {
 playAgain = 1;
 }
 }
 } else {
 compList.append(String.valueOf(diesResult));
 compList.append(",");
 lblCompNo.setText(compList.toString());
 if(compCount+diesResult <= 100) {
 compCount = compCount+diesResult;
 if(diesResult == 1 || diesResult == 5 || diesResult == 6) {
 playAgain = 1;
 }
 }
 }
 return playAgain;
  }
 
  private void coinPosition(int compOrYou, int count) {

 int xpos = count%10;
 int ypos = count/10;
 if(xpos == 0) {
 xpos = 10;
 ypos = ypos-1;
 }
 if(compOrYou == 1) {
 x = 5 + (xpos*55) - 55;
 } else {
 x = 25 + (xpos*55) - 55;
 }
 y = 540 - (ypos*57);
  }
}

Tuesday, April 28, 2015

Java Program for Cricket

I have written simple program for cricket in java using java swing. And same i have converted into javascript as well. You can play cricket here. Java source code is given below, you copy and play in your machine and you can enhance as much as possible.

Start playing cricket

              Computer               
Score: 0
Over: 0.0
 
 
              You              
Score: 0
Over: 0.0
 
 



import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;

public class Cricket extends JFrame implements ActionListener{

JLabel lblComp = new JLabel("Computer");
JLabel lblYou = new JLabel("You");
JLabel lblCompScore = new JLabel("Score");
JLabel lblYouScore = new JLabel("Score");
JLabel dispCompScore = new JLabel("0/0");
JLabel dispYouScore = new JLabel("0/0");
JLabel lblCompOver = new JLabel("Over");
JLabel lblYouOver = new JLabel("Over");
JLabel dispCompOver = new JLabel("0");
JLabel dispYouOver = new JLabel("0");

JLabel compResult = new JLabel("");
JLabel youResult = new JLabel("");
JLabel result = new JLabel("");

JButton playCompBtn = new JButton("Play Computer");
JButton playYouBtn = new JButton("Play");
JButton newGame = new JButton("New Game");

int score = 0;
int wick = 0;
int over = 0;
int ball = 0;
int compOrYou = 0;
int compScore = 0;

Random cricketPlay = new Random();

public Cricket()  throws Throwable{
super("Cricket");
setLayout(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(Color.LIGHT_GRAY);
setBounds(10, 10, 600, 400);

newGame.setBounds(200, 10, 150, 25);
newGame.setFont(new Font("Courier New", Font.BOLD, 18));
newGame.setForeground(Color.GRAY);

lblComp.setBounds(80, 50, 100, 25);
lblComp.setFont(new Font("Courier New", Font.BOLD, 18));
lblComp.setForeground(Color.BLUE);

lblCompScore.setBounds(50, 90, 100, 25);
dispCompScore.setBounds(200, 90, 100, 25);
lblCompOver.setBounds(50, 130, 100, 25);
dispCompOver.setBounds(200, 130, 100, 25);

playCompBtn.setBounds(50,200,180,30);
playCompBtn.setFont(new Font("Courier New", Font.BOLD, 18));
playCompBtn.setForeground(Color.RED);


lblYou.setBounds(380, 50, 100, 25);
lblYou.setFont(new Font("Courier New", Font.BOLD, 18));
lblYou.setForeground(Color.BLUE);

lblYouScore.setBounds(350, 90, 100, 25);
dispYouScore.setBounds(500, 90, 100, 25);
lblYouOver.setBounds(350, 130, 100, 25);
dispYouOver.setBounds(500, 130, 100, 25);

playYouBtn.setBounds(350,200,180,30);
playYouBtn.setFont(new Font("Courier New", Font.BOLD, 18));
playYouBtn.setForeground(Color.RED);

compResult.setBounds(60,250,180,30);
compResult.setFont(new Font("Courier New", Font.BOLD, 18));
compResult.setForeground(Color.MAGENTA);

youResult.setBounds(370,250,180,30);
youResult.setFont(new Font("Courier New", Font.BOLD, 18));
youResult.setForeground(Color.MAGENTA);

result.setBounds(250,300,180,30);
result.setFont(new Font("Courier New", Font.BOLD, 18));
result.setForeground(Color.MAGENTA);



add(lblComp);
add(lblCompScore);
add(dispCompScore);
add(lblCompOver);
add(dispCompOver);
add(playCompBtn);

add(lblYou);
add(lblYouScore);
add(dispYouScore);
add(lblYouOver);
add(dispYouOver);
add(playYouBtn);

add(compResult);
add(youResult);
add(result);

add(newGame);
playYouBtn.setVisible(false);
playCompBtn.addActionListener(this);
playYouBtn.addActionListener(this);
newGame.addActionListener(this);
}
  public static void main(String args[])  throws Throwable {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new Cricket();
  }
  public void actionPerformed(ActionEvent e) {
if (e.getSource() == playCompBtn) {
compOrYou = 1;
for(int i=0; i<30; i++) {
playBall();
dispCompScore.setText(score+"/"+wick);
dispCompOver.setText(over+"."+ball);
if(over == 5 || wick ==10) {
compResult.setText("");
break;
}
}
playCompBtn.setVisible(false);
playYouBtn.setVisible(true);
compScore = score;
score = 0;
wick = 0;
over = 0;
ball = 0;
} else if(e.getSource() == playYouBtn) {
compOrYou = 2;
playBall();
dispYouScore.setText(score+"/"+wick);
dispYouOver.setText(over+"."+ball);
} else {
compScore = 0;
compOrYou = 0;
score = 0;
wick = 0;
over = 0;
ball = 0;
dispCompScore.setText(score+"/"+wick);
dispCompOver.setText(over+"."+ball);
dispYouScore.setText(score+"/"+wick);
dispYouOver.setText(over+"."+ball);
compResult.setText("");
youResult.setText("");
result.setText("");
playYouBtn.setVisible(false);
playCompBtn.setVisible(true);
}
  }
  private void playBall() {
int ballResult = cricketPlay.nextInt(8);
ball = ball + 1;
if(ball == 6) {
over = over + 1;
ball = 0;
}
if((ballResult >= 0 && ballResult <=4) || ballResult == 6) {
score = score + ballResult;
if(compOrYou == 1) {
compResult.setText(ballResult+" Run(s)");
} else {
youResult.setText(ballResult+" Run(s)");
}
} else {
wick = wick + 1;
if(compOrYou == 1) {
compResult.setText("Wicket");
} else {
youResult.setText("Wicket");
}
}


if(compOrYou == 2) {
if(over == 5 || wick == 10) {
if(compScore == score) {
result.setText("Match Draw");
} else if(compScore < score) {
result.setText("You Win");
} else {
result.setText("Computer Win");
}
playYouBtn.setVisible(false);
} else if(compScore < score) {
result.setText("You Win");
playYouBtn.setVisible(false);
}
}
  }
}

Saturday, April 11, 2015

Java final access modifier

Purpose of final access modifier knows everyone, that is if any variable is declared as final, value of that variable can not be changed during run time. Normally all the constant variables will be declared in a constant class and that class will be referred throughout the project.
In this case, if any constant value need to be changed which was declared as final, we have to compile all the class files which all are referring that constant class. Because final variables will be referred at the time of compilation only. During run time, final variables will not be referred.

We will see below example,

Constant java file:
     public class JavaConstant {
           public static final int MIN_VAL = 100;
     }

Java file which is using above constant:
     public class JavaPrint {
           public static void main(String args[]) {
                System.out.println(JavaConstant.MIN_VAL);
           }
     }

We will compile both java files and execute the JavaPrint class file.
Output will be 100

Now , we are modifying JavaConstant java file as below
     public class JavaConstant {
           public static final int MIN_VAL = 150;// value modified from 100 to 150
     }

Now, we are compiling JavaConstant java file alone and execute JavaPrint class file.
Output will be 100 again.
Because modified value of MIN_VAL will not be referred during run time since it is declared as final

Now, we will compile JavaPrint java file and execute JavaPrint class file.
Output will be 150