Link to home
Start Free TrialLog in
Avatar of Tom Knowlton
Tom KnowltonFlag for United States of America

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].AssignAsNewMasterRobot(player1);  <<<<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.Container 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.Form1_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.WriteLine("gamePieceArray[" + 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.WriteLine(gamePieceArray[i,j].DisplayImage());
                        }
                  }
                  
            }

            public void InitNewGame(string player1, string player2)
            {
                  gamePieceArray[0,0].AssignAsNewMasterRobot(player1);
                  gamePieceArray[0,1].AssignAsNewEmpty();
                  gamePieceArray[0,2].AssignAsNewMedic(player1);
                  gamePieceArray[0,3].AssignAsNewEmpty();
                  gamePieceArray[0,4].AssignAsNewEmpty();
                  gamePieceArray[0,5].AssignAsNewEmpty();
                  gamePieceArray[0,6].AssignAsNewEmpty();
                  gamePieceArray[0,7].AssignAsNewEmpty();
                  gamePieceArray[0,8].AssignAsNewEmpty();
                  gamePieceArray[0,9].AssignAsNewEmpty();
                  gamePieceArray[1,0].AssignAsNewEmpty();
                  gamePieceArray[1,1].AssignAsNewMedic(player1);
                  gamePieceArray[1,2].AssignAsNewDestroyer(player1);
                  gamePieceArray[1,3].AssignAsNewEngineer(player1);
                  gamePieceArray[1,4].AssignAsNewEmpty();
                  gamePieceArray[1,5].AssignAsNewEmpty();
                  gamePieceArray[1,6].AssignAsNewEmpty();
                  gamePieceArray[1,7].AssignAsNewEmpty();
                  gamePieceArray[1,8].AssignAsNewWall();
                  gamePieceArray[1,9].AssignAsNewEmpty();
                  gamePieceArray[2,0].AssignAsNewMedic(player1);
                  gamePieceArray[2,1].AssignAsNewDestroyer(player1);
                  gamePieceArray[2,2].AssignAsNewEmpty();
                  gamePieceArray[2,3].AssignAsNewEmpty();
                  gamePieceArray[2,4].AssignAsNewEmpty();
                  gamePieceArray[2,5].AssignAsNewEmpty();
                  gamePieceArray[2,6].AssignAsNewEmpty();
                  gamePieceArray[2,7].AssignAsNewEmpty();
                  gamePieceArray[2,8].AssignAsNewEmpty();
                  gamePieceArray[2,9].AssignAsNewEmpty();
                  gamePieceArray[3,0].AssignAsNewEmpty();
                  gamePieceArray[3,1].AssignAsNewEmpty();
                  gamePieceArray[3,2].AssignAsNewEmpty();
                  gamePieceArray[3,3].AssignAsNewEmpty();
                  gamePieceArray[3,4].AssignAsNewEmpty();
                  gamePieceArray[3,5].AssignAsNewEmpty();
                  gamePieceArray[3,6].AssignAsNewEmpty();
                  gamePieceArray[3,7].AssignAsNewEmpty();
                  gamePieceArray[3,8].AssignAsNewEmpty();
                  gamePieceArray[3,9].AssignAsNewEmpty();
                  gamePieceArray[4,0].AssignAsNewEmpty();
                  gamePieceArray[4,1].AssignAsNewEmpty();
                  gamePieceArray[4,2].AssignAsNewEmpty();
                  gamePieceArray[4,3].AssignAsNewEmpty();
                  gamePieceArray[4,4].AssignAsNewEmpty();
                  gamePieceArray[4,5].AssignAsNewEmpty();
                  gamePieceArray[4,6].AssignAsNewEmpty();
                  gamePieceArray[4,7].AssignAsNewEmpty();
                  gamePieceArray[4,8].AssignAsNewEmpty();
                  gamePieceArray[4,9].AssignAsNewEmpty();
                  gamePieceArray[5,0].AssignAsNewEmpty();
                  gamePieceArray[5,1].AssignAsNewEmpty();
                  gamePieceArray[5,2].AssignAsNewEmpty();
                  gamePieceArray[5,3].AssignAsNewEmpty();
                  gamePieceArray[5,4].AssignAsNewEmpty();
                  gamePieceArray[5,5].AssignAsNewEmpty();
                  gamePieceArray[5,6].AssignAsNewEmpty();
                  gamePieceArray[5,7].AssignAsNewEmpty();
                  gamePieceArray[5,8].AssignAsNewEmpty();
                  gamePieceArray[5,9].AssignAsNewEmpty();
                  gamePieceArray[6,0].AssignAsNewEmpty();
                  gamePieceArray[6,1].AssignAsNewEmpty();
                  gamePieceArray[6,2].AssignAsNewEmpty();
                  gamePieceArray[6,3].AssignAsNewEmpty();
                  gamePieceArray[6,4].AssignAsNewEmpty();
                  gamePieceArray[6,5].AssignAsNewEmpty();
                  gamePieceArray[6,6].AssignAsNewEmpty();
                  gamePieceArray[6,7].AssignAsNewEmpty();
                  gamePieceArray[6,8].AssignAsNewEmpty();
                  gamePieceArray[6,9].AssignAsNewEmpty();
                  gamePieceArray[7,0].AssignAsNewEmpty();
                  gamePieceArray[7,1].AssignAsNewEmpty();
                  gamePieceArray[7,2].AssignAsNewEmpty();
                  gamePieceArray[7,3].AssignAsNewEmpty();
                  gamePieceArray[7,4].AssignAsNewEmpty();
                  gamePieceArray[7,5].AssignAsNewEmpty();
                  gamePieceArray[7,6].AssignAsNewEmpty();
                  gamePieceArray[7,7].AssignAsNewEmpty();
                  gamePieceArray[7,8].AssignAsNewEmpty();
                  gamePieceArray[7,9].AssignAsNewEmpty();
                  gamePieceArray[8,0].AssignAsNewEmpty();
                  gamePieceArray[8,1].AssignAsNewEmpty();
                  gamePieceArray[8,2].AssignAsNewEmpty();
                  gamePieceArray[8,3].AssignAsNewEmpty();
                  gamePieceArray[8,4].AssignAsNewEmpty();
                  gamePieceArray[8,5].AssignAsNewEmpty();
                  gamePieceArray[8,6].AssignAsNewEmpty();
                  gamePieceArray[8,7].AssignAsNewEmpty();
                  gamePieceArray[8,8].AssignAsNewEmpty();
                  gamePieceArray[8,9].AssignAsNewEmpty();
                  gamePieceArray[9,0].AssignAsNewEmpty();
                  gamePieceArray[9,1].AssignAsNewEmpty();
                  gamePieceArray[9,2].AssignAsNewEmpty();
                  gamePieceArray[9,3].AssignAsNewEmpty();
                  gamePieceArray[9,4].AssignAsNewEmpty();
                  gamePieceArray[9,5].AssignAsNewEmpty();
                  gamePieceArray[9,6].AssignAsNewEmpty();
                  gamePieceArray[9,7].AssignAsNewEmpty();
                  gamePieceArray[9,8].AssignAsNewEmpty();
                  gamePieceArray[9,9].AssignAsNewEmpty();
            }
      }
}




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(string 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(string 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";
            }
      }
}
Avatar of Tom Knowlton
Tom Knowlton
Flag of United States of America image

ASKER

UPDATE:


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?
SOLUTION
Avatar of dsabo
dsabo
Flag of Venezuela, Bolivarian Republic of image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial