MEMORY GAME
Retro bilgisayarBu program, örneklerini bolca görmüş olabileceğiniz eğlendirici bir hafıza oyunudur. Oyundaki temel amaç 24x12’lik bir matriste bulunan harf veya sayıların eşlerini bulup yok etmektir. Ancak bu harf ve sayılar, kutuların içinde olduklarından görünmemektedirler. Siz MOUSE göstergeci ile herhangi bir kutunun üzerinde iken sol MOUSE butonuna bastığınızda, o kutunun içindeki harf veya sayı görünür duruma geçer. Daha sonra bu sayı veya harfin eşinin bulunduğunu düşündüğünüz yerde de sol düğmeye bastığınızda eğer tahmininiz doğru ise yani her iki harf veya sayı da aynı ise her ikisi de yok olacaktır, takdirde her iki kutu da kapanarak başlangıçtaki hallerine döneceklerdir.
Oyunda toplam 10 düzey bulunmaktadır. Düzey geçebilmek için ise bazı düzeylerde bir şartı, bazılarında ise iki şartı yerine getirmek gerekir. Bunlardan tüm düzeylerde geçerli olanı, ekranın alt kısmında bulunan kutulardan REQ ile belirtilen miktarda sayı veya harfi yok etmenizdir. Bazı düzeylerde geçerli olan diğer şart ise herhangi bir renge ait bütün kutulardaki harf veya sayıları yok etmektir. Yani kırmızı, yeşil, mavi, beyaz ve sarı renklerdeki kutulardan en azından bir renge ait kutuların tümünü (örneğin mavilerin tümünü) yok etmelisiniz. Bu şartın geçerli olup olmadığını da ekranın alt kısmında bulunan COLOR yazısının altında yazan yazıdan anlayabilirsiniz. Burada eğer 'ON' yazıyorsa bu şart geçerlidir. 'OFF' yazıyorsa geçerli değildir. Oyunda her düzeyde bulunan harf veya rakam çeşidi miktarı da farklıdır. Örneğin ilk düzeyde hiç rakam yok ve 10 çeşit harf varken son düzeyde 20 çeşit harf ve tüm rakamlar bulunmaktadır. Oyunun zorluğunu belirleyen faktörlerden biri de budur (Diğerleri zaman ve renk şartı).
Oyun ekranının alt kısmında çeşitli göstergeler bulunmaktadır. Bunları soldan sağa açıklarsak: TIME : Kalan zaman OBJECTS : Kalan kutu miktarı REQ : Yok edilmesi gereken kutu miktarı COLOR : En azından bir renkteki tüm kutuların yok edilmesi gerekip gerekmediği (ON/OFF) LEVEL : Düzey no SCORE : Skor HIGH : O ana kadar yapılan en yüksek skor '**************************************** '* "DOMİNO" * '* by * '* "Hayrettin YILDIZ" * '* (STAR ) * ' * (03/01/1991) * '**************************************** MemoryGame: GOSUB Setup GOSUB Variables GOSUB BlockShapes GOSUB BoardDesign GOTO Game
IRQ:t=M:RETURN
Game:
GOSUB Title
1=0:' Level Number
s=0
0 GOSUB LevelSetup
GOSUB PuzzIeDesign
ON TIMER(l) GOSUB IRQ
1=0:' Loop Condition Variable
TIMER ON
WHILE o>0 AND f=0
3 GOSUB Button:IFt<l GOTO 5
xl=INT(x/24-l):yl=INT((y-12)/16):a=a(xl,yl):IFa=0 GOTO 3
COLOR 0,c(xl,yl)*3+2:LOCATE yl*2+3,x 1*3+5: PRINT a$(a);
4 GOSUB Mutton:IK t<l GOTO 5 x2=INT(x/24-l):y2=INT((y-
12)/16):b=a(x2,y2):IF b=0 GOTO 4 COLOR 0,c(x2,y2)*3+2:
LOCATE y2*2+3,x2*3+5:PRINT a$(b); FOR d=l TO 50:NEXT
IF xl=x2 AND yl=y2 THEN a=-l
IFa=bTHEN
SOUND 1000,2
LINE(xl*24+24,yl*16+12)-(xl*24+47,yl*16+27),0,bf
LINE(x2*24+24,y2*16+12)-(x2*24+47,y2*16+27),0,bf
a(xl,yl)=0:a(x2,y2)=0:o=o-2:s=s+10:COLOR0,ll
LOCATE 30,15:PRINT o;:LOCATE 30,50:PRINT s;
END IF
IFaobTHEN
IF a<>0 THEN PUT(xl*24+24,yl*16+12),p(c(xl,yl)*150),PSET
IF b<>0 THEN PUT(x2*24+24,y2*16+12),p(c(x2,y2)*150),PSET
END IF
5 WEND
COLOR 0,11:LOCATE 30,7:PRINT "0";
TIMER OFF
FOR a=0 TO 4:n(a)=0:NEXT FOR x=0
TO 23:FOR y=0 TO 11 IF a(x,y)<>0
THEN n(c(x,y))=n(c(x,y))+l
NEXT:NEXT IF k(l)=0 THEN 7 f=0
FOR a=0 TO 4 IF
n(a)=0 THEN f=l
NEXT
IFf=0THENGameOver 7 IF 288-
o<2*o(l) THEN GameOver
1=1+1:IFI>9 THEN 1=0 GOTO0
GameOver:
WHILE MOUSE(0)oO:WEND
FOR y= 0 TO 5:yl=y*32+12:y2=yl+31:FOR x=0 TO 23 STEP 6:xl=x*24+24:x2=xl+143
c=INT(RND*5):CALL Frame(xl,yl,x2,y2,c):COLOR 0,c+l
LOCATE INT((yl-12)/16)*2+4,INT(xl/24-l)*3+8:PRINT "GAME OVER";
IF MOUSE(0)<>0 THEN x=23:y=5
NEXT:NEXT
IF s>h THEN h=s
COLOR 0,11 :FOR a=0 TO 5:LOCATE 30,a*9+5:PRINT " ";:NEXT
GOTO Game
END
Button:
COLOR 0,11:WHILE MOUSE(0)oO:LOCATE 30,6:PRINT t;:WEND
WHILE MOUSE(0)=0 AND t>0:LOCATE 30,6:PRINT t;:WEND IF t<l
THEN f=l:GOTO 6
x=MOUSE(l):y=MOUSE(2):IF x<24 OR x>599 OR y<12 OR y>203 GOTO Button
6 SOUND 2000,2:RETURN
LevelSetup:
FOR x=0 TO 23:FOR y=0 TO ll:a(x,y)=0:NEXT:NEXT
COLOR 0,11:LOCATE 30,24:PRINT o(l)*2;:LOCATE 30,43:PRINT I;
LOCATE 30,34:IF k(l)=l THEN PRINT "ON "; ELSE PRINT "OFF";
o=288:f=f(l):t=t(I)
LOCATE 30,6:PRINT t;:LOCATE 30,15:PRINT " 288";
LOCATE 30,50:PRINT s;:LOCATE 30,59:PRINT h;
GOSUB ShowLevel
RETURN
SUB Frame(xl,yl,x2,y2,c) STATIC
c=c*3+l:LINE(xl,yl)-(x2,y2),c+l,bf:LINE(xl,yl)-(x2-2,yl),c
LINE(xl+2,y2)-(x2,y2),c+2:LINE(xl,yl)-(xl+l,y2-l),c,b
LINE(x2-l,yl+l)-(x2,y2),c+2,b
END SUB
S how I c vcl *
LINE(24,12)-(599^03),0,bf
CALİ ■ Krame(248,92373,123,4)
COLOR 0,14:LOCATE 13,37:PRINT "LEVEL":'LOCATE 14,36:PRINT "
LINE(256,108)-(365,108),0
LOCATE 15,38:PRINT 1
WHILE MOUSE(0)oO:WEND:WHILE MOUSE(0)=0:WEND
RETURN
Setup:
SCREEN 1,640,256,4,2:WINDOW 1,"MEMORY GAME"„0,1
FOR a=0 TO 15:PALETTE a,0,0,0:NEXT
COLOR 1,0:CLS
RETURN
Colors:
RESTORE ColorData
FOR a=0 TO 15:READ b,d,f:PALETTE a,b,d,f:NEXT
RETURN
ColorData:
DATA 0,0,0, 1,1,1, .7,.7,.7, .5,.5,.5
DATA 1,0,0, .7,0,0, .5,0,0, 0,1,0
DATA0,.7,0, 0,.5,0, 0,0,0, 0,0,0
DATA 0,0,0, 1,.8,0, .7,.5,0, .5,.3,0
BoardDesign:
COLOR 0,0:CLS
FOR a=0 TO 6:xl=24+72*a:x2=xl+71
CALL Frame(xU12,x2,2263):CALL Frame(xl,227,x2,241,3):NEXT
CALL Frame(528,212,599,241^)
COLOR 0,11:LOCATE 28,6:PRINT "TIME":LOCATE 28,14:PRINT "OBJECTS"
LOCATE 28,25:PRINT "REQ":LOCATE 2833:PRINT "COLOR"
LOCATE 28,42:PRINT "LEVEL"
LOCATE 28,51:PRINT "SCORE":LOCATE 28,60:PRINT "HIGH"
LOCATE 28,68:PRINT "(C) 1991":LOCATE 29,68:PRINT "'STAR"
LOCATE 30,68:PRINT " SOFT'";
GOSL B Colors
RETURN
PuzzleDesign:
COLOR 4,0:LOCATE 1,34:PRINT "PLEASE WAIT"
RANDOMIZE TIMER
LINE(24,12)-(599,203),0,bf
FOR a=0TO 143:d=INT(RND*f)+l:c=INT(RND*5)
1 x=INT(RND*24):y=INT(RND*12):IFa(x,y)<>0 GOTO 1
a(x,y)=d:PUT(24+x*24,12+y*16),p(c*150):c(x,y)=c
2 x=INT(RND*24):y=INT(RND*12):IFa(x,y)<>0 GOTO 2
a(x,y)=d:PUT(24+x*24,12+y*16),p(c*150):c(x,y)=c NEXT
LOCATE 1,34:PRINT "
RETURN
Variables:
DEFINTxl,yl,x2,y2,c,t,p,h,s,o,n,l
h=0:'High-score
DIMa(24,12),c(24,12),a$(30),p(750),n(5),f(9),t(9),o(9),k(9),z(100)
RESTORE Shapes
FOR a=l TO 30:READ a$(a):NEXT
'Level Datas for 10 levels...
FOR a=0 TO 9:READ f(a):NEXT
FOR a=0 TO 9:READ t(a):NEXT
FOR a=0 TO 9:READ o(a):NEXT
FOR a=0 TO 9:READ k(a):NEXT
RETURN
Shapes:
DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,R,S,T,U,0,l,2,3,4,5,6,7,8,9
LevelShapeNumbers:
DATA 10,4 ,14,8 ,18,1 ,263,10,30
LevelTimes:
DATA 300,200,300,200,400,50,400,150,200,500
LevelObjectNumbers:
DATA 30,50,40,40,50,20,50,30,50,100
LevelColorCondition:
DATA 1 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,1
BlockShapes:
FOR a=0 TO 4:c=a
xl=c*24:x2=xl+23:yl=c*16:y2=yl+15:CALLFrame(xl,yl,x2,y2,c)
GET(xl,yl)-(x2,y2),p(a*150)
NEXT
CALLFrame(100,0,U5,9,4):GET(100,0)-(115,9),z
RETURN
Title:
LINE(24,12)-(599,203),0,bf
FOR a=10 TO 12:PALETTE a,0,0,0:NEXT
RESTORE TitleData
COLOR 4,0:LOCATE 21,27:PRINT "DESIGNED & PROGRAMMED BY:"
LOCATE 23,30:PRINT "'HAYRETTİN YILDIZ'"
LOCATE 25,28:PRINT "COMPLETED ON 24/01/1991"
xl=32:yl=40
WHILE MOUSE(0)oO:WEND
Loop:READ x,y:IFx=-l OR MOUSE(0)<>0 THEN Ext
PUT(xl+x*16,yl+y*10),z,PSET
GOTO Loop
Ext: WHILE MOUSE(0)=0:WEND
LINE(24,12)-(599,203),0,bf
PALETTE 10,0,.9,1:PALETTE 11,0,.5,.7:PALETTE 12,0,.3,.5
RETURN
TitleData:
DATA 0,0,0,1,0,2, 0,3,0,4,1,1,2,2,3,1,4,0, 4,1,4,2, 4,3,4,4
DATA 6,0, 7,0,8,0, 9,0,10,0, 6,1, 6,2, 7,2,8,2,9,2,6,3,6,4, 7,4,8,4, 9,4,10,4
DATA 12,0,12,1,12,2,12,3,12,4,13,1,14,2,15,1,16,0,16,1,16,2,16,3,16,4
DATA 18,1,18,2,18,3,19,4,20,4,21,4,22,3,22,2,22,1,21,0,20,0,19,0
DATA24,0,24,1,24^,24^,24,4,25,0,26,0,27,0,28,1,25^,26,2^7A273,28,4
DATA 30,0,30,1,31,2,32,2,33,2,34,1,34,0,32,3,32,4
DATA 10,6,9,6,8,6,7,6, 6,7,6,8,6,9,7,10,8,10,9,10,10,10,10,9,10,8,9,8,8,8
DATA 12,10,12, 9,12,8,12, 7,13,6,14,6,15,6,16, 7,16,8,16,9,16,10,15,8,14,8,13,8
DATA 18,10,18,9,18,8,18, 7,18,6,19, 7,20,8,21, 7,22,6,22,7,22,8,22,9,22,10
DATA 24, 6,25, 6,26, 6,27, 6,28, 6,24, 7,24,8,25, 8,26,8,27,8,24,9,24,10,25,10,26,10,27,10,28,10
DATA-1,-1