Sziasztok!
Elkezdtem írni egy QUIZ motort EP-re BASIC-ben a szombati Regamexhez az EP standhoz, lehessen EP-n quizeztetni az embereket, és egy érdekes dologgal találkoztam, valamit benézek szerintem, edukáljatok meg légyszi!
A program 137. sorában beállítom a TEXT 80-at, és a 140-es sorban a palettát hozzá. (A 223-as szín az egy ilyen pasztell bézs szín.)
Ezek után amikor eljut a program a WRITE_QUESTION eljáráshoz, a képernyő letörlésre kerül a 2020. sorban, a 2022. sorban beállítom elvileg a tintát a 3-as palettaszínre (ződ), ám ennek ellenére a kiírás mégis az 1-es palettaszínnel történik! Mért?
A későbbiekben amikor váltogatom a tintaszínt, minden rendben van, a megfelelő tintaszínnel ír a program, viszont a képernyő törlése utáni INK parancsot mintha figyelmen kívül hagyná. Ötlet?
Mivel nem nagy az egész program, bemásolom ide szövegként, hogy érthetőbb legyen miről beszélek, de csatolom futtatható formában is:
100 PROGRAM QUIZ
110 LET Q=0:LET SCORE=0
120 NUMERIC POINTS(5),RIGHT,ANSWER,POS(5)
130 STRING QUESTION$,ANSWER$(5)
135 LET POS(1)=14:LET POS(2)=16:LET POS(3)=18:LET POS(4)=20
136 !SET VIDEO MODE 2
137 TEXT 80
140 SET #102:PALETTE BLACK,223,BLACK,GREEN,BLACK,GREEN,BLACK,RED
150 SET #102:BIAS 24
199 !
200 CALL START
210 DO
220 CALL READ_QUESTION
230 IF QUESTION$="" THEN
240 EXIT DO
250 END IF
260 CALL WRITE_QUESTION
270 CALL GET_ANSWER
280 CALL EVAL_ANSWER
300 LOOP
998 END
999 !
1000 DEF START
1110 LET Q=0:LET SCORE=0
1120 RESTORE
1490 END DEF
1499 !
1500 DEF READ_QUESTION
1510 READ QUESTION$
1520 IF QUESTION$="" THEN
1530 EXIT DEF
1540 END IF
1550 FOR I=1 TO 4
1560 READ ANSWER$(I),POINTS(I)
1570 IF POINTS(I)<>0 THEN
1580 LET RIGHT=I
1590 END IF
1600 NEXT I
1610 END DEF
1999 !
2000 DEF WRITE_QUESTION
2010 LET Q=Q+1
2020 CLEAR SCREEN
2022 SET #102:INK 3
2025 PRINT Q;".";
2027 PRINT AT 24,1:"PONT:";SCORE;
2030 PRINT AT 9,10:QUESTION$
2050 FOR I=1 TO 4
2060 CALL PRINT_ANSWER(I)
2070 NEXT I
2080 PRINT :PRINT :PRINT "Nyomd meg a vlasz sorszmt!";
2090 END DEF
2299 !
2300 DEF PRINT_ANSWER(INDEX)
2310 PRINT AT POS(INDEX),1:TAB(6);INDEX;") ";ANSWER$(INDEX);
2350 END DEF
2999 !
3000 DEF GET_ANSWER
3030 DO
3040 LET KEY$=INKEY$
3060 LOOP UNTIL KEY$="1" OR KEY$="2" OR KEY$="3" OR KEY$="4"
3070 LET ANSWER=VAL(KEY$)
3090 END DEF
3499 !
3500 DEF EVAL_ANSWER
3510 SET #102:INK 5
3520 CALL PRINT_ANSWER(RIGHT)
3522 IF ANSWER=RIGHT THEN
3524 PRINT AT 24,34:"HELYES V‘LASZ!";
3526 END IF
3530 IF ANSWER<>RIGHT THEN
3540 SET #102:INK 7
3550 CALL PRINT_ANSWER(ANSWER)
3560 PRINT AT 24,32:"HELYTELEN V‘LASZ!";
3570 END IF
3580 LET SCORE=SCORE+POINTS(ANSWER)
3590 SET #102:INK 1
3600 PRINT AT 24,1:"PONT:";SCORE;
3610 DO
3620 LOOP WHILE INKEY$=""
3990 END DEF
8000 ! DATA ROWS
8010 DATA "Hogy h„vjk Mario din† bartjt?"
8020 DATA "Pumukli",0,"Luigi",0,"Yoshi",3,"Gumbi",0
8030 DATA "Hogy h„vjk a Legend of Zelda sorozat kardos fhs“t?"
8040 DATA "Xenia",0,"Link",2,"Zelda",0,"Ax Battler",0
8050 DATA ""