forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: Tygrys w 2018.07.30, 16:19:54

Tytuł: Wyzwanie dla programistów #5
Wiadomość wysłana 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ć ;)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: ZX Freeq w 2018.07.30, 19:40:51
Wchodzę. Po urlopie coś "wyklikam", tzn.  napiszę. :)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: gorgh w 2018.07.30, 22:32:22
postaram się napisać jakiś programik, możesz na mnie liczyć
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.08.09, 21:19:58
Można wyżywać się. Ani optymalne, ani skomplikowane, do tego w BASICu.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.12, 11:39:44
Brawa za chęci oraz podjęcie oraz skończenie wyzwania ;)

Ja tym razem postanowiłem że napiszę wszystko w C.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.08.12, 14:13:06
Poprawiona wersja i w cz.b tym razem.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: smok.wawelski w 2018.08.13, 14:08:53
Popełniłem paralax starfield. Boriel Basic.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: smok.wawelski w 2018.08.14, 15:36:00
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?
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.14, 15:39:06
Używam, oprócz fuse, jeszcze ZX Spin.

Gwiazdki obejrzę pod koniec miesiąca, aby nie sugerować się pomysłami innych.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.08.14, 17:29:37
EightyOne, ZXSP te uzywam i wyglada to dobrze.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Dalthon w 2018.08.14, 21:34:52
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ę.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Phonex w 2018.08.15, 16:39:59
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.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Gryzor w 2018.08.15, 21:05:41
A co na to SpecEmu ?
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Mandi^CT w 2018.08.15, 22:36:47
A oto i moja skromna wersja napisana na prędce w Boriel's Basic... (bez śmiacia, pierwsze próby na ZX po 34 latach)...
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Phonex w 2018.08.15, 23:21:34
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.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Dalthon w 2018.08.15, 23:42:18
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 :(((
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.16, 20:08:50
Fajnie, coraz więcej osób podejmuje się wyzwania, a tym nowe.

Dzięki Mandi!
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.21, 15:18:26
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?
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Dalthon w 2018.08.21, 19:32:18
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!)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.25, 12:44:48
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 ;)


Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.08.25, 14:48:47
Niezłe, ale przy 250 obiektach nie ma płynności.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: pgru w 2018.08.28, 19:44:11
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

pod
POWTÓRZ 4 [POZX :X POZY :Y GWIAZDB PRZYPISZ "X :X + 100 * LOSOWA 10 PRZYPISZ "Y :Y + 100 * LOSOWA 10]
JUŻ
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.08.31, 11:46:13
gratulacje pgru - podowałeś wyzwaniu!

Czy ktoś jeszcze się nie lękał i podjął wyzwanie?
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: ZX Freeq w 2018.08.31, 12:16:38
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.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Dalthon w 2018.08.31, 13:44:24
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)).
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Mandi^CT w 2018.08.31, 17:39:08
ale nie liczył bym za mocno

Od liczenia masz komputer, Ty masz tylko kod napisać :-)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Phonex w 2018.08.31, 23:56:47
Napisałem takie coś. Jeszcze spróbuję popracować nad szybkością.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Phonex w 2018.09.01, 16:44:55
Jest szybciej. Oto moje gwiazdki.
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.09.03, 09:44:26
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
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.09.03, 09:50:20
Miło popatrzeć na Wasze efekty. Brawa!
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: ZX Freeq w 2018.10.07, 18:10:22
....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).
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: trojacek w 2018.10.07, 18:41:25
- 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
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: ZX Freeq w 2018.10.07, 18:47:01
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 :)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: trojacek w 2018.10.07, 18:48:49
Hmm, może i skopiowałem skądś styl, bo kod pisany od zera jakiś miesiąc temu ;)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Dalthon w 2018.10.07, 23:57:43
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
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: KWF w 2018.10.08, 00:18:04
:) Niezłe :)
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: ZX Freeq w 2018.10.08, 09:04:38
OR A
RL (HL)

Fajne, a ja zawsze na około...
Tytuł: Odp: Wyzwanie dla programistów #5
Wiadomość wysłana przez: Tygrys w 2018.10.08, 11:40:48
Ważne aby swoje wyzwania kończyć, bo dzięki temu osiąga się cel, a i uczy wielu rzeczy ;)