Arrain-zopa gustokoa baduzu, asma ezazu zerekin egina dagoen

Arrojeria, Eustakio

Elhuyar Zientziaren Komunikazioa

Lizaso, Pili

Informatika Saila

Elhuyar Fundazioa

Ezagunak izango dituzu jadanik aldizkari, egunkari etab.etan agertzen diren jokoak (dameroak, gurutzegramak, letra-zopak, etab.). Hemen aurkezten dizugun programa honek, letra-zopak osatzen ditu. Letra-zopa, izenak dioen bezala, letra-nahaste bat da eta jokoa, nahaste horretan gai bati lotutako hitzak aurkitzean datza.

Hitzak era askotara egon daitezke, ezkerretik eskuinera, eskuinetik ezkerrera, gorantz, beherantz, diagonalean. etab.

Guk gai bat aukeratu behar eta, arrainen izenak hartu ditugu. Zuk beste hitz batzuk sartu nahi badituzu, datuetan aldatzea besterik ez duzu egin behar.

Programaren zatiak:

  • Hitz-multzo batetik (kasu honetan 30) 10 hartzen dira aleatorioki (120)
  • Aukeratutako hitzak ZOPA$en gordetzen dira (130-300)
  • Hitzak zopan kokatu ondoren libre geratu diren posizioak bete beharko dira, letrak aleatorioki hartuz (310-320)
  • Letra-zopa pantailan aurkezten da, bertan aurki daitezkeen hitzak beste batzuekin nahastuta alboan eskaintzen direlarik (330-350)
  • Erabiltzearen erantzunak jasotzen dira, honek 10 hitzak asmatu edo F10 tekla sakatzen duen arte (36)-590)
  • Sartutako hitza letra-zopan aurkitzen den ala ez egiaztatzen da (440-500).
  • Hitza zopan baldin badago, kolore biziagoan jarriz nabarmenduko da. (510-590).
  • F10 sakatuz programatik irtenez gero, aurkitzeko falta ziren hitzak gorriz nabarmenduko dira.

Aukeratutako hitzak ZOPA$en sartu

Hau izan daiteke programaren zati garrantzitsuena, zeren eskuz egitea erraza baldin bada ere ordenadoreari agintzerakoan, guk inkontzienteki kontutan harçtzen ditugun baldintzak zehaztu behar bait ditugu.

Hitzak aleatorioki aukeratzeaz gain, hauek letra-zopan izango duten posizioa ere aleatorioki hartzen da. Posizioa esaten denean, hasierako lerroa eta zutabea, eta hitzak izango duen norantza (ezkerretik eskuinera, diagonalean gorantz etab.) esan nahi da.

Aukeratutako posizio batean hitz bat kokatu ahal izateko bete behar diren baldintzak hauek dira:

  • Hasierako posizioa, hau da ZOPA$ (LER,ZUT) libre egotea edota okupatuta baldin badago, bertan dagoen letra kokatu nahi dugun hitzaren lehen letrarekin bat etortzea (150).
  • Aztertzen ari garen norantzan hitzaren letra guztiak sartzeko adina lerro eta zutabe izatea (180).
  • Hitzaren letra bakoitzari dagokion posizioa libre egotea edota lehendik dagoen letra kokatu nahi dena izatea (190-210).

Oharrak:

  • Posizio bat baztertu aurretik norantza guztiak probatuko dira. Lerro, zutabe eta norantza konkretu batean hitza kokatzerik ez badago, lerroa eta zutabea mantenduz gainerako norantzak probatuko dira.
  • Hitz-multzoak 30ekoa izan behar du.
10 REM LETRA-ZOPA
20 DIM ZOPA$(15,19),HITZA$(10,5),NORAN(8,2)
30 RANDOMIZE TIMER:CLS:KEY OFF:COLOR 2:LOCATE 1,35:PRINT "LETRA-ZOPA":
LOCATE 2,35:PRINT "----------"
40 FOR I=1 TO 15:FOR J=1 TO 19:ZOPA$(I,J)="":NEXT J:NEXT I
50 FOR I=1 TO 10:FOR J=1 TO 5:HITZA$(I,J)="":NEXT J:NEXT I
60 COLOR 5:LOCATE 4,1:PRINT CHR$(218);STRING$(39,196);CHR$(191)
70 FOR I=5 TO 19:LOCATE I,1:PRINT CHR$(179):LOCATE I,41:PRINT CHR$(179):NEXT I
80 LOCATE 20,1:PRINT CHR$(192);STRING$(39,196);CHR$(217)
90 COLOR 3:LOCATE 9,9:PRINT "I T X A R O N A R R E N":LOCATE 11,7: PRINT "Z O P A P R E S T A T Z E N":LOCATE 13,13:PRINT "A R I N A I Z"
100 RESTORE 850
110 FOR I=1 TO 8:READ A,B:NORAN(I,1)=A:NORAN(I,2)=B:NEXT I
120 AUK$="ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^":FOR I=1 TO 10:ALE=INT(RND*LEN(AUK$))+1
:ALE1=ASC(MID$(AUK$,ALE,1))-64:RESTORE 860:FOR J=1 TO ALE1:READ A$:NEXT J:
HITZA$(I,1)=A$:AUK$=LEFT$(AUK$,ALE-1)+RIGHT$(AUK$,LEN(AUK$)-ALE):NEXT I
130 FOR I=1 TO 10
140 LER=INT (RND*15)+1:ZUT=INT (RND*19)+1:P$="B"
150 IF ZOPA$(LER,ZUT) "" AND ZOPA$(LER,ZUT) MID$(HITZA$(I,1),1,1) THEN
P$="E":GOTO 140
160 N=INT (RND*8)+1
170 FOR J=1 TO 8
180 IF LER+LEN(HITZA$(I,1))*NORAN(N,1) 1 OR LER+LEN(HITZA$(I,1))*NORAN(N,1) 15
OR ZUT+LEN(HITZA$(I,1))*NORAN(N,2) 1 OR ZUT+LEN(HITZA$(I,1))*NORAN(N,2) 19 THEN
IF N 7 THEN N=(N+1)-INT((N+1)/8)*8:GOTO 280 ELSE N=N+1:GOTO 280
190 FOR K=1 TO LEN(HITZA$(I,1))
200 IF ZOPA$(LER+NORAN(N,1)*(K-1),ZUT+NORAN(N,2)*(K-1)) "" AND ZOPA$(LER+NORAN(N,1)*(K-1),ZUT+NORAN(N,2)*(K-1)) MID$(HITZA$(I,1),K,1)
THEN P$="E":K=LEN(HITZA$(I,1))
210 NEXT K
220 IF P$="E" THEN 280
230 HITZA$(I,3)=STR$(LER):HITZA$(I,4)=STR$(ZUT):HITZA$(I,5)=STR$(N) 240 FOR L=1 TO LEN(HITZA$(I,1))
250 ZOPA$(LER+NORAN(N,1)*(L-1),ZUT+NORAN(N,2)*(L-1))=MID$(HITZA$(I,1),L,1)
260 NEXT L
270 J=8
280 NEXT J
290 IF P$="E" THEN 140
300 NEXT I
310 FOR I=1 TO 15:FOR J=1 TO 19:IF ZOPA$(I,J)="" THEN A=INT(RND*26)+97:
ZOPA$(I,J)=CHR$(A)
320 NEXT J:NEXT I
330 COLOR 2:FOR I=1 TO 15:FOR J=1 TO 19:LOCATE I+4,J*2+1:PRINT ZOPA$(I,J):NEXT J
:NEXT I
340 COLOR 2:LOCATE 3,44:PRINT "Izen hauetatik 10 aurkitzen dira":LOCATE 4,44:
PRINT "letra-zopan. Aurki itzazu!!!"
350 RESTORE 860:COLOR 3:FOR I=6 TO 20:READ A$:LOCATE I,44:PRINT A$:NEXT I:
FOR I=6 TO 20:READ A$:LOCATE I,63:PRINT A$:NEXT I
360 KEY 10,"":KEY (10) ON:ON KEY(10) GOSUB 650
370 J=1:ASMAT$="E":WHILE J =10 AND ASMAT$="E":IF HITZA$(J,2)="" THEN ASMAT$="F"
ELSE J=J+1
380 WEND
390 IF ASMAT$="E" THEN 600
400 COLOR 3:LOCATE 25,25:PRINT "Programa amaitzeko";:COLOR 27:PRINT " F10 ";:
COLOR 3:PRINT "sakatu"
410 COLOR 2:LOCATE 22,5:PRINT SPC(78):LOCATE 22,5:PRINT "Aurkitu duzun hitza: ";
:COLOR 20:LOCATE 22,POS(0):PRINT "\";:LOCATE 22,POS(0)-1
420 H$="":HI$="":TE$=" ":WHILE ASC(TE$) 13 AND LEN(H$) 31:TE$=INKEY$:H$=H$+TE$:
COLOR 4:PRINT TE$;:IF TE$="" THEN TE$=" "
430 WEND
440 H$=LEFT$(H$,LEN(H$)-1)
450 FOR I=1 TO LEN(H$)
460 A=ASC(MID$(H$,I,1)):IF A 64 AND A 91 THEN HI$=HI$+CHR$(A+32) ELSE
HI$=HI$+MID$(H$,I,1)
470 NEXT I
480 I=1:AURK$="F"
490 WHILE I 11 AND AURK$="F":IF HI$ HITZA$(I,1) THEN I=I+1 ELSE AURK$="E"
500 WEND
510 IF I 10 THEN 560
520 COLOR 10:HITZA$(I,2)="1":FOR J=1 TO LEN(HITZA$(I,1))
530 L=VAL(HITZA$(I,3))+(J-1)*NORAN(VAL(HITZA$(I,5)),1):
Z=VAL(HITZA$(I,4))+(J-1)*NORAN(VAL(HITZA$(I,5)),2)
540 LOCATE L+4,Z*2+1:PRINT MID$(HITZA$(I,1),J,1)
550 NEXT J:GOTO 590
560 COLOR 3:LOCATE 22,1:PRINT SPC(78):LOCATE 22,5:
PRINT "Sartu duzun hitza ez da letra-zopan sartutako hitzetariko bat.":
LOCATE 23,5:PRINT "Saia zaitez berriro."
570 GOSUB 770
580 LOCATE 22,1:PRINT SPC(78):LOCATE 23,1:PRINT SPC(78)
590 GOTO 370
600 LOCATE 22,1:PRINT SPC(78):LOCATE 25,1:PRINT SPC(78):COLOR 3:LOCATE 22,5:
PRINT "Oso ondo!!! Letra-zopa honetako hitz guztiak asmatu dituzu.":
LOCATE 25,20:PRINT "Besterik egin nahi al duzu (B/E)?"
610 TE$=INKEY$:WHILE TE$ "":TE$=INKEY$:WEND:
WHILE TE$ "B" AND TE$ "b" AND TE$ "E" AND TE$ "e":TE$=INKEY$:WEND
620 IF TE$="B" OR TE$="b" THEN 30
630 CLS:COLOR 3:LOCATE 12,28:PRINT "AGUR!!! Laster arte."
640 END
650 REM AMAIERA EKINTZA
660 COLOR 3:LOCATE 22,1:PRINT SPC(78):LOCATE 25,1:PRINT SPC(78):LOCATE 22,5:
PRINT "Hona hemen asmatzeko falta zitzaizkizun hitzak!!!"
670 FOR I=1 TO 10
680 IF HITZA$(I,2)="1" THEN 730
690 COLOR 4:FOR J=1 TO LEN(HITZA$(I,1))
700 L=VAL(HITZA$(I,3))+(J-1)*NORAN(VAL(HITZA$(I,5)),1):
Z=VAL(HITZA$(I,4))+(J-1)*NORAN(VAL(HITZA$(I,5)),2)
710 LOCATE L+4,Z*2+1:PRINT MID$(HITZA$(I,1),J,1)
720 NEXT J
730 NEXT I
740 GOSUB 770
750 RETURN 630
760 REM AMAIA AMAIERA EKINTZA
770 REM JARRAITZEKO EKINTZA
780 LOCATE 25,1:PRINT SPC(78):COLOR 3:LOCATE 25,29:PRINT "Jarraitzeko";:
COLOR 27:PRINT " J ";:COLOR 3:PRINT "sakatu":BEEP
790 TE$=INKEY$:WHILE TE$ "":TE$=INKEY$:WEND
800 WHILE TE$ "J" AND TE$ "j":TE$=INKEY$:WEND
810 LOCATE 25,29:PRINT SPC(30):COLOR 2
820 RETURN
830 REM AMAIA JARRAITZEKO EKINTZA
840 REM DATUAK
850 DATA -1,1,-1,0,-1,-1,0,1,0,-1,1,1,1,0,1,-1
860 DATA "legatz","katuarrain","txitxarro","bakailao","paneka","boga","zapo"
870 DATA "oilar","mailuarrain","marrazo","itsasuge","sardina","bokarta","izokin" 880 DATA "sardinzar","amuarrain","zerrarrain","hegaluze","platuxa","korrokoi" 890 DATA "lengoradu","bisigu","krabarroka","perloi","lupina","mero","angula"
900 DATA "arraia","karioka","pantxo"
910 REM AMAIA DATUAK
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila