forum speccy.pl
ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: Tygrys w 2018.07.30, 16:19:54
-
Temat: gwiazdy
Termin: 31 sierpnia 2018
Platforma: ZX81, ZX Spectrum, Sam Coupe, CPC, Sinclair QL, Enterprise, Cobra 1
Język programowania: dowolny istniejący na w/w platformach
Ostatnio był deszcz, nadesłane prace były na prawdę fajne.
To teraz będą gwiazdki ;-) Efekt znany z gier i dem od 30 lat. Były od najprostszych - poziomych, lecących z prawa do lewa,
pionowych - góra / dół, ze środka ekranu do zewnątrz.
Może to być 256bajtów, 1kb albo i więcej - nie ma co się ograniczać ;)
-
Wchodzę. Po urlopie coś "wyklikam", tzn. napiszę. :)
-
postaram się napisać jakiś programik, możesz na mnie liczyć
-
Można wyżywać się. Ani optymalne, ani skomplikowane, do tego w BASICu.
-
Brawa za chęci oraz podjęcie oraz skończenie wyzwania ;)
Ja tym razem postanowiłem że napiszę wszystko w C.
-
Poprawiona wersja i w cz.b tym razem.
-
Popełniłem paralax starfield. Boriel Basic.
-
Pomyślałem, że scroll "po atrybutach" powinien być dość szybki. Przy okazji odświeżyłem sobie wiedzę nt. szybkiego czyszczenia ekranu.
Niestety, w Fuse nie ma płynności, pomimo synchronizacji z wygaszaniem ekranu. Znacie jakiś emulator, który nie ma tej wady?
-
Używam, oprócz fuse, jeszcze ZX Spin.
Gwiazdki obejrzę pod koniec miesiąca, aby nie sugerować się pomysłami innych.
-
EightyOne, ZXSP te uzywam i wyglada to dobrze.
-
Niestety, w Fuse nie ma płynności, pomimo synchronizacji z wygaszaniem ekranu. Znacie jakiś emulator, który nie ma tej wady?
kiedyś straciłem 1,5h kombinując czemu mi efekt płynnie nie chodzi... a to właśnie Fuse takie numery odstawia :/
Polecam Spectaculator - na nim testuję płynność działania tego co piszę.
-
Fuse nie wyświetla części mojego programu z poprzedniego wyzwania - jak spadają poziome elementy napisu >:(
W ogóle nie pokazuje jak spadają - po prostu pojawiają się w końcowej pozycji. Porażka.
I końcowa animacja na nim miga.
Ale nie mogę wyrzucić Fuse, bo poprawnie pokazuje efekt w starcie/menu "Gry 03", który na ZX Spin jest za szybko.
-
A co na to SpecEmu ?
-
A oto i moja skromna wersja napisana na prędce w Boriel's Basic... (bez śmiacia, pierwsze próby na ZX po 34 latach)...
-
A co na to SpecEmu ?
Sprawdziłem SpecEmu. Nie do użycia u mnie. Przez Windows 10? Zadziwiający efekt - ekran cały czas powoli płynie w górę, jak w starym telewizorze z uszkodzoną synchronizacją. Raz na jakiś czas się zatrzymuje, ale od byle czego znowu płynie, od naciśnięcia klawisza, zmiany koloru. Kicha.
Ale poza tym, o ile zdołałem zauważyć, wyświetla poprawnie.
-
Tak jak wspominał Tygrys - ZX Spin lub jak ja: Spectaculator. Niestety tylko te dwa emulatory nadają się do testowania napisanego softu - reszta zawsze ma z czymś problem... To smutne że nie doczekaliśmy się emu dla programistów :(((
-
Fajnie, coraz więcej osób podejmuje się wyzwania, a tym nowe.
Dzięki Mandi!
-
Walczę z tym C, ale zadowolony z prędkości nie jestem. Przy okazji robię testy wydajnościowe operowania danymi różnej postaci.
a jak Wam idzie?
-
Ciężko... jeden pomysł musiałem porzucić po 2 wieczorach bo w życiu bym do końca miesiąca nie zdążył (bo efekty dalekie od zamierzonych ale za to może do czego innego to wykorzystam...) - jutro mam zamiar podejść do drugiego pomysłu... zobaczymy jak to będzie (człowiek ma za mało wolnego czasu na urlopie!)
-
Wyzwanie jakie sobie postawiłem to napisać wszystko w czystym C, bez żadnych wstawek assemblerowych. Do kompilacji użyłem z88dk w wersji 1.99b.
Efekt moich eksperymentów w załączniku. Nie jest to nic wymyślnego, ot - standardowe podejście do tematu.
W nazwie pliku zaszyta jest ilość gwiazdek jakie są poruszane jednocześnie. Każdy punkt jest niezależny, niezależnie może być też sterowany.
Prędkość i kierunek poruszania się w poziomie są losowe, a to losowanie odbywa się co jakiś czas.
Opinie mile widziane ;)
-
Niezłe, ale przy 250 obiektach nie ma płynności.
-
Napisane w LOGO więc powinno być skalowalne na różnych platformach mniej lub bardziej. Nie zapominajmy, że Elwro 800 Jr wygrało konkurs bo poprawnie uruchomiło Logo dla Spectrum. Dołączony plik com powinien działać pod CP/J. Być może także pod graficznym CP/M, zachęcam do sprawdzenia. Obrazy dyskietek są dla Elwro 800 Jr.
oto fragm
powtórz 90 [pod np 19 opu np 1 pod ws 20 pw 1]
już
oto gwiazdb
powtórz 4 [fragm np 40 lw 180]
już
OTO LOSOWB
przypisz "x 1
POWTÓRZ 1000 [JEŚLI KLAWISZ? [STOP] PRZYPISZ "X :X + 1 CZEKAJ 2]
JUŻ
OTO GWIAZDYB
PISZ ["NACIŚNIJ KLAWISZ"]
LOSOWB
LOSUJ :X
PRZYPISZ "X LOSOWA 10
PRZYPISZ "X :X * 100
PRZYPISZ "Y LOSOWA 10
PRZYPISZ "Y :Y * 100
sż
pod
POWTÓRZ 4 [POZX :X POZY :Y GWIAZDB PRZYPISZ "X :X + 100 * LOSOWA 10 PRZYPISZ "Y :Y + 100 * LOSOWA 10]
JUŻ
-
gratulacje pgru - podowałeś wyzwaniu!
Czy ktoś jeszcze się nie lękał i podjął wyzwanie?
-
Ja dziś po pracy przysiądę. Jak nie zdążę to na weekendowy wyjazd biorę laptopa i wtedy skończę. Więc najwyżej będę spóźniony.
-
Ja jak zwykle spóźniony - pewnie dopiero po RW skończę (chociaż source mam w chmurze więc wszystko możliwe - ale nie liczył bym za mocno)).
-
ale nie liczył bym za mocno
Od liczenia masz komputer, Ty masz tylko kod napisać :-)
-
Napisałem takie coś. Jeszcze spróbuję popracować nad szybkością.
-
Jest szybciej. Oto moje gwiazdki.
-
Dzięki Phonex!
Jeżeli ktoś jeszcze nad czymś pracuje to niech skończy - termin jest jedynie orientacyjny, bo to jest wyzwanie dla Was! :D
-
Miło popatrzeć na Wasze efekty. Brawa!
-
....najwyżej będę spóźniony.
Jak obiecałem, tak zrobiłem. Jestem spóźniony. Jak w tym powiedzonku "Kochanie, jak mówiłem, że naprawię zmywarkę, to zrobię to. Nie musisz co pół roku przypominać" ;)
Ponieważ się spóźniłem to trochę opiszę więcej.
Niestety nie udało się we wrześniu znaleźć zbyt wiele czasu na Spectrumowe hobby. Nauczyłem się kilku rzeczy przez ten czas:
- jak coś planujesz, zrób od razu do końca. Trudno, że już 4 nad ranem ;)
- jeśli planujesz coś stworzyć tylko w ASM na przykład w notatniku (czyt. zx spin), to komentarze jakby dobre nie były, to po przerwie nawet dwudniowej nic nie mówią
- ...
- a na serio, nauczyłem się jak obliczać adres w pamięci na podstawie dwóch współrzędnych. Pewnie zawodowcy o tym doskonale wiedzą, ja nie wiedziałem, a w adresie całkiem fajnie to jest zakodowane jak spojrzeć na adres w postaci binarnej (a zawsze się zastanawiałem jak do ASM przenieść długie pętle napisane w basicu).
- fajnie, że ld hl, (adres) pobiera od razu 2 bajty spod adresu - mi się przydaje, gdy w "zmiennej" adres zapisuję sobie jakiś adres ekranu
- rejestr R można wykorzystać do generowania liczb pseudo-losowych. Chyba nie doczytałem jak we własnym programie wykorzystać procedurę w ROM: RANDOMIZE.
Do tematu gwiazdek chciałem podejść inaczej. Zainspirowany filmem Interstellar, miałem ochotę zrobić animowaną gwiazdę pożeraną przez Gargantuę. Idea w obrazku w załączniku. Nie bardzo wiedziałem jak do tego się zabrać. Czy w PCetowym programie 3d stworzyć animacje i wyeksportować jako bitmapy i ładnie zapętlić? A może oprogramować? Większość obrazka i tak byłaby statyczna, a jedynie pierścień animować? Zadanie mnie przerosło.
Skoro konkurs był ogłoszony w sierpniu - czas kiedy widać na niebie perseidy - postanowiłem zrobić "mrygające" niebo i spadające gwiazdy. Na początku nie szło zbyt dobrze - patrz drugi obrazek w załączniku. :D Koniec końców, z braku czasu, zrobiłem wersję uproszczoną, gwiazda spada zawsze w tę samą stronę. Losowo generowane są pozycje gwiazd, częstotliwość ich mrygania oraz odstęp czasowy pomiędzy kolejnymi perseidami. Skromnie, ale jestem zadowolony, że sam od początku do końca udało mi się coś w ASM napisać. (ok, ok, procedurę putpixel pobrałem z internetu, ale za to dzisiaj dokładnie rozumiem jak działa).
-
- jeśli planujesz coś stworzyć tylko w ASM na przykład w notatniku (czyt. zx spin), to komentarze jakby dobre nie były, to po przerwie nawet dwudniowej nic nie mówią
No tak, czasami wracam do swoich asm-owych wypocin sprzed lat i... ni w ząb ich nie rozumiem :) Dlatego narzucam sobie pewien rygor, gdy mam coś napisać - wyniesiony przede wszystkim z programowania w javie:
• Dziel kod na logiczne bloki - procedury/funkcje, nie dłuższe niż 20-30 linii, bo dłuższych się łatwo nie przeanalizuje.
• Każdy taki wydzielony blok rozpoczynaj blokiem komentarzy, co dany kod robi, jakie są parametry wejściowe i wyjściowe.
• Dodawaj komentarze in-line (po rozkazie), nawet jeśli działanie jest trywialne, ale występuje wartość specyficzna.
• Używaj pustych linii nawet wewnątrz jednego bloku kodu, jeśli poszczególne fragmenty kodu są wykonywane warunkowo.
Taki kawałek mojego kodu:
; kopiowanie nazwy pliku/katalogu (hl) -> (de).
; WY: DE wskazuje kolejna pozycje w buforze sortowania
FILETOBUFFER LD A,(HL)
CP "."
JR Z,NORM_END ; .. -> kopiujemy i tyle
PUSH DE
PUSH HL
LD HL,FILENAME
LD A,32
LD B,12
FILEBUFCLR LD (HL),A
INC HL
DJNZ FILEBUFCLR
POP HL
LD DE,FILENAME
LD B,12
NORM_L LD A,(HL) ; szukamy terminatora
INC HL
OR A
JR Z,NORM_L1 ; terminator
CP "."
JR NZ,NORM_EXT_P ; nie kropka? to kopiujemy dalej
LD DE,FILENAME+9 ; ustawiamy na odp. pole w nazwie
LD A,(HL) ; bierzemy pierwszy znak po kropce
INC HL
LD B,3 ; nowa dlugosc
NORM_EXT_P LD (DE),A ; kopiujemy nazwe
INC DE
DJNZ NORM_L
INC HL
NORM_L1 LD DE,FILETIME ; HL = pierwszy bajt po zerze
LD BC,8
LDIR ; kopiujemy parametry
; gotowe
POP DE
LD HL,FILENAME
NORM_END LD BC,20
LDIR ; kopiujemy gotowa nazwe i parametry do bufora sortowania
RET
I jak poszło ze zmywarką? W mojej padła grzałka, poświęciłem sporo czasu na poszukiwanie nowej, w końcu dostałem - i jak się wziąłem za montaż, to się okazało, że tylko spaliła się kostka zasilania grzałki...:D
-
Hmmm poznaję, styl pisania chyba skopiowałeś z Bajtka ;D ;D ;D
Uwagi cenne i właściwie je stosuję, różnie z regularnością bywa :)
-
Hmm, może i skopiowałem skądś styl, bo kod pisany od zera jakiś miesiąc temu ;)
-
Mam rozgrzebany swój "starfield" ale dzisiaj musiałem odpocząć od m68 i vectoryzacji i zrobiłem małą pchełkę: starfield w 50 bajtach :)
ps. jakby ustawianie PAPER, INK i CLS wrzucić do loadera, to sam kod miałby 39 bajtów :D
-
:) Niezłe :)
-
OR A
RL (HL)
Fajne, a ja zawsze na około...
-
Ważne aby swoje wyzwania kończyć, bo dzięki temu osiąga się cel, a i uczy wielu rzeczy ;)