Lazarus Programm schreiben: Böse Sechs!
Lazarus Programm schreiben: Böse Sechs!
Hey Leute
ich bin neu hier und habe ne frage zu einem Programm.
Bin ein kompletter Anfänger in Lazarus und muss folgendes Programm schreiben.
2 Spieler
Würfeln bis man 100 Punkte erreicht (Würfel zahl wird addiert)
Sobald man eine 6 würfelt werden die Punkte zurückgesetzt und der andere Spieler hat seine Chance.
Ich weiß leider garnicht wie ich anfangen soll. Für ein paar Tipps wäre ich sehr dankbar.
Schönes Wochenende noch
LG Coolend
ich bin neu hier und habe ne frage zu einem Programm.
Bin ein kompletter Anfänger in Lazarus und muss folgendes Programm schreiben.
2 Spieler
Würfeln bis man 100 Punkte erreicht (Würfel zahl wird addiert)
Sobald man eine 6 würfelt werden die Punkte zurückgesetzt und der andere Spieler hat seine Chance.
Ich weiß leider garnicht wie ich anfangen soll. Für ein paar Tipps wäre ich sehr dankbar.
Schönes Wochenende noch
LG Coolend
-
- Beiträge: 1912
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lazarus Programm schreiben: Böse Sechs!
Es gibt die Funktion Random. Link
Das beispiel auf der Seite enthält alles was du wissen musst
Das beispiel auf der Seite enthält alles was du wissen musst
Re: Lazarus Programm schreiben: Böse Sechs!
Habe jetzt den Random befehl eingebaut aber komme immernoch nicht vorran.
Kann mir da eventuell noch jemand helfen?
Quellcode:
program boese_sechs;
var i,wurf,spielstand : integer;
var e,j,n: string;
begin
writeln('Spielregeln: Es wird solange gewuerfelt bis der Spieler eine 6 Wuerfelt oder man den Zug beendet.');
writeln('Sobald die Zahl 6 gewuerfelt wird ist der Zug vorbei und die Punkte werden auf 0 gesetzt.');
writeln('Die Punktezahl ergibt sich aus der Augenzahl des Wuerfels');
writeln('Ziel ist es die Hoehere Punktzahl zu erreichen. Die Obergrenze liegt bei 100');
writeln('Druecke Enter um das Spiel zu starten!');
readln();
randomize();
for i:=1 to 100 do
wurf:=random(6)+1;
if (wurf<5) then
spielstand:=spielstand+wurf else
writeln('Du hast eine 6 gewuerfelt und Verloren! ');
writeln('Dein Spielstand ist: ',spielstand);
writeln('Willst du weiter spielen? Dann druecke "Enter"');
readln();
end.
Kann mir da eventuell noch jemand helfen?
Quellcode:
program boese_sechs;
var i,wurf,spielstand : integer;
var e,j,n: string;
begin
writeln('Spielregeln: Es wird solange gewuerfelt bis der Spieler eine 6 Wuerfelt oder man den Zug beendet.');
writeln('Sobald die Zahl 6 gewuerfelt wird ist der Zug vorbei und die Punkte werden auf 0 gesetzt.');
writeln('Die Punktezahl ergibt sich aus der Augenzahl des Wuerfels');
writeln('Ziel ist es die Hoehere Punktzahl zu erreichen. Die Obergrenze liegt bei 100');
writeln('Druecke Enter um das Spiel zu starten!');
readln();
randomize();
for i:=1 to 100 do
wurf:=random(6)+1;
if (wurf<5) then
spielstand:=spielstand+wurf else
writeln('Du hast eine 6 gewuerfelt und Verloren! ');
writeln('Dein Spielstand ist: ',spielstand);
writeln('Willst du weiter spielen? Dann druecke "Enter"');
readln();
end.
Re: Lazarus Programm schreiben: Böse Sechs!
Im Prinzip schon richtig. Was mir aufgefallen ist, begin und end müssen hier rein, sonst wird der Wurf nicht überprüft
, mal ganz grob ergänzt, ungetest:
Unklar sind mir noch die Spielregeln bzw. der Ablauf. Das ist für den Programmablauf dann wichtig.
Soll jeder abwechselnd würfeln? Verliert die 6 sofort oder wird auf 0 zurückgesetzt und der erste mit 100 punkte hat gewonnen? usw.
, mal ganz grob ergänzt, ungetest:
Coolend hat geschrieben:Quellcode:
program boese_sechs;
var i,wurf,spielstand : integer;
var e,j,n: string;
begin
writeln('Spielregeln: Es wird solange gewuerfelt bis der Spieler eine 6 Wuerfelt oder man den Zug beendet.');
writeln('Sobald die Zahl 6 gewuerfelt wird ist der Zug vorbei und die Punkte werden auf 0 gesetzt.');
writeln('Die Punktezahl ergibt sich aus der Augenzahl des Wuerfels');
writeln('Ziel ist es die Hoehere Punktzahl zu erreichen. Die Obergrenze liegt bei 100');
writeln('Druecke Enter um das Spiel zu starten!');
readln();
randomize();
spielstand := 0;
// begin und end nicht vergessen!!
for i:=1 to 100 do begin // Würfel wird 100 mal gewürfelt
wurf:=random(5)+1; //!? =1-6
if (wurf<=5) then begin // .. jetzt wird auch jeder wurf überprüft
spielstand:=spielstand+wurf
// if spielstand > 100,...
end else begin
writeln('Du hast eine 6 gewuerfelt und Verloren! '); exit; end;
end;
writeln('Dein Spielstand ist: ',spielstand);
writeln('Willst du weiter spielen? Dann druecke "Enter"');
readln();
end.
Unklar sind mir noch die Spielregeln bzw. der Ablauf. Das ist für den Programmablauf dann wichtig.
Soll jeder abwechselnd würfeln? Verliert die 6 sofort oder wird auf 0 zurückgesetzt und der erste mit 100 punkte hat gewonnen? usw.
Zuletzt geändert von Epcop am So 17. Dez 2017, 18:45, insgesamt 1-mal geändert.
Re: Lazarus Programm schreiben: Böse Sechs!
Also ich habe es nochmal neu angefangen weil mit einer For schleife das nicht funktioniert hat.
Spielregeln lauten wie folgt:
Ein Spieler Würfelt eine Zahl bsp. 3, dann hat er die Möglichkeit entweder aufzuhören oder weiterzumachen.
Macht er weiter dann kommt eine neue Zahl hinzu bsp. 4. Jetzt ist der Punktestand bei 4
Jetzt kann er wieder entscheiden ob er aufhören will.
Und immer so weiter bis 100 Punkte
Aber sobald eine 6 kommt werden die Punkte auf 0 gesetzt und das Spiel ist vorbei und der andere spieler beginnt.
Mein Neuer Quellcode mit While schleife:
program boese_sechs;
var i,wurf,spielstand : integer;
var e,j,n: string;
begin
writeln('Spielregeln: Es wird solange gewuerfelt bis der Spieler eine 6 Wuerfelt');
writeln('Sobald die Zahl 6 gewuerfelt wird ist der Zug vorbei und die Punkte werden auf 0 gesetzt.');
writeln('Die Punktezahl ergibt sich aus der Augenzahl des Wuerfels');
writeln('Ziel ist es die Hoehere Punktzahl zu erreichen. Die Obergrenze liegt bei 100');
writeln('Druecke Enter um das Spiel zu starten!');
readln();
randomize();
while (wurf<>6) do
begin
wurf:=random(6)+1;
Writeln('Dein Wurf war: ',wurf);
spielstand:=spielstand+wurf;
writeln('Dein aktueller Spielstand lautet: ',spielstand,', Weitermachen? "J" oder "N"');
readln(e);
if e='N' then
writeln('Dein aktueller Punktestand lautet: ',spielstand);
if wurf=6 then
spielstand:=0;
writeln('Du hast verloren dein Spielstand lautet: ',spielstand);
end;
readln();
end.
Ich hoffe das hilft ^^
Bin echt am verzweifeln sitze da schon 3 stunden dran und bin langsam echt mit der Geduld am ende.
Auch wenn es nur die Basics sind ich bin nicht so fit in dem Thema
LG
Spielregeln lauten wie folgt:
Ein Spieler Würfelt eine Zahl bsp. 3, dann hat er die Möglichkeit entweder aufzuhören oder weiterzumachen.
Macht er weiter dann kommt eine neue Zahl hinzu bsp. 4. Jetzt ist der Punktestand bei 4
Jetzt kann er wieder entscheiden ob er aufhören will.
Und immer so weiter bis 100 Punkte
Aber sobald eine 6 kommt werden die Punkte auf 0 gesetzt und das Spiel ist vorbei und der andere spieler beginnt.
Mein Neuer Quellcode mit While schleife:
program boese_sechs;
var i,wurf,spielstand : integer;
var e,j,n: string;
begin
writeln('Spielregeln: Es wird solange gewuerfelt bis der Spieler eine 6 Wuerfelt');
writeln('Sobald die Zahl 6 gewuerfelt wird ist der Zug vorbei und die Punkte werden auf 0 gesetzt.');
writeln('Die Punktezahl ergibt sich aus der Augenzahl des Wuerfels');
writeln('Ziel ist es die Hoehere Punktzahl zu erreichen. Die Obergrenze liegt bei 100');
writeln('Druecke Enter um das Spiel zu starten!');
readln();
randomize();
while (wurf<>6) do
begin
wurf:=random(6)+1;
Writeln('Dein Wurf war: ',wurf);
spielstand:=spielstand+wurf;
writeln('Dein aktueller Spielstand lautet: ',spielstand,', Weitermachen? "J" oder "N"');
readln(e);
if e='N' then
writeln('Dein aktueller Punktestand lautet: ',spielstand);
if wurf=6 then
spielstand:=0;
writeln('Du hast verloren dein Spielstand lautet: ',spielstand);
end;
readln();
end.
Ich hoffe das hilft ^^
Bin echt am verzweifeln sitze da schon 3 stunden dran und bin langsam echt mit der Geduld am ende.
Auch wenn es nur die Basics sind ich bin nicht so fit in dem Thema
LG
Re: Lazarus Programm schreiben: Böse Sechs!
Du bist doch schon fast Fertig
Ich habe mein vorherigen Beitrag nochmal bearbeitet, zeitgleich mit deinem neuen Beitrag.
Die For-Schleife war prinzipiell schon OK, nur musst du Wissen, wann du dort aussteigst.
Bei deinem letzten Code vermisse ich wieder begin...end . Auch wenn man das nicht immer braucht, empfehle ich das anzugewöhnen. Das ist fürs Auge einfach schöner und vermeidet einfach Fehler die man später ewig sucht. Ohne begin...end (bei if) wird nur der erste nachfolgende Befehle beachtete, je nach Bedingung. Der zweite wird dann immer ausgeführt - und das ist nicht immer gewollt und führt zu fragwürdigen resultaten. In deinen Beispielen ist das ein großes Problem (z.B. wird immer ausgeführt, auch wenn keine 6 gewürfelt wird: writeln('Du hast verloren dein Spielstand lautet: ',spielstand); )
Wenn das Spiel zuende ist..., hier fehlt bei dir irgendwo ein "exit" oder ähnliches.
Bei solchen Abläufen zeichne ich mir gerne eine Skizze auf ein Blatt Papier, was wann geschehen soll. Das hilft dann beim programmieren die Übersicht zu behalten.
Ich habe mein vorherigen Beitrag nochmal bearbeitet, zeitgleich mit deinem neuen Beitrag.
Die For-Schleife war prinzipiell schon OK, nur musst du Wissen, wann du dort aussteigst.
Bei deinem letzten Code vermisse ich wieder begin...end . Auch wenn man das nicht immer braucht, empfehle ich das anzugewöhnen. Das ist fürs Auge einfach schöner und vermeidet einfach Fehler die man später ewig sucht. Ohne begin...end (bei if) wird nur der erste nachfolgende Befehle beachtete, je nach Bedingung. Der zweite wird dann immer ausgeführt - und das ist nicht immer gewollt und führt zu fragwürdigen resultaten. In deinen Beispielen ist das ein großes Problem (z.B. wird immer ausgeführt, auch wenn keine 6 gewürfelt wird: writeln('Du hast verloren dein Spielstand lautet: ',spielstand); )
Wenn das Spiel zuende ist..., hier fehlt bei dir irgendwo ein "exit" oder ähnliches.
Bei solchen Abläufen zeichne ich mir gerne eine Skizze auf ein Blatt Papier, was wann geschehen soll. Das hilft dann beim programmieren die Übersicht zu behalten.
-
- Beiträge: 6207
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Lazarus Programm schreiben: Böse Sechs!
Code: Alles auswählen
var
anzWurf, Punkte, wurf: integer;
begin
Randomize;
Punkte := 0;
anzWurf := 0;
repeat
Inc(anzWurf);
wurf := Random(6) + 1;
if wurf = 6 then begin
Punkte := 0;
end else begin
Inc(Punkte, wurf);
end;
WriteLn('Wurf:', wurf: 3, ' Punkte:', Punkte: 4);
until Punkte >= 100;
WriteLn('Du hast ', anzWurf, ' Würfe gebraucht');
end.
Ups, ich habe fast 2'500 Würfe gebraucht, bis ich >100 erreicht hatte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Lazarus Programm schreiben: Böse Sechs!
Mathias hat geschrieben:Ups, ich habe fast 2'500 Würfe gebraucht, bis ich >100 erreicht hatte.
Sowas aber auch... kann man auch in 20 Würfen schaffen
-
- Beiträge: 98
- Registriert: Di 4. Aug 2015, 15:29
- OS, Lazarus, FPC: Linux, Raspbian, Windows
- CPU-Target: 64/32 Bit
Re: Lazarus Programm schreiben: Böse Sechs!
Hallo Epcop,
aber auch nur in einem von 6^20 = 3656158440062976 Fällen. Also sehr selten...
Beste Grüße
Andreas
aber auch nur in einem von 6^20 = 3656158440062976 Fällen. Also sehr selten...
Beste Grüße
Andreas
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0