Archief - [PROG]java java probleem

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.

crazyheinz

Legacy Member
Code:
 public void speelSpel() {
        initialiseerSpel();
        toss();
        do {

            if (startKeuze == 0) {
                System.out.println("\n\nJij mag beginnen");
                geefStapelOverzicht();
                verwerkJouwBeurt();
            }
            else if (startKeuze == 1) {
                System.out.println("\n\nDe pc begint");
                geefStapelOverzicht();
                verwerkComputerBeurt();
            }



        }while (stapel1 != 0 || stapel2 != 0 || stapel3 != 0);
        geefWinnaar();

    }



Ik heb een probleem. Vanuit de methode speelSpel roep ik andere methoden op. Door een math random fuctie bepaal ik wie er mag beginnen; de gebuiker of de computer.
Door die if en if else wordt er toegewezen welke start.
Als ik nu op het einde van VerwerkJouwBeurt ben moet ik terug naar de centrale methode speelSpel() geraken. Van daar uit moet dan weer VerwerkComputerBeurt worden opgeroepen


Wat ik nu heb geprobeerd is bij methode VerwerkJouwBeurt(), startKeuze = 1.
Want als startKeuze gelijk is aan 1 is het aan
VerwerkComputerBeurt().

En bij de methode VerwerkComputerBeurt() heb ik startKeuze = 0. Want als startKeuze gelijk is aan 0 is het aan VerwerkJouwBeurt().

Dit werkt jammer genoeg niet. Het idee is volgens mij goed, maar als ik verwerkJouwBeurt heb uitgevoerd komt hij weer in de if else lus van verwerkJouwBeurt.
Ik zou dus na verwerkJouwBeurt en na VerwerkComputer beurt bovenaan de in de do while lus moeten komen maar boven if else.

Dit omdat dan het switchen van startKeuze zou werken....

Ollie

Legacy Member
Post die verwerkJouwBeurt() eens want zo moet het werken (allesbehalve elegant, maar speler en computer wisselen elkaar af).

crazyheinz

Legacy Member
Code:
public void verwerkJouwBeurt() {

		int ingave2, totaal;
		int ingave;
		String ingave1 = "";

		do {
			System.out.print("Kies de stapel: ");
			ingave = Integer.parseInt(Stream.readString());
			ingave1 = Integer.toString(ingave);

		}while (!(ingave1.equals("1")) && !(ingave1.equals("2")) && !(ingave1.equals("3")));

		
			System.out.print("Hoeveelheid Lucifers: ");
			ingave2 = Integer.parseInt(Stream.readString());


			if (ingave1.equals("1")) {
				stapel1 = stapel1 - ingave2;
				geefStapelOverzicht();
			}

			else if (ingave1.equals("2")) {
				stapel2 = stapel2 - ingave2;
				geefStapelOverzicht();
			}

			else if (ingave1.equals("3")) {
				stapel3 = stapel3 - ingave2;
				geefStapelOverzicht();
			}


		


		startKeuze = 1;
	}

Ollie

Legacy Member
Post de volledige source eens + de volledige command line output van het programma.

crazyheinz

Legacy Member
Code:
/**
 *	@ version 4-11-2006
 *	@ author
 *	Nim is een spel dat met lucifers gespeeld wordt. Het doet er niet toe
 *	hoeveel lucifers er zijn. De lucifers worden in drie stapels verdeeld. Opnieuw
 *	doet het er niet toe hoeveel lucifers er in elke stapel zitten. De spelers spelen
 *	om de beurt. Een speler kan elk een aantal lucifers van een willekeurige
 *	stapel afhalen, maar slechts van één stapel tegelijk. Hij moet minimaal één
 *	lucifer pakken. De winnaar is diegene die de tegenstander de laatste lucifer
 *	laat pakken. Schrijf een programma om dit spel te spelen tegen de computer.
 *	In het begin verdeelt de computer een willekeurig aantal (tussen 1 en 200)
 *	lucifers in 3 stapels.
 */

 public class Nim {

		int stapel1;
		int stapel2;
		int stapel3;
		int toss = 0;







 	/**
	* Hiermee wordt het ganse programma opgestart. Het is in deze
	* methode dat er aan de gebruiker gevraagd wordt of hij nog een spel wil
	* spelen.
	*/
 	public void start() {
		char antwoord;

		System.out.println("**************************************");
		System.out.println("          Welkom bij Nim");
		System.out.println("**************************************");

		do {
			speelSpel();
			do {
				antwoord = ("\nWil je nog een spel spelen (j/n)?").toLowerCase().charAt(0);

			} while ((antwoord != 'j') && (antwoord != 'n'));
		} while (antwoord == 'j');

		System.out.println("\nBedankt om Nim te spelen...");


	}



	/**
	* Hier worden de verschillende facetten van het spel aangeroepen:
	* initialisatie, het tossen om te bepalen wie mag beginnen, het verwerken
	* van de opeenvolgende zetten van de gebruiker, resp. de computer, de
	* weergave van de winnaar , ...
	*/
 	public void speelSpel() {
		initialiseerSpel();
		toss();
		do {

			if (toss == 0) {
				System.out.println("\n\nJij mag beginnen");
				geefStapelOverzicht();
				verwerkJouwBeurt();

			}
			else if (toss == 1) {
				System.out.println("\n\nDe pc begint");
				geefStapelOverzicht();
				verwerkComputerBeurt();

			}



		}while (stapel1 != 0 || stapel2 != 0 || stapel3 != 0);


		geefWinnaar();

 	}




	/**
	* omvat de generatie van een willekeurig aantal
	* lucifers en de willekeurige verdeling ervan over de drie stapels.
	*/
 	public void initialiseerSpel() {
		stapel1 = (int)(((Math.random() * 200) / 3) + 1);//een getal genereren tussen 1 en 100
		stapel2 = (int)(((Math.random() * 200) / 3) + 1);
		stapel3 = (int)(((Math.random() * 200) / 3) + 1);


 	}



	/**
	* omvat de willekeurige aanduiding van wie mag beginnen, jij
	* (gebruiker) of de computer.
	*/
 	public void toss() {
		toss = (int)(Math.random()*2);
 	}



 	/**
	* omvat de verwerking van jouw zet.
	*/
 	public void verwerkJouwBeurt() {

		int ingave2, totaal;
		int ingave;
		String ingave1 = "";

		do {
			System.out.print("Kies de stapel: ");
			ingave = Integer.parseInt(Stream.readString());
			ingave1 = Integer.toString(ingave);

		}while (!(ingave1.equals("1")) && !(ingave1.equals("2")) && !(ingave1.equals("3")));

		
			System.out.print("Hoeveelheid Lucifers: ");
			ingave2 = Integer.parseInt(Stream.readString());


			if (ingave1.equals("1")) {
				stapel1 = stapel1 - ingave2;
				geefStapelOverzicht();
			}

			else if (ingave1.equals("2")) {
				stapel2 = stapel2 - ingave2;
				geefStapelOverzicht();
			}

			else if (ingave1.equals("3")) {
				stapel3 = stapel3 - ingave2;
				geefStapelOverzicht();
			}


		toss = 1;
	}




	/**
	* omvat de zet van de computer.
	*/
 	public void verwerkComputerBeurt() {

		int pcStartKeuze;

		System.out.println("De computer maakt zijn keuze.");


		pcStartKeuze = (int)(Math.random()*3);

		if (pcStartKeuze == 0) {
			stapel1 = stapel1 - (int)(Math.random()*stapel1);
			geefStapelOverzicht();
		}

		else if (pcStartKeuze == 1) {
			stapel2 = stapel2 - (int)(Math.random()*stapel2);
			geefStapelOverzicht();
		}

		else if (pcStartKeuze == 2) {
			stapel3 = stapel3 - (int)(Math.random()*stapel3);
			geefStapelOverzicht();
		}

		toss = 0;



 	}


	/**
 	* hiermee druk je de spelsituatie af. Zorg ervoor
	* dat na elke zet, van jou of van de computer, een overzicht van de
	* stapelbezetting wordt weergegeven.
 	*/
 	public void geefStapelOverzicht() {


		System.out.println("\n\nStapel 1         " + stapel1);
		System.out.println("\nStapel 2         " + stapel2);
		System.out.println("\nStapel 3         " + stapel3 + "\n\n\n\n");


	}





	/**
	* geeft aan wie het spel gewonnen heeft
	*/
 	public void geefWinnaar() {
		System.out.println("LALALAA");
 	}







 	public static void main (String[] args) {
 		Nim spel = new Nim();//creatie van nieuw object van type 'Nim' en toekenning van zijn referentie aan de 'spel' variabele
 		spel.start();//methode oproep om het spel te starten

 	}
}

dit zal je ook nodig hebben :
Code:
import java.io.*;


public class Stream {

    public static String readString() {
	String str = "";

	try {
	    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	    str = in.readLine();
	} catch (Exception e) {
	    System.out.println("Er is een fout opgetreden tijdens het lezen.");
	}

	return str;
    }

    private Stream() {}
}

Ollie

Legacy Member
de code die je eerst gepost hebt is net iets anders dan de code in de volledige source...

EDIT: spel even gerund. Wat is het probleem nu juist? Speler en computer komen toch om beurt aan bod?

crazyheinz

Legacy Member
ja, startKeuze is toss geworden.
Voor de rest is ze totaal dezelfde... :)
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