- Home /
Hashtable Bejeweled movement
I have a field with cubes generated from a hash table like bejeweled. When i click a cube, the cube is being removed from the hash table and i remove the object.
I want the cubes above the just removed cube to move down.
This is the code i have:
My code is a bit of a mess because i couldn't remove a key from the hash table in a for each loop. The method remove adds all the id's from the selected cubes to a array list. after that is done the Removegroup function removes the cubes from the hash table.
After that the MoveDown function is called. It adds all the cubes without a cube underneath (exept the bottom row) to a array lists and the method remove, moves all that cubes a position down and calls MoveDown again.
I think the problem is in the Remove function (renaming the cubes position in the hash table)
public Hashtable cubes;
public void Remove ()
{
verwijderGroep.Clear ();
foreach (string id in cubes.Keys)
{
GameObject blokje = (GameObject)cubes[id];
if (blokje.GetComponent<Cube> ().isSelected == true)
{
verwijderGroep.Add (id);
Destroy (blokje);
}
}
RemoveGroup (verwijderGroep);
}
public void RemoveGroup (IEnumerable verwijder)
{
foreach (string id in verwijder)
{
cubes.Remove (id);
}
}
public void Verplaats ()
{
foreach (string id in verwijder)
{
blokje2 = (GameObject)cubes[id];
Vector3 underCube = new Vector3 (blokje2.transform.position.x, blokje2.transform.position.y - 1, blokje2.transform.position.z);
cubes.Remove (id);
cubes.Add (underCube.ToString (), blokje2);
iTween.MoveTo (blokje2, new Vector3 (blokje2.transform.position.x, blokje2.transform.position.y - 1, 0), 1);
}
MoveDown ();
}
public int nogverkeerd = 0;
public void MoveDown ()
{
nogverkeerd = 0;
verwijder.Clear ();
foreach (string id in cubes.Keys)
{
GameObject blokje = (GameObject)cubes[id];
Vector3 underCube = new Vector3 (blokje.transform.position.x, blokje.transform.position.y - 1, blokje.transform.position.z);
if (!cubes.Contains (underCube.ToString ()) && blokje.transform.position.y != 0.0)
{
verwijder.Add (id);
nogverkeerd = 1;
//Debug.Log (id);
}
}
if (nogverkeerd == 1)
Verplaats ();
}
Thanks
Answer by Eric5h5 · Jul 30, 2011 at 05:35 PM
It would simplify things a huge amount if you used a 2D array instead of a hashtable.
How would you do it if i had used a 2d array? i can remove the hashtable and use 2d array if that does work. but aren't 2d arrays slower then hashtables ?
No, they're faster. Each entry in a 2D array would represent a location on the playing board.
Your answer
Follow this Question
Related Questions
Boo.Lang.Hash bug? 0 Answers
Fast nearest neighbour searches 0 Answers
Hashtable problem c# 1 Answer
Converting String to Variable Name 3 Answers
For in a hash table 1 Answer