Tamagotchi programmieren

1234

Neues Mitglied
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).
 
G

Gast2

Gast
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.
 
N

nillehammer

Gast
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
Code:
enum
. Das kannst Du als Feld Deiner Tamagochiklasse definieren.
 
D

Dow Jones

Gast
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

Bekanntes Mitglied
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

Top Contributor
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
 
G

Gast2

Gast
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

Top Contributor
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

Mitglied
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:

Geldautomadiry.jpg


Java:
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();
	}
	
}

Java:
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();
	}

}

Java:
package tutorials.designPatterns.state;


public interface Zustand {

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

Java:
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);
	}

}

Java:
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");
	}

}

Java:
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

Bekanntes Mitglied
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 ^^
 

Neue Themen


Oben