kategoria: AMOS
[#1] programowanie amos
nawiązując do wątku gra w amosie :)

zagadka rozwiązana i od razu sam się nawinął pomysł żeby małpą sterować
więc zrobiłem to tak
curs off
x=20
y=10
do
if key state(76) then dec y
if key state(77) then inc y
if key state(78) then inc x
if key state(79) then dec x

if x=0 then inc x
if x=39 then dec x
if y=0 then inc y
if y=24 then dec y

print at(x,y);"@";
wait 4
print at()x,y);" ";
loop

i pieknie działa :)
[#2] Re: programowanie amos

@QUAD, post #1

I gitara. Za tydzien dodasz do tego grafike, kolizje, strzaly, klucze, mure i jedziesz juz z gra :)
[#3] Re: programowanie amos

@sordan, post #2

no i rogalika mozesz juz robic:) jedziesz:)
[#4] Re: programowanie amos

@QUAD, post #1

Stosowanie instrukcji wait w głównej pętli nie jest zbyt eleganckie.
Zamiast tego przed zmianą zmianą wartości zmiennych x lub y lepiej byłoby je zachować.
Instrukcji print też lepiej byłoby użyć tylko w razie konieczności - czyli tylko po zmianie wartości x lub y. Dzięki przechowaniu wartości x i y można zrobić bajer z wyświetleniem małpy najpierw w nowej pozycji - a dopiero potem zgasić starą. W detekcji kolizji też lepiej użyć if x<=0 then x=1 niby wartość nie x nie powinna być niższa od 0 - ale interpretator różne cuda wyczynia...
Niby to prosta wprawka - ale dobrze byłoby też pomyśleć o wyjściu z programu. Coś w stylu Repeat ... Until inkey$=chr$(27).

W Amosie może nie ma to większego znaczenia - ale jeżeli będziesz chciał napisać coś pod system (na przykład w AmiBlitzu) to brak zbędnego zajmowania procesora ma kluczowe znaczenie.
[#5] Re: programowanie amos

@QUAD, post #1

Dobra cwaniaki :) Teraz zróbmy efekt spadających liter jak w "matriksie" kto się podejmuje?
[#6] Re: programowanie amos

@sordan, post #2

właśnie walczę trochę w robocie ale edytor mi się zwiesił jak rysowałem postać, na prawdziwiej amidze mi się jeszcze nie zawiesił :)
udało mi się wczoraj jakiegoś boba przykładowego podstawić zamiast małpy ale bob był strasznie wielki i chciałem coś mniejszego spłodzić, napisz mi tylko czy te wszystkie rysunki robisz w edytorze amosa czy w czymś zewnętrznym ?
[#7] Re: programowanie amos

@QUAD, post #6

Tylko nie w edytorze amosa, bo ten jest toporny i malo uzyteczny.
Wystarczy narysowac grafike np. w Delux Paincie, nagrac ja jako obrazek Save Iff.
Pozniej ladujemy w amosie taki obrazek komenda Load Iff "nazwa_pliku.iff",0 i wycinamy poszczegolne boby komenda np. Get Bob 0,numer boba,x1,y1 to x2,y2 itd. Pozniej nagrywamy bank komenda Save "boby.abk",1 i mamy stworzony bank obrazow dla bobow.
[#8] Re: programowanie amos

@selur, post #7

dzięki za podpowiedź, bo trochę nie ogarniam tych ikonek w edytorze amosa, będę kombinował dalej :)
[#9] Re: programowanie amos

@QUAD, post #6

Ja robie troche inaczej niz selur. Wczesniej jak robilem sam grafike to wszystko powstawalo w PersonalPaint 7.1 (bron boze w edytorze obiektow Amosa). Teraz jak dostaje grafike od aszu to tez wszystko obrabiam w PersonalPaint 7.1. Przykladowy tileset zapisuje w pliku iff, rozmieszczam grafike gdzie popadnie, a pozniej wczytuje plik iff w edytorze objektow Amosa i tam wycinam grafike i zapisuje ja juz jako objekty. Tam jest fajne narzedzie w menu do tego i nie trzeba recznie wpisywac wspolrzednych zeby wyciac boba.

Ostatnia aktualizacja: 15.05.2015 11:50:05 przez sordan
[#10] Re: programowanie amos

@sordan, post #9

szybkie pytanie, jak zrobić kolizję postaci np z murkiem, robiłem wcześniej kolizję boba z bobem, ale domyślam się że nie ma sensu robić tego w ten sposób bo będzie za dużo bobów i jest to bez sensu :P
ogólnie nie chce kopiować tego co selur robi, więc chcę coś nowego, zrobiłem podskakiwanie postaci (na razie toporne) i potrzebuję zrobić np. platformę, po której postać się porusza.
W tej chwili wygląda to tak że postać ma ustawione y=y+10 czyli leci w dół ekranu ciągle, chyba że napotka platformę (w tej chwili jest w postaci boba) wtedy y=y-10
[#11] Re: programowanie amos

@QUAD, post #10

Szybka odpowiedź: Podziel ekran (320x256) na bloki 16x16, wtedy będziesz miał 20 x 16 bloków. Teraz stwórz tablicę 20x16 która będzie przetrzymywała wartości: 1 - murek, 0 - nic. Znając współrzędne swojego bohatera możesz wyliczyć w którym miejscu znajduje się on w tej tablicy i podjąć odpowiednie kroki. Potrzebujesz przykładu ?
[#12] Re: programowanie amos

@asman, post #11

dzięki wielkie, chodzi mi głównie o wskazówki,aż tak wygodny nie jestem żeby wklepać jakiś przykład bo nic z niego nie zapamiętam, zauważyłem że w moim wieku czym więcej się namorduję z czymś tym szybciej i więcej zapamiętuję :) starość nie radość :D
[#13] Re: programowanie amos

@QUAD, post #12

Zmiana koncepcji, na razie w ramach nauki zacząłem coś takiego gra
Jak widać w kodzie, jest 6 kolorów kulek, które generowane są losowo, dodatkowo ograniczyłem żeby nie wychodziły poza tunel, aktualnie mam problem taki że kulki po naciśnięciu fire za szybko zmieniają kolor, i ciągle się zastanawiam jak zrobić żeby na dole się zatrzymywały(to nie jest wielki problem) i zostały wygenerowane nowe na tych samych zasadach(znaczy żeby znowu były 3 boby najlepiej takie same czyli 0,1 i 2)
poniżej wklepuje kod aktualny

otwieranie ekranu
make mask
get bob palette

load iff "tło"
double buffer

a=rnd(5)+1
b=rnd(5)+1
c=rnd(5)+1

y=0
q=80
x=1
z=-15
f=-30

do
bob 0,q,y,a : bob 1,q,z,b : bob 2,q,f,c

y=y+1: z=z+1: f=f+1

if jleft(1) then gosub lewo
if jright(1) then gosub prawo
if jdown(1) then gosub wdol
if fire(1) then gosub fajer

if q<=33 then q=33
if q>=109 then q=109
wait vbl
loop
lewo:
q=q-15
return

prawo:
q=q+15
return

wdol:
y=y+10 : z=z+10: f=f+10
return

fajer:
swap a,b : swap b,c
return

// co mogę poprawić w tym kodzie, na pewno coś się da ulepszyć, czekam na sugestie amosowych maniaków (wszystkich na litere S :) )
[#14] Re: programowanie amos

@QUAD, post #13

Prawie zawsze cos sie da ulepszyc. Opoznienie czasowe (funkcja Timer) bylo juz podane w grze sordana, przeanalizuj to jeszcze raz.
Nie wiem jaki jest koniec ramki wiec domyslnie zakladam, ze max dla Y to 230 pikseli. Po osiagnieciu "dna" wklej klocek funkcja Paste Bob w miejscu gdzie znajduje sie obecny Bob, ustaw ponownie wspolrzedne y,z,f i wroc do poczatku petli Do Loop.


a=rnd(5)+1
b=rnd(5)+1
c=rnd(5)+1

y=0
q=80
x=1
z=-15
f=-30

koniec=0
czas_o=Timer

Do
bob 0,q,y,a : bob 1,q,z,b : bob 2,q,f,c

Gosub opadanie_klocka <----- FUJ


if jleft(1) then gosub lewo
if jright(1) then gosub prawo
if jdown(1) then gosub wdol
if fire(1) then gosub fajer

wait vbl

Exit if koniec=1 <----- wyjscie z petli jesli klocek opadl na dno
Loop

lewo:
If q>48
q=q-15
End if
return

prawo:
If q<124
q=q+15
End if
return

wdol:
If y+10<230
y=y+10 : z=z+10: f=f+10
End if
return

fajer:
If Timer-czas_o>25 <--- wywolanie zamiany kolorow max. co pol sekundy
swap a,b : swap b,c
czas_o=Timer
End if

return

opadanie_klocka:
If y<230 <----- jesli nie osiagnieto dna
y=y+1: z=z+1: f=f+1
else
koniec=1
End if

return
[#15] Re: programowanie amos

@selur, post #14

dzięki wielkie, opcji timer użyłem również do przesuwania klocków w lewo i w prawo (zrobiłem to na tej samej zasadzie)
boby się kopiują i lecą z góry kolejne, musiałem mały trick zrobić bo jak na końcu był return to boby leciały ciągle takie same haha, mogłem to załatwić na kilka sposobów i wybrałem taki że przed rnd() dałem nazwę (tak ja to robi sordan) DUPA: a na końcu zamiast return to jest gosub dupa:
zastanawiam się czy nie lepiej by było generować nowe cyfry na końcu pętli a potem normalnie dawać return

nie wiem czy jest jasne to co napisałem bo trochę chaotycznie, ale wszystko dlatego że mam mało czasu a tu trzeba zrobić kolizje z bobami innymi no i jakoś znikać te kulki (czuje że to znikanie będzie najgorsze)

jeszcze raz dzięki :)
[#16] Re: programowanie amos

@QUAD, post #15

A juz myslalem ze sie poddales bo cos za dlugo cisza byla, a tu prosze chwila nieuwagi i prawie gotowy tetris napisales :)
[#17] Re: programowanie amos

@sordan, post #16

tak łatwo się nie poddam, na to co zamierzam zrobić brak mi skila, ciągle się czegoś nowego dowiem, ale czasu mało, praca, dzieci, to już nie te czasy gdy nie miało się obowiązków i siedziało się przed kompem po 16 godzin dziennie z drobnymi przerwami haha.
teraz walcze z kolizjami ale na razie coś mi to nie wychodzi, mam nadzieje że niebawem to rozkminię :)
[#18] Re: programowanie amos

@selur, post #14

no to mam spory problem
zrobiłem paste bob, ale nie działają z takim wklejonym bobem kolizje, wykombinowałem że taki bob nie ma numeru i za chiny nie mogę tego rozkminic :/
[#19] Re: programowanie amos

@QUAD, post #18

Paste Bob to tylko "nadrukowanie' boba na tło. Normalnie aby wykrywać kolizje to trzeba ustawić boby na ekranie instrukcją bob nrboba, x, y, obrazboba.
[#20] Re: programowanie amos

@QUAD, post #18

To co w tej chwili robi program to tylko strona "wizualna" gry. Zeby to byla pelna gra, to trzeba napisac do niej cala logike, czyli gdzies (w tablicy zapewne) trzeba umiescic dane dotyczace poszczegolnych klockow spadajacych i tych juz ulozonych, zapelnienia planszy, opadania ulozonych blokow itd. itp... dluga i szeroka droga do napisania pelnego "tetrisa" :)
[#21] Re: programowanie amos

@selur, post #20

dzięki Panowie, tak sie mi wydawało że to by było za proste, spróbuję zrobić tablicę i pokombinuję żeby każdy kolor miał inną wartość i wpisywał się do tablicy, a potem się zobaczy :)
[#22] Re: programowanie amos

@QUAD, post #21

QUAD - zanim zaczniesz przekładać na język Amos (albo jakikolwiek inny) dobrze jest rozumieć sens samego programowania.
Ja zaczynałem programować w Basicu, potem Logo, Amos, Pascal, C, C++ a teraz w Javie (i inne "pseudojęzyki" - HTML, JavaScript, PHP).
Jak poznajesz jeden, to kolejne już są łatwe (może poza ASM-em, którego nikty nie pojąłem, dla żadnego procesora, a próbowałem różnych, od mikrokontrolerów do x86). We wszystkich jednak językach ważne jest zrozumienie zasad ich działania, znajomość pętli, warunków, inicjowania i modyfikowania zmiennych itp. Oraz oczywiście myślenie o problemie.

Ostatnio natrafiłem na coś takiego: https://scratch.mit.edu - wydaje się, że jest to super zabawka dla początkujących. Można w szybki i przyjemny sposób poznać wiele konstrukcji używanych w programowaniu i zrozumieć zasady, które należy stosować przy realizacji problemów. Zachęcam do zerknięcia i spróbowania sił tam - powiem, że przy użyciu tego narzędzia można zbudować ciekawe programy (nawet gry). Natomiast próg wejścia, jest niezmiernie szybki - dostępne toto jest z każdego miejsca bo w przeglądarce, możesz wgrywać/zapisywać programy - szybko się 'programuje' (przez przeciąganie bloczków), szybko poprawia i szybko testuje.

Jak zrobisz jakiś przykład lub grę, która będzie działać tak jak sobie założyłeś (z kolizjami i innymi sprawami) - to potem można ją przepisywać do Amos-a :)

Jest tam mnóóóóśtwo przykładów, do których możesz zajrzeć i "przeczytać" jak to jest wymyślone. Na przykład takie "Micro Machines" i jego kod.

A może chcesz spróbować tutaj to wspólnie (może inni się też przyłączą) utworzymy w tym narzędziu prostą gierkę (ważny jest pomysł), której kod będziemy wspólnie rozwijać. Jak się uda to potem spróbujemy przenieść do Amosa?

Ostatnia aktualizacja: 25.05.2015 06:29:16 przez WojT_GL

Ostatnia aktualizacja: 25.05.2015 06:33:33 przez WojT_GL
[#23] Re: programowanie amos

@QUAD, post #1

Mógłby ktoś zaprezentować przykład szybkiego i płynnego scrollingu w AMOSie czy taki nie istnieje lub nie jest to możliwe?

Ostatnia aktualizacja: 25.05.2015 10:55:33 przez sanjyuubi
[#24] Re: programowanie amos

@WojT_GL, post #22

dzięki za linki, całkiem fajne, pokombinuję z tym, ale prawda jest taka że pisanie i rozkminianie czegokolwiek bardziej mobilizuje mnie gdy to robię na amidze :D
już się nie mogę doczekać kolejnego SACPu, pokażesz mi parę rzeczy hahaha :)
[#25] Re: programowanie amos

@selur, post #20

qrde, męczę się z tymi tablicami i zaczyna mi brakować pomysłów, na szybko napisałem sobie bob-a opadającego w dół, jak osiąga pewien poziom to wpisuje się do tablicy np. tablica(1,15)
w tablicy zapisuje kolor jaki aktualnie posiada czyli np 3
ale jak teraz zrobić wykrywanie kolizji boba z tablicą, można coś takiego zrobić czy trzeba podejść do tematu jakoś inaczej

sory za lamerskie pytania ale muszę to jakoś ogarnąć
[#26] Re: programowanie amos

@QUAD, post #25

Trzeba by w to zaangażować już poważną matematykę. Jedyne co mi przychodzi do głowy, choć nie wiem czy to możliwe, to stworzenie obiektu o jednym kolorze, który będzie niewidoczny, do którego będziesz dorysowywał kwadraty w miejscu gdzie zatrzymał się klocek i później sprawdzał czy następuje kolizja pomiędzy twoim spadającym klockiem, a niewidocznym obiektem.
[#27] Re: programowanie amos

@QUAD, post #25

Klocek nie spada płynnie tylko co ileś pikseli. Zrób tablicę o wymiarze liczba kroków na szerokość, liczba kroków na długość i jak klocek spada to sprawdzasz czy pole w tablicy pod nim jest zero czy nie, to samo przy ruchu prawo-lewo.
[#28] Re: programowanie amos

@RAL, post #27

Juz mam w glowie pewien plan, musze tylko sprawdzic czy wypali, bo juz miewalem fajne pomysly ale sie okazywalo ze w praktyce nie dzialaja tak jak zakladalem :)
[#29] Re: programowanie amos

@sanjyuubi, post #26

W tetrisie nie ma w ogóle potrzeby używać wykrywania kolizji. Tak jak napisał RAL wszystko opiera się na sprawdzaniu pól macierzy. Ruch klocka co jakiś interwał odbywa się tylko wtedy kiedy klocek ma się gdzie ruszyć, jeśli nie to zamiast się ruszyć zostaje na miejscu i zaczyna spadać kolejny klocek. Płynne spadanie też da się zrobić, ale to jest tylko efekt wizualny, logika powinna nadal działać tak samo.
[#30] Re: programowanie amos

@gohanks, post #29

Na razie spłodziłem coś takiego :)
Film
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