- Home /
ArgumentOutOfRange Exception
Hi guys, I bought the book Unity Game Development by Example Beginner's Guide. And in chapter 5, Making a robot repair game, i keep getting this error
ArgumentOutOfRangeException: Index is less than 0 or more than or equal to the list count. The error is from 12th line inside Start() Function just below the Random.Range code
I dont know how to solve this issue, Please help...
Here is the code..
var cols:int = 4; // the number of columns in the card grid
var rows:int = 4; // the number of rows in the card grid
var totalCards:int = cols*rows; // I think the answer is 16, but I was never good with numbers.
var matchesNeededToWin:int = totalCards * 0.5; // If there are 16 cards, the player needs to find 8 matches to clear the board
var matchesMade:int = 0; // At the outset, the player has not made any matches
var cardW:int = 100; // Each card's width and height is 100 pixels
var cardH:int = 100;
var aCards:Array; // We'll store all the cards we create in this Array
var aGrid:Array; // This array will keep track of the shuffled, dealt cards
var aCardsFlipped:ArrayList; // This array will store the two cards that the player flips over
var playerCanClick:boolean; // We'll use this flag to prevent the player from clicking buttons when we don't want him to
var playerHasWon:boolean = false; // Store whether or not the player has won. This should probably start out false :)
function Start()
{
playerCanClick = true; // We should let the player play, don't you think?
// Initialize the arrays as empty lists:
aCards = new Array();
aGrid = new Array();
aCardsFlipped = new ArrayList();
for(var i=0; i<rows; i++)
{
aGrid[i] = new Array(); // Create a new, empty array at index i
for(var j=0; j<cols; j++)
{
var someNum:int = Random.Range(0,aCards.length);
aGrid[i][j] = aCards[someNum];
aCards.RemoveAt(someNum);
}
}
BuildDeck();
}
class Card extends System.Object
{
var isFaceUp:boolean = false;
var isMatched:boolean = false;
var img:String;
function Card(img:String)
{
this.img = img;
}
}
function OnGUI ()
{
GUILayout.BeginArea (Rect (0,0,Screen.width,Screen.height));
BuildGrid();
GUILayout.EndArea();
print("building grid!");
}
function BuildGrid()
{
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
for(var i=0; i<rows; i++)
{
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
for(var j=0; j<cols; j++)
{
var card:Object = aGrid[i][j];
if(GUILayout.Button(Resources.Load(card.img),GUILayout.Width(cardW)))
{
Debug.Log(card.img);
}
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
function BuildDeck() {
var totalRobots:int = 4; // we've got four robots to work with
var card:Object; // this stores a reference to a card
for(i=0; i<totalRobots; i++)
{
var aRobotParts : Array = ["Head", "Arm", "Leg"];
for(j=0; j<2; j++)
{
var someNum:int = Random.Range(0, aRobotParts.length);
var theMissingPart:String = aRobotParts[someNum];
aRobotParts.RemoveAt(someNum);
card = new Card("robot" + (i+1) + "Missing" + theMissingPart);
aCards.Add(card);
card = new Card("robot" + (i+1) + theMissingPart);
aCards.Add(card);
}
}
}
Answer by Graham-Dunnett · Sep 15, 2012 at 09:40 PM
Are you meant to call BuildDeck() earlier? The line with the error is :
aGrid[i][j] = aCards[someNum];
and I cannot see where the array aCards get initialised. Your BuildDeck() appears to do this, but you call this function later in the code. So, when you generate the random someNum and then access that entry in the aCards array, the program stops with the error that the aCards array doesn't have a someNum entry.
Thank u very much Graham, I moved the builddeck() function call on top of the for loop and it works fine now... Thanks Again...
Your answer
![](https://koobas.hobune.stream/wayback/20220613081102im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Array index is out of Range!? 1 Answer
Random object, Array index out of range 0 Answers
Simple index out of range question? 1 Answer
Wierd Animation Bug 0 Answers
Simple index out of range question? 1 Answer