PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nimm Spiel


JanKa
2006-01-25, 13:51:39
Moin,
muss ein so genanntest Nimm Spiel in Java Programmieren.
Nur leider hab ich keine Ahnung wie das geht.
Kann mir jemand so etwas schreiben?
Hier die Regeln:

-1-3 Steine muss man nehmen
-wer den letzten Stein nimmt, hat gewonnen
-man darf nicht dieselbe Anzahl von Steinen ziehen, wie beim letzten Zug
-illegal Züge gelten als verloren
-mindestens 30 Seine

Ich hoffe jemand kann mir helfen für profis wird das ja kein problem sein

Coda
2006-01-25, 14:00:55
Kann mir jemand so etwas schreiben?Nein. Wir lösen hier keine Hausaufgaben.

mofa84
2006-01-25, 14:02:10
hört sich nach Hausaufgabe an -> http://www.forum-3dcenter.org/vbulletin/showthread.php?t=94880

Wo ist denn das Problem? Beim Java oder beim Algorithmus?

Monger
2006-01-25, 14:14:07
Kleiner Tipp: versuch dir mal das Spiel in der Realität vorzustellen, und modelliere danach das Spiel. Ich schlage vor, dass du mindestens folgende Objekte modellierst:

- Die Spieler
- Das Spielfeld (also der Topf mit Steinen)
- Die Spielregeln
- Einen Stein

Wie sich diese Objekte zueinander verhalten sollen, ist ja in den Spielregeln präzise formuliert.

ollix
2006-01-25, 14:22:46
Darauf läuft es eigentlich immer heraus. Das Problem soweit zu abstrahieren, daß man die einzelnen Komponenten am Ende nur noch mit Code füllen muß :)

JanKa
2006-01-25, 14:32:33
mein problem is das ich nich nicht programmieren kann. wie das spiel funktioniert weis ich

mofa84
2006-01-25, 14:33:54
???
Euer lehrer kann ja wohl nicht einfach Aufgaben aufgeben ohne irgendwas dazu durchgenommen zu haben?!

Pinoccio
2006-01-25, 14:48:22
Sollen zwei menschliche Spieler gegeneinander spielen können oder du gegen eine KI? Grafisch oder Konsole?

Ansonsten merkst du sicherlich an den Reaktionen einiger, daß deine Erwartungen an die Hilfsbereitschaft etwas daneben waren/sind.

mein problem is das ich nich nicht programmieren kann. wie das spiel funktioniert weis ich"nich nicht"? Oder nur "nicht"?
Möglicherweise kannst du ja programmieren, aber der Compiler ist bei Schreibfehlern nicht so flexibel wie wir und rät das richtige. ;-)

Es handelt sich also um eine Aufgabe aus dem Informatikunterricht, ja? Was habt ihr denn da schon alles gelernt?

mfg Sebastian

Monger
2006-01-25, 14:52:46
mein problem is das ich nich nicht programmieren kann. wie das spiel funktioniert weis ich

Wenn du überhaupt nicht programmieren kannst, wirst du wohl deine Unfähigkeit selbst ausbaden müssen.

Wenn du an einzelnen Stellen hängst, können wir dir möglicherweise Tipps geben. Aber du kannst nicht ernsthaft erwarten, dass wir hier deine Hausaufgaben machen...

Trap
2006-01-25, 16:07:54
(defun nimmspiel ()
(labels ((game (steine letzter spieler)
(format t "~A Steine im Topf ~%~A: Wieviele Steine nimmst du? " steine (first spieler))
(let ((take (parse-integer (read-line) :junk-allowed t)))
(cond ((or (not (<= 1 take 3))
(= take letzter)
(> take steine))
(format t "~A verliert." (first spieler)))
((= take steine)
(format t "~A gewinnt." (first spieler)))
(t
(game (- steine take) take (nreverse spieler)))))))
(game 30 0 (list "Spieler 1" "Spieler 2"))))
Ist eine komplette Lösung, testbar auf http://franz.com/products/allegrocl/prompt/. Läuft übrigens auch auf der Java-VM wenn man http://armedbear.org/abcl.html benutzt.

Gast
2009-02-12, 10:55:32
Hallo!
Habe das gleiche Problem, bin schon so weit:
public class Spiel{
public static void main(String[]args){
int anz=Integer.parseInt(args[0]);
Datei.Reader eingabe=new Datei.Reader();
while(anz>0){
System.out.println("Es gibt noch " + anz + " Steinchen. Wie viele nimmst du?");
int nimm = eingabe.readInt();
anz = anz-nimm;
System.out.println("Jetzt sind es nur noch "+ anz +" Steinchen.");
nimm=anz%4;
if(nimm==0) nimm=1;
System.out.println("Ich nehme "+nimm+" Steinchen.");
anz=anz-nimm;
}
}
}

allerdings muss ich ihn noch schreiben lassen, wer gewonnen hat,´und aufpassen, dass der Spieler nicht mehr oder weniger als 1-3 steinchen nimmt... hatte das mit dem gewinnen schon versucht mit if aber leider schreibt er dann immer hin "Du hast gewonnen" ich nehme 1 Steinchen "ich habe gewonnen"...
wäre wirklich super nett wenn mir jemand auf die sprünge helfen könnte :)
lg

Gast
2009-02-12, 11:12:30
mmh, also das schumeln habe ich glaube ausreichend hinbekommen, aber an dem wer gewonnen hatverzweifel ich :(

public class Spiel{
public static void main(String[]args){
int anz=Integer.parseInt(args[0]);
Datei.Reader eingabe=new Datei.Reader();
while(anz>0){
System.out.println("Es gibt noch " + anz + " Steinchen. Wie viele nimmst du?");
int nimm = eingabe.readInt();
if(nimm>3){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimst du?");
nimm = eingabe.readInt(); }
else if(nimm<1){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimmst du?");
nimm = eingabe.readInt(); }
anz = anz-nimm;
System.out.println("Jetzt sind es nur noch "+ anz +" Steinchen.");
nimm=anz%4;
if(nimm==0) nimm=1;
System.out.println("Ich nehme "+nimm+" Steinchen.");
anz=anz-nimm;
}
}
}

Mr.Käsemonster
2009-02-12, 14:29:58
mmh, also das schumeln habe ich glaube ausreichend hinbekommen
Das glaube ich nicht

> java Spiel 10
Es gibt noch 10 Steinchen. Wie viele nimmst du?
10
Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimst du?
10
Du hast gewonnen!

Gast
2009-02-12, 15:06:06
(defun nimmspiel ()
(labels ((game (steine letzter spieler)
(format t "~A Steine im Topf ~%~A: Wieviele Steine nimmst du? " steine (first spieler))
(let ((take (parse-integer (read-line) :junk-allowed t)))
(cond ((or (not (<= 1 take 3))
(= take letzter)
(> take steine))
(format t "~A verliert." (first spieler)))
((= take steine)
(format t "~A gewinnt." (first spieler)))
(t
(game (- steine take) take (nreverse spieler)))))))
(game 30 0 (list "Spieler 1" "Spieler 2"))))
Ist eine komplette Lösung, testbar auf http://franz.com/products/allegrocl/prompt/. Läuft übrigens auch auf der Java-VM wenn man http://armedbear.org/abcl.html benutzt.
Cool! Wie wärs jetzt noch mit einer Lösung in Brainfuck oder Prolog oder so? :D

@Gast: benutz doch bitte code tags, das kann ja keiner lesen...

darph
2009-02-12, 15:26:49
mmh, also das schumeln habe ich glaube ausreichend hinbekommen, aber an dem wer gewonnen hatverzweifel ich :(

public class Spiel{
public static void main(String[]args){
int anz=Integer.parseInt(args[0]);
Datei.Reader eingabe=new Datei.Reader();
while(anz>0){
System.out.println("Es gibt noch " + anz + " Steinchen. Wie viele nimmst du?");
int nimm = eingabe.readInt();
if(nimm>3){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimst du?");
nimm = eingabe.readInt(); }
else if(nimm<1){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimmst du?");
nimm = eingabe.readInt(); }
anz = anz-nimm;
System.out.println("Jetzt sind es nur noch "+ anz +" Steinchen.");
nimm=anz%4;
if(nimm==0) nimm=1;
System.out.println("Ich nehme "+nimm+" Steinchen.");
anz=anz-nimm;
}
}
}Dein Problem liegt in Folgendem:

Du hast eine Schleife ("while..."). Jeder Durchlauf deiner Schleife entspricht einem Zug, richtig? Bei dir ist das aber nicht der Fall. Bei dir wird in einem Zug zwei Mal genommen, wenn man das erste Mal geschummelt hat. (Und beim zweiten Mal nehmen wird nicht erneut geprüft, ob geschummelt wurde!)

Das ist aber sowieso falsch, denn in deiner Aufgabe steht ja "Schummeln gilt als verloren". Der Benutzer bekommt keine zweite Chance.

WENN schummeln==true DANN Spiel.beendet()

Gast
2009-02-13, 15:56:51
mmh, ok, hab es geändert, aber bei unserer version hat man mehrere Versuche ;) aber immerhin funktioniert es jetzt immer, aber aus irgendeinem Grund komme ich auf den verflixten letzten text nicht, wer gewonnen hat...

public class Spiel{
public static void main(String[]args){
int anz=Integer.parseInt(args[0]);
Datei.Reader eingabe=new Datei.Reader();
while(anz>0){
System.out.println("Es gibt noch " + anz + " Steinchen. Wie viele nimmst du?");
int nimm = eingabe.readInt();
while(nimm>3||nimm<1){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimmst du?");
nimm = eingabe.readInt(); }
anz = anz-nimm;
System.out.println("Jetzt sind es nur noch "+ anz +" Steinchen.");
nimm=anz%4;
if(nimm==0) nimm=1;
System.out.println("Ich nehme "+nimm+" Steinchen.");
anz=anz-nimm;
}
}
}

Gast
2009-02-13, 16:11:13
Halleluja, ich glaub ich habs, mir kam eine Erleuchtung^^
danke für eure hilfe!

public class Spiel{
public static void main(String[]args){
int anz=Integer.parseInt(args[0]);
Datei.Reader eingabe=new Datei.Reader();
while(anz>0){
System.out.println("Es gibt noch " + anz + " Steinchen. Wie viele nimmst du?");
int nimm = eingabe.readInt();
while(nimm>3||nimm<1){
System.out.println("Du schummelst, du darfst nur 1, 2 oder 3 Steinchen nehmen! Wieviel nimmst du?");
nimm = eingabe.readInt(); }
anz = anz-nimm;
System.out.println("Jetzt sind es nur noch "+ anz +" Steinchen.");
nimm=anz%4;
if(anz==0) {System.out.println("Du hast gewonnen!"); break;}
if(nimm==0) nimm=1;
System.out.println("Ich nehme "+nimm+" Steinchen.");
anz=anz-nimm;
if(anz==0) System.out.println("Ich habe gewonnen!");
}
}
}

Gast
2009-02-14, 05:46:56
Bist du eigentlich auch zu doof zum lesen?


@Gast: benutz doch bitte code tags, das kann ja keiner lesen...



Kein Wunder das du nicht programmieren kannst.
Mit so nem zusammengequetschen Code könnte ich auch nicht arbeiten.