Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by aymeric · Jul 30, 2011 at 05:17 PM · hashtablehash

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

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1

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.

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image aymeric · Jul 30, 2011 at 06:49 PM 0
Share

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 ?

avatar image Eric5h5 · Jul 30, 2011 at 07:59 PM 0
Share

No, they're faster. Each entry in a 2D array would represent a location on the playing board.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges