Please help me ... a NullPointerException appears
here's the codes
import java.util.Random;
public class Dice {
Random r =new Random();
int sides;
//constructor
public Dice(int s){
sides = s;
}
//roll method depending on sides on top
public int roll(){
return r.nextInt(sides-1)+1;
}
}
// end of class
public class Maze {
char [][] maze;
public Maze(int s){
maze=new char[s][s];
for (int x=0; x<s; x++)
for (int y=0; y<s; y++)
maze[x][y]=' ';
}
}
//end of class
public class karaKter {
//Dice needed for initial karakter position in maze
Dice d = new Dice(10);
String name;
String race;
String raceDescription;
// if the Character picked object
Object [] dala=new Object[2];
// decreases per attack. if 0, you lose baby.
int life;
// used for normal attack. to be subtracted from opponent's life
int damage;
//used to determine if how far will the Character move
int speed;
//initial positions
int xpos;
int ypos;
//KaraKter symbol in maze
char symbol;
//variable to determine if KaraKter is dead
boolean isDead;
String [] raceChoice = {"Homo Sapien", "Homo Alien", "Super Goo" , "Enkantado" };
String [] raceDescriptionChoice= { "Tao. with normal human strength. Superpower: Suntok sa buwan (+100 to damage, +100 to life)",
"Alien from another planet. Human-like strength. Superpower: Alien-nation (destroys any target within 9 squares, -50 to life)",
"Gooey-like alien from another planet. Slow creature yet powerful. Superpower: Super Ga-Goo (attack for +100 damage to each target within 9 squares) ",
"Enkanto from planet Earth. calm and fierceful. Superpower: MagikStik (+50 to damage, +200 life)"};
int []lifechoice={100,100,100,100};
int []damagechoice={4,4,4,4};
int []speedchoice={1,2,3,4};
public karaKter(String n,int r){
name=n;
race=raceChoice[r];
raceDescription=raceDescriptionChoice[r];
life=lifechoice[r];
damage=damagechoice[r];
speed=speedchoice[r];
symbol = name.charAt(0);
xpos =d.roll();
ypos =d.roll();
isDead = true;
}
//moves depending on the dice roll on Main Game
public void move(int x, int y){
}
//method to attack and inflict damage, affected by weapon which Character holds
public int attack(){
return d.roll() + 10;
}
//method to use superpower
public void superAttack(){
}
//method to get wounded and decrease life, affected by armor which Character holds
public int getWounded(){
life=life-attack();
return life;
}
}
//end of class
public class Item {
String type;
int cost;
int strength;
boolean isDestroyed = false;
char symbol;
int xpos;
int ypos;
int roll;
}
//end of class
public class Armor extends Item {
int defensePoint;
String [] typechoice = {"chainmail","iorica Segmentata", "plate Armor"};
int [] strengthChoice = {30, 20, 25};
int [] costChoice = {8, 6, 7};
int [] defenseChoice = {20, 30, 25};
public Armor(int i){
type = typechoice[i];
strength = strengthChoice[i];
defensePoint = defenseChoice[i];
cost = costChoice[i];
symbol = type.charAt(0);
}
public int defend(){
return defensePoint;
}
public void getAttacked(int damage){
strength = strength - damage;
if (strength<=0) isDestroyed = true;
}
}
//end of class
public class Weapon extends Item{
Dice d=new Dice(10);
int attackPoint;
String [] typechoice = {"kris","sword", "bolo"};
int [] strengthChoice = {30, 20, 25};
int [] costChoice = {8, 6, 7};
int [] defenseChoice = {20, 30, 25};
public Weapon(int i){
type = typechoice[i];
strength = strengthChoice[i];
attackPoint = defenseChoice[i];
cost = costChoice[i];
symbol = type.charAt(0);
xpos=d.roll();
ypos=d.roll();
}
public int attack(){
return attackPoint;
}
public void getAttacked(int damage){
strength = strength - damage;
if (strength<=0) isDestroyed = true;
}
}
//end of class
import javax.swing.JOptionPane;
public class MainGameV1 {
static karaKter [] kararray = new karaKter[6];
static int karakterCount = 0;
static int armorCount = 0;
static Dice d = new Dice(3);
static Maze m = new Maze(10);
static Dice initpos = new Dice (10);
static Dice movex = new Dice (10);
static Dice movey = new Dice (10);
static Armor [] armorarray = new Armor[3];
static Weapon [] weparray = new Weapon[3];
static Weapon w1 = new Weapon(d.roll()-1);
static Armor a1 = new Armor(d.roll()-1);
public static void main (String []args){
boolean addMore = true;
int pTurn = 0;
int itemturn = 0;
while(addMore){
newkarakter();
String c = JOptionPane.showInputDialog("add Another?(y/n)");
if(c.equalsIgnoreCase("n"))
addMore=false;
if( m.maze[w1.xpos][w1.ypos]==' ' && m.maze[a1.xpos][a1.ypos]==' ') {
w1.xpos=movex.roll();
w1.ypos=movey.roll();
a1.xpos=movex.roll();
a1.ypos=movey.roll();
}
m.maze[w1.xpos][w1.ypos]=w1.symbol;
m.maze[a1.xpos][a1.ypos]=a1.symbol;
printMap();
}
//for putting weapons and armors in the map
while(true){
JOptionPane.showMessageDialog(null," Player " + (pTurn+1) + "\n" + kararray[pTurn].name + "'s turn");
printMap();
for(itemturn=0;itemturn < 3;itemturn++){
armorarray[itemturn].xpos = movex.roll();
armorarray[itemturn].ypos = movey.roll();
m.maze[armorarray[itemturn].xpos][armorarray[itemturn].ypos] = armorarray[itemturn].symbol;
m.maze[weparray[itemturn].xpos][weparray[itemturn].ypos] = weparray[itemturn].symbol;
printMap();
//Condition if Player land on an Armor
if( m.maze[armorarray[itemturn].xpos][armorarray[itemturn].ypos] != ' ' ){
char t = m.maze[armorarray[itemturn].xpos][armorarray[itemturn].ypos];
for(int s=0;s<=armorCount;s++){
char f=m.maze[armorarray[s].xpos][armorarray[s].ypos];
if(f == t && s != itemturn ){
char Armor = armorarray[s].symbol;
printMap();
JOptionPane.showMessageDialog(null,kararray[pTurn].name + " picked up an " + Armor );
break;
}
}
}
//Condition if Player land on a Weapon
if( m.maze[weparray[itemturn].xpos][weparray[itemturn].ypos] != ' ' ){
char t = m.maze[weparray[itemturn].xpos][weparray[itemturn].ypos];
for(int s=0;s<=armorCount;s++){
char f=m.maze[weparray[s].xpos][weparray[s].ypos];
if(f == t && s != itemturn ){
char Weapon = weparray[s].symbol;
printMap();
JOptionPane.showMessageDialog(null,kararray[pTurn].name + " picked up a " + Weapon );
break;
}
}
}
}
//Condition if 2 Players have the same location
if( m.maze[kararray[pTurn].xpos][kararray[pTurn].ypos] != ' ' ){
char t = m.maze[kararray[pTurn].xpos][kararray[pTurn].ypos];
for(int s=0;s<=karakterCount;s++){
char f=m.maze[kararray[s].xpos][kararray[s].ypos];
if(f == t && s != pTurn ){
String Player = kararray[s].name;
printMap();
JOptionPane.showMessageDialog(null,kararray[pTurn].name + " will Battle " + Player + "\n Let THe Fight Begin" );
doBattle(kararray[pTurn].name,Player);
break;
}
}
}
m.maze[kararray[pTurn].xpos][kararray[pTurn].ypos]=kararray[pTurn].symbol;
pTurn++;
printMap();
if(pTurn==karakterCount)
pTurn = 0;
}
}
//prints map and position of characters
public static void printMap(){
System.out.println("---------------------");
for(int x=0; x<10; x++){
for(int y=0;y<10;y++)
System.out.print(m.maze[x][y]+"|");
System.out.println();
System.out.println("---------------------");
}
}
//creates a new character
public static void newkarakter(){
if (karakterCount>5) JOptionPane.showMessageDialog(null, "Karakter capacity exceeded");
else {
kararray[karakterCount] = new karaKter(JOptionPane.showInputDialog("Enter your name, challenger: "),Integer.parseInt(JOptionPane.showInputDialog("Enter your race: \n 1. Homo Sapien\n 2. Homo Alien\n 3. Super Goo\n 4. Enkantado"))-1);
// checks kung may laman yung initial postion ni character sa maze
while(m.maze[kararray[karakterCount].xpos][kararray[karakterCount].ypos]!=' '){
kararray[karakterCount].xpos=initpos.roll();
kararray[karakterCount].ypos=initpos.roll();
}
m.maze[kararray[karakterCount].xpos][kararray[karakterCount].ypos]=kararray[karakterCount].symbol;
}
karakterCount++;
}
public static void doBattle(String P1,String P2){
karaKter Player1=new karaKter(P1,2);
karaKter Player2=new karaKter(P2,3);
Dice Attack=new Dice(10);
int p=Attack.roll();
int p2=Attack.roll();
int life;
int Attack1=Player1.attack() + p;
int Attack2=Player2.attack() + p2;
JOptionPane.showMessageDialog(null,"=====================================In One Corner========================================= " + " \nName : " + P1 + "\nRace : "+ Player1.race + "\nRace Description:"+ Player1.raceDescription + "\nLife :" + Player1.life + "\n==================================In the Other Corner====================================== " + "\nName : " + P2 + "\nRace : "+ Player2.race + "\nRace Description:"+ Player2.raceDescription + "\nLife :" + Player2.life );
while(Player1.isDead && Player2.isDead){
int life1=Player1.getWounded();
int life2=Player2.getWounded();
if(life1<=0||life2<=0){
if(Player1.life !=0 )
JOptionPane.showMessageDialog(null,P1+ " Wins");
else{
JOptionPane.showMessageDialog(null,P2 + " Wins");
JOptionPane.showMessageDialog(null,"========================================== Lets Return To THe Map ==========================================");
break;
}
JOptionPane.showMessageDialog(null,Player1 + " Attacks " + Player2 + "\nDamage : " + Player1.attack() + "\n" + Player2 + "'s life is now " + Player2.getWounded() + "\n============================================\n " + Player2 + " Attacks " + Player1 + "\nDamage : " + Player2.attack() + "\n" + Player1 + "'s life is now " + Player1.getWounded() );
} //
}
}
}
//end of class
//please help me..why when I run the MainGameV1 class, a NullPointerException appears?please solve this error..tnx