kategoria: AMOS
[#91] Re: Gra w Amosie

@QUAD, post #90

I to mi sie podoba :)

Musisz w programie zamiescic wszystkie mozliwe warunki. Czyli jesli wylosowana liczba numer 1 jest identyczna jak liczba numer 2 wtedy program ponawia losowanie i losuje tak dlugo, az wylosuje 6 roznych i dopiero wtedy podaje wyniki.

Program bedzie wygladac tak:

LICZBA1:
LICZBA1=Rnd(48)+1
LICZBA2=Rnd(48)+1
LICZBA3=Rnd(48)+1
LICZBA4=Rnd(48)+1
LICZBA5=Rnd(48)+1
LICZBA6=Rnd(48)+1

If LICZBA1=LICZBA2 Then Goto LICZBA1
If LICZBA1=LICZBA3 Then Goto LICZBA1
If LICZBA1=LICZBA4 Then Goto LICZBA1
If LICZBA1=LICZBA5 Then Goto LICZBA1
If LICZBA1=LICZBA6 Then Goto LICZBA1
If LICZBA2=LICZBA1 Then Goto LICZBA1
If LICZBA2=LICZBA3 Then Goto LICZBA1
If LICZBA2=LICZBA4 Then Goto LICZBA1
If LICZBA2=LICZBA5 Then Goto LICZBA1
If LICZBA2=LICZBA6 Then Goto LICZBA1
If LICZBA3=LICZBA2 Then Goto LICZBA1
If LICZBA3=LICZBA1 Then Goto LICZBA1
If LICZBA3=LICZBA4 Then Goto LICZBA1
If LICZBA3=LICZBA5 Then Goto LICZBA1
If LICZBA3=LICZBA6 Then Goto LICZBA1
If LICZBA4=LICZBA2 Then Goto LICZBA1
If LICZBA4=LICZBA3 Then Goto LICZBA1
If LICZBA4=LICZBA1 Then Goto LICZBA1
If LICZBA4=LICZBA5 Then Goto LICZBA1
If LICZBA4=LICZBA6 Then Goto LICZBA1
If LICZBA5=LICZBA2 Then Goto LICZBA1
If LICZBA5=LICZBA3 Then Goto LICZBA1
If LICZBA5=LICZBA4 Then Goto LICZBA1
If LICZBA5=LICZBA1 Then Goto LICZBA1
If LICZBA5=LICZBA6 Then Goto LICZBA1
If LICZBA6=LICZBA2 Then Goto LICZBA1
If LICZBA6=LICZBA3 Then Goto LICZBA1
If LICZBA6=LICZBA4 Then Goto LICZBA1
If LICZBA6=LICZBA5 Then Goto LICZBA1
If LICZBA6=LICZBA1 Then Goto LICZBA1

Print LICZBA1
Print LICZBA2
Print LICZBA3
Print LICZBA4
Print LICZBA5
Print LICZBA6

Repeat 
Until Mouse Key
[#92] Re: Gra w Amosie

@sordan, post #91

Nie no, nie tak. Losowane liczby wstawcie do tablicy, a te warunki IF wstawcie w pętli.

Poza tym jeżeli wykryjemy konflikt to nie warto losować wszystkich liczb od nowa tylko ponawiać losowanie tej ostatniej, która się powtórzyła.

Ostatnia aktualizacja: 14.05.2015 10:58:22 przez g0trek
[#93] Re: Gra w Amosie

@g0trek, post #92

No mozna zrobic taki program na wiele sposobow. Moj program jako laika Amosowego wyglada tak jak wyzej i spelnia oczekiwania QUADA. I tak wszystko dzieje sie w trybie express i nawet jak program losuje 20 razy to i tak wynik dostaje sie od razu. Po za tym dla bardzo poczatkujacego rada: `wstawcie do tablicy` nic nie pomoze. Najlepiej napisz caly program wstawiajac do tablic i wtedy QUAD bedzie mogl sie cos z niego nauczyc.
[#94] Re: Gra w Amosie

@mwb113, post #83

Najlepiej zaczac od zainstalowania pelnego Amosa :) Przydala by sie tez jakas ksiazka, od czasu do czasu pojawia sie na allegro, ale tez jest gdzies w sieci po polsku zeskanowana w pdf. W kazdej ksiazce zawsze zaczynaja od podstaw na przykladach, ktore mozna od razu wpisywac do Amosa i ewentualnie cos zmieniac i powoli badac co i jak. QUAD juz zaczal :)
[#95] Re: Gra w Amosie

@sordan, post #93

Nie znam AMOS-a, więc poniższy przykład może mieć jakieś błędy składniowe (na szybko rzuciłem tylko okiem do książki http://www.classicamiga.com/images/stories/jreviews/software/A/manuals/AmosPro.pdf, żeby poznać składnię deklaracji tablic):

rozmiar = 6
DIM liczby(rozmiar)

START:

FOR X=0 TO rozmiar-1
  tablica(X) = Rnd(48)+1
NEXT X

FOR X=0 TO rozmiar-2
  FOR Y=X+1 TO rozmiar-1
    IF tablica(X) = tablica(Y) THEN Goto START
  NEXT Y
NEXT X

FOR X=0 TO rozmiar-1
  Print tablica(X)
NEXT X


Zmienną "rozmiar" określamy ile liczb chcemy losować. To jest zachłanna wersja tego algorytmu, która w przypadku znalezienie konfliktu zaczyna od nowa. Jeżeli ktoś tego potrzebuje do rzeczywistych zastosowań to polecam jednak zoptymalizować algorytm.

EDIT: Nie wiem czemu oznaczenie czegoś jako "kod" w treści postu psuje jego formatowanie. Ten kod powinien mieć oczywiście wcięcia i odstępy, żeby był bardziej czytelny.

Ostatnia aktualizacja: 14.05.2015 11:19:12 przez g0trek

Ostatnia aktualizacja: 14.05.2015 11:19:33 przez g0trek

Ostatnia aktualizacja: 14.05.2015 11:19:42 przez g0trek

Ostatnia aktualizacja: 14.05.2015 11:20:57 przez g0trek

Ostatnia aktualizacja: 14.05.2015 11:26:25 przez g0trek
[#96] Re: Gra w Amosie

@g0trek, post #95

Błędy są nie tylko składniowe. Wychodzisz też poza obszar tablicy.
[#97] Re: Gra w Amosie

@kiero, post #96

Pisane na szybko :). Zaraz poodejmuję 1 :)
[#98] Re: Gra w Amosie

@sordan, post #94

mam zainstalowanego pełnego amosa, w domu klepie na a1200 a w pracy na maku pod e-uae, oczywiście i w domu i w pracy czasu bardzo mało, ale trzeba próbować bo zawsze mnie bawiło jak coś się udawało zdziałać, książkę na razie mam jedną niestety w PDFie, nawet sobie ją wgrałem na ipada który jest przyklejony do monitora od amigi na uchwycie samochodowym, nawet to wygodne, może nie tak jak książka analogowa ale z czegoś trza być zadowolonym :)
[#99] Re: Gra w Amosie

@QUAD, post #98

#95 o w morde! Takie rzeczy, to ja pisze po 24h siedzenia przed kompem

#90 Komputer nie ma mozliwosci losowania liczb bez powtorzen. Do tego trzeba napisac algorytm a nauke zaczyna sie od podstawowych rzeczy a nie od algorytmow.

np. taki prosty programik z losowaniem liczb

curs off
x=20
y=10
Do
losuj=rnd(3)
If losuj=0 then y=y-1
If losuj=1 then y=y+1
If losuj=2 then x=x+1
If losuj=3 then x=x-1
Rem   <--- tutaj beda instrukcje ograniczajace ruch malpy za ekran 
Print At(x,y);"@";
wait 10
Print At(x,y);" ";
loop


Teraz sprobuj zorbic tak zeby MALPA nie wylazila za ekran
[#100] Re: Gra w Amosie

@selur, post #99

nie wiem czy dobrze myślę ale bym zrobil może coś takiego
if y>30 then y=10
if x>30 then x=20

:P
muszę to wypróbowć

albo if y>10 then y=y-1
i tak samo z x


Ostatnia aktualizacja: 14.05.2015 16:39:20 przez QUAD
[#101] Re: Gra w Amosie

@QUAD, post #100

nie chce nic mowic ale ten watek jest na temat gry sordana i wydaje mi sie ze offtop powinien zosotac przeniesiony w inne miejsce
[#102] Re: Gra w Amosie

@selur, post #99

dobra, juz nie bede kontynuował w tym wątku :)

wstawiłem 4 linijki
if x=1 then x=x+1
if x=40 then x=x-1
if y=1 then y=y+1
if y=20 then y=y-1

i dziala :)

Ostatnia aktualizacja: 14.05.2015 21:16:30 przez QUAD
[#103] Re: Gra w Amosie

@selur, post #99

Mistrzu selur ratuj! Poleglem. Zanim napisalem tego posta to spedzilem wiele godzin probujac samemu, niestety nie poszlo mi i w totalnej bezradnosci zwracam sie o pomoc. Ubzduralem sobie ze oprocz ognistych kul wystrzeliwanych za pomoca kierunek+fire zrobie jeszcze bomby, ktore bedzie sie klasc za pomoca fire jak w dyna blaster. Nie moge zawiesc Aszu bo troche sie napracowal nad grafika bomby i wybuchu 10 klatkowego.

Chce zrobic cos takiego ze po nacisnieciu fire kaplan stawia bombe, wtedy bomba sobie syczy z 2 sekundy i nie ma kolizji bomby z kaplanem, ani potworami, zwyczajnie bedzie mozna sobie lazic po niej. To ogarnalem. Jednak chce zrobic cos takiego, ze z tej syczacej bomby po 2 sekundach wchodzi kolejna animacja wybuchu nalozona na ta bombe, ktora juz ma miec przypisane kolizje do kaplana i wrogow. Napisalem sobie procedure syczacej bomby i procedure wybuchu jednak nie wiem jak zrobic by najpierw bomba sobie syczala 2 sekundy, a dopiero pozniej byl wybuch, oczywiscie nie uzywajac komendy wait, ktora blokuje cala petle. Po prostu te 2 sekundy to czas, ktory ma kaplan zeby uciec i nie stracic zycia przy wybuchu. Cos czuje ze moje rozwiazanie jest proste i pewnie chodzi znow o timer, ktory trzeba odpowiednio wykorzystac. Jesli komenda wait nie blokowala by calej petli to wtedy wygladalo by to zwyczajnie tak:
If Joy(1)=16 Then BOMBA2 : Wait 100 : WYBUCH

Pytanie moje, jak osiagnac dokladnie taki sam rezultat z tym, ze nie blokujac calej petli?

Kod:
'glowna petla
Do
If Joy(1)=16 Then BOMBA2
...
Loop


Procedure BOMBA2
ROZNICA_CZASU=Timer-STARY_CZAS
If ROZNICA_CZASU>50 and BOMBY=0
STARY_CZAS=Timer
Sam Play 1
Pop Proc
End If 
If BOMBY=0 Then Pop Proc
If ROZNICA_CZASU>50 : Sam Play 5
STARY_CZAS=Timer
BOMBY=BOMBY-1
Screen 1
Locate 30,1
Print BOMBY;" "
Screen 0
B$="Anim 1,(77,6)(78,6)(79,6)(80,6)(81,6)(82,6)"
Channel 9 To Bob 54
Bob 54,X Bob(1),Y Bob(1),77
Amal 9,B$
Amal On 9
End if
End Proc


Procedure WYBUCH
G$="Start: "
G$=G$+"Anim 1,(84,2)(85,2)(86,2)(87,2)(88,2)(89,2)(90,2)(91,2)(92,2)(93,2)(94,2)(95,2);"  
Bob 22,X Bob(54),Y Bob(54),37
Channel 9 To Bob 22 
Amal 9,G$ 
Amal On 9  
End Proc
[#104] Re: Gra w Amosie

@sordan, post #103

Co prawda nie jest to do mnie ale ja zrobiłbym tak:
Do odliczania czasu użyłbym przerwań : on x gosub licz czas lub on x proc licz czas, jeśli odliczany czas osiągnie te 2 sekundy to poprzez instrukcję Amreg wpisywałbym wartość np 1, wyłaczałbym przerwania i wracałbym z procedury lub podprogramu.
W programie AMALa dotyczącym bomby byłby warunek sprawdzający wartość rejestru Amreg i jeśli zmieniłaby się jego wartość to przeskakiwałby do dalszej części odpowiedzialnej za animację wybuchu, zerował wartość rejestru i czekał na kolejne postawienie bomby.

Mam taką, może głupią radę - programy AMALa zdefiniuj sobie raz w jakiejś procedurze. Zmienne tekstowe z tymi programami potraktuj jako zmienne globalne, bo teraz za każdym razem gdy wchodzisz do procedury na nowo tworzysz prgram AMALa.
[#105] Re: Gra w Amosie

@sordan, post #103

Global statusB, czas_bomby
..
..
statusB=0
..
Do
If Joy(1)=16 Then Proc BOMBA2
...
Proc WYBUCHIWANIE
...
If 'warunek kolizji z bomba' and statusB=2 Then 'dalsza czesc instrukcji'
..
Loop

Procedure BOMBA2
ROZNICA_CZASU=Timer-STARY_CZAS
If ROZNICA_CZASU>50 and BOMBY=0
STARY_CZAS=Timer
Sam Play 1
Pop Proc
End If
If BOMBY=0 Then Pop Proc
If ROZNICA_CZASU>50
Sam Play 5
STARY_CZAS=Timer
BOMBY=BOMBY-1
statusB=1
czas_bomby=timer

Screen 1
Locate 30,1
Print BOMBY;" "
Screen 0
B$="Anim 1,(77,6)(78,6)(79,6)(80,6)(81,6)(82,6)"
Bob 54,X Bob(1),Y Bob(1),77
Channel 9 To Bob 54
Amal 9,B$
Amal On 9
end If
End Proc

Procedure WYBUCHIWANIE
If statusB=2 Then Pop Proc
If Timer-czas_bomby>200 and statusB=1
statusB=2

G$="Start: "
G$=G$+"Anim 1,(84,2)(85,2)(86,2)(87,2)(88,2)(89,2)(90,2)(91,2)(92,2)(93,2)(94,2) (95,2);"
Bob 22,X Bob(54),Y Bob(54),37
Channel 9 To Bob 22
Amal 9,G$
Amal On 9
end if
End Proc

To powinno zadzialac. Czyli tak, robisz ten sam numer z odliczaniem czasu co ze strzelaniem tylko odliczanie czasu wlaczasz po postawieniu bomby. Pozniej procedura "wybuchiwanie" (czyli wybuch lub oczekiwanie) sprawdzasz czy bomba nadal tyka czy wlasnie wybuchla (status=1 tykanie, status=2 wybuch). Kolizje z bomba sprawdzasz tylko i wylacznie wtedy, kiedy status bomby osiagnie wartosc=2.
[#106] Re: Gra w Amosie

@RAL, post #104

Co do on X gosub licz_czas nie jestem pewien czy to by zawsze zadzialalo. Synchronizacja Amala z Amosem to trudna rzecz i czesto sie rozjezdza. Poza tym bez konkretnego przykladu, to ja nawet mam trudnosci z ogarnieciem a sordan pewnie duzoooo skumal z tej porady.

Co do definicji AMALa jak najbardziej jestem za. Czas aby do programu wprowadzac porzadki, tylko czy sordanowi sie chce porzadkowac stajnie Augiasza. Moje pierwsze programy wygladaly duzo duzo gorzej szeroki uśmiech
[#107] Re: Gra w Amosie

@selur, post #106

Dziekuje bardzo selur po raz kolejny. Wprowadzilem w kod i dziala idealnie. Wlasnie tego potrzebowal moj program.

Co do kodu to masz racje, panuje w nim totalny syf i ogolnie gra bedzie wazyc w kb na moje oko ze 200% wiecej niz powinna. No ale na dzien dzisiejszy niestety lepiej nie potrafie i niech poki co jest jak jest. Lepszy rydz niz nic.

Co do zmian w grze to bomby zostaly dodane i pierwszy level zostal ukonczony. Jeszcze sie zastanowimy czy pierwszy level czasem nie bedzie levelem pozniejszym, jako ze dalem pograc aszowi i jak to napisal zajelo mu kilkanascie/kilkadziesiat razy zanim przeszedl level bez utraty zycia :) wiec chyba przesadzilem z poziomem trudnosci. Teraz bede zabierac sie za walke z bossem, ktora bedzie miala miejsce miedzy levelami. Pierwszego bossa zombie aszu juz w calosci namalowal i teraz mam misje zeby zrobic jakas grywalna wersje walki z bossem. No, a pozniej to juz konstruowanie kolejnych leveli.

Na dzien dzisiejszy gra prezentuje sie tak: Filmik




[#108] Re: Gra w Amosie

@RAL, post #104

Dzieki za pomoc, jednak w rzeczywistosci jest jak selur pisze. Ja jestem w takim stadium zaawansowania Amosowego, ze mi trzeba tlumaczyc jak 2 letniemu dziecku. Bez konkretnych przykladow ciezko mi cokolwiek zrozumiec. Jak wspominalem w pierwszym poscie programista nie jestem i mam nawet braki w podstawach. A tym bardziej w programistycznym nazewnictwie. Slowa takie jak `przerwania`, `rejestr`, `instrukcja` jeszcze nie do konca sa dla mnie zrozumiale.
[#109] Re: Gra w Amosie

@sordan, post #108

Zaczyna to się wszystko trzymać kupy :)
Dobrze sobie radzisz. Na optymalizację kodu przyjdzie czas. Graficznie też coraz spójnej się gra prezentuje. Pokazujesz Amosa z dobrej strony.
[#110] Re: Gra w Amosie

@sordan, post #108

Ja już tego nie pamiętam ale czy w AMALu jest jakaś instrukcja wait/wait vbl/ albo coś w ten deseń ?
Jeśli tak to, cały twój "problem" da się rozwiązać w AMALu :)
[#111] Re: Gra w Amosie

@sordan, post #107

Bardzo ładnie to wygląda.

Pozwoliłem sobie narysować druida i dodać mu trochę życia. Myślę że jak by mu pelerynka powiewała to by wystarczyło. Gdyby miał tez świecącą laskę to by tłumaczyło rzucane fireballe.


[#112] Re: Gra w Amosie

@sordan, post #107

Kolejny mały update. Projekt ma się bardzo dobrze i szybko się rozwija:) Gra będzie nosiła tytuł Crazy Priest.

Kolejne video, tym razem nagrane przeze mnie. Sordan się uśmiał z moich wysiłków... blushing

https://www.youtube.com/watch?v=vJolqx4giy4
[#113] Re: Gra w Amosie

@aszu, post #112

Lajkuję, ino więcej poziomów trzeba zrobić :D OK
[#114] Re: Gra w Amosie

@aszu, post #112

Do obecnego wyglądu chyba bardziej pasuje Crazy Druid albo Crazy Monk, a jak jeszcze się doda na końcu Revenge to w ogóle wypas.
[#115] Re: Gra w Amosie

@sanjyuubi, post #114

`Crazy Monk` bralem pod uwage, ale jakos nazwa mi sie wydala zbyt oczywista i srednio zabawna wiec ja wykluczylem. Priest to ogolnie `ksiadz`, ale wyraz moze rowniez znaczyc`duchowny` w niektorych kontekstach. Wiem, ze tlumaczac na polski: `Szalony Ksiadz` troche kiepsko brzmi, ale `Szalony Duchowny` juz lepiej. Nazwa gry jeszcze nie jest stu procentowa, a `Crazy Druid` musze przyznac, ze mi sie podoba.
[#116] Re: Gra w Amosie

@Koyot1222, post #113

Jasna sprawa. Planujemy wydac wpierw taka mini wersje demo z w miare gotowym juz silnikiem, z jednym levelem + walka z bossem by sprawdzic czy w ogole bedzie choc mierne zainteresowanie. A levelow bedzie tyle ile starczy nam z aszu samozaparcia. Tak mysle, ze jakby bylo z 10 to bylby wypas.

Ostatnia aktualizacja: 25.05.2015 20:02:26 przez sordan
[#117] Re: Gra w Amosie

@aszu, post #112

OK
[#118] Re: Gra w Amosie

@sordan, post #116

Już czekam na demo OK
[#119] Re: Gra w Amosie

@SuperBuster11, post #118

Gra wygląda bardzo przyjemnie :) trzymam kciuki żeby się udała.
[#120] Re: Gra w Amosie

@selur, post #106

selur: A czy mozna zrobic cos takiego w Amosie, ze po wcisnieciu fire i przytrzymaniu go na pol sekundy czy na sekunde cos program ma wykonac. Pytam dlatego, ze w grze fire stawia bomby a fire+kierunek to strzal i czasem strzelajac kaplan rowniez stawia bombe. Jakby bombe kladlo sie po przytrzymaniu naprzyklad pol sekundy fire to by rozwiazalo caly problem.
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