kategoria: AMOS
[#481] Re: Tworzenie dem

@selur, post #479

Mogę używać zmiennej liczbowej. Tak właśnie wczytuję z innego pliku dane do tablicy poziomów. Jeśli jest zapisana liczba w pliku tekstowym, to wczyta mi liczbę jako zmienną liczbową. A po drugie też próbowałem jako zmienną tekstową wczytywać, po czym komendą VAL chciałem zmienić na tekstową. Ten sam objaw. Wczytuje z pliku tylko wtedy, gdy otwieram plik jako OPEN IN. Ale wtedy go nie nadpiszę, bo jest otwarty tylko do odczytu.

To mi działa:

Open Out 1,"dane/01.hi"
MOVES=1000
Print #1,MOVES
Close 1

Open In 1,"dane/01.hi"
Input #1,MOVES
Print MOVES
Close 1


Ostatnia aktualizacja: 06.02.2022 20:54:42 przez tukinem
[#482] Re: Tworzenie dem

@tukinem, post #480

musze to sprawdzic, bo juz sam nie pamietam...
[#483] Re: Tworzenie dem

@selur, post #482

Znalazłem w książce, że jest jeszcze komenda APPEND. Zamiast Open Out i Open In mógłbym użyć APPEND, odczytać zmienną i ją później skasować. Tylko czy to dobrze nadpisze w pliku.
[#484] Re: Tworzenie dem

@tukinem, post #481

no Open In to inaczej LOAD a Open Out to inaczej SAVE
[#485] Re: Tworzenie dem

@selur, post #484

Tylko, że mam teraz tak:
If LEVEL=1 Then Open In 1,"DANE/01.DAT" : Open Out 3,"DANE/01.HI"
.......................
If LEVEL=53 Then Open In 1,"DANE/53.DAT" : Open Out 53,"DANE/53.HI"

I teraz po wczytaniu tablicy z pierwszego pliku zamykam go i już nie używam. Drugi plik jest w pamięci do ukończenia poziomu. Jeśli go wczytam jako Open In, to potem program nie będzie umiał go z automatu wczytać jako Open Out, żeby zapisać rekord. I znów musiałbym wpisać 53 razy If level=blablabla THEN Open Out plik.

Myślałem, żeby użyć zmiennej tekstowej jako nazwa pliku, ale problem w tym, że trzeba by zapisać ścieżkę do niego, np.: PLIK$="DANE/01.HI"
I wtedy Open Out 3,PLIK$

Ale czy się uda?
[#486] Re: Tworzenie dem

@tukinem, post #485

O kurde da się :)

Wpisałem tak:
MOVES=1000
PLIK$="DANE/01.HI"
OPEN OUT 1,PLIK$
?#1,MOVES
CLOSE1

OPEN IN 1,PLIK$
INPUT #1,MOVES
? MOVES
CLOSE1

No i pokazało mi 1000
To teraz muszę się babrać i zmieniać te 53 warunki wczytywania poziomów szeroki uśmiech a może to skrócę w pętlę, jeśli to tak działa fajnie...

Udało się :)
Plik z danymi highscore zapisał:
Tukinem
 253
 0


Ostatnia aktualizacja: 06.02.2022 21:28:30 przez tukinem
[#487] Re: Tworzenie dem

@tukinem, post #486

Ufffff..... tak mieszasz, ze az sam zapomnialem jak sie nazywam

No wiec... jak sie stosuje plik tekstowy:

Przechowujesz gdzies w tablicy lub zmiennych dzisiec Imion i dziesiec liczb punktow
Czyli np.

1. Zdzichu 10000
2. Rychu 8500
3. Mietek 5000
4. Stachu 4890
...
...
10.Bozydar 10

Zapisanie zmiennych w danym pliku poziomu, kolejno zmienna tekstowa, zmienna liczbowa, zmienna tesktowa, zmienna liczbowa i tak 10 razy.

imie_1$="Zdzichu"
punkty_1=10000
imie_2$="Rychu"
punkty_2=8500
...

Open Out 1,"hisc_Poziom1.txt"
Print #1, imie_1$ : Rem pierwsza linia w pliku tekst ( imie)
Print #1, punkty_1 : Rem druga linia w pliku liczba (punkty)
Print #1, imie_2$ : Rem trzecia linia w pliku tekst (imie)
Print #1, punkty_2 : Rem czwarta linia w pliku liczba (punkty)
Print #1, imie_3$
Print #1, punkty_3
Print #1, imie_4$
Print #1, punkty_4
....
...
Print #1, imie_10$
Print #1, punkty_10 : rem dwudziesta linia w pliku liczba (punkty)
Close 1

Odczytanie danych w tej samej kolejnosci i ilosci danych

Open in 1,"hisc_Poziom1.txt"
Input #1, imie_1$
Input #1, punkty_1
Input #1, imie_2$
Input #1, punkty_2
Input #1, imie_3$
Input #1, punkty_3
..
...
....
Input #1, imie_10$
Input #1, punkty_10
Close 1

wyswietlanie Hi score

Print "1.";imie_1$,punkty_1
Print "2.";imie_2$,punkty_2
Print "3.";imie_3$,punkty_3
....
Print "10.";imie_10$,punkty_10
[#488] Re: Tworzenie dem

@selur, post #487

Rozumiem to.

U mnie będzie każdy plik do osobnego poziomu. Będzie miejsce tylko na jednego gracza.
Dane będą takie:
NAZWA jako zmienna tekstowa
MOVES jako zmienna liczbowa (liczba ruchów)
PUSHES jako zmienna liczbowa (liczba przesunięć skrzyń)
i ewentualnie TIMER/50 jako zmienna liczbowa (czas przejścia danego poziomu).

Na kilku graczy to zbyt trudne, bo musiałbym używać komend POF, EOF, itd. żeby skakać z miejsca na miejsce w plikach z danymi, a tu już mnie przerasta zresztą później wyświetlając HIGHSCORE nie będzie miejsca na ekranie ani czasu, żeby wczytywać po kolei każdy poziom z kilkoma graczami. A tak na ekranie będzie pierwszych 10 poziomów, po kursorze, lub joy'u w prawo będzie kolejne 10 poziomów highscore itd.

Ale to już nie dziś. Myślę że najgorsze ogarnąłem
[#489] Re: Tworzenie dem

@tukinem, post #488

Dodałem wpisywanie highscore po przejściu poziomu, dodałem ekran z highscore, w którym można wyświetlać co 20 poziomów rekordy. Po wyborze kolorów "amigowych" dodałem migające litery przy wyborze. Na ekranie startowym i w menu głównym (korytarzu) po wciśnięciu "H" przechodzimy do ekranu highscore. W Amosie wszystko jest super.

Po skompilowaniu gra wywala błąd 80000003. Przy przejściu na procek 020 działa. O co tu może chodzić? Może zbyt dużo ekranów naraz (maksymalnie są 3)? Albo zbyt dużo przeskoków w programie? (Bo kilka tam jest, a nawet opcja GOSUB HIGHSCORE prowadzi na sam koniec kodu, bo tam go zapisałem)

Ostatnia aktualizacja: 08.02.2022 11:09:16 przez tukinem
[#490] Re: Tworzenie dem

@tukinem, post #489

Gdzies juz o tym pisalem. W zaleznosci na czym skompilujesz program w Amosie bedzie sie wieszac lub nie.
Najlepiej kompilowac na A500 68000 i jak najnizszym Os'em.
[#491] Re: Tworzenie dem

@selur, post #490

Kompilowane pod tą samą konfiguracją. OCS, 68000 Fastest possible. Pod Amosem działa, a po kompilacji nie. Coś tu mam nie halo ale dowiem się co. Będę ucinać kod po kawałkach aż znajdę
[#492] Re: Tworzenie dem

@tukinem, post #491

Coś mam bardzo schrzanione :-/ Wyciąłem cały kod, zostawiłem tylko kilka linijek z otwieraniem ekranu i wpisaniem kilku wyrazów. Po kompilacji na 68000 ciągle "disk activity", a pod 020 działa... Najlepsze to, że stara wersja gry kompilowana wcześniej (bez highscore) działa. Chyba coś z Amosem mi się porobiło
[#493] Re: Tworzenie dem

@tukinem, post #492

Wyłączyłem "more compatible" i teraz się uruchamia pod 68000. Nie rozumiem... może to, że użyłem komendy TIMER porąbało wszystko, ale raczej nie, bo potem cały kod wyciąłem i też był błąd...

Poddaję się.
https://szybkiplik.pl/R9YKL3r9Ae
Tu jest link do adf z Sokobanem skompilowanym w nowej wersji. Jest highscore itd. Działa przy wyłączonym w CPU "more compatible". Na adf-ie jest dołączony plik soko.amos z kodem źródłowym. Jak ktoś chce, to niech się bawi. Ja mam tego dość. Wyczyszczając cały kod gra dalej się krzaczy. Kompilator mam w porządku, bo skompilowałem kod z "hello world" i to akurat działa. Nie wiem co tam jest w kodzie schrzanione. Wyskakuje mi ten sam błąd, co w VisualPrefs oraz w Birdie. Może jutro sprawdzę na normalnej Amidze czy to ruszy na podstawowym procesorze.

Ostatnia aktualizacja: 08.02.2022 12:43:44 przez tukinem

Ostatnia aktualizacja: 08.02.2022 12:45:05 przez tukinem
[#494] Re: Tworzenie dem

@tukinem, post #493

Jeśli przy wyłączonym more compatible gierka działa, a przy włączonym nie, to na A500 z 68000 nie zadziała.
[#495] Re: Tworzenie dem

@Norbert, post #494

nie wiem czy dobrze zrozumialem..

ALE skoro gra dziala w Amosie (czy to na sprzecie czy na emulatorze) a po kompilacji (czy to na sprzecie czy w emulatorze) sie zawiesza wina jest blad w trakcie kompilacji a nie kod programu... jasne jak slonce
[#496] Re: Tworzenie dem

@selur, post #495

Co prawda programistą nie jestem ale czytam i staram się rozumieć co czytam. Więc tak sobie czytam i myślę że może problemem jest kompilacja przy ustawieniu Fastest Possibile. Może rozsądniej byłoby ustawić na Cycle Exact dla zachowania większej kompatybilności z 68000?
1
[#497] Re: Tworzenie dem

@tukinem, post #493

Kupiłeś Amigę jakiś czas temu, to sprawdź czy na niej działa ;)
[#498] Re: Tworzenie dem

@karolb, post #497

Sprawdzę jutro na prawdziwej Amidze.

Kompilator Amosowy wygląda mi na taki programowy który po swojemu kompiluje i nie ważne czy to się robi na 68000 czy na 68060. On ma swoje środowisko i działa po swojemu. Te wszystkie gry które tworzyłem kompilowałem zawsze pod konfigiem 040 fastest possible i JIT. A później testowałem na różnych konfigach i nigdy nie miałem błędu 80000003. Raz mi się zdarzyło że po kompilacji było coś nie tak ale szybko to naprawiłem bo jednak pod Amosem wszystko działa bardziej elastycznie, a po kompilacji był tam problem. Chodzi o odczytywanie tablic a wczytywanie wyszło poza dane z tablicy. Amos to omijał a po kompilacji już nie było tak łatwo.

Może tu chodzi o to że jest bardzo dużo plików w pętli do odczytu przy wczytywaniu highscore? Tam jest 53 pliki po 20 bajtów odczytywane po kolei i zamykane. Może o to chodzi? Albo o to że dałem komendę Flash do migania kolorów? To są dwie nowe komendy których użyłem.

Poza tym dałem Wam link do ADF. Możecie sprawdzić u siebie. Jest plik z całym kodem gry.

Ostatnia aktualizacja: 08.02.2022 18:20:15 przez tukinem

Ostatnia aktualizacja: 08.02.2022 18:30:22 przez tukinem
[#499] Re: Tworzenie dem

@tukinem, post #489

Juz to pisalem wiele razy, 8000003 to jest blad odczytu/zapisu slowa (2 bajty), albo dlugiego slowa (4 bajty) spod nieparzystego adresu pamieci. 68000/68010 tego nie obsluguje. Inne procesory 68k obsluguja.
Masz do wyboru:
1. odczytywac/zapisywac dane jako bajty
2. Przeorganizowac dane tak zeby nie bylo odczytu/zapisu spod nieparzystego adresu.
3. Nie uzywac danych typu bajt, tylko slowo.
4. Dodac pusty bajt (padding) w miejscach, gdzie slowa i dlugie slowa wchodza na nieparzyste adresy.
[#500] Re: Tworzenie dem

@tukinem, post #498

włączę się w dyskusję...

Chodzi o odczytywanie tablic a wczytywanie wyszło poza dane z tablicy. Amos to omijał a po kompilacji już nie było tak łatwo.

Może tu chodzi o to że jest bardzo dużo plików w pętli do odczytu przy wczytywaniu highscore? Tam jest 53 pliki po 20 bajtów odczytywane po kolei i zamykane. Może o to chodzi?


a może w grze już skompilowanej program nie może znaleźć tych plików? jak uruchamiasz grę? z dyskietki (adf) czy z dysku twardego? ścieżki do plików masz bezwzględne czy jakoś relatywnie do miejsca gdzie jest plik wykonywalny gry?

blitz basic to co prawda nie amos. ale... w blitz basicu kiedyś miałem takie objawy jak piszesz. po jakimś czasie doszedłem do tego, że na dyskietce, na którą nagrywałem plik wykonywalny nie było bibliotek albo fontów których wymagał mój program. może to coś takiego?

Ostatnia aktualizacja: 08.02.2022 19:49:03 przez c64portal

Ostatnia aktualizacja: 08.02.2022 19:49:33 przez c64portal
[#501] Re: Tworzenie dem

@c64portal, post #500

Ale ta gra działa poprawnie na 020.
Tylko teraz na 68000 nie "wywala"
[#502] Re: Tworzenie dem

@tukinem, post #493

Czasami gra się wyłącza z komunikatem "File already opened". Można ten błąd wywołać przez kilkukrotne restartowanie poziomu.

Ostatnia aktualizacja: 08.02.2022 21:10:54 przez forge
[#503] Re: Tworzenie dem

@forge, post #502

To może być to. Teraz jestem w pracy ale jutro spróbuję to zmienić. Tylko że podczas samej gry nie jest nic tam ładowane. Przed grą jest ładowany plik z tablicą rozmieszczenia elementów poziomu i zaraz jest Close 1. Później po przejściu poziomu ładowany jest drugi plik z highscore. Chyba że liczba 10000 to za duża liczba i wchodzi na ten "nieparzysty bajt". Wczytywanie tablic zmieniłen w pętlę. Może przez to się coś psuje.
[#504] Re: Tworzenie dem

@tukinem, post #503

Ma byc cos takiego ,tak?

"Dane będą takie:
NAZWA jako zmienna tekstowa
MOVES jako zmienna liczbowa (liczba ruchów)
PUSHES jako zmienna liczbowa (liczba przesunięć skrzyń)
i ewentualnie TIMER/50 jako zmienna liczbowa (czas przejścia danego poziomu)."

I teraz zalezy jak to AMOS obsluguje.
Ale NAZWA typu
dc.b "Queen," 0 ; ma lacznie z terminatorem (null) 6 bajtow, czyli jest ok, parzysta wartosc
ale
dc.b "King",0 ; ma lacznie z terminatorem (null) 5 bajtow, czyli nie jest ok, bo to nieparzysta wartosc, o ile dane z Twojej wersji hiscore sa odczytywane/zapisywane po kolei z/do tego pliku
Najprosciej to rozwiazac tak, zeby przydzielic na sztywno pozycje w Twoim hiscore.
Czyli dla 20 bajtowego, np tak:
offset 0 to NAZWA gracza jako tekst/ascii, od bajtu 0 do bajtu 12 lub 13 zalezy, czy 0 musi byc na koncu w AMOS-ie, czy tez nie
offset 14 to MOVES to hex value jako slowo/word
offset 16 to PUSHES to hex value jako slowo/word
offset 18 to TIMER/50 to hex value jako slowo/word
Jesli tak masz to zdefiniowane to powinno zadzialac na 68000.
Ale jesli przechowujesz dane typu MOVES jako ascii czyli 10000, a nie hex to sie nie zmiesci. 2 bajty to maksymalnie jest miejsca na wartosc asciii 99, a jako hex to 65535 ($FFFF).
[#505] Re: Tworzenie dem

@Don_Adan, post #504

Ale jakiekolwiek dane można przechowywać w plikach i je wczytywać przecież. Sama dana nr poziomu LEVEL=1 jest nieparzyste. I program powinien wyświetlić błąd. Gdybym miał w pliku zapisaną tablicę jednowyniarową i tam były liczby nieparzyste to też błąd? Każdy mój plik z danymi tablic zaczyna się od nieparzystego bajta, bo zmienne liczbowe dodatnie są zapisywane w pliku jako liczba ze spacją na początku, czyli zaczynają się od nieparzystego bajtu. Z tym nie było problemu. Skończy się na tym że tą pętlę wczytującą pliki zamienię z powrotem na ciąg IFów i THENów.
Tylko dziwi mnie że po wykasowaniu 90% kodu i zostawieniu początku gdzie jest otwierany ekran i kilka napisów, już też był błąd. Tak jakby plik był zainfekowany czymś. Może ja mam już źle kompilator ustawiony? Już nie wiem czy mam mieć ustawione CLI Exec czy WB Exec czy może Compiled?

Ostatnia aktualizacja: 08.02.2022 22:56:11 przez tukinem
[#506] Re: Tworzenie dem

@tukinem, post #505

Nie wiem jak to jest w Amosie ale 1, to moze byc zarowno bajt $01 i wtedy nastepne dane sa nieparzystym adresie, albo jako slowo $0001 i wtedy jest ok.

tablice bajtowe sa ok np.
0,5,6,7,8,66,34
.....
ale musza miec PARZYSTA dlugosc, czyli liczba bajtow musi byc np. 1000, a nie 999 lub 1001.
Jesli dlugosc tablicy jest nieparzysta albo nieznana to w asemblerze sie uzywa na koncu tablicy komendy "even", i ona wyrownuje (dodaje) pusty bajt na koncu danej tablicy o ile jej wielkosc jest nieparzysta, a jak jest parzysta to nie dodaje. Pewnie jakas podobna komenda jest tez w AMOS-ie, ale to Selur sie zna. Niektorzy koderzy zawsze uzywaja komendy "even" po kazdej tablicy lub danych i to jest dobre przyzwyczajenie.

Poza tym zwykle jest iles danych typu bajt, i jezeli np. masz 4 dane typu bajt, w tej kolejnosci:
bajt1
bajt2
bajt3
bajt4
to nastepne dane sa na parzystym offsecie i wszystko bedzie ok.
Ale juz w tej kolejnosci, to bedziesz mial problem:
bajt1
bajt2
bajt3
word1
bajt4
bo slowo (word1) bedzie na nieparzystym offsecie. Oczywiscie da sie odczytac tez word spod nieparzystego adresu na 68000, ale to trzeba specjalnego odczytu uzyc do tego, sporo wolniejszego niz zwykly odczyt.

Ogolnie to mozesz tez zmienic strukture swojego hiscore na taka, i wtedy nie musisz nic definiowac. Powinno zawsze dzialac, o ile to jest tylko 1 zapis, bo przy 2 zapisach po kolei to juz zalezy od dlugosci nazwy gracza czy bedzie parzysta czy nieparzysta.

offset 0 to MOVES to hex value jako slowo/word
offset 2 to PUSHES to hex value jako slowo/word
offset 4 to TIMER/50 to hex value jako slowo/word
offset 6 to NAZWA gracza jako tekst/ascii
[#507] Re: Tworzenie dem

@tukinem, post #505

Ogolnie tu nie chodzi o wartosci jakie sa w tablicy bo te moga byc dowolne, nieparzyste tez. Ale o to zeby tablice mialy zawsze parzysta dlugosc. Bo jak pierwsza tablica (bajtowa) bedzie miala nieparzysta dlugosc, a tuz za nia bedzie druga tablica (wordowa), to sie bedzie wywalac na 68000. Ale jak dasz tablice odwrotnie, czyli napierw wordowa a potem bajtowa to sie nie wywali na 68000.
[#508] Re: Tworzenie dem

@Don_Adan, post #507

No tak ale jak stworzyc tablice o nieparzystej dlugosci, skoro w Amosie kazda komorka tablicy liczbowej ma az 4-bajty.
[#509] Re: Tworzenie dem

@selur, post #508

Mozna i tak, choc to jest troche marnowanie pamieci, zamiast wielokrotnosci 1 bajta, uzywac wielokrotnosci 4 bajtow. Ale ma pewnie taka zalete, ze jest bardziej odporne na bledy programistyczne. Ciekawe jak AMOS obsluguje takie tablice, czy rozszerza bajt do dlugiego slowa, czy tez odczytuje od razu dlugie slowo? Bo to drugie jest szybsze, i moze lepiej w AMOS-ie jest definiowac bajtowe tablice jako tablice longwordowe, skoro i tak tyle samo miejsca w pamieci zajmuja?
W takim razie problem tukinema to jest dlugosc tekstu w hiscore i zamiana kolejnosci (tekst na koncu) w hiscore powinna zalatwic sprawe.
[#510] Re: Tworzenie dem

@Don_Adan, post #509

Chyba że błąd jest przy wczytywaniu pliku z danymi hurtem dałem komendę Right$(Str$(LICZBA),2). To jest ominięcie dodawania spacji na początku zmiennej liczbowej. Chodzi o wczytywanie nazwy PLIK10 PLIK11 itd żeby nie tworzyć 53 linijek IF ... THEN.

Ostatnia aktualizacja: 09.02.2022 08:21:15 przez tukinem
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem