home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma46.dms
/
ma46.adf
/
Waz
/
waz.E
< prev
next >
Wrap
Text File
|
2002-10-23
|
11KB
|
362 lines
/* Waz */
/* (C) 1995, Andrzej Jarmoniuk Software Development */
MODULE 'intuition/intuition', 'dos/dos', 'reqtools', 'libraries/reqtools',
'intuition/screens', 'exec/ports', 'exec/memory'
ENUM OK, BLAD
CONST MAX = 1000, LEWY_NAROZNIK_OKNA=70, GORNY_NAROZNIK_OKNA=50,
SZEROKOSC_OKNA_INFORMACYJNEGO=162, WYSOKOSC_OKNA_INFORMACYJNEGO=125,
WAZ=2, TLO=3, ZARCIE=1, KEY_ESC=69, KEY_Q=$10, KEY_LEFT=79, KEY_UP=76,
KEY_RIGHT=78, KEY_DOWN=77, KEY_SPACE=$40, KEY_P=$19, KEY_KPLEFT=$2D,
KEY_KPUP=$3E, KEY_KPRIGHT=$2F, KEY_KPDOWN=$1E, KEY_1=$01, KEY_2=$02,
KEY_3=$03
DEF szerokosc_okna, wysokosc_okna, lewy_naroznik_inf, wazwin=0:PTR TO window,
wazmw=0:PTR TO window, wazmsg:PTR TO intuimessage, wazclass, wazcode, dlugosc,
rozrost, poczatek, koniec, opoznienie=4, maxx, maxy, kwadx, kwady, vx, vy, tytul,
im_waz:image, im_zarcie:image, im_tlo:image, wazx[MAX]:ARRAY, wazy[MAX]:ARRAY
PROC main() HANDLE
ustaw_tytul()
IF otworz()=FALSE THEN Raise(BLAD)
inicjuj_losowanie()
przygotuj_okno_informacyjne()
przygotuj_kwadraty()
REPEAT
od_nowa()
gra()
UNTIL koniec_gry(dlugosc)=NIL
Raise(OK)
EXCEPT
zamknij()
IF exception
DisplayBeep(NIL)
RETURN 10
ENDIF
ENDPROC
PROC wiad(tekst, argum)
ENDPROC RtEZRequestA(tekst, 'Sprobuj|Zakoncz', argum, NIL,
[RTEZ_REQTITLE, 'Informacja',
RTEZ_FLAGS, EZREQF_CENTERTEXT])
PROC otworz() HANDLE
proporcje()
IF (reqtoolsbase:=OpenLibrary('reqtools.library', 34))=FALSE
Raise(BLAD)
ENDIF
WHILE (wazwin:=OpenWindow([LEWY_NAROZNIK_OKNA, GORNY_NAROZNIK_OKNA,
szerokosc_okna, wysokosc_okna,
0, 1, /* detailpen i blockpen */
IDCMP_RAWKEY + IDCMP_CLOSEWINDOW,
WFLG_ACTIVATE + WFLG_RMBTRAP + WFLG_GIMMEZEROZERO +
WFLG_CLOSEGADGET + WFLG_DEPTHGADGET + WFLG_DRAGBAR +
WFLG_NOCAREREFRESH,
NIL, /* gadzety */
NIL, /* checkmark */
tytul, /* tytul okna */
NIL, /* ekran */
NIL, /* superbitmap */
NIL, NIL, /* minwidth i minheight */
NIL, NIL, /* maxwidth i maxheight */
WBENCHSCREEN]:nw))=FALSE
IF wiad('Nie moge otworzyc okna glownego.', NIL)=FALSE THEN Raise(BLAD)
ENDWHILE
WHILE (wazmw:=OpenWindow([lewy_naroznik_inf, GORNY_NAROZNIK_OKNA,
SZEROKOSC_OKNA_INFORMACYJNEGO, WYSOKOSC_OKNA_INFORMACYJNEGO,
0, 1, /* detailpen i blockpen */
IDCMP_CLOSEWINDOW,
WFLG_RMBTRAP + WFLG_DEPTHGADGET + WFLG_DRAGBAR + WFLG_NOCAREREFRESH +
WFLG_GIMMEZEROZERO,
NIL, /* gadzety */
NIL, /* checkmark */
tytul, /* tytul okna */
NIL, /* ekran */
NIL, /* superbitmap */
NIL, NIL, /* minwidth i minheight */
NIL, NIL, /* maxwidth i maxheight */
WBENCHSCREEN]:nw))=FALSE
IF wiad('Nie moge otworzyc okna informacyjnego.', NIL)=NIL THEN Raise(OK)
ENDWHILE
EXCEPT
RETURN FALSE
ENDPROC TRUE
PROC zamknij()
IF wazwin THEN CloseWindow(wazwin)
IF wazmw THEN CloseWindow(wazmw)
IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
ENDPROC
PROC inicjuj_losowanie()
DEF mik
CurrentTime(NIL, {mik})
Rnd(-mik)
ENDPROC
PROC rysuj_zarcie()
DEF x, y
REPEAT
x:=Rnd(maxx)
y:=Rnd(maxy)
UNTIL czy_waz(x, y)=FALSE
zarcie(x, y)
ENDPROC
PROC czy_zarcie(x, y)
ENDPROC ReadPixel(wazwin.rport, x*kwadx, y*kwady)=ZARCIE
PROC czy_waz(x, y)
ENDPROC ReadPixel(wazwin.rport, x*kwadx+1, y*kwady)=WAZ
PROC klawisz()
wazcode:=wazmsg.code
SELECT wazcode
CASE KEY_ESC
Raise(OK)
CASE KEY_Q
Raise(OK)
CASE KEY_LEFT
vx:=-1; vy:=0
CASE KEY_UP
vx:=0; vy:=-1
CASE KEY_RIGHT
vx:=1; vy:=0
CASE KEY_DOWN
vx:=0; vy:=1
CASE KEY_P
pauza()
RETURN FALSE
CASE KEY_1
opoznienie:=1
CASE KEY_2
opoznienie:=3
CASE KEY_3
opoznienie:=4
DEFAULT
RETURN FALSE
ENDSELECT
ENDPROC TRUE
PROC pauza()
ENDPROC RtEZRequestA('Pauza', 'Odpauzuj', NIL, NIL,
[RT_WINDOW, wazwin,
RTEZ_REQTITLE, tytul,
RTEZ_FLAGS, EZREQF_CENTERTEXT,
RT_REQPOS, REQPOS_TOPLEFTSCR])
PROC waz(x, y)
/* DrawImage(wazwin.rport, im_waz, x*kwadx, y*kwady)*/
SetAPen(wazwin.rport, WAZ)
RectFill(wazwin.rport, x*kwadx, y*kwady, x+1*kwadx-2, y+1*kwady-1)
ENDPROC
PROC zarcie(x, y)
/* DrawImage(wazwin.rport, im_zarcie, x*kwadx, y*kwady)
*/ SetAPen(wazwin.rport, ZARCIE)
RectFill(wazwin.rport,x*kwadx,y*kwady, x+1*kwadx-2,y+1*kwady-1)
ENDPROC
PROC tlo(x, y)
/* DrawImage(wazwin.rport, im_tlo, x*kwadx, y*kwady)
*/ SetAPen(wazwin.rport, TLO)
RectFill(wazwin.rport,x*kwadx,y*kwady,x+1*kwadx-2,y+1*kwady-1)
ENDPROC
PROC przygotuj_kwadraty()
im_waz:=[0, 0,
kwadx-1, kwady, 0,
NIL,
%0, %10,
NIL]:image
im_zarcie:=[0, 0,
kwadx-1, kwady, 0,
NIL,
%0, %01,
NIL]:image
im_tlo:=[0, 0,
kwadx-1, kwady, 0,
NIL,
%0, %11,
NIL]:image
ENDPROC TRUE
PROC proporcje()
/* maksymalna ilosc kwadracikow */
maxx:=28
maxy:=28
/* rozmiary kwadracika */
kwadx:=12
kwady:=6
/* to skutkuje, ale trzeba bedzie zrobiê inaczej... */
szerokosc_okna:=maxx*kwadx+17
wysokosc_okna:=maxy*kwady+19
lewy_naroznik_inf:=LEWY_NAROZNIK_OKNA+szerokosc_okna+1
ENDPROC
PROC koniec_gry(dane)
ENDPROC RtEZRequestA('K O N I E C G R Y\n\nWynik: %ld.\n\nGrasz od nowa???',
'TAK!!!|Nie.',
NIL,
{dane},
[RT_WINDOW, wazwin,
RTEZ_REQTITLE, tytul,
RTEZ_FLAGS, EZREQF_CENTERTEXT, 0])
PROC przygotuj_okno_informacyjne() HANDLE
CONST ROZMIAR = 4040 /* nie chce mi sië bawiê w Examine() itd. */
/* ROZMIAR jest w bajtach */
DEF ic_obrazek:PTR TO INT, im_obrazek:image, f_obrazek
SetStdRast(wazmw.rport)
Colour(1, 0)
WHILE (ic_obrazek:=AllocMem(ROZMIAR, MEMF_CHIP+MEMF_CLEAR))=FALSE
IF wiad('Nie mogë zaalokowaê pamiëci CHIP\ndla obrazka.', 0)=NIL THEN Raise(BLAD)
ENDWHILE
WHILE (f_obrazek:=Open('PROGDIR:obrazek.dat', MODE_OLDFILE))=NIL
IF wiad('Nie mogë otworzyê pliku z danymi dla obrazka.', 0)=NIL THEN Raise(BLAD)
ENDWHILE
Read(f_obrazek, ic_obrazek, ROZMIAR)
im_obrazek:=[0, 0, /* wewn. wspóîrzëdne */
150, 101, 2, /* wymiary i gîëbokoôê */
ic_obrazek, /* dane obrazka (z CHIPu) */
$0003, $0000, /* maska bitowa aktywnych pîaszczyzn
oraz m.b. pîaszczyzn nieaktywvych
(w obrëbie tego obrazka */
NIL]:image /* nastëpny obrazek */
DrawImage(wazmw.rport, im_obrazek, 3, 1)
Raise(OK)
EXCEPT
IF exception THEN NOP
IF ic_obrazek THEN FreeMem(ic_obrazek, ROZMIAR)
TextF(20, 108, 'Wynik:')
ENDPROC
PROC od_nowa()
SetRast(wazwin.rport, TLO)
TextF(115, 108, ' ')
ENDPROC
PROC wynik(dane)
TextF(115, 108, '\d', dane)
ENDPROC
/****************************************************************************/
/****************************************************************************/
PROC gra() HANDLE
DEF b_koniec = FALSE,
x, y, x1, y1
rysuj_zarcie()
poczatek := 0; koniec := 0;
wazx[poczatek]:=maxx/2
wazy[poczatek]:=maxy/2
x:=wazx[poczatek]
y:=wazy[poczatek]
dlugosc:=1
waz(wazx[poczatek], wazy[poczatek])
wynik(dlugosc)
REPEAT
WaitPort(wazwin.userport) /* to jest czekanie na */
wazmsg:=GetMsg(wazwin.userport) /* wcisniecie klawisza */
ReplyMsg(wazmsg)
IF wazmsg.class=IDCMP_CLOSEWINDOW THEN Raise(OK)
UNTIL klawisz()
REPEAT
REPEAT
x1:=x; y1:=y
IF wazmsg:=GetMsg(wazwin.userport)
ReplyMsg(wazmsg)
wazclass:=wazmsg.class
SELECT wazclass
CASE IDCMP_RAWKEY
klawisz()
CASE IDCMP_CLOSEWINDOW
Raise(OK)
ENDSELECT
ENDIF
x1 := x + vx
y1 := y + vy
UNTIL (x1>=0) AND (x1<=maxx) AND (y1>=0) AND (y1<=maxy)
x:=x1; y:=y1
IF czy_zarcie(x, y)
rozrost := 2 + Rnd(10)
rysuj_zarcie()
tlo(x, y)
ENDIF
IF (b_koniec:=czy_waz(x, y))=FALSE
poczatek := Mod ( poczatek + 1, MAX )
wazx[poczatek] := x
wazy[poczatek] := y
waz(wazx[poczatek], wazy[poczatek])
IF rozrost
rozrost--
dlugosc++
wynik(dlugosc)
ELSE
tlo(wazx[koniec], wazy[koniec])
koniec := Mod( koniec + 1, MAX )
ENDIF
ENDIF
Delay(opoznienie)
UNTIL b_koniec = TRUE
Raise(OK)
EXCEPT
ENDPROC
/****************************************************************************/
/****************************************************************************/
PROC ustaw_tytul()
tytul:='Waz 2.3'
ENDPROC
CHAR '$VER: Waz 2.3, © 1995, Andrzej Jarmoniuk', 0