Tom Knowlton
asked on
Object reference not set to an instance of an object.
I have some classes I am writing for a simple board game.
I do not think my gamePiece array is getting initialized correctly and I'm not sure what is needed:
The exception is happening HERE:
public void InitNewGame(string player1, string player2)
{
gamePieceArray[0,0].Assign AsNewMaste rRobot(pla yer1); <<<<EXCEPTION
...
...
...
...
...
}
SOURCE CODE:
========================== ========== ===
Here is my code for the Main Form:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace robotz
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Cont ainer components = null;
public GameWorld gw = new GameWorld();
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(856, 621);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.F orm1_Load) ;
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// for(int i = 0; i < 10;i++)
// {
// for(int j = 0;j<10;j++)
// {
// System.Diagnostics.Debug.W riteLine(" gamePieceA rray[" + i.ToString() + "," + j.ToString() + "].AssignAsNewEmpty();");
// }
// }
gw.InitNewGame("tom","bob" );
gw.DisplayGame();
}
}
}
Here is my code for the Game World class:
using System;
namespace robotz
{
/// <summary>
/// Summary description for GameWorld.
/// </summary>
public class GameWorld
{
//[Row,Col]
public GamePiece[,] gamePieceArray = new GamePiece[10,10];
public GameWorld()
{
//
// TODO: Add constructor logic here
//
}
public void DisplayGame()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
System.Diagnostics.Debug.W riteLine(g amePieceAr ray[i,j].D isplayImag e());
}
}
}
public void InitNewGame(string player1, string player2)
{
gamePieceArray[0,0].Assign AsNewMaste rRobot(pla yer1);
gamePieceArray[0,1].Assign AsNewEmpty ();
gamePieceArray[0,2].Assign AsNewMedic (player1);
gamePieceArray[0,3].Assign AsNewEmpty ();
gamePieceArray[0,4].Assign AsNewEmpty ();
gamePieceArray[0,5].Assign AsNewEmpty ();
gamePieceArray[0,6].Assign AsNewEmpty ();
gamePieceArray[0,7].Assign AsNewEmpty ();
gamePieceArray[0,8].Assign AsNewEmpty ();
gamePieceArray[0,9].Assign AsNewEmpty ();
gamePieceArray[1,0].Assign AsNewEmpty ();
gamePieceArray[1,1].Assign AsNewMedic (player1);
gamePieceArray[1,2].Assign AsNewDestr oyer(playe r1);
gamePieceArray[1,3].Assign AsNewEngin eer(player 1);
gamePieceArray[1,4].Assign AsNewEmpty ();
gamePieceArray[1,5].Assign AsNewEmpty ();
gamePieceArray[1,6].Assign AsNewEmpty ();
gamePieceArray[1,7].Assign AsNewEmpty ();
gamePieceArray[1,8].Assign AsNewWall( );
gamePieceArray[1,9].Assign AsNewEmpty ();
gamePieceArray[2,0].Assign AsNewMedic (player1);
gamePieceArray[2,1].Assign AsNewDestr oyer(playe r1);
gamePieceArray[2,2].Assign AsNewEmpty ();
gamePieceArray[2,3].Assign AsNewEmpty ();
gamePieceArray[2,4].Assign AsNewEmpty ();
gamePieceArray[2,5].Assign AsNewEmpty ();
gamePieceArray[2,6].Assign AsNewEmpty ();
gamePieceArray[2,7].Assign AsNewEmpty ();
gamePieceArray[2,8].Assign AsNewEmpty ();
gamePieceArray[2,9].Assign AsNewEmpty ();
gamePieceArray[3,0].Assign AsNewEmpty ();
gamePieceArray[3,1].Assign AsNewEmpty ();
gamePieceArray[3,2].Assign AsNewEmpty ();
gamePieceArray[3,3].Assign AsNewEmpty ();
gamePieceArray[3,4].Assign AsNewEmpty ();
gamePieceArray[3,5].Assign AsNewEmpty ();
gamePieceArray[3,6].Assign AsNewEmpty ();
gamePieceArray[3,7].Assign AsNewEmpty ();
gamePieceArray[3,8].Assign AsNewEmpty ();
gamePieceArray[3,9].Assign AsNewEmpty ();
gamePieceArray[4,0].Assign AsNewEmpty ();
gamePieceArray[4,1].Assign AsNewEmpty ();
gamePieceArray[4,2].Assign AsNewEmpty ();
gamePieceArray[4,3].Assign AsNewEmpty ();
gamePieceArray[4,4].Assign AsNewEmpty ();
gamePieceArray[4,5].Assign AsNewEmpty ();
gamePieceArray[4,6].Assign AsNewEmpty ();
gamePieceArray[4,7].Assign AsNewEmpty ();
gamePieceArray[4,8].Assign AsNewEmpty ();
gamePieceArray[4,9].Assign AsNewEmpty ();
gamePieceArray[5,0].Assign AsNewEmpty ();
gamePieceArray[5,1].Assign AsNewEmpty ();
gamePieceArray[5,2].Assign AsNewEmpty ();
gamePieceArray[5,3].Assign AsNewEmpty ();
gamePieceArray[5,4].Assign AsNewEmpty ();
gamePieceArray[5,5].Assign AsNewEmpty ();
gamePieceArray[5,6].Assign AsNewEmpty ();
gamePieceArray[5,7].Assign AsNewEmpty ();
gamePieceArray[5,8].Assign AsNewEmpty ();
gamePieceArray[5,9].Assign AsNewEmpty ();
gamePieceArray[6,0].Assign AsNewEmpty ();
gamePieceArray[6,1].Assign AsNewEmpty ();
gamePieceArray[6,2].Assign AsNewEmpty ();
gamePieceArray[6,3].Assign AsNewEmpty ();
gamePieceArray[6,4].Assign AsNewEmpty ();
gamePieceArray[6,5].Assign AsNewEmpty ();
gamePieceArray[6,6].Assign AsNewEmpty ();
gamePieceArray[6,7].Assign AsNewEmpty ();
gamePieceArray[6,8].Assign AsNewEmpty ();
gamePieceArray[6,9].Assign AsNewEmpty ();
gamePieceArray[7,0].Assign AsNewEmpty ();
gamePieceArray[7,1].Assign AsNewEmpty ();
gamePieceArray[7,2].Assign AsNewEmpty ();
gamePieceArray[7,3].Assign AsNewEmpty ();
gamePieceArray[7,4].Assign AsNewEmpty ();
gamePieceArray[7,5].Assign AsNewEmpty ();
gamePieceArray[7,6].Assign AsNewEmpty ();
gamePieceArray[7,7].Assign AsNewEmpty ();
gamePieceArray[7,8].Assign AsNewEmpty ();
gamePieceArray[7,9].Assign AsNewEmpty ();
gamePieceArray[8,0].Assign AsNewEmpty ();
gamePieceArray[8,1].Assign AsNewEmpty ();
gamePieceArray[8,2].Assign AsNewEmpty ();
gamePieceArray[8,3].Assign AsNewEmpty ();
gamePieceArray[8,4].Assign AsNewEmpty ();
gamePieceArray[8,5].Assign AsNewEmpty ();
gamePieceArray[8,6].Assign AsNewEmpty ();
gamePieceArray[8,7].Assign AsNewEmpty ();
gamePieceArray[8,8].Assign AsNewEmpty ();
gamePieceArray[8,9].Assign AsNewEmpty ();
gamePieceArray[9,0].Assign AsNewEmpty ();
gamePieceArray[9,1].Assign AsNewEmpty ();
gamePieceArray[9,2].Assign AsNewEmpty ();
gamePieceArray[9,3].Assign AsNewEmpty ();
gamePieceArray[9,4].Assign AsNewEmpty ();
gamePieceArray[9,5].Assign AsNewEmpty ();
gamePieceArray[9,6].Assign AsNewEmpty ();
gamePieceArray[9,7].Assign AsNewEmpty ();
gamePieceArray[9,8].Assign AsNewEmpty ();
gamePieceArray[9,9].Assign AsNewEmpty ();
}
}
}
Here is my code for the Game Piece class:
using System;
namespace robotz
{
/// <summary>
/// Summary description for GamePiece.
/// </summary>
public class GamePiece
{
public const int MasterRobot = 1;
public const int Medic = 2;
public const int Engineer = 4;
public const int Destroyer = 8;
public const int Wall = 256;
public const int Empty = 512;
public string owner;
public int health;
public int attack_strength;
public string image_filename;
//1 = MR
//2 = MED
//4 = ENG
//8 = DEST
//256 = WALL
//512 = EMPTY
public int piece_type;
public GamePiece()
{
//
// TODO: Add constructor logic here
//
}
public string DisplayImage()
{
return image_filename;
}
public void AssignAsNewMasterRobot(str ing temp_owner)
{
owner = temp_owner;
piece_type = MasterRobot;
attack_strength = 0;
health = 200;
image_filename = "mr.jpg";
}
public void AssignAsNewMedic(string temp_owner)
{
owner = temp_owner;
piece_type = Medic;
attack_strength = 20;
health = 100;
image_filename = "med.jpg";
}
public void AssignAsNewEngineer(string temp_owner)
{
owner = temp_owner;
piece_type = Engineer;
attack_strength = 10;
health = 100;
image_filename = "eng.jpg";
}
public void AssignAsNewDestroyer(strin g temp_owner)
{
owner = temp_owner;
piece_type = Engineer;
attack_strength = 20;
health = 100;
image_filename = "dest.jpg";
}
public void AssignAsNewWall()
{
piece_type = Wall;
image_filename = "wall.jpg";
}
public void AssignAsNewEmpty()
{
piece_type = Empty;
image_filename = "blank.jpg";
}
}
}
I do not think my gamePiece array is getting initialized correctly and I'm not sure what is needed:
The exception is happening HERE:
public void InitNewGame(string player1, string player2)
{
gamePieceArray[0,0].Assign
...
...
...
...
...
}
SOURCE CODE:
==========================
Here is my code for the Main Form:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace robotz
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Cont
public GameWorld gw = new GameWorld();
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(856, 621);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.F
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// for(int i = 0; i < 10;i++)
// {
// for(int j = 0;j<10;j++)
// {
// System.Diagnostics.Debug.W
// }
// }
gw.InitNewGame("tom","bob"
gw.DisplayGame();
}
}
}
Here is my code for the Game World class:
using System;
namespace robotz
{
/// <summary>
/// Summary description for GameWorld.
/// </summary>
public class GameWorld
{
//[Row,Col]
public GamePiece[,] gamePieceArray = new GamePiece[10,10];
public GameWorld()
{
//
// TODO: Add constructor logic here
//
}
public void DisplayGame()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
System.Diagnostics.Debug.W
}
}
}
public void InitNewGame(string player1, string player2)
{
gamePieceArray[0,0].Assign
gamePieceArray[0,1].Assign
gamePieceArray[0,2].Assign
gamePieceArray[0,3].Assign
gamePieceArray[0,4].Assign
gamePieceArray[0,5].Assign
gamePieceArray[0,6].Assign
gamePieceArray[0,7].Assign
gamePieceArray[0,8].Assign
gamePieceArray[0,9].Assign
gamePieceArray[1,0].Assign
gamePieceArray[1,1].Assign
gamePieceArray[1,2].Assign
gamePieceArray[1,3].Assign
gamePieceArray[1,4].Assign
gamePieceArray[1,5].Assign
gamePieceArray[1,6].Assign
gamePieceArray[1,7].Assign
gamePieceArray[1,8].Assign
gamePieceArray[1,9].Assign
gamePieceArray[2,0].Assign
gamePieceArray[2,1].Assign
gamePieceArray[2,2].Assign
gamePieceArray[2,3].Assign
gamePieceArray[2,4].Assign
gamePieceArray[2,5].Assign
gamePieceArray[2,6].Assign
gamePieceArray[2,7].Assign
gamePieceArray[2,8].Assign
gamePieceArray[2,9].Assign
gamePieceArray[3,0].Assign
gamePieceArray[3,1].Assign
gamePieceArray[3,2].Assign
gamePieceArray[3,3].Assign
gamePieceArray[3,4].Assign
gamePieceArray[3,5].Assign
gamePieceArray[3,6].Assign
gamePieceArray[3,7].Assign
gamePieceArray[3,8].Assign
gamePieceArray[3,9].Assign
gamePieceArray[4,0].Assign
gamePieceArray[4,1].Assign
gamePieceArray[4,2].Assign
gamePieceArray[4,3].Assign
gamePieceArray[4,4].Assign
gamePieceArray[4,5].Assign
gamePieceArray[4,6].Assign
gamePieceArray[4,7].Assign
gamePieceArray[4,8].Assign
gamePieceArray[4,9].Assign
gamePieceArray[5,0].Assign
gamePieceArray[5,1].Assign
gamePieceArray[5,2].Assign
gamePieceArray[5,3].Assign
gamePieceArray[5,4].Assign
gamePieceArray[5,5].Assign
gamePieceArray[5,6].Assign
gamePieceArray[5,7].Assign
gamePieceArray[5,8].Assign
gamePieceArray[5,9].Assign
gamePieceArray[6,0].Assign
gamePieceArray[6,1].Assign
gamePieceArray[6,2].Assign
gamePieceArray[6,3].Assign
gamePieceArray[6,4].Assign
gamePieceArray[6,5].Assign
gamePieceArray[6,6].Assign
gamePieceArray[6,7].Assign
gamePieceArray[6,8].Assign
gamePieceArray[6,9].Assign
gamePieceArray[7,0].Assign
gamePieceArray[7,1].Assign
gamePieceArray[7,2].Assign
gamePieceArray[7,3].Assign
gamePieceArray[7,4].Assign
gamePieceArray[7,5].Assign
gamePieceArray[7,6].Assign
gamePieceArray[7,7].Assign
gamePieceArray[7,8].Assign
gamePieceArray[7,9].Assign
gamePieceArray[8,0].Assign
gamePieceArray[8,1].Assign
gamePieceArray[8,2].Assign
gamePieceArray[8,3].Assign
gamePieceArray[8,4].Assign
gamePieceArray[8,5].Assign
gamePieceArray[8,6].Assign
gamePieceArray[8,7].Assign
gamePieceArray[8,8].Assign
gamePieceArray[8,9].Assign
gamePieceArray[9,0].Assign
gamePieceArray[9,1].Assign
gamePieceArray[9,2].Assign
gamePieceArray[9,3].Assign
gamePieceArray[9,4].Assign
gamePieceArray[9,5].Assign
gamePieceArray[9,6].Assign
gamePieceArray[9,7].Assign
gamePieceArray[9,8].Assign
gamePieceArray[9,9].Assign
}
}
}
Here is my code for the Game Piece class:
using System;
namespace robotz
{
/// <summary>
/// Summary description for GamePiece.
/// </summary>
public class GamePiece
{
public const int MasterRobot = 1;
public const int Medic = 2;
public const int Engineer = 4;
public const int Destroyer = 8;
public const int Wall = 256;
public const int Empty = 512;
public string owner;
public int health;
public int attack_strength;
public string image_filename;
//1 = MR
//2 = MED
//4 = ENG
//8 = DEST
//256 = WALL
//512 = EMPTY
public int piece_type;
public GamePiece()
{
//
// TODO: Add constructor logic here
//
}
public string DisplayImage()
{
return image_filename;
}
public void AssignAsNewMasterRobot(str
{
owner = temp_owner;
piece_type = MasterRobot;
attack_strength = 0;
health = 200;
image_filename = "mr.jpg";
}
public void AssignAsNewMedic(string temp_owner)
{
owner = temp_owner;
piece_type = Medic;
attack_strength = 20;
health = 100;
image_filename = "med.jpg";
}
public void AssignAsNewEngineer(string
{
owner = temp_owner;
piece_type = Engineer;
attack_strength = 10;
health = 100;
image_filename = "eng.jpg";
}
public void AssignAsNewDestroyer(strin
{
owner = temp_owner;
piece_type = Engineer;
attack_strength = 20;
health = 100;
image_filename = "dest.jpg";
}
public void AssignAsNewWall()
{
piece_type = Wall;
image_filename = "wall.jpg";
}
public void AssignAsNewEmpty()
{
piece_type = Empty;
image_filename = "blank.jpg";
}
}
}
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This seemed to do the trick:
public void InitPieces()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
gamePieceArray[i,j] = new GamePiece();
}
}
}
public void InitNewGame(string player1, string player2)
{
InitPieces();
My question now is......is this the CORRECT way to initialize an array of objects?