SCREEN 12 PRINT : PRINT COLOR 11: PRINT " Welkom in KUBO !" COLOR 7: PRINT "" PLAY "l21o3cdefgfedcc" PRINT "KUBO wordt met twee gespeeld. Je ziet een veld van zes" PRINT "speelvierkanten, genummerd 1 tot 6, met daarnaast twee" PRINT "spaarvierkanten, genummerd 1 en 2, een per speler. De" PRINT "vakjes van de speelvierkanten kunnen worden bezet door" PRINT "'speelstukken', waarvan er een pot beschikbaar is van " PRINT "6 x 6 x 6 = 216, dit is evenveel als er vakjes zijn" PRINT " over de zes vierkanten." PRINT "" PRINT "Speler 1 werkt kolomgewijs in elk vierkant, van onder" PRINT "naar boven. Speler twee werkt rijgewijs, van links naar" PRINT "rechts. Een kolom (speler 1) of een rij (speler 2)" PRINT "noemen we daarom een spellijn. Welke spellijn en welk" PRINT "vierkant er elke zet dienen aangespeeld wordt beslecht" PRINT "door een worp van twee teerlingen. De speler aan zet" PRINT "kan telkens beslissen welke teerling het vierkant , en" PRINT "welke de spellijn zal bepalen. Hij kan toggelen tussen" PRINT "beide mogelijkheden om de beste positie te kiezen." PRINT "Geven de beide teerlingen hetzelfde getal dan is er" PRINT "natuurlijk geen keus mogelijk. De speler krijgt dan wel" PRINT " een extra beurt, en zijn score er een punt bij." GOSUB wacht PRINT "Het is de bedoeling de spellijn te volzetten. Eenmaal" PRINT "vierkant en spellijn gekozen zoekt KUBO voor de speler" PRINT "het eerste vrije vakje op de spellijn, en bezet dat" PRINT "door het groen te kleuren ...tenzij hij moet sparen:" PRINT "zie verder in deze paragraaf. Vervolgens gaat KUBO na" PRINT "of op deze wijze geen gevulde kolom en/of rij ontstaat." PRINT "Is dit het geval, dan wordt deze rij (en/of kolom)" PRINT "'geblokt': hij wordt roodgekleurd, en speler 2 (en/of 1)" PRINT "krijgt er zes punten bij. De zoekbeurt op een" PRINT "gekozen spellijn verloopt dus als volgt, te beginnen" PRINT "met het eerste vakje: is het vrij, dan wordt het bezet" PRINT "volgens de hierboven beschreven procedure en" PRINT "nacontroles. Is het bezet (groen), dan wordt het" PRINT "volgende vakje bekeken. Is het geblokt (rood), dan" PRINT "wordt het spaarsaldo van het betrokken vierkant en de" PRINT "spelrij vergeleken met het aantal reeds ontmoete" PRINT "geblokte vakjes: is het spaarsaldo voldoende, dan wordt" PRINT "het volgende vakje bekeken, zoniet moet er een punt" PRINT "worden bijgespaard en overgegaan naar de volgende zet." GOSUB wacht PRINT "Het spaarsaldo verschijnt op het spaarvierkant van de" PRINT "speler. De richting overeenkomend met zijn spellijnen" PRINT "stelt deze spellijnen voor, de andere richting het" PRINT "nummer van de speelvierkanten (deze richting is ook" PRINT "genummerd zoals de speelvierkanten). Heeft speler 1" PRINT "bijvoorbeeld 2x gespaard voor spellijn 3 van vierkant" PRINT "6, dan verschijnt er een 2 in kolom 3, rij 6 van" PRINT "spaarvierkant 1. Hij mag dan 2 geblokte vakjes voorbij" PRINT "op deze spellijn, alvorens een vrij vakje te vinden, of" PRINT "alvorens te moeten bijsparen ingeval er een derde" PRINT "geblokt vakje in zijn weg ligt. Het sparen stopt bij 6" PRINT "(er zijn 6 vakjes op een spellijn, dus maximum 6" PRINT "blokkingen mogelijk). Is dit het geval en komt de" PRINT "speler vervolgens nog op deze spellijn terecht, dan" PRINT "krijgt hij er eenvoudig een punt bij op zijn score." PRINT "Tenslotte, na de laatste zet, wordt de score" PRINT "vermeerderd met de som van de bijeengespaarde punten op" PRINT "het spaarvierkant van de tegenstander (!), en levert zo" PRINT "de eindscore op. Het sparen komt dus de andere speler" PRINT "ten goede, en dient eigenlijk eerder opgevat als het" PRINT "betalen van tolgeld." GOSUB wacht PRINT "Een punt van strategie: in de keus van spellijn en" PRINT "vierkant is het gunstiger de linker kolommen resp." PRINT "onderste rijen het snelst te vullen, vermits de andere" PRINT "speler van links naar rechts resp. van onder naar boven" PRINT "werkt, en daar dus het snelst gehinderd wordt door" PRINT "blokkingen. Anderzijds dient men de spelrijkeuzes zo te" PRINT "verdelen dat men zo min mogelijk de rijen van de" PRINT "tegenspeler "; bijvult; ", en zoveel mogelijk die van" PRINT "zichzelf. Tenslotte en in de latere spelfazes, is het" PRINT "soms verkieslijk te sparen op een rij (bijvoorbeeld een" PRINT "eigen, geblokte rij) dan te spelen op de alternatieve" PRINT "rij, indien dit laatste een spelrij van de tegenspeler" PRINT "zou completeren en dus blokken." GOSUB wacht PRINT "De derde man. Waarom heet het spel KUBO? Eigenlijk was" PRINT "het eerst opgevat als een driedimensionaal spel: de" PRINT "meeste spellen zetten aan tot vlak, niet tot ruimtelijk" PRINT "denken. De 'speelstukken' van KUBO kunnen gedacht" PRINT "worden als kubusjes, en de zes speelvierkanten als" PRINT "boven elkaar liggende lagen die samen een enkele" PRINT "speelkubus vormen. De 3D-voorstelling daarvan laten we" PRINT "echter grif over aan de liefhebbers. Toch behouden we" PRINT "iets van deze voorstelling: de speelkubus kan in feite" PRINT "door drie personen worden aangespeeld, een per" PRINT "richting. Voor de derde speler kunnen lijnen loodrecht" PRINT "op de speelvierkanten ('zuilen') worden geblokt: dit" PRINT "komt overeen met 6 bezettingen, op gelijknamige vakjes" PRINT "(zelfde rij en kolom) van de 6 speelvierkanten. KUBO" PRINT "houdt hier effectief rekening mee, en doet ook deze" PRINT "nacontrole tegelijk met die op kolom- en rijblokkingen." PRINT "Doet zich zo'n 'zuilblokking' voor, dan worden deze" PRINT "vakjes effectief roodgekleurd, en gaan er 6 punten naar" PRINT "de 'bank', dat is, de score voor de 'derde man'. De" PRINT "score van de bank wordt op het eind vermeld, samen met" PRINT "de eindscores van beide spelers. Op deze wijze kan KUBO" PRINT "ook met drie worden gespeeld, mits bij elk spel een" PRINT "andere speler 'gaat slapen', en alleen op het eind de" PRINT "bank aan zijn totaalscore toevoegt." GOSUB wacht LOCATE 12, 18: COLOR 11: PRINT "Veel KUBOistisch plezier!" LOCATE 25, 18: COLOR 14: PRINT "Credits: guido wuyts 1995" GOSUB wacht COLOR 15: GOTO Speelveld wacht: PLAY "o4l12d" i = i + 1 LOCATE 1, 70: COLOR 11: PRINT i; "/6" col = 11: a$ = "" WHILE a$ = "" COLOR col: LOCATE 28, 19 PRINT "-> Druk een toets (ESC voor KUBO)..." tijd = TIMER: WHILE TIMER - tijd < .5: WEND IF col = 11 THEN col = 5 ELSE col = 11 a$ = INKEY$ WEND IF a$ = CHR$(27) THEN CLS : COLOR 15: GOTO Speelveld a$ = "": CLS IF i < 6 THEN COLOR 11 PRINT " ---------KUBO---------" PRINT : COLOR 7 END IF RETURN '''**********************SPEL******************************** Speelveld: x0%(1) = 10: x0%(2) = 162: x0%(3) = 314 x0%(4) = x0%(1): x0%(5) = x0%(2): x0%(6) = x0%(3) y0%(1) = 15: y0%(2) = y0%(1): y0%(3) = y0%(1) y0%(4) = 191: y0%(5) = y0%(4): y0%(6) = y0%(4) x0%(7) = 498: x0%(8) = x0%(7) y0%(7) = y0%(1): y0%(8) = y0%(4) dx = 16.5: dy = 16! r0%(1) = 2: r0%(2) = r0%(1): r0%(3) = r0%(1): r0%(7) = r0%(1) r0%(4) = 13: r0%(5) = r0%(4): r0%(6) = r0%(4): r0%(8) = r0%(4) c0%(1) = 3: c0%(4) = c0%(1) c0%(2) = 22: c0%(5) = c0%(2) c0%(3) = 41: c0%(6) = c0%(3) c0%(7) = 64: c0%(8) = c0%(7) dr% = 1: dc% = 2 col%(1) = 20 '... vierkantkleur FOR i% = 2 TO 6: col%(i%) = col%(1): NEXT i% col%(7) = 5: col%(8) = 3 spl%(1) = 11: spl%(2) = 13 '... spelerkleur Parameters: RANDOMIZE TIMER DIM dobb(1 TO 6) AS STRING * 1 '... voor spaarvierkanten dobb(1) = "1": dobb(2) = "2": dobb(3) = "3" dobb(4) = "4": dobb(5) = "5": dobb(6) = "6" DIM u%(1 TO 8, 1 TO 6, 1 TO 6), w%(1 TO 3, 1 TO 6, 1 TO 6) '...toest. fies. u1% = 2: u2% = 12 '... u(v=1 TO 6,r,k)=toestand=kleur hokje, u1=bezet, u2=geblokt '... u("vp%"=7 TO 8,rp%,kp%)=spaarsaldo speler 1 TO 2,rp%=m OF v, kp%=v OF m '... w(s,v,m)=bezettingsgraad spelrij m, vierk v,speler s s% = 2: vlag% = 0 '... speler; vlag 1 = zelfde speler sp$(1) = CHR$(13): sp$(2) = CHR$(9)'... bevestigingstoetsen 1=ENTER,2=TAB scor%(1) = 0: scor%(2) = 0 '... spelerscores scor%(3) = 0 '... score dode man ntot% = 217 '... aantal zetten + 1 TekenVeld: FOR i% = 1 TO 6 FOR j% = 0 TO 6 LINE (x0%(i%) + j% * dx, y0%(i%))-(x0%(i%) + j% * dx, y0%(i%) + 6 * dy) LINE (x0%(i%), y0%(i%) + j% * dy)-(x0%(i%) + 6 * dx, y0%(i%) + j% * dy) NEXT j% NEXT i% FOR i% = 7 TO 8 FOR j% = 0 TO 6 LINE (x0%(i%) + j% * dx, y0%(i%))-(x0%(i%) + j% * dx, y0%(i%) + 6 * dy), col%(i%) LINE (x0%(i%), y0%(i%) + j% * dy)-(x0%(i%) + 6 * dx, y0%(i%) + j% * dy), col%(i%) NEXT j% NEXT i% COLOR 6 FOR jj = 1 TO 6 LOCATE r0%(jj) + 6, c0%(jj) - 2 PRINT dobb(jj) NEXT COLOR spl%(1): LOCATE r0%(8) + 6, c0%(8) + 13: PRINT dobb(1) COLOR spl%(2): LOCATE r0%(7) + 6, c0%(8) + 13: PRINT dobb(2) LOCATE 8, 64 COLOR 6 PRINT "1 2 3 4 5 6" FOR jj = 1 TO 6 LOCATE 12 + jj, 62 PRINT dobb(jj) NEXT jj COLOR 7: LOCATE 28, 1 PRINT "Bevestig met RETURN (sp. 1) of TAB (sp. 2); toggel met andere toets (ESC = END)" COLOR 15 Speler: ntot% = ntot% - 1 '... beurt IF ntot% < 1 GOTO Einde IF vlag% = 0 THEN s% = -s% + 3 '... wissel speler als v<>m COLOR 6: LOCATE 22, 38: PRINT "---------KUBO--------- Scores:" COLOR spl%(2): LOCATE 26, 38: PRINT "---------KUBO--------- 2 : "; scor%(2) COLOR spl%(1): LOCATE 24, 38: PRINT "---------KUBO--------- 1 : "; scor%(1) LOCATE 24, 1 COLOR spl%(s%) PRINT " Speler : "; s% COLOR 6 LOCATE 22, 1 PRINT " Zet : "; ntot% GOSUB Loterij v% = tl1%: m% = tl2% '... initieer vierkant en spelrij IF v% = m% THEN '... gelijke teerlingen, dan: IF s% = 1 THEN PLAY "p8o3l24cp24c" ELSE PLAY "p8o2l24cp24c" vlag% = 1 '... s% mag volgende beurt : zet vlag% scor%(s%) = scor%(s%) + 1 ELSE IF s% = 1 THEN PLAY "p8o3l32c" ELSE PLAY "p8o2l32c" vlag% = 0 END IF IF s% = 1 THEN k% = m%: r% = 6 '... beginhokje van spelrij IF s% = 2 THEN r% = m%: k% = 1 Keuslus: LOCATE 26, 1 COLOR 14 PRINT " Teerlingen : "; v%; " - "; m% IF s% = 1 THEN k% = m%: r% = 6: w$ = CHR$(24) IF s% = 2 THEN r% = m%: k% = 1: w$ = ">" vd% = v% '... parms voor pijltjes (Duidaan) IF s% = 1 THEN kd% = k%: rd% = r% + 1 IF s% = 2 THEN kd% = k% - 1: rd% = r% GOSUB Duidaan COLOR 15 a$ = INPUT$(1) '... wacht op keus IF a$ = CHR$(27) THEN GOSUB Sluiten '... ESC = Sluiten w$ = " " '... pijltje wissen (Duidaan) GOSUB Duidaan IF a$ = sp$(s%) GOTO CheckSpaar '... bevestiging speler s IF v% = tl1% THEN v% = tl2% ELSE v% = tl1% '... wissel v en m IF m% = tl2% THEN m% = tl1% ELSE m% = tl2% GOTO Keuslus CheckSpaar: ' ... check aantal bezettingen (6=vol=sparen) IF w%(s%, v%, m%) = 60 GOTO Spaar '... spelrij geblokt, zoniet: ' ... w<60: er zijn vrije hokjes debt% = 0 '... initieer spaarschuld spelrij Zoek: '............... Zoek vrije hokje IF u%(v%, r%, k%) = 0 GOTO Bezet '... 1) hokje vrij? =gevonden, anders: IF u%(v%, r%, k%) = u1% THEN '... 2) hokje bezet? =bekijk volgend hokje IF s% = 1 THEN r% = r% - 1 ELSE k% = k% + 1 END IF GOTO Zoek END IF '.............3) anders is hokje geblokt: u%(v%,r%,k%)=u2%: check spaarsaldo IF s% = 1 THEN pp = u%(8, v%, m%) ELSE pp = u%(7, m%, v%) debt% = debt% + 1 '... geblokt hokje = spaarschuld + 1 IF debt% > pp GOTO Spaar '... spaarsaldo onvoldoende IF s% = 1 THEN '... (voldoende =) volgende beurt r% = r% - 1 ELSE k% = k% + 1 END IF GOTO Zoek Bezet: '..................................... Bezet het vrije hokje u%(v%, r%, k%) = u1% rh% = r%: kh% = k%: GOSUB Kleurhok GOSUB Checkrij '... wordt de rij niet compleet? = geblokt GOSUB Checkkol '... idem kolom GOSUB Checkvrk '... idem 'zuil' GOTO Speler '... volgende zet Spaar: IF s% = 1 THEN vp% = 8: rp% = v%: kp% = m% PLAY "o3l16co2ba" ELSE vp% = 7: rp% = m%: kp% = v% PLAY "o2l16co1ba" END IF IF u%(vp%, rp%, kp%) < 6 THEN u%(vp%, rp%, kp%) = u%(vp%, rp%, kp%) + 1 '... spaar + 1 ELSE scor%(s%) = scor%(s%) + 1 '... 6 = volspaard; daarna score + 1 END IF w$ = dobb(u%(vp%, rp%, kp%)) '... duid het spaarsaldo aan vd% = vp%: kd% = kp%: rd% = rp%: GOSUB Duidaan xx = x0%(vd%) + dx * (kd% - 1) '... (herstel de hokjes) yy = y0%(vd%) + dy * (rd% - 1) LINE (xx, yy)-(xx + dx, yy + dy), col%(vd%), B GOTO Speler Einde: PLAY "l21o3cdefgfedcc" FOR i% = 1 TO 6 FOR j% = 1 TO 6 scor%(1) = scor%(1) + u%(7, i%, j%) '...score(1) = + spaarsom(2) scor%(2) = scor%(2) + u%(8, i%, j%) '...score(2) = + spaarsom(1) NEXT j% NEXT i% LOCATE 27, 62: PRINT "Tot. 2 : "; scor%(2) LOCATE 25, 62: PRINT "Tot. 1 : "; scor%(1) LOCATE 23, 62: PRINT "Bank : "; scor%(3) '... Bank= 3de ("dode") speler SLEEP END Duidaan: k1 = c0%(vd%) + dc% * (kd% - 1) r1 = r0%(vd%) + dr% * (rd% - 1) LOCATE r1, k1 PRINT w$ RETURN Checkrij: w% = 0 '... teller niet vrije hokjes... FOR j% = 1 TO 6 '... in de rij van bezetting. IF u%(v%, r%, j%) = u1% THEN w% = w% + 1 '... hokje bezet; IF u%(v%, r%, j%) = u2% THEN w% = w% + 10 '... hokje geblokt; '............................................... hokje vrij (u=0): niets doen NEXT j% w%(2, v%, r%) = w% w% = INT(w% / 10) + w% MOD 10 '... aantal niet vrije... IF ABS(w% - 6) < .01 THEN '... hokjes = 6? PLAY "o2l16cdefg" w%(2, v%, r%) = 60: scor%(2) = scor%(2) + 6 '... blok de spelrij FOR j% = 1 TO 6 u%(v%, r%, j%) = u2% rh% = r%: kh% = j%: GOSUB Kleurhok NEXT j% END IF RETURN Checkkol: w% = 0 '... zelfde procedure FOR j% = 1 TO 6 '... voor kolom IF u%(v%, j%, k%) = u1% THEN w% = w% + 1 IF u%(v%, j%, k%) = u2% THEN w% = w% + 10 NEXT j% w%(1, v%, k%) = w% w% = INT(w% / 10) + w% MOD 10 IF ABS(w% - 6) < .01 THEN PLAY "o3l16cdefg" w%(1, v%, k%) = 60: scor%(1) = scor%(1) + 6 FOR j% = 1 TO 6 u%(v%, j%, k%) = u2% rh% = j%: kh% = k%: GOSUB Kleurhok NEXT j% END IF RETURN Checkvrk: w% = 0 '... procedure voor "zuilen" FOR j% = 1 TO 6 '... = gelijkgenummerde hokjes IF u%(j%, r%, k%) = u1% THEN w% = w% + 1 '... in de 6 vierkanten IF u%(j%, r%, k%) = u2% THEN w% = w% + 10 NEXT j% w% = INT(w% / 10) + w% MOD 10 IF ABS(w% - 6) < .01 THEN PLAY "o2l16fgabo3c" scor%(3) = scor%(3) + 6 '... de "derde man" scoort FOR j% = 1 TO 6 u%(j%, r%, k%) = u2% vo% = v%: v% = j%: rh% = r%: kh% = k%: GOSUB Kleurhok v% = vo% NEXT j% END IF RETURN Kleurhok: xx = x0%(v%) + dx * (kh% - 1) + .5 * dx yy = y0%(v%) + dy * (rh% - 1) + .5 * dy PAINT (xx, yy), u%(v%, rh%, kh%), col%(v%) RETURN Sluiten: PLAY "o4l12d" col = 9: a$ = "" WHILE a$ = "" COLOR col: LOCATE 28, 1 PRINT " ------------------ ? ? ? Stoppen ------- (SPACE = ja) ? ? ? ------------------" tijd = TIMER: WHILE TIMER - tijd < .5: WEND IF col = 9 THEN col = 7 ELSE col = 9 a$ = INKEY$ WEND IF a$ = " " THEN COLOR 15: PLAY "l21o3cdefgfedcc": END COLOR 7: LOCATE 28, 1 PRINT "Bevestig met RETURN (sp. 1) of TAB (sp. 2); toggel met andere toets (ESC = END)" COLOR 15 RETURN Loterij: tl1% = INT(RND * 5.999) + 1 '... Teerlingen tl2% = INT(RND * 5.999) + 1 t0 = TIMER tt = 0 COLOR 14 WHILE tt < 1 tl1% = tl1% MOD 6 + 1 tl2% = tl2% MOD 6 + 1 LOCATE 26, 1 PRINT " Teerlingen : "; tl1%; " - "; tl2% tt = TIMER - t0 WEND COLOR 15 RETURN