- 3

Help with domino java project

Don't onow how to start

12th Dec 2021, 10:22 AM
Mohammed Amine
Mohammed Amine - avatar
21 Answers
+ 1
I'm sorry, but in my last comment I've made a mistake: In the constructor of class Deck, the creation of the 28 dominoes can be done with 2 for cycles: int z = 0; for (int i = 0; i <= 6; i++) { for(int j = i; j <= 6; j++) { this.dominoes[z] = new Domino(i, j); z++; } } Then if it's the Formula 2, you need to change the if conditions. You can create a HashMap to the values: In the class Deck: private final HashMap<Integer,Integer[]> numberNext = new HashMap<>(); In the Deck constructor: numberNext.put(0,new Integer[]{6,1}); numberNext.put(1,new Integer[]{0,2}); numberNext.put(2,new Integer[]{1,3}); numberNext.put(3,new Integer[]{2,4}); numberNext.put(4,new Integer[]{3,5}); numberNext.put(5,new Integer[]{4,6}); numberNext.put(6,new Integer[]{5,0}); The first element is the before and the last element the after. With this you can define the getDominoesAvailableToPlay(Player player) as: public ArrayList<Domino> getDominoesAvailableToPlay(Player player){ int right = this.dominoesOnTable.get(this.dominoesOnTable.size()-1).getBottomSide(); int left = this.dominoesOnTable.get(0).getTopSide(); ArrayList<Domino> dominoesAvailableToPlay = new ArrayList<>(); for(Domino domino : player.getHand()){ int right_plus = numberNext.get(domino.getBottomSide())[1]; int right_minus = numberNext.get(domino.getBottomSide())[0]; int left_plus = numberNext.get(domino.getTopSide())[1]; int left_minus = numberNext.get(domino.getTopSide())[0]; if(right_minus == right || right_plus == left || left_minus == right || left_plus == left){ dominoesAvailableToPlay.add(domino); } } return dominoesAvailableToPlay; }
15th Dec 2021, 3:11 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 1
You can represent a piece as a Tuple, for that you can create a class Piece with left and rigth as attributes. You can represent the Table as a Deque: https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html Using the Deque you can define that the first is left and last is rigth. So a piece (p) will fit on the left if (p.left == first.left or p.rigth == first.left) and will fit on the right if (p.left == last.rigth or p.rigth == last.rigth) I hope I helped.
12th Dec 2021, 11:11 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 1
I saw your code but I have a question, how do you exactly play domino? I think my version is different. If you have the piece [5/6] shouldn't you be able to put either: [?,5][5,6] or: [5,6][6,?] ?
13th Dec 2021, 12:47 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 1
I made some corrections in the code and there is some things I've notice: 1. @Override has a capital O 2. Don't use import java.util.*, import only what you need. You have a really nice example here: https://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad 3. Try to have the code in english because it's easier to other programmers analise and catch bugs. 4. The identation is really important since it makes easier to read and see if there is curly brackets missing. Here's my version (I only organized and fixed some syntax): https://code.sololearn.com/crPW4Hr7RZtY For the table, as I said earlier, you can use a Deque. A Deque is the mix of a queue and a stack, you can either addFirst and addLast, this is going to make our life easier since the Domino's game you have two sides. If you have any question about the implementation of the Deque I strongly sugest you see the documentation and some examples of how does it work: https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html https://www.softwaretestinghelp.com/deque-in-java/ I also suggest you add a method on the class Joueur to add Dominoes to the ArrayList
13th Dec 2021, 4:00 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 1
Can you explain me better how the score works? I tried to see on your code but it's very confusing, can you give me an example or explain me with words? I did my version of your game the only thing I don't have is the score system since I don't know how does it work... You can see the code here: https://code.sololearn.com/crPW4Hr7RZtY Sorry, I didn't have time to comment, but I tried to use your type of writting and the names you used.
15th Dec 2021, 9:22 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
0
Didnt quite understand
13th Dec 2021, 5:05 AM
Mohammed Amine
Mohammed Amine - avatar
0
I'm sorry I didn't see this was from a project. What's the project name, course and theme?
13th Dec 2021, 9:42 AM
Tomás Ribeiro
Tomás Ribeiro - avatar
13th Dec 2021, 9:45 AM
Mohammed Amine
Mohammed Amine - avatar
0
No if you have [5/6] you play [5/6][0/ 2] or [4/4][5/6]
13th Dec 2021, 12:52 PM
Mohammed Amine
Mohammed Amine - avatar
0
It is like this [0/1][2/3][4/5][6/6][0/3]
13th Dec 2021, 12:53 PM
Mohammed Amine
Mohammed Amine - avatar
0
So i complet it but didn't know how to add this condition can anyone help ??
15th Dec 2021, 6:58 AM
Mohammed Amine
Mohammed Amine - avatar
0
Don't represent the players as an ArrayList, instead use a Circular Linked List: https://www.baeldung.com/java-circular-linked-list https://www.youtube.com/watch?v=0ODSrJcMT54 In the method findPlayerWithDoubleSix from the class Deck, you already have a method on the class Player that can see if the player has the Double Six. for(Player player : this.players) { if (player.findIndexOfDoubleSix() == -1) continue; return player } In the method getDominoesAvailableToPlay(Player player) from the class Deck or either is wrong or you changed the rules. You said the domino [2/4] can match with [5,0] but can’t match with [4,6], but in your code you are saying that if you have a domino [x/y] it’ll match if the sides have either x or y. So, my question is, what’s the formula? 1. [x/y] will match if one of the sides have either x or y 2. [x/y] will match if (the left side has y+1 or x+1) or (the right side has x-1 or y-1) 3. Neither of them I think you should print the table state everytime it’s changed and when the player needs to choose a domino, because rigth now when you’re choosing a domino the table isn’t updated and you can’t really remember how the table was.
15th Dec 2021, 12:57 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
0
Formula 2 is what i want
15th Dec 2021, 1:13 PM
Mohammed Amine
Mohammed Amine - avatar
0
How do you calculate each player's score?
15th Dec 2021, 4:19 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
0
I forgot that in domino the score must be Score (count) %5 ==0
15th Dec 2021, 4:53 PM
Mohammed Amine
Mohammed Amine - avatar
0
There seems that i didn't put it in the account
15th Dec 2021, 9:30 PM
Mohammed Amine
Mohammed Amine - avatar
0
Tomás Ribeiro can i speak to you I have already sent you messges
15th Dec 2021, 9:42 PM
Mohammed Amine
Mohammed Amine - avatar
0
Where did you send messages?
15th Dec 2021, 11:16 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
0
Tomás Ribeiro in sololearn
16th Dec 2021, 5:58 AM
Mohammed Amine
Mohammed Amine - avatar
0
I'm having problems activating my account so I can't see your messages, do you have discord?
16th Dec 2021, 9:04 AM
Tomás Ribeiro
Tomás Ribeiro - avatar