我正在为大学做一个项目,我需要你的帮助,因为我在API文档中找不到我的愿望。
我有一个名为Belote.java
的课程(模拟纸牌游戏)。
我的教授想强迫我们在Vector中使用Stack类(不能使用另一个类抱歉:/)
这两种方法不会运行,我想我知道为什么,但我不能单独解决这个问题。
this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).push(carte));
this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).pop());
我对方法bug进行了评论。
package TP.TP5.Exercice2.Question2;
import java.util.Random;
import java.util.Vector;
import java.util.Stack;
import TP.TP5.Exercice1.Question4.Carte;
public class Belote {
private Stack<Carte> tasDistibution;
private Vector<Stack<Carte>> mainsJoueurs;
private Vector<Stack<Carte>> plisJoueurs;
public Belote() {
this.tasDistibution = new Stack<Carte>();
this.mainsJoueurs = new Vector<Stack<Carte>>(4);
this.plisJoueurs = new Vector<Stack<Carte>>(4);
for (int i = 0; i < 4; i++) {
this.mainsJoueurs.add(i, new Stack<Carte>());
this.plisJoueurs.add(i, new Stack<Carte>());
}
}
private void initialiserTasDistribution() {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 13; j++) {
if (j == 1 || (j >= 7 && j <= 13)) {
this.tasDistibution.push(new Carte(i, j));
}
}
}
}
private void couper() {
Stack<Carte> tas1 = new Stack<Carte>();
Stack<Carte> tas2 = new Stack<Carte>();
Random r = new Random();
int coupe = 1 + r.nextInt(33 - 1);
for (int i = 0; i < coupe; i++) {
Carte carte = this.tasDistibution.peek();
this.tasDistibution.pop();
tas1.push(carte);
}
while (tasDistibution.isEmpty() == false) {
Carte carte = this.tasDistibution.peek();
this.tasDistibution.pop();
tas2.push(carte);
}
while (tas1.isEmpty() == false) {
Carte carte = tas1.peek();
tas1.pop();
this.tasDistibution.push(carte);
}
while (tas2.isEmpty() == false) {
Carte carte = tas2.peek();
tas2.pop();
this.tasDistibution.push(carte);
}
}
private void melanger(int nbMelange) {
Carte tabcarte[] = new Carte[32];
for (int i = 0; i < tabcarte.length; i++) {
Carte cartesommet = this.tasDistibution.peek();
this.tasDistibution.pop();
tabcarte[i] = cartesommet;
}
for (int i = 0; i < nbMelange; i++) {
Random r = new Random();
int pos1 = 1 + r.nextInt(32 - 1);
int pos2 = 1 + r.nextInt(32 - 1);
if (pos1 == pos2) {
System.out.println("Pas de chance");
} else {
Carte temp;
temp = tabcarte[pos1];
tabcarte[pos1] = tabcarte[pos2];
tabcarte[pos2] = temp;
}
}
for (int i = 0; i < tabcarte.length; i++) {
Carte carte = tabcarte[i];
this.tasDistibution.push(carte);
}
}
private void donnerCartesAJoueur(int nbcartedonnes, int numjoueur) {
for (int i = 0; i < nbcartedonnes; i++) {
Carte carte = this.tasDistibution.peek();
this.tasDistibution.pop();
//My problem is right here, the method set doesn't work, because the method push return a "Carte" and not a "Stack<Carte>"
//The compilateur says : The method set(int, Stack<Carte>) in the type Vector<Stack<Carte>> is not applicable for the arguments (int, Carte)
this.mainsJoueurs.set(numjoueur, this.mainsJoueurs.get(numjoueur).push(carte));
}
}
private void distribuer() {
for (int i = 0; i < 4; i++) {
this.donnerCartesAJoueur(3, i);
}
for (int i = 0; i < 4; i++) {
this.donnerCartesAJoueur(2, i);
}
for (int i = 0; i < 4; i++) {
this.donnerCartesAJoueur(3, i);
}
for (int i = 0; i < 4; i++) {
System.out.println("\n\nDistribution pour joueur : " + (i + 1) + " \n\nMain du joueur : " + (i + 1));
this.mainsJoueurs.get(i).toString();
}
}
private void assemblerPlisJoueur() {
for (int i = 0; i < 4; i++) {
while (this.plisJoueurs.get(i).isEmpty() == false) {
Carte carte = this.plisJoueurs.get(i).peek();
//Same problem here
this.plisJoueurs.set(i, this.plisJoueurs.get(i).pop());
this.tasDistibution.push(carte);
}
}
}
private void preparerPremiereManche() {
this.initialiserTasDistribution();
this.melanger(32);
this.couper();
this.distribuer();
}
private void preparerMancheSuivante() {
this.assemblerPlisJoueur();
this.couper();
this.distribuer();
}
private void jouerPli() {
Stack < Carte > tasIntermediaire = new Stack<Carte>();
for (int i = 0; i < 4; i++) {
Carte carte = this.mainsJoueurs.get(i).peek();
//Same problem here
this.mainsJoueurs.set(i, this.mainsJoueurs.get(i).pop());
tasIntermediaire.push(carte);
}
Random r = new Random();
int gagnant = 0 + r.nextInt(4 - 0);
System.out.println("Le joueur " + (gagnant + 1) + " a gagné ce pli");
for (int i = 0; i < 4; i++) {
Carte carte = tasIntermediaire.peek();
tasIntermediaire.pop();
//Same problem here
this.plisJoueurs.set(gagnant, this.plisJoueurs.get(gagnant).push(carte));
}
System.out.println("Pli du joueur " + (gagnant + 1));
this.plisJoueurs.get(gagnant).toString();
}
private void jouerManche(int nbPlis) {
for (int i = 1; i <= nbPlis; i++) {
System.out.println("\n\nPli numéro : " + i);
this.jouerPli();
}
this.preparerMancheSuivante();
}
public void jouerPartie(int nbManches) {
this.preparerPremiereManche();
for (int i = 1; i <= nbManches; i++) {
System.out.println("\n\nManche numéro : " + i);
this.jouerManche(8);
}
System.out.println("Jeu terminé");
}
}
我不知道如何仅使用Stack类来解决这个问题。
每个人都有一个想法可以真的很好:)
(抱歉我的英语不好)
答案 0 :(得分:0)
问题是您传递了push方法的结果,该方法不是Stack<Carte>
,而是Carte
。
Stack<Carte> stack = this.mainsJoueurs.get(numjoueur);
stack.push(carte); // this returns the added element
this.mainsJoueurs.set(numjoueur, stack);