# Tamagotchi programmieren



## 1234 (10. Mai 2012)

Hey Leute 

In der Schule machen wir gerade eben ein Projekt, bei dem jede Gruppe etwas programmieren soll.
Ich hab Tamagotchi gewählt, weil ich finde, dass es das einfachste von allen ist.
Könnt ihr mir da vllt. helfen? Bin nämlich nicht gerade gut x)

Vielen Dank schonmal im vorraus 

Hier ist die "Angabe":

Es soll verschiedene Zustände annehmen können (glücklich, hungrig, gelangweilt, tot,...). Zustände sollen am Bildschirm durch Anzeige entsprechender Bilder dargestellt werden. Mögliche Erweiterung: Integration eines Zeitgebers (tick() als auslösende Aktion).


----------



## Gast2 (10. Mai 2012)

Hm ja, und nu? Was sollen wir machen?
Lösen wird dir das hier (hoffentlich) niemand. Fang an, wenn du konkrete Probleme hast helfen wir gern.


----------



## nillehammer (10. Mai 2012)

> Es soll verschiedene Zustände annehmen können (glücklich, hungrig, gelangweilt, tot,...).


Bei einer fest definierten Menge von Werten nimmt man in Java gerne ein 
	
	
	
	





```
enum
```
. Das kannst Du als Feld Deiner Tamagochiklasse definieren.


----------



## Dow Jones (10. Mai 2012)

Klingt ganz nach einem sogenannten Automaten. Die verschiedenen möglichen Zustände hast du ja schon gegeben, also überlege dir als nächstes wie der Tamagotchi von einem Zustand in einen anderen Zustand wechselt. Das könnte zum Bespiel so aussehen:

*aktueller Zustand:* hungrig
*Ereignis:* die Füttern-Taste wird gedrückt
*Ausgabe:* ein lachender Smily
*neuer Zustand:* glücklich

*aktueller Zustand:* hungrig
*Ereignis:* es sind 3 Tage seit dem letzten Füttern vergangen
*Ausgabe:* Bild eines Grabsteins
*neuer Zustand:* tot

*aktueller Zustand:* glücklich
*Ereignis:* jemand zeigt dem Tamagotchi eine Briefmarkensammlung
*Ausgabe:* ein schlafender Smily 
*neuer Zustand:* gelangweilt

...und so weiter. Wenn du diese ganzen Zustandsübergänge ersteinmal festgeschrieben hast, dann weisst du schonmal _was_ du eigentlich programmieren möchtest. Und wenn es später beim _wie_ hakt, dann frage halt einfach nochmal hier im Forum nach.

Viel Erfolg!


----------



## 127.0.0.1 (10. Mai 2012)

mach ich mit ^^

*aktueller Zustand: * müde
*Ereignis: *mit Ball spielen (allg. Sport)
*Ausgabe: * lächelnder Smilie
*neuer Zustand: *glücklich

*aktueller Zustand: *durstig
*Ereignis: *zu trinken geben
*Ausgabe: * bedankt sich bei Benutzer/"Herrchen"
*neuer Zustand: *glücklich

*aktueller Zustand: *glücklich
*Ereignis: *Sport machen
*Ausgabe: *angestrengter Blick 
*neuer Zustand: *durstig

*aktueller Zustand: *traurig
*Ereignis: *lustigen Film zeigen
*Ausgabe: *lachen
*neuer Zustand: *glücklich

*aktueller Zustand: *glücklich
*Ereignis: *Essen geben
*Ausgabe: *verzogenes Gesicht 
*neuer Zustand: *Übelkeit


----------



## HimBromBeere (11. Mai 2012)

Das klingt spaßig hier:

*aktueller Zustand*: müde
*Ereignis*: von planlosem Studenten ziellose und unkonkrete Fragen gestellt
*Ausgabe*: Nicht-leere Menge Fragezeichen über dem Kopf
*neuer Zustand*: frustriert

*aktueller Zustand*: frustriert
*Ereignis*: Planlosigkeit des Studenten verfestigt sich, weil nicht einmal elementare Kenntnisse vorhanden sind
*Ausgabe*: Faregzeichen vermehren sich explosionsartig
*neuer Zustand*: genervt

*aktueller Zustand*: genervt
*Ereignis*: Computerabsturz
*Ausgabe*: Blue-Screen
*neuer Zustand*: tot

Game Over... ich geh schlafen


----------



## Gast2 (11. Mai 2012)

Google mal noch nach FSM in Java (Finit state machine = endlicher Automat). 

Da solltest du Beispiele finden wie man das in Java umsetzt. Die Zustände und Zustandsübergänge wurden ja schon vorgestellt  

Fang mal damit an und wenn du dann an eine Stelle kommst du nicht weiter kommst, poste den Quellcode und das Problem und dir wird geholfen.


----------



## ARadauer (11. Mai 2012)

1234 hat gesagt.:


> Vielen Dank schonmal im vorraus
> 
> Hier ist die "Angabe":


ähmn das hast du Falsch verstanden. Der Bereich Hausaufgaben ist nicht dazu da dir kostenlos deine Hausübung zu machen.
Wir helfen gerne bei konkreten Fragen, manche machen auch Übungen gegen Bezahlung aber die Lösung gibt dir hier sicher keiner...


----------



## El_Rabbit (13. Mai 2012)

Krass!

Das ist ein Projekt, dass ich auch umsetzen möchte =)
Die Idee dazu kam mir, als ich mich in der Berufsschule mit dem StateDesignPattern beschäftigen sollte. Das ist ein Entwurfsmuster, wo ein Objekt verschiedene Zustände annehmen kann.

Programmiert habe ich das am Beispiel eines Geldautomaten (Programm siehe unten).
Aber das Prinzip lässt sich auch auf ein Tamagotchi anwenden!
Denn ein Tamagotchi ist ja auch nur ein Objekt, dass verschiedene Zustände annehmen kann (und durch ein Bild dargestellt wird)

Bevor ich mich da ran mache, werde ich mich aber erst durch mein Java Buch arbeiten, aber vielleicht inspiriert dich mein Geldautomaten Programm bei der Lösung des Problems!
Und wenn du nach StateDesignPattern suchst findest du im Netz auch gute Beispiele.

Hier ein Bildchen, welche Zustände der Geldautomat annehmen kann und in welchen Zustand er von welchem Zustand aus wechseln kann:








```
package tutorials.designPatterns.state;


public class Geldautomat {

	private String name;
	private Zustand aktuellerZustand;
	
	public Zustand zustandOnline;
	public Zustand zustandOffline;
	public Zustand zustandOwned;
	
	public Geldautomat(String name) {
		
		zustandOnline = new ZustandAn(this);
		zustandOffline = new ZustandAus(this);
		zustandOwned = new ZustandHacked(this);
		
		this.name = name;
		this.aktuellerZustand = zustandOffline;
	}
	
	public String getName() {
		return this.name;
	}
	
	public void setName(String name) {
		this.name = name;
	}

	public String getZustand() {
		return this.aktuellerZustand.toString();
	}
	
	public void setZustand(Zustand neuerZustand) {
		this.aktuellerZustand = neuerZustand;
	}

	public void schalteEin() {
		// TODO Auto-generated method stub
		aktuellerZustand.schalteEin();
	}

	public void schalteAus() {
		// TODO Auto-generated method stub
		aktuellerZustand.schalteAus();
	}

	public void gibGeld() {
		// TODO Auto-generated method stub
		aktuellerZustand.gibGeld();
	}

	public void hackMe() {
		// TODO Auto-generated method stub
		aktuellerZustand.hackMe();
	}
	
}
```


```
package tutorials.designPatterns.state;


public class Treiber {
	
	
	public static void main(String[] args) {
		
		/**

		 * Ein Programm, mit dem ich das Entwurfsmuster 'StateDesignPattern' verstehen wollte.
		 * @author fresh
		 * @version 1.0

		 */
	
		Geldautomat geldmaster5000 = new Geldautomat ("Geldmaster 5000");
		
		System.out.println("************************************");
		System.out.println("Willkommen beim " + geldmaster5000.getName());
		System.out.println("************************************\n");

		// Testlauf
		geldmaster5000.schalteEin();
		geldmaster5000.schalteEin();
		geldmaster5000.schalteAus();
		geldmaster5000.schalteAus();
		geldmaster5000.schalteEin();
		geldmaster5000.gibGeld();
		geldmaster5000.gibGeld();
		geldmaster5000.schalteAus();
		geldmaster5000.schalteEin();
		geldmaster5000.hackMe();
		geldmaster5000.gibGeld();
		geldmaster5000.gibGeld();
		geldmaster5000.schalteEin();
		geldmaster5000.gibGeld();
		geldmaster5000.schalteAus();
		geldmaster5000.gibGeld();
		geldmaster5000.schalteEin();
		geldmaster5000.gibGeld();
	}

}
```


```
package tutorials.designPatterns.state;


public interface Zustand {

	public void schalteEin();
	public void schalteAus();
	public void gibGeld();
	public void hackMe();
	
}
```


```
package tutorials.designPatterns.state;


public class ZustandAn implements Zustand {

	private Geldautomat automat;
	
	public ZustandAn(Geldautomat automat) {
		this.automat = automat;
	}
	
	@Override
	public void gibGeld() {
		// TODO Auto-generated method stub
		System.out.println("100€ werden ausgegeben");
	}

	@Override
	public void schalteEin() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät ist bereits eingeschaltet");
	}

	@Override
	public void schalteAus() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät wird ausgeschaltet");
		automat.setZustand(automat.zustandOffline);
	}

	@Override
	public void hackMe() {
		// TODO Auto-generated method stub
		System.out.println("Starte Exploit");
		System.out.println("011011100 000111001 10111010 01001010");
		System.out.println("Gerät wurde gehacked");
		automat.setZustand(automat.zustandOwned);
	}

}
```


```
package tutorials.designPatterns.state;


public class ZustandAus implements Zustand {
	
	private Geldautomat automat;
	
	public ZustandAus(Geldautomat automat) {
		this.automat = automat;
	}
	
	@Override
	public void gibGeld() {
		// TODO Auto-generated method stub
		System.out.println("Geldausgabe nicht möglich. Automat ist ausgeschaltet.");
	}

	@Override
	public void schalteEin() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät wird eingeschaltet");
		automat.setZustand(automat.zustandOnline);
	}

	@Override
	public void schalteAus() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät ist bereits ausgeschaltet");
	}

	@Override
	public void hackMe() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät ist ausgeschaltet und kann nicht gehacked werden");
	}

}
```


```
package tutorials.designPatterns.state;


public class ZustandHacked implements Zustand {

	private Geldautomat automat;
	
	public ZustandHacked(Geldautomat automat) {
		this.automat = automat;
	}
	
	@Override
	public void gibGeld() {
		// TODO Auto-generated method stub
		System.out.println("200€ werden ausgegeben");
	}

	@Override
	public void schalteEin() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät ist bereits eingeschaltet (und wurde gehacked)");
	}

	@Override
	public void schalteAus() {
		// TODO Auto-generated method stub
		System.out.println("Das Gerät wird ausgeschaltet");
		automat.setZustand(automat.zustandOffline);
	}

	@Override
	public void hackMe() {
		// TODO Auto-generated method stub
		System.out.println("Automat wurde bereits gehacked");
	}

}
```


Was du brauchst ist also ein Tamagotchi Objekt, ein Interface und für jeden Zustand eine Klasse


----------



## 127.0.0.1 (14. Mai 2012)

puh, und da soll noch einer sagen dass hier keine Hausaufgaben gemacht werden xD


----------



## dev.buzz (14. Mai 2012)

Vielleicht ist der Lehrer nicht so Blöd und schaut, bevor er die Zensur gibt, hier im Forum rein .. :lol:


----------



## ARadauer (14. Mai 2012)

SK.Buzz hat gesagt.:


> Vielleicht ist der Lehrer nicht so Blöd und schaut, bevor er die Zensur gibt, hier im Forum rein .. :lol:



Warum soll er das machen... die sind doch froh dass sie die Schüler los sind die sowieso nur die Übungen kopieren... die zukünfigten Arbeitgeber werden dann eine Freude haben...


----------



## 127.0.0.1 (14. Mai 2012)

> Vielleicht ist der Lehrer nicht so Blöd und schaut, bevor er die Zensur gibt, hier im Forum rein ..



hehe....aber nicht wegen der Lösungen, sondern wegen den Aufgaben xD
Da kommt dann plötzlich in der Schulaufgabe eine Fragestellung hier ausm Forum dran ^^


----------

