Lokalizacja: Poznań
Ignorowany przez 34 użytkowników
@tukinem,
post #566
Dim T_NAME$(10)
Dim T_MOVE(10),T_PUSH(10)
Global SB_10,DLG_LISTY
Global SCIEZ$
Global T_MOVE(),T_PUSH(),T_NAME$()
SCIEZ$=Dir$+"skore/" : Rem katalog z cala lista haj skore
If Length(10)=0 Then Reserve As Data 10,20000
SB_10=Start(10) : Rem adres poczatku banku nr 10
DLG_LISTY=140 : Rem dlugosc jednej listy 'hi score' liczona w bajtach
TYMCZ_POKAZ_HAJ_SKORE
Bell
Wait Key
TYMCZ_WPISZ_TABLICE
POZIOM=1 : Rem numer poziomu ( maksymalnie 99 )
WPIS_SKORE_DO_RAM[POZIOM]
TYMCZ_ZMAZ_TABLICE: Rem kasujemy dane w tablicy tymczasowej
ODCZYT_SKORE_Z_RAM[POZIOM]
TYMCZ_POKAZ_HAJ_SKORE
ZAPIS_BANKU
End
Rem 8********************************************>
Procedure TYMCZ_POKAZ_HAJ_SKORE
'
Print At(0,0);" ------ TOP TEN -------"
For I=1 To 10
Print At(0,I*2);I;"."
Print At(4,I*2);T_NAME$(I)
Print At(14,I*2);" Moves:";T_MOVE(I)
Print At(26,I*2);" Pushes:";T_PUSH(I)
Next I
'
End Proc
Procedure TYMCZ_ZMAZ_TABLICE
'
For I=1 To 10
T_NAME$(I)=""
T_MOVE(I)=0
T_PUSH(I)=0
Next I
End Proc
Procedure TYMCZ_WPISZ_TABLICE
'
Restore TDANE
For I=1 To 10
Read N$
Read M
Read P
T_NAME$(I)=N$
T_MOVE(I)=M
T_PUSH(I)=P
Next I
'
TDANE:
Data "MirekGirek",100,50
Data "Franiula",120,60
Data "Zygi Rogal",140,70
Data "Dyzio",200,120
Data "Rysio",300,150
Data "Stasio",400,200
Data "BasioAsio",480,240
Data "Miecios",500,300
Data "Zbyniuro",1100,500
Data "Wacek",2000,1000
End Proc
Procedure WPIS_SKORE_DO_RAM[N]
'
POZ=N : Rem numer poziomu (odczyt parametru z procedury)
ADR=SB_10+POZ*DLG_LISTY : Rem poczatek danych listy numer poz
Rem ---- zapis ruchow i pchniec do RAM ----
For I=1 To 10
RUCHY=T_MOVE(I)
Doke ADR,RUCHY : Rem zapis ruchu (2 bajty)
ADR=ADR+2
PCHNIEC=T_PUSH(I) : Rem zapis pchniecia (2 bajty)
Doke ADR,PCHNIEC
ADR=ADR+2
Next I
Rem ---- zapis imion do RAM ----
For I=1 To 10
'
IMIE$=T_NAME$(I) : Rem odczyt lancucha z tablicy
DLUGT=Len(IMIE$) : Rem dlugosc imienia
If DLUGT>10 Then DLUGT=10 : Rem maksymalnie 10 znakow
For J=1 To 10 : Rem petla dla 10 znakow
If J<=DLUGT
ZN$=Mid$(IMIE$,J,1) : Rem odczyt kolejno znak po znaku
ZNK=Asc(ZN$) : Rem wartosc kodu ascii odczytanego znaku
Poke ADR,ZNK : Rem zapis wartosci znaku do RAM
Else
Poke ADR,32 : Rem jesli nie ma juz znakow wypelnij spacjami
End If
Inc ADR
Next J
Next I
'
End Proc
Procedure ODCZYT_SKORE_Z_RAM[N]
'
POZ=N : Rem numer poziomu (odczyt parametru z procedury)
ADR=SB_10+POZ*DLG_LISTY : Rem poczatek danych listy numer poz
Rem ---- odczyt ruchow i pchniec z RAM ----
For I=1 To 10
RUCHY=Deek(ADR) : Rem odczyt ruchu (2 bajty)
T_MOVE(I)=RUCHY : Rem zapis ruchu w tablicy
ADR=ADR+2
PCHNIEC=Deek(ADR) : Rem odczyt pchniecia (2 bajty)
T_PUSH(I)=PCHNIEC : Rem zapis pchniec w tablicy
ADR=ADR+2
Next I
Rem ---- odczyt imion z RAM ----
For I=1 To 10
IMIE$=""
For J=1 To 10 : Rem petla dla 10 znakow
ZNK=Peek(ADR) : Rem odczyt wartosci znaku do RAM
ZN$=Chr$(ZNK) : Rem kod ascii odczytanego znaku
IMIE$=IMIE$+ZN$ : Rem dodanie do lancucha kolejno znak po znaku
Inc ADR
Next J
T_NAME$(I)=IMIE$ : Rem zapamietanie lancucha w tablicy
Next I
'
End Proc
Procedure ZAPIS_BANKU
ADR=SB_10 : Rem poczatek adresu calej listy w RAM
DLUG=100*DLG_LISTY : Rem zapis listy wynikow dla 100 poziomow
Bsave SCIEZ$+"top10.dat",ADR To ADR+DLUG
Print "zapisano liste na dysk..."
End Proc
Sortowanie robisz sobie na tablicach tymczasowych T_name$, T_move, T_push a pozniej wywolujesz odpowiednio procedury
WPIS_SKORE_DO_RAM[N] i ODCZYT_SKORE_Z_RAM[N] gdzie N to numer listy dla danego poziomu N.
Dlugosc listy 14kb dla 100 poziomow od 1 do 99. (numer 0 listy jest nieuzywany, zeby nie pogubic sie w numeracji).