MEMORY GAME

Bu 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