Archief - Java - Hulp nodig bij spel Yathzee

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

lammat

Legacy Member
Hallo

IK ben een spel Yathzee aan het maken met een vriend, en die heeft al redelijk wat code maar nu moet ik de main maken , om het programma te testen

Kan iemand mij uitleggen hoe je die tester juist maakt ?

We werken met IntelliJ

De klasse dobbelsteen
Code:
public class Dobbelsteen {
    private int aantalOgen = 0;
    private boolean StaatVast = false;
    private Random rnd = new Random();

    public Dobbelsteen() {
    }

    public int Gooi(){
        return rnd.nextInt(6)+1;
    }

    public void zetVast(){
        StaatVast = true;
    }

    public void zetLos(){
        StaatVast = false;
    }

    public int getAantalOgen() {
        return aantalOgen;
    }

    public boolean isStaatVast() {

        return StaatVast;
    }
}

De klasse speler:
Code:
public class Speler {
    private String naam = "";
    private int aantalWorpen = 0;
    private int[] punten = new int[14];                                                                                 //omdat er ook nog een bonus van 35 punten verdiend kan worden is er 1 vakje extra

    public Speler(String naam) {
        this.naam = naam;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public void verhoogAantalWorpen(){
        aantalWorpen++;
    }

    public void herstartAantalWorpen(){                                                                                 //zet het aantal worpen terug op nul
        aantalWorpen = 0;
    }

    public int[] getPunten() {
        return punten;
    }

    public void setPunten(int[] punten) {
        this.punten = punten;
    }
}

De klasse spel:
Code:
public class Spel {
    private int aantalSpelers;
    ArrayList<Speler> spelers = new ArrayList<Speler>();
    ArrayList<Dobbelsteen> dobbelstenen = new ArrayList<Dobbelsteen>();
    Scanner scanner = new Scanner(System.in);



    public Spel(int aantalSpelers) {                                                                                     //maak een nieuw spel aan met x aantal spelers
        this.aantalSpelers = aantalSpelers;
        for (int i=0; i==aantalSpelers; i++) {                                                                           //herhaalt x aantal keer om een lijst met spelers te maken
            System.out.println("Geef de naam van de speler in:");
            Speler s = new Speler(scanner.nextLine());
            spelers.add(s);
        }

        for(int j=0; j==3; j++){
            Dobbelsteen d = new Dobbelsteen();                                                                           //maak een lijst met dobbelstenen
            dobbelstenen.add(d);
        }
    }

    public void zetDobbelsteenVast(int i){                                                                               //Zet een dobbelsteen op index i vast
        Dobbelsteen d = new Dobbelsteen();
        d=dobbelstenen.get(i);
        d.zetVast();
        dobbelstenen.set(i, d);
    }

    public void zetDobbelsteenLos(int i){                                                                                //Zet een dobbelsteen op index i los
        Dobbelsteen d = new Dobbelsteen();
        d=dobbelstenen.get(i);
        d.zetLos();
        dobbelstenen.set(i, d);
    }

    public void gooi(){                                                                                                  //Gooi met alle dobbelstenen die niet vast staan
        int teller = 0;
        for (Dobbelsteen dobbelsteen : dobbelstenen) {
            if(!dobbelsteen.isStaatVast()){
                dobbelsteen.Gooi();
                dobbelstenen.set(teller++, dobbelsteen);
            }
        }
    }

    public int controleerPunten(int soort){                                                                             //controleer of de gewilde punten mogelijk zijn geeft het aantal punten terug en als het niet klopt -1
        int resultaat = 0;
        switch(soort){
            case 1:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==1){
                        resultaat += 1;
                    }
                }
                return resultaat;
            case 2:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==2){
                        resultaat += 2;
                    }
                }
                return resultaat;
            case 3:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==3){
                        resultaat += 3;
                    }
                }
                return resultaat;
            case 4:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==4){
                        resultaat += 4;
                    }
                }
                return resultaat;
            case 5:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==5){
                        resultaat += 5;
                    }
                }
                return resultaat;
            case 6:
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    if(dobbelsteen.getAantalOgen()==6){
                        resultaat += 6;
                    }
                }
                return resultaat;
            case 7:                                                                                                     //TOAK

                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            if(dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen1) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen1) != dobbelstenen.indexOf(dobbelsteen2)){
                                if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() && dobbelsteen1.getAantalOgen() == dobbelsteen2.getAantalOgen()){
                                    for (Dobbelsteen dobbelsteen4 : dobbelstenen) {
                                        resultaat += dobbelsteen4.getAantalOgen();
                                    }
                                    return resultaat;
                                }
                            }
                        }
                    }
                }
                break;
            case 8:                                                                                                      //FOAK
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            for (Dobbelsteen dobbelsteen3 : dobbelstenen) {
                                if(dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen1) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen) == dobbelstenen.indexOf(dobbelsteen3) ||dobbelstenen.indexOf(dobbelsteen1) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen1) == dobbelstenen.indexOf(dobbelsteen3) || dobbelstenen.indexOf(dobbelsteen2) == dobbelstenen.indexOf(dobbelsteen3)){
                                    if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() && dobbelsteen.getAantalOgen() == dobbelsteen2.getAantalOgen() && dobbelsteen.getAantalOgen() == dobbelsteen3.getAantalOgen()){
                                        for (Dobbelsteen dobbelsteen4 : dobbelstenen) {
                                            resultaat += dobbelsteen4.getAantalOgen();
                                        }
                                        return resultaat;
                                    }

                                }
                            }
                        }
                    }
                }
                break;
            case 9:                                                                                                      //Kleine straat
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            for (Dobbelsteen dobbelsteen3 : dobbelstenen) {
                                if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() - 1 && dobbelsteen1.getAantalOgen() == dobbelsteen2.getAantalOgen() - 1 && dobbelsteen2.getAantalOgen() == dobbelsteen3.getAantalOgen() -1){
                                    return 30;
                                }
                            }
                        }
                    }
                }
                break;
            case 10:                                                                                                     //Grote straat
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            for (Dobbelsteen dobbelsteen3 : dobbelstenen) {
                                for (Dobbelsteen dobbelsteen4 : dobbelstenen) {
                                    if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() - 1 && dobbelsteen1.getAantalOgen() == dobbelsteen2.getAantalOgen() - 1 && dobbelsteen2.getAantalOgen() == dobbelsteen3.getAantalOgen() - 1 && dobbelsteen3.getAantalOgen() == dobbelsteen4.getAantalOgen() -1){
                                        return 40;
                                    }
                                }
                            }
                        }
                    }
                }
                break;
            case 11:                                                                                                     //full house = TOAK + Paar

                for (Dobbelsteen dobbelsteen : dobbelstenen) {                                                           //TOAK
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            for (Dobbelsteen dobbelsteen3 : dobbelstenen) {
                                for (Dobbelsteen dobbelsteen4 : dobbelstenen) {
                                    if(dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen1) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen1) != dobbelstenen.indexOf(dobbelsteen2)){
                                        if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() && dobbelsteen1.getAantalOgen() == dobbelsteen2.getAantalOgen()){
                                            if(dobbelsteen3.getAantalOgen() == dobbelsteen4.getAantalOgen()){                    //paar
                                                return 25;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                break;
            case 12:                                                                                                     //Kans
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    resultaat += dobbelsteen.getAantalOgen();
                }
                return resultaat;
            case 13:                                                                                                     //yathzee
                for (Dobbelsteen dobbelsteen : dobbelstenen) {
                    for (Dobbelsteen dobbelsteen1 : dobbelstenen) {
                        for (Dobbelsteen dobbelsteen2 : dobbelstenen) {
                            for (Dobbelsteen dobbelsteen3 : dobbelstenen) {
                                for (Dobbelsteen dobbelsteen4 : dobbelstenen) {
                                    if(dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen1) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen) == dobbelstenen.indexOf(dobbelsteen3) ||dobbelstenen.indexOf(dobbelsteen1) != dobbelstenen.indexOf(dobbelsteen2) || dobbelstenen.indexOf(dobbelsteen1) == dobbelstenen.indexOf(dobbelsteen3) || dobbelstenen.indexOf(dobbelsteen2) == dobbelstenen.indexOf(dobbelsteen3) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen4) || dobbelstenen.indexOf(dobbelsteen1) != dobbelstenen.indexOf(dobbelsteen4) || dobbelstenen.indexOf(dobbelsteen2) != dobbelstenen.indexOf(dobbelsteen4) || dobbelstenen.indexOf(dobbelsteen) != dobbelstenen.indexOf(dobbelsteen3)){
                                        if(dobbelsteen.getAantalOgen() == dobbelsteen1.getAantalOgen() && dobbelsteen1.getAantalOgen() == dobbelsteen2.getAantalOgen() && dobbelsteen2.getAantalOgen() == dobbelsteen3.getAantalOgen() && dobbelsteen3.getAantalOgen() == dobbelsteen4.getAantalOgen()){
                                            return 50;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
        }
        return -1;
    }

    private void bonusPunten(){                                                                                         //checkt of bonuspunten gegeven mogen worden + geeft ze
        int[] punten = new int[14];
        for (Speler speler : spelers) {
            punten = speler.getPunten();
            if(punten[0]+punten[1]+punten[2]+punten[3]+punten[4]+punten[5] > 35){
                punten[14] = 35;
                speler.setPunten(punten);
            }
        }
    }
}

Bv202

Legacy Member
Eerst zou ik toch iets doen aan het design van die laatste klasse, want dat ziet er echt niet zo goed uit :p

De eerste 6 "soorten" kan je al op deze manier herschrijven:

Code:
public int controleerPunten(int soort){ {
	int resultaat = 0;
	
	for (Dobbelsteen dobbelsteen : dobbelstenen) {
             if(dobbelsteen.getAantalOgen()== soort){
			resultaat += soort;
             }
        }
	
    return resultaat;

}

Vanaf dan snap ik niets meer van je code...

lammat

Legacy Member
Bv202 zei:
Eerst zou ik toch iets doen aan het design van die laatste klasse, want dat ziet er echt niet zo goed uit :p

De eerste 6 "soorten" kan je al op deze manier herschrijven:

Code:
public int controleerPunten(int soort){ {
	int resultaat = 0;
	
	for (Dobbelsteen dobbelsteen : dobbelstenen) {
             if(dobbelsteen.getAantalOgen()== soort){
			resultaat += soort;
             }
        }
	
    return resultaat;

}

Vanaf dan snap ik niets meer van je code...

Moet ik dan case 1 , met jou code doen , of heel die 6 cases weg doen en jou code gwn ergens anders schrijven?

NeverwinterX

Legacy Member
lammat zei:
Moet ik dan case 1 , met jou code doen , of heel die 6 cases weg doen en jou code gwn ergens anders schrijven?


De methode geheel vervangen door de zijne en is goed nadenken over die andere cases en die vervangen want dat is toch ook echt wel eum... een gedrocht :p.

En voor dat testen. Bedoel je nu eigenlijk echte specifieke tests zoals Junit enzo of gewoon een main om het spel te draaien en te kunnen spelen en zien of het werkt?
In geval van het laatste doe je iets als dit in een klasse naar keuze (liefst Spel of een andere nieuwe klasse):
Code:
public static void main(String[] args){
   Spel spel = new Spel(2);
   while(spel is niet gedaan){ // TODO wanneer is het gedaan?
      spel.gooi();
      // TODO en nog andere dingen die je wil doen
   }
   // TODO als je wilt kan je deze lus ook in een aparte methode in spel zetten
}

En dan voer je die main uit met intellij: daar heb ik geen ervaring mee, er zal wel een run knop zijn ergens neem ik aan :p

Jerre Muesli

Legacy Member
Ik denk niet dat hij echt testen bedoelt zoals JUnit.
Hij heeft gewoon te weinig kennis van Java om een main klasse te schrijven bij de 3 classes...

Volgens wat ik op de eerste 2 seconden zie doe je best gewoon eens een Spel spel = new Spel(2);
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan