# Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ



## Passi292 (27. Sep 2012)

Hallo Leute,
Ich bin neu hier und habe direkt mal eine Frage.
Nunja es ist schwer zu erklären. Ich arbeite derzeit an einem Projekt namens "Einarmiger Bandit"
Dort habe ich nun 3 Walzen, die aber auch jeweils darüber und darutner gezeichnet werden, um zu zeigen, dass diese sich auch dreht. Nun hat jede Walze eine Reihenfolge von Zahlen ( 1-4 für Farben ) und diese Reihenfolge hat jeweils 10 Ziffern ( 10 Ziffer wo 4 Farben definiert sind nach häufigkeit )
Nun habe ich es auch geschafft, dass das Feld über der Walze jeweils eine Ziffer darüber ist, und das Feld unter der Walze jeweils die Farbe vor der Ziffer der Walze Zeichnet.
Nun habe ich aber bei Ziffer 10 das Problem, dass die Walze lZiffer + 1 nimmt ( Also hier Ziffer 11 ), nur ich habe keine Ziffer 11 also nimmt er eine beliebige Farbe. Wie schaffe ich es nun, dass ich wenn die Walze Ziffer 10 hat, dass das Feld darüber dann Ziffer 1 bekommt und wenn die Walze Ziffer 1 hat, dass das Feld unter der Walze dann anstatt Ziffer 0 die Ziffer 10 nimmt?

Hier mal ein paar Beispiele zum Verständnis:


```
hatWalze1 = new Walze(150, 250, "1234123121");
hatWalze2 = new Walze(250, 250, "1213214321");
hatWalze3 = new Walze(350, 250, "2131321412");
```
// Dies sind die Walzen, mit den 10 Ziffer, wo jede Farbe festgelegt ist


```
hatBuntstift.setzeFarbe(lZahl+1);
```

// So sieht es aus, wenn darüber die "Walze" gezeichnet werden soll. lZahl+1 ABER wenn die Walze in der Mitte die lZahl 10 hat, nimmt er für die nächste Walze lZahl 11..

Kennt jemand eine Lösung? Danke im voraus 

Hier ein Beispiel, für die Visuelle Vorstellung ( Was nicht Funktionier ist noch in Arbeit. Stecke halt bei den Walzen fest.. )

SpielAutomat.rar

// Bitte SumAnwendung mit Rechtsklick dann "New SumAnwendung" in BlueJ starten.


----------



## Fu3L (27. Sep 2012)

Wie wäre es einfach mit sowas wie: 

```
neuerWert = Zahl+1;
if(neuerWert > 10) { neuerWert = 0; }
if(neuerWert < 0) { neuerWert = maximalWert; }
hatBuntstift.setzeFarbe(neuerWert);
```

Das dürfte eine der einfachsten Möglichkeiten sein. Ich hoffe, damit verstanden zu haben, was du meinst.


----------



## Passi292 (27. Sep 2012)

~gelöscht


----------



## Passi292 (27. Sep 2012)

Spielautomat.rar

Ich habe es mal bei der Walze eingefügt..
Doch es geht immernoch nicht :/
Bei dem drehen dürfte die Farbe Grün nicht vorkommen.. Also ist etwas schief gelaufen.
Nur ich weiß nicht was?

Vielleicht fehlt bei der Klasse "Walze" die lZahl?


----------



## Marco13 (27. Sep 2012)

So ein Detail wie dass es deiner Beschreibung nach nicht
if(neuerWert < 0) { neuerWert = maximalWert; }
sondern
if(neuerWert < 1) { neuerWert = maximalWert; }
lauten müßte ist es nicht...?


----------



## Passi292 (28. Sep 2012)

Nein.
Immernoch das Grüne Feld 

Kann es sich vll. jemand angucken, und sagen was falsch sein könnte?

Wäre sehr dankbar


----------



## Marco13 (28. Sep 2012)

Wäre gut wenn du den Fehler eingrenzen könntest, SuM hat nicht jeder so installiert. Beim Überfliegen standen an mehreren Stellen 
if (wert < 0) wert = maximalWert;
Alle aktualisiert?


----------



## Passi292 (28. Sep 2012)

Alles versucht. Funktioniert leider nicht. Weiß auch nicht wieso, da ich ein ziemlicher anfänger bin..


```
import sum.ereignis.*;
import sum.werkzeuge.*;
/**
 * @author 
 * @version 
 */
public class Walze extends Ereignisbearbeiter
{
    // Bezugsobjekte

    // Attribute
    int zhPos;
    int zvPos;
    int zPosition;
    int zZaehler;
    private int zGuthaben;
    private int zNeuerWert;
    private int zMaximalWert;
    boolean zDrehtsich;
    String zSymbole;
    Buntstift hatBuntstift;
    Textwerkzeug hatTextwerkzeug;
    Rechner hatRechner;



    
    // Konstruktor
    public Walze(int phPos, int pvPos, String pSymbole)
    {
        super();
        hatBuntstift = new Buntstift();
        hatBuntstift.bewegeBis(phPos, pvPos);
        hatBuntstift.setzeFuellmuster(Muster.GEFUELLT);
        zDrehtsich = false;
        zSymbole = pSymbole;
        zPosition = 1;
        zNeuerWert = 1;
        zMaximalWert = 10;
        hatTextwerkzeug = new Textwerkzeug();
        this.zeichne();
        hatRechner = new Rechner();
    }
    
    public void zeichne()
    {
        char lZiffer;
        int lZahl;
        lZiffer = hatTextwerkzeug.zeichenAn(zSymbole, zPosition);
        lZahl = hatTextwerkzeug.alsGanzeZahl(lZiffer);
        hatBuntstift.setzeFarbe(lZahl);
        hatBuntstift.runter();
        hatBuntstift.zeichneRechteck(40, 40);
        hatBuntstift.hoch();
        hatBuntstift.dreheBis(90);
        hatBuntstift.bewegeUm(50);
        hatBuntstift.runter();
        zNeuerWert = lZahl+1;
        if(zNeuerWert > 10) 
        { 
            zNeuerWert = 1; 
        }
        if(zNeuerWert < 1) 
        {
            zNeuerWert = zMaximalWert; 
        }
        hatBuntstift.setzeFarbe(zNeuerWert);
        hatBuntstift.zeichneRechteck(40, 40);
        hatBuntstift.hoch();
        hatBuntstift.bewegeUm(-100);
        hatBuntstift.runter();
        zNeuerWert = lZahl-1;
        if(zNeuerWert > 10) 
        { 
            zNeuerWert = 0; 
        }
        if(zNeuerWert < 0) 
        {
            zNeuerWert = zMaximalWert; 
        }
        hatBuntstift.setzeFarbe(zNeuerWert);
        hatBuntstift.zeichneRechteck(40, 40);
        hatBuntstift.hoch();
        hatBuntstift.bewegeUm(50);
        
    }
    
    public void starte()
    {
        {
            zDrehtsich = true;
            zZaehler = hatRechner.ganzeZufallszahl(50, 100);
        }
    }
    
    public void bremse()
    {
        zDrehtsich = false;
    }
    
    public char symbol()
    {
        return hatTextwerkzeug.zeichenAn(zSymbole, zPosition);
    }
    
    public boolean Drehtsich()
    {
        return zDrehtsich;
    }
    
    public int position()
    {
        return zPosition;
    }
    
    public void gibFrei()
    {
        hatTextwerkzeug.gibFrei();
        hatBuntstift.gibFrei();
    }
    
    public void bearbeiteLeerlauf()
    {
        if (zDrehtsich)
        {
            zPosition++;
            if (zPosition > 10)
            {
                zPosition = 1;
            }
            this.zeichne();
            zZaehler = zZaehler -1;
            if(zZaehler == 0)
            {
                zDrehtsich = false;
            }
        }
    }
    // Dienste

}
```

So sieht das zurzeit aus.


----------



## Marco13 (28. Sep 2012)

Es ging um 
if(zNeuerWert < 0) 
was vielleicht
if(zNeuerWert < 1) 
lauten müßte, aber ist nur geraten...


----------



## Passi292 (28. Sep 2012)

Hab ich ja geändert. Doch keine veränderung ;(


----------



## Marco13 (29. Sep 2012)

Was ist jetzt daran falsch? Woher glaubst du zu wissen, dass Grün nicht vorkommen soll?

Füg' mal in Walze diese Methode ein

```
private static String stringForFarbe(int farbe)
    {
    	switch (farbe)
    	{
	    	case Farbe.BLAU : return "BLAU";
	    	case Farbe.CYAN : return "CYAN";
	    	case Farbe.DUNKELGRAU : return "DUNKELGRAU";
	    	case Farbe.GELB : return "GELB";
	    	case Farbe.GRAU : return "GRAU";
	    	case Farbe.GRUEN : return "GRUEN";
	    	case Farbe.HELLGRAU : return "HELLGRAU";
	    	case Farbe.MAGENTA : return "MAGENTA";
	    	case Farbe.ORANGE : return "ORANGE";
	    	case Farbe.PINK : return "PINK";
	    	case Farbe.ROT : return "ROT";
	    	case Farbe.SCHWARZ : return "SCHWARZ";
	    	case Farbe.WEISS  : return "WEISS ";
    	}
    	return "---Unbekannte Farbe---";
    }
```

und dann VOR die Zeilen, wo die Farben gesetzt werden, sowas wie

```
System.out.println("Setze Farbe in "+this+" auf wert "+zNeuerWert+", Farbe "+stringForFarbe(zNeuerWert));
        hatBuntstift.setzeFarbe(zNeuerWert);
```

Die Ausgabe ist dann z.B.
Setze Farbe in Walze@f38798 auf wert 5, Farbe GRUEN

:bahnhof:


----------

