Moore
(Moore96)
30 Grudzień 2008 16:36
#1
Witam.Mam następujący problem.Postanowiłem napisać prostą gierkę w trybie tekstowym.Zrobiłem menu,które wygląda tak:
1.Nowa gra
2.Logowanie
3.Wyjście
Problem w tym,że jak biorę 2 czyli logowanie i tam jest następujące coś:
1.Logowanie
2.Nowe konto
3.Wróć
Chodzi o to,że jak biore 3 to chcę żeby wyszło do głównego menu.Ale nie moge go zrobić jako procedurę gdyż mam w niej kilka ‘if’’,i procedura też by je musiała mieć.Troche pozawijałem mam nadzieję,że skumacie.Skoro nie procedura to co?Piszę w Turbo Pascalu 7.0 i 5.5.
Jak nie procedura, to funkcja
Na przykład, że jeśli zwróci 0, to jest poprawinie zakończona i pojawia się menu początkowe i po wybraniu “wróć” też zwróci 0, w innym wypadku 1.
Moore
(Moore96)
30 Grudzień 2008 17:29
#3
Nie dokońca o to mi chodziło.No bo właśnie menu się wtdy nie pojawi.Ale nie ważne.Mam o wiele większy problem.Kompilator wypisuje mi ciągle błąd Unknow identifier:
uses crt;
var a,b:string;
s:string;
plik:Text;
…
…
clrscr;
textcolor(yellow);
gotoxy(25,7);
write(‘1.Nowa gra’);
gotoxy(25,8);
write(‘2.Aktualny wynik’);
gotoxy(25,9);
write(‘3.Wyjcie’);
gotoxy(1, 10);
readln(a);
if a=‘3’ then
begin
end;
if a=‘2’ then
clrscr;
assing(plik, C:\wynik.txt);
reset(plik);
close(plik);
…
Co zrobić?!HELP!
beevvy
(B Brachaczek)
31 Grudzień 2008 00:24
#4
Chyba raczej:
assiGN (plik, 'C:\wynik.txt');
Literówka i cudzysłowy. I używaj znacznika Code.
kostek135
(kostek135)
31 Grudzień 2008 00:34
#5
A nie prościej użyć kotwice(label), gdy ma wrócić, a punkt do którego ma wrócić ustawić na początku wykonywania menu?
beevvy
(B Brachaczek)
31 Grudzień 2008 14:11
#6
To najgorsza rzecz, jaką można w takiej sytuacji zrobić. Lepiej już wszystko powrzucać do procedur, a główny kod programu zamknąć w pętlę REPEAT UNTIL. Moore , jeśli chcesz, mogę pokazać przykładowy kod na coś takiego, jeśli jeszcze nie wiesz, jak to zrobić.
Moore
(Moore96)
31 Grudzień 2008 17:30
#7
Jak byś był tak uprzejmy:)
beevvy
(B Brachaczek)
1 Styczeń 2009 14:56
#8
Oto przykładowy szkielet (mam nadzieję, że o to właśnie Ci chodziło):
PROGRAM Gra;
USES
CRT;
VAR
zakoncz_program : Boolean; {będziemy tej zmiennej używać globalnie}
PROCEDURE Menu; FORWARD;
PROCEDURE NowaGra; FORWARD;
PROCEDURE MenuLogowanie; FORWARD;
PROCEDURE Logowanie; FORWARD;
PROCEDURE NoweKonto; FORWARD;
PROCEDURE JakasProceduraKoncowa; FORWARD;
PROCEDURE Menu ();
VAR
znak : Char;
BEGIN
ClrScr();
GotoXY(25,7);
WriteLn('1. Nowa gra');
GotoXY(25,8);
WriteLn('2. Logowanie');
GotoXY(25,9);
WriteLn('3. Wyjście');
REPEAT znak := ReadKey UNTIL znak in ['1', '2', '3'];
CASE znak OF
'1' : NowaGra();
'2' : MenuLogowanie();
ELSE zakoncz_program := TRUE;
END;
END;
PROCEDURE NowaGra ();
BEGIN
ClrScr();
WriteLn('Hello');
zakoncz_program := TRUE;
END;
PROCEDURE MenuLogowanie ();
VAR
znak : Char;
BEGIN
ClrScr();
GotoXY(25,7);
WriteLn('1. Logowanie');
GotoXY(25,8);
WriteLn('2. Nowe konto');
GotoXY(25,9);
WriteLn('3. Wstecz');
REPEAT znak := ReadKey UNTIL znak in ['1', '2', '3'];
CASE znak OF
'1' : Logowanie();
'2' : NoweKonto();
END;
END;
PROCEDURE Logowanie ();
BEGIN
ClrScr();
WriteLn('Logowanie');
zakoncz_program := TRUE;
END;
PROCEDURE NoweKonto ();
BEGIN
ClrScr();
WriteLn('Nowe konto');
zakoncz_program := TRUE;
END;
PROCEDURE JakasProceduraKoncowa ();
BEGIN
END;
BEGIN
zakoncz_program := FALSE;
REPEAT
Menu();
UNTIL zakoncz_program;
JakasProceduraKoncowa();
END.
Moore
(Moore96)
1 Styczeń 2009 18:29
#9
Thx teraz pójdzie już z górki:)