erros and bugs

I’m trying to make 2d roguelike game but somehow the image looks scary. here are the error’s that I received from the console.

/Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:633)
BoardManager.RandomPosition () (at Assets/Script/BoardManager.cs:69)
BoardManager.LayoutObjectAtRandom (UnityEngine.GameObject tileArray, Int32 minimum, Int32 maximum) (at Assets/Script/BoardManager.cs:79)
BoardManager.SetupScene (Int32 level) (at Assets/Script/BoardManager.cs:90)
GameManager.InitGame () (at Assets/Script/GameManager.cs:30)
GameManager.Awake () (at Assets/Script/GameManager.cs:25)

all of my sprites are 254x254.

using UnityEngine;
using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;

public class BoardManager : MonoBehaviour 
	{
		[Serializable]
		public class Count
		{
			public int minimum;
			public int maximum;
		
			public Count (int min, int max)
			{
				minimum = min;
				maximum = max;
			}
	}

		public int columns = 8;
		public int rows = 8;
		public Count wallCount = new Count (5,9);
		public Count foodCount = new Count (1,5);
		public GameObject exit;
		public GameObject[] floorTiles;
		public GameObject[] wallTiles;
		public GameObject[] foodTiles;
		public GameObject[] enemyTiles;
		public GameObject[] outerWallTiles;

		private Transform boardHolder;
		private List <Vector3> gridPositions = new List<Vector3>();

		void InitialiseList()
		{
			gridPositions.Clear ();
			for (int x =1; x < columns - 1; x++)
			{
				for (int y = 1; y < rows - 1;y++)
				{
					gridPositions.Add(new Vector3(x,y,0f));
				}
			}
		}

	void BoardSetup()
	{
			boardHolder = new GameObject ("Board").transform;
			for (int x = -1; x < columns + 1; x++)
			{
				for (int y = -1; y < rows + 1; y++)
				{
					GameObject toInstantiate = floorTiles[Random.Range (0, floorTiles.Length)];
					if (x == -1 || x == columns || y == -1 || y == rows)
						toInstantiate = outerWallTiles[Random.Range (0, outerWallTiles.Length)];
					
					GameObject instance = Instantiate(toInstantiate, new Vector3 (x,y,0f), Quaternion.identity) as GameObject;

					instance.transform.SetParent(boardHolder);

				}
			}
	}
	
	Vector3 RandomPosition()
		{
			int randomIndex = Random.Range(0,gridPositions.Count);
			Vector3 randomPosition = gridPositions [randomIndex];
			gridPositions.RemoveAt (randomIndex);
			return randomPosition;
		}

		void LayoutObjectAtRandom(GameObject[] tileArray, int minimum, int maximum)
		{
			int objectCount = Random.Range (minimum, maximum + 1);
			for (int i = 0; i < objectCount; i++)
			{
				Vector3 randomPosition = RandomPosition();
				GameObject tileChoice = tileArray[Random.Range (0, tileArray.Length)];
				Instantiate (tileChoice, randomPosition, Quaternion.identity);
			}
		
		}

		public void SetupScene (int level)
		{
			BoardSetup ();
			InitialiseList ();
			LayoutObjectAtRandom(wallTiles, wallCount.minimum, wallCount.maximum);
			LayoutObjectAtRandom(foodTiles, foodCount.minimum, foodCount.maximum);	
			int enemyCount = (int)Mathf.Log (level, 2f);
			LayoutObjectAtRandom(enemyTiles, enemyCount, enemyCount);
			Instantiate (exit, new Vector3 (columns - 1, rows - 1, 0f), Quaternion.identity);

		}
	}

also I think my code is perfectly fine.

Doing a Google search for your error’s line number and class

System.Collections.Generic/List.cs:633

shows it’s an array out of bounds/range exception as you can probably see on your machine from the complete error message that you should’ve pasted here :).

The stacktrace also shows it’s coming from inside your method
Vector3 RandomPosition()
from the line
Vector3 randomPosition = gridPositions [randomIndex];.

The only way this line can throw an out of bounds exception (since you are doing int randomIndex = Random.Range(0,gridPositions.Count);) is if the list doesn’t have any items in it ( gridPositions.Count == 0 )

Since this is all the code we can see and we can’t see how you are calling this method, we can’t really tell what is the root of your problem.

One thing sticks out for me though, You are populating gridPositions with for loops

for (int x =1; x < columns - 1; x++)
{
     for (int y = 1; y < rows - 1;y++)
     {
         gridPositions.Add(new Vector3(x,y,0f));

This means that with columns/rows set to 2 for example, you would be adding zero items to the list.