# Puzzle Game. Need some help

• March 11th, 2012, 09:22 PM
clydefrog
Puzzle Game. Need some help
hi

So i'm doing this project for school but i'm quite literally at a standstill. Let me just briefly tell you what the puzzle is supposed to do, because honestly its really weird.

Its based off of that old game "Drive Ya' Nuts!" (which is a very appropriate name). Basically you have 7 hexagons, with each side being numbered 1 through 6 in any order. You have to assemble it so that each side is touching the side of another hex, with the condition being that the sides of the two hexagons must be of an identical number. Confused? I understand. Here is an image:

http://www.samstoybox.com/toypics/DriveYaNuts2.jpg

Notice the layout, and how the numbers of all the adjacent hexes are matching.

The algorithm is my problem; I cannot for love of all that is sacred, wrap my head around how im going to implement it. The way the program is implemented is that im using a circular linked list to represent each hex (a requirement); this way, i can rotate it very easily. Here is what is working in my program:

-The ability to make hexes
-print the hexes
-rotate the hexes

I know i have to use some sort of recursive method, because i need to be able to backtrack if my sequence of hexes are incorrect and start over. Also each hex can only be used once, so i need a way to somehow know which hexes have already been used. I tried adding all the hexes into an arraylist before passing them through a method; i dont know if thats helpful or not...

Code :

```package project3;   import java.util.ArrayList; import java.util.Iterator;   //circular linked list class Hex { Node head;     Hex() { head = null; }   public void insert(int n) { Node temp = new Node(n); Node current = head;   //if the list is empty, then the new node equal to head if(head == null) { head = temp; head.next = head; System.out.println("hit"); } else { //Starting from head, move through the list until you get to head again while(current.getNext() != head) { current = current.getNext(); } //set the last node's pointer to the new node current.setNext(temp); //set the pointer of the last node back to the first node temp.next = head; } }   public Hex rotate() { Hex rotated = new Hex(); Node current = head;   do { current = current.getNext(); rotated.insert(current.getElement());   } while(current != head);   return rotated; }   //Compare public boolean compareCenter(Hex h1, Hex h2) { Node current1 = h1.head; Node current2 = h2.head; Boolean match = false;   while(match == false) { if(current1.getElement() == current2.getElement()) { match = true; } else { h2 = h2.rotate(); } }   return true;   }   /*public boolean compareSides(Hex h1, Hex h2) {   }*/   //Board public void Board(ArrayList<Hex> hexList, int[] use, int[] order) {   }   //Assemble public static void Assemble(ArrayList<Hex> hexList) //int[] use, int[]pos) { Iterator<Hex> itr = hexList.iterator();   while(itr.hasNext()) { System.out.println(itr.next()); } }         //node class class Node { int element; Node next;   Node() {   }   Node(int element) { this.element = element; next = null; }   Node(int element, Node next) { this.element = element; this.next = next; }   public int getElement() { return element; }   public void setElement(int element) { this.element = element; }   public Node getNext() { return next; }   public void setNext(Node next) { this.next = next; } }   public String toString() { Node current = head; String output = ""; for(int i = 0; i < 6; i++) { output += "[" + current.getElement() + "]"; current = current.getNext(); } return output; }   }   //MAIN   public class Project3 { public static void main(String[] args) { Hex h1 = new Hex(); h1.insert(1); h1.insert(6); h1.insert(4); h1.insert(2); h1.insert(5); h1.insert(3);   Hex h2 = new Hex(); h2.insert(1); h2.insert(6); h2.insert(5); h2.insert(4); h2.insert(3); h2.insert(2);   Hex h3 = new Hex(); h3.insert(1); h3.insert(4); h3.insert(6); h3.insert(2); h3.insert(3); h3.insert(5);   Hex h4 = new Hex(); h4.insert(1); h4.insert(6); h4.insert(5); h4.insert(3); h4.insert(2); h4.insert(4);   Hex h5 = new Hex(); h5.insert(1); h5.insert(4); h5.insert(3); h5.insert(6); h5.insert(5); h5.insert(2);   Hex h6 = new Hex(); h6.insert(1); h6.insert(2); h6.insert(3); h6.insert(4); h6.insert(6); h6.insert(6);   Hex h7 = new Hex(); h7.insert(1); h7.insert(6); h7.insert(2); h7.insert(4); h7.insert(5); h7.insert(3);   ArrayList<Hex> hexList = new ArrayList<Hex>(); hexList.add(h1); hexList.add(h2); hexList.add(h3); hexList.add(h4); hexList.add(h5); hexList.add(h6); hexList.add(h7);   //System.out.println(hexList);   Hex.Assemble(hexList);   int[] useArray = new int[6]; int[] posArray = new int[6];   for(int i = 0; i < 6; i++) { useArray[i] = 0; posArray[i] = 0; }   /*for(int i = 0; i < 6; i++) { System.out.print(useArray[i]); System.out.print(posArray[i]); }*/     //System.out.println(h1);   /* h1 = h1.rotate();   System.out.println(h1);   h1 = h1.rotate();   System.out.println(h1);*/   }   }```

Honestly, i would never ask such an broad and seemingly general question, but frankly im desperate at this point. I've spent this whole day just trying to make methods that will perform the operation but none of them have taken me far. I'm not asking for someone to program this for me, but i'm sure there are people out there with more experience who can at least guide me or even through out some ideas for me to try. (my face looks exactly like my icon right now)

• March 12th, 2012, 05:28 AM
Mr.777
Re: Puzzle Game. Need some help
• March 12th, 2012, 01:01 PM
clydefrog
Re: Puzzle Game. Need some help
that is an SSCCE i believe.

What do want me to change?
• March 12th, 2012, 01:10 PM
Mr.777
Re: Puzzle Game. Need some help
I want you to provide SSCCE. Well let me make it simple for you.
1. When you run your program, what does it output?
2. If there are errors/exceptions, paste here the full trace.
3. Why is the difference of the resulting output and your expected output?
4. Where exactly you think you are stuck?
• March 12th, 2012, 01:22 PM
clydefrog
Re: Puzzle Game. Need some help
Oh.

1. It will output all the sides of the hexes; there are 7 hexes. it prints them in a row. example: [1][6][4][2][5][3] this is one hex

2. No errors

3 and 4. well, i'm stuck on how i should implement a recursive formula to solve the puzzle. The explaination of the puzzle is given above.

ALSO: i edit my code up top, and added an extra line. it should output correctly now

thank you :)
• March 12th, 2012, 01:31 PM
Mr.777
Re: Puzzle Game. Need some help
Well, i have checked the code and it's output. It is showing something like this.
Quote:

hit
hit
hit
hit
hit
hit
hit
[1][6][4][2][5][3]
[1][6][5][4][3][2]
[1][4][6][2][3][5]
[1][6][5][3][2][4]
[1][4][3][6][5][2]
[1][2][3][4][6][6]
[1][6][2][4][5][3]
Which one is the central hexagon, which one is the first one and so on?
• March 12th, 2012, 01:38 PM
Mr.777
Re: Puzzle Game. Need some help
1. Insert in all the 7 linked lists from 1 to 6. (Ascending Order) Don't hardcode the numbers. This is the actual puzzle, not the hardcoded one.
2. I will recommend you to use Maps instead of linked list.
3. Give the pairs like (T,1),(B,2),(TL,3),(TR,4),(BL,5),(BR,6) where T=top, B=Bottom, R=Right, L=Left
4. Now, place all the six round hexagons and start rotating them one by one, until they get mapped.
5. Now, place the central hexagon and get all the directions which are facing inwards and map them to the central hexagon.

I know this is the difficult task to do but it requires you to think more than i've just said.
• March 12th, 2012, 01:56 PM
clydefrog
Re: Puzzle Game. Need some help
interesting suggestion, thank you.

The way my professor wants it, to be able to enter your OWN hexagons; thats not a problem. I'm just hard coding it for now, to see if i can get it to work. But this opens up the problem that the order you place them in initially, might not work and so it will require me to back track and alter the order. There is a possibility that i will get, no solution.

I remember my professor tossing around a few hints that recursion is the way to go about it. unfortunately linked lists are also a requirement :(

Also, is there a way i can get methods to access variables outside of their scope, without having to pass in 7 linked lists every single time?
• March 12th, 2012, 02:05 PM
Mr.777
Re: Puzzle Game. Need some help
Quote:

Also, is there a way i can get methods to access variables outside of their scope, without having to pass in 7 linked lists every single time?
What do you mean to say?
Quote:

I remember my professor tossing around a few hints that recursion is the way to go about it. unfortunately linked lists are also a requirement
Remember, recursion is not the only solution.
• March 12th, 2012, 02:49 PM
clydefrog
Re: Puzzle Game. Need some help
Quote:

Originally Posted by Mr.777
What do you mean to say?

like for example i call a method A and pass in my 7 linkedlists. Then within that method, i call another method B. Is it possible to access variables defined in method A from method B without having to pass in the variables?

Very simple example:

Code :

```public void MethodA() { int[] anArray = new int[5]; int index = 5; boolean bool = MethodB(index); } public boolean MethodB( int index) { if(anArray[i] == index) { //do something, return boolean } }```

In the above example, is there a way i can access anArray from methodB without passing it through? Something like that...
• March 12th, 2012, 03:14 PM
Mr.777
Re: Puzzle Game. Need some help
In the provided code, NO. But;
Code :

```int[] anArray = new Array[2]; void methodA(){ anArray[0] = 5; } void methodB(){ anArray[1]=6; } void show(){ System.out.println(anArray[0]); System.out.println(anArray[1]); }```