Aktualnie pracuję nad nowym programem, a właściwie grą w Pascalu. Owa gra ma polegać na tym że: Użytkownik jeździ pionkiem po ekranie i gdy trafi w wyznaczony punkt (na ekranie) odpowiada na pytanie jeśli na nie odpowie jedzie dalej, kiedy nie wraca na początek. Miejsca w których mają znajdować się pytania są rozmieszczone na planszy, która jest generalnie odniesieniem do układu kartezjańskiego. Mój problem polega na tym że chcę aby za każdym razem gdy gracz przegrywa (wraca na początek) miejsca w których są pytania, albo chociaż pytania się zmieniały (Logika w tym jest taka żeby gracz nie musiał odpowiadać na te same pytania w wypadku gdy źle odpowie na pytanie. Gra kończy się gdy pionek gracza dojedzie do wyznaczonego punktu (W moim programie jest to x=24 i y=19). Cały projekt jest w fazie początkowej, planuje jeszcze dodać, różne bajery typu: Zapisywanie i wczytywanie gry, zmiana koloru planszy, gra na czas itp. , Ale najpierw muszę jakoś ogarnąć generacje losową pytań, liczę że mi ktoś w tym pomoże, próbowałem już wrzucić to w procedurę ale wyskakuje że instrukcja "goto" nie może współistnieć z procedurami - czy coś takiego. W Googlach wszyscy napalali się na napisanie gry w "Milionerzy" więc tam nic nie ma ciekawego (Bo ta gra nie potrzebuje wykorzystania etykiet w Pascalu). Liczę na konstruktywne podpowiedzi, na koniec dorzucam mój Hiper Super Ekstra kod źródłowy w fazie Pre-Pre-Pre Alfa
![Trollface :trollface:](./images/smilies/trollface.gif)
Oto on:
Kod: Zaznacz cały
program Gra;
uses crt, dos;
var wybor, x, y, a, b : Byte;
klawisz, Odp : char;
Punkty : Integer;
label Menu, Rozpocznij, Poczatek, Start, Koniec;
label P1, P2, P3;
BEGIN
Punkty := 0;
Cursoroff;
Menu: //MENU GRY
Writeln ('Witaj !');
Writeln;
Writeln ('1. Nowa gra');
Writeln ('2. Samouczek');
Writeln ('3. Ustawienia');
Writeln ('4. Wyj',chr(152),'cie');
Readln (wybor);
clrscr;
Case wybor of
1:
Begin
Rozpocznij: //ROZPOCZĘCIE GRY
Begin //Obramowanie - POKAZUJE JAKA DUŻA JEST PLANSZA
For b:=3 to 20 do
Begin
a:= 2;
gotoxy (a,b);
Writeln (chr(186));
End;
For b:= 3 to 20 do
Begin
a:= 25;
gotoxy (a,b);
Writeln (chr(186));
End;
For a:= 3 to 25 do
Begin
b:= 2;
gotoxy (a,b);
Writeln (chr(205));
End;
For a:= 3 to 25 do
Begin
b:= 20;
gotoxy (a,b);
Writeln (chr(205));
End;
Gotoxy(2,2);
Writeln (chr(201));
Gotoxy(2,20);
Writeln (chr(200));
Gotoxy(25,2);
Writeln (chr(187));
Gotoxy(25,20);
Writeln (chr(188));
End;
Poczatek: //MIEJSCE POCZĄTKOWE PIONKA
x:= 3;
y:= 3;
Gotoxy (x,y);
Writeln (chr(254));
Start: // TO CO JEST POD STRAT BĘDZIE SIĘ POWTARZAĆ, ABY PROGRAM SIĘ NIE ZAKOŃCZYŁ PO PIERWSZYM RUCHU GRACZA.
klawisz:= readkey;
Case Klawisz of //OGARNIĘCIE KLAWISZY STERUJĄCYCH
'a': dec(x);
's': inc(y);
'w': dec(y);
'd': inc(x);
End;
If (x > 24) Then x:= 24; //WARUNKI JEŚLI KTOŚ BĘDZIE PRÓBOWAŁ PRZEKROCZYĆ PLANSZĘ
If (y > 19) Then y:= 19;
If (x < 3) Then x:= 3;
If (y < 3) Then y:= 3;
If (x = 24) and (y = 19) Then Goto Koniec;
Clrscr;
Gotoxy (x,y);
Writeln (chr(254)); //WYŚWIETLENIE PIONKA
Begin //Obramowanie - POWTÓRKA Z OBRAMOWANIA, POKAZUJE JAKA DUŻA JEST PLANSZA.
For b:=3 to 20 do
Begin
a:= 2;
gotoxy (a,b);
Writeln (chr(186));
End;
For b:= 3 to 20 do
Begin
a:= 25;
gotoxy (a,b);
Writeln (chr(186));
End;
For a:= 3 to 25 do
Begin
b:= 2;
gotoxy (a,b);
Writeln (chr(205));
End;
For a:= 3 to 25 do
Begin
b:= 20;
gotoxy (a,b);
Writeln (chr(205));
End;
Gotoxy(2,2);
Writeln (chr(201));
Gotoxy(2,20);
Writeln (chr(200));
Gotoxy(25,2);
Writeln (chr(187));
Gotoxy(25,20);
Writeln (chr(188));
End;
Goto Start; //IDŹ DO ETYKIETY START (TJ. UMOŻLIWIA WIELOKROTNE RUCHY.
Randomize;
P1: //NIEUZUPEŁNIONE (NA RAZIE) PYTANIE 1
Writeln ('');
Writeln ('');
Writeln ('');
Writeln ('');
Writeln (''); // TREŚĆ PYTANIA
Readln (Odp); // OCZEKIWANIE NA ODPOWIEDŹ
If (Odp = '') Then //PRZYPADEK GDY ODPOWIEDŹ PRAWIDŁOWA
Begin
Punkty := Punkty + 1;
Writeln ('');
End
Else // GDY ODPOWIEDŹ NIE PRAWIDŁOWA
Begin
Punkty := Punkty - 1;
Writeln ('');
End;
Clrscr; // CZYSZCZENIE EKRANU I
Goto Start; // PRZEJŚCIE DO ETYKIETY START POZWALAJĄCEJ NA DOKONANIE NASTĘPNEGO RUCHU.
P2: //NIEUZUPEŁNIONE (NA RAZIE) PYTANIE 2
Writeln ('');
Writeln ('');
Writeln ('');
Writeln ('');
Writeln ('');
Readln (Odp);
If (Odp = '') Then
Begin
Punkty := Punkty + 1;
Writeln ('');
End
Else
Begin
Punkty := Punkty - 1;
Writeln ('');
End;
Clrscr;
Goto Start;
P3: //NIEUZUPEŁNIONE (NA RAZIE) PYTANIE 3
Writeln ('');
Writeln ('');
Writeln ('');
Writeln ('');
Writeln ('');
Readln (Odp);
If (Odp = '') Then
Begin
Punkty := Punkty + 1;
Writeln ('');
End
Else
Begin
Punkty := Punkty - 1;
Writeln ('');
End;
Clrscr;
Goto Start;
Koniec: // ETYKIETA KOŃCOWA - GDY PIONEK OSIĄGNIE WYŻEJ WYMIENIONE WSPÓŁRZĘDNE
Clrscr;
Goto Menu;
End;
2: //NIEDOKOŃCZONA INSTRUKCJA WIELOKROTNEGO WYBORU.
Begin
End;
3:
Begin
End;
4: Halt;
End;
END.
// P1, P2, P3 TO ETYKIETY DLA PYTAŃ KTÓRE CHCE ABY BYŁY GENEROWANIE LOSOWO - I W TYM JEST PROBLEM.
i Pozdrawiam. Ustawienia');
Writeln ('4