Witam!
Postanowiłem napisać program który będzie odejmował wpisaną przez użytkownika sumę zdobytych punktów, od początkowo posiadanej. Ogólnie mówiąc, program pomocny do gry w darta.
Pisałem i w pewnym momencie się zatrzymałem, ponieważ stwierdziłem, że zaczynam źle robić.
Nie wiedziałem jakiej pętli użyć, ponieważ gdybym użył fora, to by mi nie działało, bo nie jest znana liczba powtórzeń. Wiadome jest, że wynik końcowy jaki musi uzyskać gracz to 0.
Może ktoś mi w tym pomóc? Wrzucam plik *.PAS abyście zobaczyli jak to zrobiłem (a raczej co zrobiłem, bo nie dokończyłem).
Proszę o pomoc.
http://tnij.com/dart192
Co za plik "pas", ja tam widzę "jar" :P
- lepiej wkleić kod na forum
- co to jest ?? for (y1 and y2) downto 0 do
to nie jest pętla for, musisz utworzyć zmienną lokalną i po niej iterować
Nie mogę skopiować z pascala kodu programu :|
Nie doszliśmy w szkole jeszcze do zmiennej lokalnej chyba, albo nie wiem o co chodzi.
Myślałem, że dobrze to zrobiłem.
hmmm,
albo ja nie rozumiem albo ...
- *.pas otwierasz dowolnym edytorem tekstów
- pętlę for trza po zmiennej iterować
radzę najpierw poczytać o konstrukcji Pascal'a
'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p:integer;
BEGIN;
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(500);
writeln('Jak juz skonczycie, nacisnij enter');
readkey;
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
HALT;
end;
IF g=2 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
end;
IF g=3 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
halt;
end;
clrscr;
y1:=y1+p;
y2:=y2+p;
y3:=y3+p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(100);
Writeln('Nacisnij ENTER aby zaczac gre');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2000);
clrscr;
IF g=2 THEN
BEGIN
for (y1 and y2) downto 0 do
BEGIN
Writeln('Ile punktow zdobyl gracz ',imie1,'?');
readkey(i1);
y1:=y1-i1;
writeln;
Writeln('Ile punktow zdobyl gracz ',imie2,'?');
readkey(i2);
y2:=y2-i2;
end.
'
Bardzo proszę :)
Jeśli ktoś chciałby mi pomóc, to proszę o poprawienie mnie w tym, co do tej pory źle zrobiłem :) Z góry dziękuję :)
Po tym kodzie :
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2000);
clrscr;
IF g=2 THEN
Moim zdaniem powinno byc cos takiego :
if g=2 then
begin
repeat
writeln("Rzuca 1 gracz");
writeln("Podaj sume rzuconych punktow:");
readln(i1);
if (y1-i1=0) then
begin
writeln("Wygral gracz 1 Gratulacje");
readkey;
hald;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln("Gracz 1 posiada teraz tyle punktow",y1);
end
else
begin
writeln('Gracz 1 zdobyl za duzo punktow w tej rundzie dlatego nadal posiada tyle punktoe:,y1');
end
end
writeln("Rzuca 2 gracz");
writeln("Podaj sume rzuconych punktow:");
readln(i2);
if (y2-i2=0) then
begin
writeln("Wygral gracz 2 Gratulacje");
readkey;
hald;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln("Gracz 2 posiada teraz tyle punktow",y2);
end
else
begin
writeln('Gracz 2 zdobyl za duzo punktow w tej rundzie dlatego nadal posiada tyle punktoe:,y2');
end
end
until ( y2=0) or(y1=0);
end
Oczywiście dla 3 graczy kod trzeba troche zmodyfikowac. Zaznaczam ze dawno nie pisalem w pascalu wiec z gory przepraszam za liczbe bledy.
Za takie konstrukcje:
IF g=2 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
end;
IF g=3 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
Powinien być ostrzegawczy strzał w tył głowy ;] Nie dało się tak:
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
Nie mówiąc już o użyciu tablic i pętli, bo da się tą gre napisać dla n-graczy, bez ograniczania ich ilości, ale do tego trzeba myśleć a nie bezmyślnie klepac.
Dziękuje za pomoc!! :) Jesteście super ;)
Na ostatniej lekcji programowania mieliśmy właśnie wprowadzone tablice, ale jeszcze nie ćwiczyłem ich, więc nie bardzo myślę nad tym, gdzie je zastosować :).
Proszę jeszcze nie zamykać tematu. Napiszę tak jak mi powiedzieliście i zobaczymy czy działa :)
Witam ponownie :)
Wprowadziłem wasze poprawki, oraz parę moich.
Jednak kiedy wybiorę grę na trzech graczy, to źle wyświetla mi się kolejność graczy.
Wyświetla chyba w takiej kolejności:
gracz1
gracz2
gracz2
wynik gracza 3
gracz1
gracz2
gracz2
wynik gracza 3
... i tak w kółko. Nie wiem co z tym zrobić. Próbowałem zmieniać różne rzeczy, ale było tylko gorzej. Proszę o pomoc!
'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p:integer;
BEGIN;
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(2000);
writeln('Jak juz skonczycie, nacisnij enter');
readkey;
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
HALT;
end;
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
halt;
end;
clrscr;
y1:=y1+p;
y2:=y2+p;
y3:=y3+p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(1000);
clrscr;
gotoxy(25,15);
Writeln('Nacisnij ENTER aby zaczac gre');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2000);
clrscr;
if g=2 then
begin
repeat
writeln('Rzuca ',imie1);
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
end
end
until ( y2=0) or(y1=0);
end
else
begin
repeat
writeln('Rzuca ',imie1);
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y3-i3>0) then
begin
y3:=y3-i3;
writeln(imie3,' posiada teraz: ',y3,' punktow.');
end
else
begin
writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
end
end
until ( y2=0) or (y1=0) or (y3=0);
end
end.
'
Po 1 wydaje mi się ze zamiast:
clrscr;
y1:=y1+p;
y2:=y2+p;
y3:=y3+p;
gotoxy(25,15);
Powinno być coś takiego:
clrscr;
y1:=p;
y2:=p;
if g=3 then y3:=p;
gotoxy(25,15);
Po 2 kod:
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
powtarza się dwukrotnie, za drugim razem powinien wyglądać tak:
writeln('Rzuca ',imie3);
writeln('Podaj sume rzuconych punktow:');
readln(i3);
if (y3-i3=0) then
Jeżeli kopiujesz kod musisz pamiętać,że należy dokładnie go sprawdzić i zmodyfikować tak jak należy.
A po 3 Gdybyś troszeczkę więcej pomyślał mógłbyś napisać ten program dla n-graczy.
@mto9 nie masz racji. Jeśli kopiujesz kod to znaczy że czas strzelić sobie w głowę. Kodu sie nie kopiuje, tylko wydziala się z niego pewne wzorce, funkcje, klasy etc (zależnie od języka).
Ojj czepiasz się ;D Chodziło mi o to ,że dyzio1414 skopiował(no ok wydzielił) kod z wcześniejszego fragmentu i nawet nie zamienił odpowiednio zmiennych.
Nie, on ten kod skopiował, więc zrobił źle ;] Mógł to wszystko wrzucić do drugiej pętli...
witam ponownie,
wywiązała się tak zażarta dyskusja, że ściągnąłem z netu moduł CRT pod D5, sfromatowałem i skompilowałem :)
i prawie działa - a prawie robi wielką różnicę :)
zgadzam się ze wszystkimi uwagami, program nie jest uniwersalny (n graczy) no i parę rzeczy można zrobić "bardziej" zgodnie ze sztuką
proponuję jeszcze dorzucić sprawdzanie czy tam gdzie jest to konieczne sprawdzać czy wprowadzono wartość liczbową
pozdro
Dziękuję za waszą pomoc :) każdego jednego :)
Ale prosiłbym o jeszcze jedno. Chciałem zrobić, żeby program pytał się na końcu czy użytkownik chce zagrać jeszcze raz i mi się nie udało. Dodałem pętlę ale nie działa. W ogóle program nie dochodzi do momentu kiedy pyta się o to, czy użytkownik chce zagrać jeszcze raz. Przesuwałem endy, ale to nie pomogło. Proszę, pomóżcie :)
Możecie przetestować sobie program :) Wprowadziłem jeszcze parę małych poprawek. Fajnie działa. Dzisiaj z kolegą i dziewczyną wypróbowaliśmy go i nie ma żadnych zastrzeżeń.
Jeszcze chcę dodać tylko kolory nicków i kolor wyświetlanych punktów.
Oto kod programu:
'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p,j:integer;
BEGIN;
REPEAT
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(3000);
gotoxy(25,15);
writeln('Jak juz skonczycie, nacisnij enter.');
readkey;
repeat
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
end;
until (g=2) or (g=3);
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
REPEAT
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
end;
UNTIL (p=301) or (p=501);
clrscr;
y1:=p;
y2:=p;
IF g=3 then y3:=p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(2000);
clrscr;
gotoxy(25,15);
Writeln('Nacisnij ENTER aby zaczac gre.');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2500);
clrscr;
if g=2 then
begin
repeat
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2);
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
end;
end;
writeln('Rzuca ',imie2,'! (',y2,')');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1);
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
end
end
until ( y2=0) or(y1=0);
end
else
begin
repeat
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2,' ',imie3,': ',y3);
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
end;
end;
writeln('Rzuca ',imie2,' (',y2,')!');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie3,': ',y3);
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
end;
end;
writeln('Rzuca ',imie3,'! (',y3,')');
writeln('Podaj sume rzuconych punktow:');
readln(i3);
if (y3-i3=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie2,': ',y2);
readkey;
halt;
end
else
begin
if(y3-i3>0) then
begin
y3:=y3-i3;
writeln(imie3,' posiada teraz: ',y3,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
writeln;
end
end
until ( y2=0) or (y1=0) or (y3=0);
end;
clrscr;
gotoxy(25,15);
writeln('Program wykonal Marcin D.');
writeln;
gotoxy(25,15);
writeln('Zapraszam do nastepnej gry!');
readkey;
clrscr;
gotoxy(25,15);
writeln('Zagrac jeszcze raz?');
gotoxy(25,15);
writeln('Wpisz 1 jesli chcecie zagrac jeszcze raz.');
writeln('Wpisz 2 jesli chcecie zakonczyc gre.');
readln(j);
until j=2;
end.
Chwile usiadłem przy tym kodzie i mogę tylko powiedzieć,że jest strasznie nie czytelny... bo błędu się nie doszukałem. Następnym razem używaj wcięć..
Przypuszczam,że może coś nie tak z "begin-end".
Okej, będę się starał pisać czytelniej.
A jakich wcięć mam używać?
Może ktoś jeszcze by mi pomógł? Proszę :)
Np. takich:
USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p,j:integer;
BEGIN
REPEAT
BEGIN
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(3000);
gotoxy(25,15);
writeln('Jak juz skonczycie, nacisnij enter.');
readkey;
REPEAT
BEGIN
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem kur*** ze 2 albo 3 graczy!!');
readkey;
END;
END;
UNTIL (g=2) or (g=3);
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
END;
REPEAT
BEGIN
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
END;
END;
UNTIL (p=301) or (p=501);
clrscr;
y1:=p;
y2:=p;
IF g=3 then y3:=p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(2000);
clrscr;
gotoxy(25,15);
Writeln('Nacisnij ENTER aby zaczac gre.');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2500);
clrscr;
IF g=2 then
BEGIN
REPEAT
BEGIN
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
IF (y1-i1=0) then
BEGIN
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2);
readkey;
halt;
END
ELSE
BEGIN
IF (y1-i1>0) then
BEGIN
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
END
ELSE
BEGIN
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
END;
END;
writeln('Rzuca ',imie2,'! (',y2,')');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
IF (y2-i2=0) then
BEGIN
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1);
readkey;
halt;
END
ELSE
BEGIN
IF(y2-i2>0) then
BEGIN
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
END
ELSE
BEGIN
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
END;
END;
END;
UNTIL ( y2=0) or(y1=0);
END
ELSE
BEGIN
REPEAT
BEGIN
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
IF (y1-i1=0) then
BEGIN
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2,' ',imie3,': ',y3);
readkey;
halt;
END
ELSE
BEGIN
IF(y1-i1>0) then
BEGIN
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
END
ELSE
BEGIN
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
END;
END;
writeln('Rzuca ',imie2,' (',y2,')!');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
IF (y2-i2=0) then
BEGIN
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie3,': ',y3);
readkey;
halt;
END
ELSE
BEGIN
IF(y2-i2>0) then
BEGIN
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
END
ELSE
BEGIN
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
END;
END;
writeln('Rzuca ',imie3,'! (',y3,')');
writeln('Podaj sume rzuconych punktow:');
readln(i3);
IF (y3-i3=0) then
BEGIN
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie2,': ',y2);
readkey;
halt;
END
ELSE
BEGIN
IF(y3-i3>0) then
BEGIN
y3:=y3-i3;
writeln(imie3,' posiada teraz: ',y3,' punktow.');
writeln;
END
ELSE
BEGIN
writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
writeln;
END;
END;
END;
UNTIL ( y2=0) or (y1=0) or (y3=0);
END;
clrscr;
gotoxy(25,15);
writeln('Program wykonal Marcin D.');
writeln;
gotoxy(25,15);
writeln('Zapraszam do nastepnej gry!');
readkey;
clrscr;
gotoxy(25,15);
writeln('Zagrac jeszcze raz?');
gotoxy(25,15);
writeln('Wpisz 1 jesli chcecie zagrac jeszcze raz.');
writeln('Wpisz 2 jesli chcecie zakonczyc gre.');
readln(j);
END;
UNTIL (j=2);
END.
No teraz jak użyłem wcięć od razu widzę, że wystarczy w każdym miejscu występowania instrukcji halt; zamienić ją na instrukcję break; i powinno być ok;)
:O Jak to zrobiłeś!? Ale ładnie! :D
Zaraz zamienię te halty i zobaczę czy działa :D
Działa!!! Dziękuję!!! Jestem bardzo wdzięczny!!!
Powiedz, czym różni się "break" od "halt" ?
Kod programu na forum umieszczasz w ten sposób:
<code=nazwa jezyka(np.pascal))>
kod programu
</code>
tyle,że bez tych ***
i o wiele lepiej widać ,ale już nie chcę mówić, że trochę czasu przeznaczyłem na formatowanie tego kodu ;D
Działa!!! Dziękuję!!! Jestem bardzo wdzięczny!!!
Powiedz, czym różni się "break" od "halt" ?
program Darts;
uses Crt;
const Maks = 10; { Maksymalnie 10 graczy }
var
Gracze: array[1..Maks] of string;
Punkty: array[1..Maks] of Integer;
IluGraczy, PktStart, Zwyciezca, Tmp, i: Integer;
Koniec: Boolean;
Znak: Char;
begin
repeat
ClrScr;
repeat
Write('Ilu jest graczy? Wybierz 2..10: ');
Readln(IluGraczy);
if (IluGraczy < 2) or (IluGraczy > 10) then begin
GotoXY(1, WhereY - 1);
ClrEol;
end;
until (IluGraczy >= 2) and (IluGraczy <= 10);
for i:= 1 to IluGraczy do begin
Write('Podaj imie ', i, '. gracza: ');
Readln(Gracze[i]);
end;
repeat
Write('Od ilu punktow zaczynac gre? (301 lub 501): ');
Readln(PktStart);
if (PktStart <> 301) and (PktStart <> 501) then begin
GotoXY(1, WhereY - 1);
ClrEol;
end;
until (PktStart = 301) or (PktStart = 501);
for i:= 1 to IluGraczy do Punkty[i]:= PktStart;
Koniec:= false;
ClrScr;
Writeln('Podawaj liczbe punktow rzuconych przez gracza');
repeat
for i:= 1 to IluGraczy do begin
GotoXY(1, i + 2);
Write('Gracz ', Gracze[i], ' (', Punkty[i], ' pkt.) rzucil: ');
Readln(Tmp);
if Punkty[i] >= Tmp then Dec(Punkty[i], Tmp);
if Punkty[i] = 0 then begin
Zwyciezca:= i;
Koniec:= true;
Break;
end;
GotoXY(1, WhereY - 1);
ClrEol;
Writeln('Gracz ', Gracze[i], ' ma teraz ', Punkty[i], ' pkt.');
end;
until Koniec;
ClrScr;
Writeln('Koncowa punktacja:');
Writeln(' Zwyciezca: ', Gracze[Zwyciezca]);
Writeln('Pozostali gracze:');
for i:= 1 to IluGraczy do
if i <> Zwyciezca then Writeln(' ', Gracze[i], ': ', Punkty[i], 'pkt.');
Write('Jeszcze raz? (t/n): ');
Znak:= Readkey;
until UpCase(Znak) = 'N';
end.
O widzisz program dla 10 graczy max a zajmuje mniej miejsca niż ten twój;D Ja też bym go tak napisał, ale tobie wybaczam bo nie znasz jeszcze tablic ;)
O kurde :O!!!! Przecież on używa jakichś poleceń których ja na oczy nie widziałem!! :O
Zarąbisty ten program! A ja tyle czasu robiłem ten swój, a Ty mi w jednej chwili pokazałeś, że tak naprawdę g**no umiem... W sumie minęło dopiero pierwsze półrocze w szkole, a jestem w pierwszej klasie technikum :D Programowanie mamy 2godziny w tygodniu :D To chyba tłumaczy mój niski poziom wiedzy :D
Tak się składa,że jestem w twoim wieku;D i również mam 2 lekcje PSIO w tygodniu, tylko,że ja uwielbiam PSIO i Pascala już przerobiłem prawie całego (80%) sam i teraz już uczę się c++ i Ci powiem,że po 1 półroczu potrafię już klasy ;D
Dlaczego pod IF jest GotoXY i co znaczy w tym przypadku "Wherey"?
Do czego służy ClrEol?
if (IluGraczy < 2) or (IluGraczy > 10) then begin
GotoXY(1, WhereY - 1);
ClrEol;
ClrEol jeśli dobrze pamiętam służy do czyszczenia linii, coś podobnego do clrscr tylko ,że clreol czyści tylko linę w której znajduję się kursor.
GotoxY to wiadomo,że ustawia kursor w wybranym miejscu a co do "whereY-1" nie jestem pewien ale myślę ,że oznacza to położenie kursora w miejscu w ktorym się znajduje -1 oczywiście w współrzędnej Y ;d
Przeróbka dla n graczy:
program Darts;
uses Crt;
var
Gracze: array of string; { Tablica dynamiczna }
Punkty: array of Integer; { j/w }
IluGraczy, PktStart, Zwyciezca, Tmp, i: Integer;
Koniec: Boolean;
Znak: Char;
begin
repeat
ClrScr;
Write('Ilu jest graczy ? ');
Readln(IluGraczy);
SetLenGth(Gracze, IluGraczy+1);
SetLenGth(Punkty, IluGraczy+1);
for i:= 1 to IluGraczy do begin
Write('Podaj imie ', i, '. gracza: ');
Readln(Gracze[i]);
end;
repeat
Write('Od ilu punktow zaczynac gre? (301 lub 501): ');
Readln(PktStart);
if (PktStart <> 301) and (PktStart <> 501) then begin
GotoXY(1, WhereY - 1);
ClrEol;
end;
until (PktStart = 301) or (PktStart = 501);
for i:= 1 to IluGraczy do Punkty[i]:= PktStart;
Koniec:= false;
ClrScr;
Writeln('Podawaj liczbe punktow rzuconych przez gracza');
repeat
for i:= 1 to IluGraczy do begin
GotoXY(1, i + 2);
Write('Gracz ', Gracze[i], ' (', Punkty[i], ' pkt.) rzucil: ');
Readln(Tmp);
if Punkty[i] >= Tmp then Dec(Punkty[i], Tmp);
if Punkty[i] = 0 then begin
Zwyciezca:= i;
Koniec:= true;
Break;
end;
GotoXY(1, WhereY - 1);
ClrEol;
Writeln('Gracz ', Gracze[i], ' ma teraz ', Punkty[i], ' pkt.');
end;
until Koniec;
ClrScr;
Writeln('Koncowa punktacja:');
Writeln(' Zwyciezca: ', Gracze[Zwyciezca]);
Writeln('Pozostali gracze:');
for i:= 1 to IluGraczy do
if i <> Zwyciezca then Writeln(' ', Gracze[i], ': ', Punkty[i], 'pkt.');
Write('Jeszcze raz? (t/n): ');
Znak:= Readkey;
until UpCase(Znak) = 'N';
end.
Tak będzie (powinno) działać dla N graczy (oczywiście, wszystko zależy od pamięci RAM) :D