Memori jokoa (I)

Arrojeria, Eustakio

Elhuyar Zientziaren Komunikazioa

Lizaso, Pili

Informatika Saila

Elhuyar Fundazioa

Memoria lantzeko joko ugari dago, baina hemen aukeratutako hau izan daiteke ezagunenetako bat. Jokoa normalean kartoizko edo zurezko pieza batzuez osatzen da. Pieza bakoitzak irudi bat darama eta irudi bakoitza bi piezatan egoten da. Zertan datza jokoak?

Hasieran pieza guztiak behera begira jarri, hots, irudiak ezkutuan direla, eta nahastu egiten dira.

Jokaldi bakoitzean bi pieza altxatu behar dira eta bi pieza horiek irudi berdinekoak izan daitezen da lortu behar dena. Horrela baldin bada, hots, altxatako piezek irudi berdina baldin badute, jokatzen ari den jokalariak jasoko ditu eta berriro saiatuko da harik eta huts egiten duen arte.

Aukeratutako piezek irudi desberdina baldin badute, irudiak eta posizioak gogoan hartzeko denbora pixka bat eman ondoren berriro buelta eman eta lehengo posizioan utziko dira.

Azkenean pieza gehien lortzen duenak irabazten du. Hauxe izan da ondoko programarekin simulatu nahi izan dugun jokoa, baina diferentzia nagusi batekin: jokalari batentzat dago pentsatua, zeren pertsona bakoitzak asmatutako irudiak ez bait dira bereizten.

Ondokoak dira eman beharreko urratsak:

  • Pantailan laukiz osatutako matrize edo taula bat agertuko zaizu. Laukiak binaka aukeratzen joan beharko duzu, hau da, lehenengo bat eta gero bestea, horretarako kurtsorea higitzeko teklak (Æ, ¨, , Ø) erabili beharko dituzularik. Taulatik kanpo ateratzen saiatuz gero, soinu bat entzungo duzu eta kurtsorea zegoen lekuan geratuko da.
  • Aukeratutako laukira iritsitakoan, RETURN sakatu eta berehala ikusiko duzu lauki horrek ezkutatzen zuen irudia.
  • Errepikatu prozesua beste lauki batekin.
  • Bi lauki aukeratu ondoren, ondoko bi gauza hauek gerta daitezke:
    1. Bi laukiek irudi berdina baldin badute, irudiak bistan geratuko dira eta aurkitutakoen kontagailuari bat gehituko zaio.
    2. Azaldutako irudiak desberdinak badira, pantailan unetxo batez egon ondoren berriro ezkutatu egingo dira. Beraz, irudiak zein posiziotan zeuden kontutan hartzen saiatu beste txanda baterako.
  • Jokoa bi arrazoirengatik amaitu daiteke:
    1. Bikote guztiak (24) aurkitu direlako.
    2. 100 saio egin direlako, nahiz eta batzuk aurkitu gabe geratu. Kasu honetan, J tekla sakatuz taula osoa ikusteko aukera emango zaizu.
10 REM MEMORI JOKOA
20 DIM IKUR(24),TAU$(6,8,2),IK(2,3)
30 FOR I=1 TO 6:FOR J=1 TO 8:FOR K=1 TO 2:TAU$(I,J,K)=””:NEXT K:NEXT J:NEXT I
40 CLS:KEY OFF:SCREEN 1:LOCATE 1,15:PRINT “MEMORI JOKOA”:
LOCATE 2,15:PRINT “––––––––––––”
50 RANDOMIZE TIMER:RESTORE 710
60 IKUR$=””:FOR I=1 TO 24:READ IKUR(I):IKUR$=IKUR$+CHR$(IKUR(I)):NEXT I
70 FOR I=1 TO 24
80 FOR J=1 TO 2
90 LER=INT(RND*6)+1:ZUT=INT(RND*8)+1
100 WHILE TAU$(LER,ZUT,1) ””:LER=INT(RND*6)+1:ZUT=INT(RND*8)+1:WEND
110 TAU$(LER,ZUT,1)=CHR$(IKUR(I))
120 NEXT J
130 NEXT I
140 REM TAULA IRUDIKATU
150 LINE (8,24)–(200,168),2,B:PAINT (9,25),1,2
160 FOR I=1 TO 5:LINE (8,24+I*24)–(200,24+I*24),2:NEXT I
170 FOR I=1 TO 7:LINE (8+I*24,24)–(8+I*24,168),2:NEXT I
180 LOCATE 23,2:PRINT “Kurtsorea mugitzeko: “;CHR$(26);” “;CHR$(27);”
“;CHR$(24);” “;CHR$(25);
190 LOCATE 25,2:PRINT “Koadroa aukeratutakoan RETURN sakatu”;
200 REM JOKOAREN HASIERA
210 SAIOAK=0:LOCATE 5,27:PRINT “Aurkituak =”;24–LEN(IKUR$);:LOCATE 8,27:
PRINT “Saioak =”;SAIOAK;:LOCATE 5,3:PRINT “–”;
220 WHILE IKUR$ ”” AND SAIOAK 100
230 I=0:TE$=” “:ASMAT$=”E”
240 WHILE I 2
250 TE$=””:WHILE TE$=””:TE$=INKEY$:WEND
260 REM AUKERA
270 IF ASC(TE$)=13 THEN 440
280 IF LEN(TE$) 2 THEN 430
290 IF TAU$((CSRLIN–2)/3,POS(0)/3,2)=”” THEN PRINT CHR$(29);” “;:
PAINT ((POS(0)–2)*8+2,CSRLIN*8–2),1,2 ELSE LOCATE CSRLIN,POS(0)–1:
PRINT TAU$((CSRLIN–2)/3,POS(0)/3,1);
300 IF RIGHT$(TE$,1) ”M” THEN 330
310 IF POS(0) 24 THEN FOR J=1 TO 2:PRINT CHR$(28);:NEXT J:PRINT “–”;
ELSE BEEP:LOCATE CSRLIN,POS(0)–1:PRINT “–”;
320 GOTO 420
330 IF RIGHT$(TE$,1) ”K” THEN 360
340 IF POS(0) 4 THEN FOR J=1 TO 4:PRINT CHR$(29);:NEXT J:PRINT “–”;
ELSE BEEP:LOCATE CSRLIN,POS(0)–1:PRINT “–”;
350 GOTO 420
360 IF RIGHT$(TE$,1) ”H” THEN 390
370 IF CSRLIN 5 THEN PRINT CHR$(29);:FOR J=1 TO 3:PRINT CHR$(30);:
NEXT J:PRINT “–”; ELSE BEEP:LOCATE CSRLIN,POS(0)–1:PRINT “–”;
380 GOTO 420
390 IF RIGHT$(TE$,1) ”P” THEN 410
400 IF CSRLIN 20 THEN PRINT CHR$(29);:FOR J=1 TO 3:PRINT CHR$(31);
NEXT J:PRINT “–”; ELSE BEEP:LOCATE CSRLIN,POS(0)–1:PRINT “–”;
410 LOCATE CSRLIN,POS(0)–1:PRINT “–”;
420 REM AMAUKERA
430 GOTO 250
440 X=POS(0):Y=CSRLIN:PAINT (X*8–4,Y*8),0,2: PRINT CHR$(29);
TAU$((CSRLIN–2)/3,POS(0)/3,1);
450 I=I+1:IK(I,1)=ASC(TAU$((CSRLIN–2)/3,POS(0)/3,1)):IK(I,2)=CSRLIN:
IK(I,3)=POS(0)–1:IF
TAU$((CSRLIN–2)/3,POS(0)/3,2)=”” THEN TAU$((CSRLIN–2)/3,POS(0)/3,2)=”0"
460 IF I=1 THEN 500
470 IF (IK(1,1) IK(2,1)) OR (IK(1,2)=IK(2,2) AND IK(1,3)=IK(2,3)) THEN
ASMAT$=”F”:GOTO 490
480 ASMAT$=”E”:SOUND 800,3:TAU$((IK(1,2)–2)/3,IK(1,3)/3,2)=”1":
TAU$((IK(2,2)–2)/3,IK(2,3)/
3,2)=”1":IND=INSTR(1,IKUR$,CHR$(IK(1,1))):
IF IND 0 THEN KUR$=LEFT$(IKUR$,IND–1)+MID$(IKUR$,IND+1,LEN(IKUR$)–IND)
490 SAIOAK=SAIOAK+1
500 IF ASMAT$=”E” THEN GOTO 540
510 SOUND 300,3:FOR J=1 TO 2500:NEXT J
520 IF TAU$((IK(1,2)–2)/3,IK(1,3)/3,2) ”1" THEN LOCATE IK(1,2),IK(1,3):PRINT “ “;CHR$(29);:
PAINT (IK(1,3)*8–4,IK(1,2)*8–4),1,2: TAU$((IK(1,2)–2)/3,IK(1,3)/3,2)=””
530 IF TAU$((IK(2,2)–2)/3,IK(2,3)/3,2) ”1" THEN LOCATE IK(2,2),IK(2,3): PRINT “ “;CHR$(29);:
PAINT (IK(2,3)*8–4,IK(2,2)*8–4),1,2: PRINT “–”;:TAU$((IK(2,2)–2)/3,IK(2,3)/3,2)=””
540 IF I=2 THEN LOCATE 5,27:PRINT “Aurkituak =”;STR$(24–LEN(IKUR$)):LOCATE 8,27:
PRINT “Saioak =”;SAIOAK; ELSE 560
550 LOCATE IK(2,2),IK(2,3)+1
560 WEND
570 WEND
580 REM EMAITZAK
590 LOCATE 23,2:PRINT SPC(38):LOCATE 25,2:PRINT SPC(38);
600 IF IKUR$=”” THEN LOCATE 23,5:PRINT “Oso ongi!!! aurkitu dituzu.”:GOTO 700
610 LOCATE 23,1:PRINT “Ez duzu lortu. Guztiak ikusteko J sakatu”
620 TE$=” “:WHILE TE$ ”J” AND TE$ ”j”:TE$=INKEY$:WEND
630 FOR I=1 TO 8
640 FOR J=1 TO 6
650 L=(J–1)*3+5:Z=(I–1)*3+3
660 IF TAU$(J,I,2)=”” THEN PAINT (Z*8,L*8),0,2
670 LOCATE L,Z:COLOR ,2:PRINT TAU$(J,I,1)
680 NEXT J
690 NEXT I
700 LOCATE 25,1:END
710 DATA 1,2,3,4,5,6,14,15,20,21,35,36,38,64,156,157,224,225,226,227,228,229,230,231

Oharrak:

  1. Laukiak aukeratzerakoan, kontuan izan laukiak desberdinak izan behar dutela, hau da, lauki berean RETURN bitan sakatuz gero ez dela ontzat emango.
  2. Irudiak ezkutatu aurretik pausaldi luzeagoa egitea nahi izanez gero, nahikoa izango duzu 510 lerroan FOR sententzian 2500 zenbakiaren ordez beste handiago bat jartzea.
  3. Agertzen diren irudiak edo ikurrak aldatzeko berriz, 630 lerroan dauden zenbakiak (ASCII kodeak) alda ditzakezu. Gogoratu ASCII kodeek 1etik 256ra bitartekoak izan behar dutela.
  4. Programa honetan 100 saio eskaintzen zaizkizu. Saio gehiago edo gutxiago nahi izanez gero, 220 lerroan aldatu.

Programaren zatiak:

  • Taula osatu (50-130)
  • Pantaila irudikatu (140-190)
  • Teklen mugimenduen kontrola (260-420)
  • Aukeratutako laukian zegoen irudia erakutsi eta informazioa gorde (440-460)
  • Aukeratutako bi laukietako irudiak konparatu eta kasu bakoitzean dagozkion ekintzak burutu (470-550)
  • Jokoa amaitutakoan emaitzak eskaini (580-690)
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila