/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright 2008 by Mathieu Brethes Please remove the lines starting with # and the C-style comments before typing this in the TI99 command-line Basic... */ 1 DIM BOXARR(15) 2 GOTO 1690 # Modulo 10 MODRES = MODA / MODB 20 MODRESI = INT(MODRES) 30 MODREM = MODRES - MODRESI 40 MODRES = MODREM * MODB 50 RETURN # Draw a box 60 FOR BOXLINE=0 TO 4 70 CALL HCHAR(BOXY+BOXLINE, BOXX, BOXCHAR, 5) 80 NEXT BOXLINE 90 RETURN # Compute coordinates from box array to drawing 100 MODA = BOXNUM 110 MODB = 4 120 GOSUB 10 130 BOXX = MODRES * 6 + 5 140 BOXY = INT(BOXNUM / 4) * 6 + 1 150 GOSUB 60 160 RETURN #Toggle box 170 IF BOXARR(BOXNUM) = ASC(".") THEN 180 ELSE 200 180 BOXARR(BOXNUM) = ASC("0") 190 GOTO 210 200 BOXARR(BOXNUM) = ASC(".") 210 BOXCHAR = BOXARR(BOXNUM) 220 GOSUB 100 230 RETURN #Toggle neighbours too 240 BOXTMP = BOXNUM 250 IF BOXNUM > 3 THEN 260 ELSE 290 260 BOXNUM = BOXNUM - 4 270 GOSUB 170 280 BOXNUM = BOXTMP 290 IF BOXNUM < 12 THEN 300 ELSE 330 300 BOXNUM = BOXNUM + 4 310 GOSUB 170 320 BOXNUM = BOXTMP 330 MODA = BOXNUM 340 MODB = 4 350 GOSUB 10 360 IF MODRES <> 0 THEN 370 ELSE 400 370 BOXNUM=BOXNUM-1 380 GOSUB 170 390 BOXNUM=BOXTMP 400 MODA = BOXNUM 410 MODB = 4 420 GOSUB 10 430 IF MODRES <> 3 THEN 440 ELSE 470 440 BOXNUM=BOXNUM+1 450 GOSUB 170 460 BOXNUM=BOXTMP 470 RETURN # Initialiser l'affichage et le tableau 480 RANDOMIZE 490 FOR I=0 TO 15 500 BOXARR(I) = ASC('0') 510 NEXT I 520 FOR I=0 TO 15 530 IF RND > 0.5 THEN 570 540 BOXNUM = I 550 GOSUB 240 560 GOSUB 170 570 NEXT I 580 RETURN # Afficher le curseur 590 CALL HCHAR(CURY, CURX+1, ASC("-"), 3) 600 CALL VCHAR(CURY+1, CURX, ASC("|"), 3) 610 CALL HCHAR(CURY+4, CURX+1, ASC("-"), 3) 620 CALL VCHAR(CURY+1, CURX+4, ASC("|"), 3) 630 CALL HCHAR(CURY, CURX, ASC("/"), 1) 640 CALL HCHAR(CURY, CURX+4, ASC("\"), 1) 650 CALL HCHAR(CURY+4, CURX, ASC("\"), 1) 660 CALL HCHAR(CURY+4, CURX+4,ASC("/"),1) 670 RETURN # Afficher le curseur en fonction d'une boîte 680 MODA = CURNUM 690 MODB = 4 700 GOSUB 10 710 CURX = MODRES * 6 + 5 720 CURY = INT(CURNUM / 4) * 6 + 1 730 GOSUB 590 740 RETURN # Déplacer le curseur 750 NEWCUR = CURNUM 760 CALL JOYST(1,JX,JY) 770 IF JX < 0 THEN 780 ELSE 800 780 IF JY = 0 THEN 1000 790 IF JY < 0 THEN 1160 ELSE 1240 800 IF JX = 0 THEN 810 ELSE 830 810 IF JY = 0 THEN 850 820 IF JY < 0 THEN 920 ELSE 960 830 IF JY = 0 THEN 1080 840 IF JY < 0 THEN 1200 ELSE 1280 # même chose pour clavier 850 CALL KEY(0,AK,ST) 860 IF AK = -1 THEN 1400 870 IF AK = 9 THEN 1080 880 IF AK = 11 THEN 920 890 IF AK = 8 THEN 1000 900 IF AK = 10 THEN 960 910 GOTO 1350 # Top 920 NEWCUR = CURNUM - 4 930 IF NEWCUR >= 0 THEN 1310 940 NEWCUR = NEWCUR + 16 950 GOTO 1310 # Bottom 960 NEWCUR = CURNUM + 4 970 IF NEWCUR <= 15 THEN 1310 980 NEWCUR = NEWCUR - 16 990 GOTO 1310 # Left 1000 MODA = CURNUM 1010 MODB = 4 1020 GOSUB 10 1030 IF MODRES = 0 THEN 1040 ELSE 1060 1040 NEWCUR = CURNUM + 3 1050 GOTO 1310 1060 NEWCUR = CURNUM - 1 1070 GOTO 1310 # Right 1080 MODA = CURNUM 1090 MODB = 4 1100 GOSUB 10 1110 IF MODRES = 3 THEN 1120 ELSE 1140 1120 NEWCUR = CURNUM - 3 1130 GOTO 1310 1140 NEWCUR = CURNUM + 1 1150 GOTO 1310 # Top-left 1160 NEWCUR = CURNUM - 5 1170 IF NEWCUR >= 0 THEN 1310 1180 NEWCUR = NEWCUR + 16 1190 GOTO 1310 # Top-right 1200 NEWCUR = CURNUM - 3 1210 IF NEWCUR >= 0 THEN 1310 1220 NEWCUR = NEWCUR + 16 1230 GOTO 1310 # Bottom-left 1240 NEWCUR = CURNUM + 3 1250 IF NEWCUR <= 15 THEN 1310 1260 NEWCUR = NEWCUR - 16 1270 GOTO 1310 # Bottom-right 1280 NEWCUR = CURNUM + 5 1290 IF NEWCUR <= 15 THEN 1310 1300 NEWCUR = NEWCUR - 16 # Draw the stuff : erase old box 1310 BOXNUM = CURNUM 1320 GOSUB 210 # Draw the new one! 1330 CURNUM = NEWCUR 1340 GOSUB 680 # Case "nothing"? --> enter pressed, we toggle! 1350 IF AK = 13 THEN 1360 ELSE 1400 1360 BOXNUM = CURNUM 1370 GOSUB 240 1380 GOSUB 170 1390 GOSUB 680 1400 RETURN # Winning move! 1410 CALL HCHAR(1, 1, ASC("."), 768) 1420 CALL HCHAR(1, 1, ASC(":"), 768) 1430 CALL HCHAR(1, 1, ASC("!"), 768) 1440 CALL CLEAR 1450 PRINT "VOUS AVEZ GAGNE !" 1460 PRINT "APPUYEZ SUR ENTREE POUR REJOUER OU SUR Q POUR RETOURNER AU BASIC." 1470 PRINT "UNE FOIS DANS BASIC, TAPEZ ""RUN"" POUR RELANCER." 1480 CALL KEY(0, AK, ST) 1490 IF AK = -1 THEN 1480 1500 IF AK = ASC("Q") THEN 1510 ELSE 1520 1510 STOP 1520 IF AK <> 13 THEN 1480 1530 RETURN # Introduction text 1540 CALL CLEAR 1550 PRINT "BIENVENUE AU CARRE LUMINEUX" 1560 PRINT "---------------------------" 1570 PRINT "" 1580 PRINT "LE BUT DU JEU EST D'ALLUMER TOUS LES CARRES." 1590 PRINT "DEPLACEZ LE CURSEUR SUR UN CARRE AVEC LES FLECHES DU CLAVIER ET APPUYEZ SUR ENTREE POUR L'ALLUMER." 1600 PRINT "" 1610 PRINT "ATTENTION : CHANGER UN CARRE CHANGE AUSSI SES VOISINS !" 1620 PRINT "" 1630 PRINT "APPUYEZ SUR UNE TOUCHE POUR CONTINUER, Q POUR QUITTER (PUIS ""RUN"" POUR RELANCER OU ""LIST"" POUR VOIR LE CODE SOURCE DU JEU)..." 1640 CALL KEY(0, AK, ST) 1650 IF AK = -1 THEN 1640 1660 IF AK <> ASC("Q") THEN 1680 1670 STOP 1680 RETURN # Main game loop 1690 GOSUB 1540 1700 CALL CLEAR 1710 GOSUB 480 1720 FOR BOXNUM=0 TO 15 1730 GOSUB 210 1740 NEXT BOXNUM 1750 CURNUM=0 1760 GOSUB 680 1770 GOSUB 750 1780 IF AK = ASC("Q") THEN 1690 1790 FOR I=0 TO 15 1800 IF BOXARR(I) = ASC('.') THEN 1770 1810 NEXT I 1820 GOSUB 1410 1830 GOTO 1690