atarionline.pl Bliźniak - pierwszy w 2024 program dla Atari - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 02:01 zmieniony
       
      Kolega Mono zrobił to, co zapowiedział - podczas Sylwestra 2023/2024 przygotował atarowską wersję programu "W poszukiwaniu bliźniaka Ziemi" z Bajtka 2/1986. To była jakaś jego zajawka z młodości, którą postanowił sobie zrealizować dla przyjemności. Gra w Bajtku jest spektrumową wersją programu zamieszczonego w Creative Computing 11/1985.

      Mono wiernie odtworzył program, jest tylko jedna i to wyraźna różnica - w wersji Atari mamy ekran tytułowy (przygotowałem mu proste ATASCII art).
      • 2:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 02:01 zmieniony
       
      Teraz pliczki: ATR, LST, BAS.
      • 3:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 02:01 zmieniony
       
      • 4:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 03:01
       
      Listing oryginału jest napisany w języku BASICA, znany jako Advanced BASIC (jedna z czterech wersji Microsoft Basic dla IBM PC i PC junior): ->link<-

      Program w Bajtku to Sinclair Basic: ->link<-

      A na Atari mamy program działający na stockowym Atari czyli w Atari Basic: ->link<-
      • 5:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 04:01 zmieniony
       
      Mono zrobił jeszcze drugą wersję, ma tytuł "Bliźniak CC", a literki CC oznaczają, że to wersja zgodna z oryginalnym listingiem z Creative Computing, a nie ze zmienioną wersją z Bajtka. Obie wersje programu lądują w naszych archiwum gier.
      • 6:
         
        CommentAuthorpancio
      • CommentTime1 Jan 2024 10:01
       
      Byłem, grałem, kosmitów nie znalazłem :-)
      • 7: CommentAuthormono
      • CommentTime1 Jan 2024 13:01 zmieniony
       
      Tych różnic nie jest zbyt dużo i polegają generalnie na innych współczynnikach przy obliczaniu różnych wielkości opisujących planetę, a i to tylko niektórych - większość jest identyczna. W jednym przypadku w wersji bajtkowej dołożony został dodatkowy warunek przy decyzji czy planeta jest kamienista.
      Nie znam się na astronomii, żeby wywnioskować jakie są powody tych zmian, ale zwróciliśmy też wczoraj uwagę że w krótkim wprowadzeniu do gry wersja CC mówi, że podróżujemy przez galaktykę, a wersja bajtkowa że przez kosmos. Może mamy lokalną fizykę :)
      A tak bardziej na poważnie (o ile można mówić o powadze wklepując stary program ze "starej śmierdzącej gazety" w Sylwestra), to może autorowi wersji bajtkowej chodziło o to żeby gra była dynamiczniejsza i wielkości opisujące planety bardziej zróżnicowane (albo odwrotnie - patrz uwaga o mojej ignorancji).

      W wersji dla Atari BASIC:
      - zdefiniowałem zmienną CLS$ zastępującą mi wraz z instrukcją PRINT instrukcję CLS,
      - trzymam rodzaje planet w jednej zmiennej tekstowej S$ (czytanej READ-em z linii DATA) którą potem adresuję za pomocą S$(2*J,2*J+1), bo nie mamy tablicy ciągów,
      - zamieniłem tablicę komunikatów T$ wypisywaniem frazy wprost w konkretnym miejscu,
      - zamieniłem tablicę ciągów C$ opisującą rodzaj planety (kamienista, gazowa, wyparowana, itd.) na tablicę numerów ciągów C i procedurę wypisującą ciąg bazując na C(I),
      - INKEY$ zastąpiłem sekwencją GET #1,A:Y$=CHR$(A) otworzywszy uprzednio kanał dla "K:",
      - funkcję LN zastąpiłem funkcją LOG,
      - no i RND to nasze RND(0).

      Okazało się też że w listingu z archiwum zx-blizniak.7z (nie mam pojęcia skąd ja to mam) jest też kilka błędów związanych prawdopodobnie ze słabą jakością skanu z którego był zrobiony OCR - program syntaktycznie jest poprawny i się tokenizuje, ale działał poprawnie nie będzie:
      - linia 342: GOTO 360 zamiast GOTO 350,
      - linia 423: (.9+RND*.4) zamiast (.8+RND*.4),
      - linia 524: LET I(I)=L*RND*3 zamiast LET I(I)=.1*RND*3,
      - numery linii 2132 i 2133 powinny być w istocie liniami 2182 i 2183,
      - linia 2164: jest "01","02","03",itd. zamiast "O1","O2","O3",...

      Różnice wersji ZX w stosunku do oryginalnej wersji z CC:
      - linia 322: L=EXP(1.5*LOG(M)) zamiast L=EXP(3.5*LOG(M)),
      - linia 323: TA=EXP(-1.1*LOG(M))*10000 zamiast TA=EXP(-2.5*LOG(M))*10000,
      - linia 464: RND(0)*2.2*LOG(MP) zamiast RND(0)*5*LOG(MP),
      - linia 530: jest warunek IF O(I)>173 AND A<=AC AND MP<=3 THEN zamiast IF O(I)>173 AND C(I)=2 THEN,
      - linia 742: dodano warunek IF O(I)>2000 THEN którego nie ma w oryginale,
      - linia 1030: "PRZEMIERZAMY KOSMOS" zamiast "PRZEMIERZAMY GALAKTYKE".

      @Kaz: Chciałem nadmienić iż gra się nazywa "Bliźniak Ziemii", a nie "Bliźniak Mono" :P
      • 8:
         
        CommentAuthorKaz
      • CommentTime1 Jan 2024 13:01
       
      Bliźniak Mono to drugi Mono czyli bliźniacy Mono to po prostu Stereo :)

      A odnośnie wczorajszego programowania Bliźniaka na żywo, dzięki Jurku za wykład o różnicach między Sinclair Basic i Atari Basic i praktyczne porady, jak im zaradzić, przenosząc program z ZX Spectrum na Atari. Może to powinien być osobny wątek, gdzie zamieszczone by były przykłady różnic i sposób ich rozwiązania?
      • 9: CommentAuthormono
      • CommentTime1 Jan 2024 14:01
       
      Fil fri.
      • 10: CommentAuthorpiter
      • CommentTime1 Jan 2024 15:01
       
      szkoda, że nie mogłem być. Fajnie.
      • 11: CommentAuthormono
      • CommentTime1 Jan 2024 16:01 zmieniony
       
      Tam jest jeszcze jedna kłopotliwa sprawa w kodzie o której dyskutowaliśmy m.in. z PeriNoidem wczoraj na zómie. Autor wersji ZX chyba z rozpędu popełnił drobną optymalizację wprowadzając błąd i zmieniając też nieco sposób działania programu.
      Mianowicie w wersji CC jest:
      328 FOR J=1 TO 63:IF M>S(J) THEN 330
      329 NEXT J
      330 PRINT "spectral type of star: ";S$(J):PRINT

      a w ZX:
      328 FOR J=1 TO 63: IF M>S(J) THEN GO TO 330: NEXT J
      330 CLS : PRINT "TYP WIDMOWY GWIAZDY: ",S$(J): PRINT

      Ideą pętli jest, zdaje się, wyszukanie w tablicy S elementu mniejszego niż M i opuszczenie jej (pomijam już wyciek pamięci), a następnie wypisanie typu gwiazdy.
      Optymalizacja polegająca na przeniesieniu NEXT z osobnej linii na koniec poprzedniej spowoduje że pętla wykona się tylko raz, bo instrukcja IF pomija wszystko aż do końca bieżącej linii w przypadku gdy warunek nie jest spełniony.
      Więc niezależnie od warunku nastąpi przejście do linii 330 z J=1.

      W atarowskiej wersji zrobiłem więc analogicznie do oryginału:
      328 FOR J=1 TO 63:IF M>S(J) THEN POP:GOTO 330
      329 NEXT J
      330 ? CLS$;:? "TYP WIDMOWY GWIAZDY: ";S$(2*J,2*J+1):?

      Autor wersji ZX zmienił też nazwy zmiennych i tablic na jednoliterowe.