Tämä on Suomessa melko tuntemattoman SET-korttipelin QBasic-versio.
Jokaisella kortilla on neljä ominaisuutta:
Pelissä täytyy etsiä kolmen kortin yhdistelmiä, joissa jokainen näistä ominaisuuksista on sama tai eri.
Esimerkiksi tässä on kelvollinen yhdistelmä:
Määrä ja kuvio on kaikissa korteissa eri, väri ja täyttö taas on kaikissa korteissa sama.
Nämä kortit eivät muodosta yhdistelmää:
Määrä on kahdessa kortissa sama, mutta yhdessä eri. Tämän takia yhdistelmä ei kelpaa.
Kun ominaisuuksia on neljä ja jokainen ominaisuus on yksi kolmesta vaihtoehdosta, korttien yhteismäärä on 81. Suurin määrä kortteja, joista ei voi muodostaa yhtään yhdistelmää, on 20.
Tässä QBasic-ohjelmassa pöydässä on aina riittävästi kortteja yhdistelmän muodostamiseksi. Yhdistelmään tulevat kortit valitaan nuolilla ja Enterillä. Kun kolme korttia on valittu, kortit poistuvat pöydästä, jos ne muodostavat yhdistelmän. Tarvittaessa pöytään lisätään samalla uusia kortteja. Peli loppuu painamalla Esciä.
Myös SET-pelin kotisivut ovat tutustumisen arvoiset: http://www.setgame.com/set/
DIM SHARED Pakka%(1 TO 81, 1 TO 4) DIM SHARED Kortit%(1 TO 21, 1 TO 4) DIM SHARED PakkaMaara% DIM SHARED KorttiMaara% DIM SHARED YhdistelmaMaara% DIM SHARED Aanet% RANDOMIZE TIMER SCREEN 1 PakkaMaara% = 81 KorttiMaara% = 0 YhdistelmaMaara% = 0 Aanet% = -1 TeePakka UudetKortit PiirraPoyta Peli SCREEN 0 END FUNCTION ArvoLuku% (ala%, yla%) ArvoLuku% = INT((yla% - ala% + 1) * RND + ala%) END FUNCTION SUB LaskeYhdistelmat YhdistelmaMaara% = 0 FOR a% = 1 TO KorttiMaara% FOR b% = a% + 1 TO KorttiMaara% FOR c% = b% + 1 TO KorttiMaara% IF OnYhdistelma(a%, b%, c%) THEN YhdistelmaMaara% = YhdistelmaMaara% + 1 END IF NEXT NEXT NEXT END SUB SUB Loppu CLS FOR kuvio% = 1 TO 3 FOR maara% = 1 TO 3 FOR taytto% = 1 TO 3 FOR vari% = 1 TO 3 nopeusx! = ArvoLuku(5, 30) / 10 kimmo! = ArvoLuku(75, 90) / 100 nopeusy! = ArvoLuku(0, 20) / 10 y! = 0 FOR x! = 290 TO -30 STEP -nopeusx! y! = y! + nopeusy! nopeusy! = nopeusy! + .1 IF y! > 150 THEN nopeusy! = -nopeusy! * kimmo! y! = 150 END IF PiirraTyhja CINT(x!), CINT(y!) PiirraKortti CINT(x!), CINT(y!), kuvio%, vari%, taytto%, maara% WAIT &H3DA, 8 IF INKEY$ = CHR$(27) THEN EXIT SUB NEXT NEXT NEXT NEXT NEXT END SUB FUNCTION OnYhdistelma% (a%, b%, c%) FOR d% = 1 TO 4 IF Kortit%(a%, d%) = Kortit%(b%, d%) THEN IF Kortit%(a%, d%) <> Kortit%(c%, d%) THEN OnYhdistelma% = 0 EXIT FUNCTION END IF IF Kortit%(b%, d%) <> Kortit%(c%, d%) THEN OnYhdistelma% = 0 EXIT FUNCTION END IF END IF IF Kortit%(a%, d%) <> Kortit%(b%, d%) THEN IF Kortit%(a%, d%) = Kortit%(c%, d%) THEN OnYhdistelma% = 0 EXIT FUNCTION END IF IF Kortit%(b%, d%) = Kortit%(c%, d%) THEN OnYhdistelma% = 0 EXIT FUNCTION END IF END IF NEXT OnYhdistelma% = 1 END FUNCTION SUB Peli DIM Valitut%(21), Uudet%(21) DIM ValittuMaara%, ValittuKortti% ValittuKortti% = 1 ValittuMaara% = 0 PiirraKehys 1, 1 DO SELECT CASE INKEY$ CASE CHR$(0) + "M" PiirraKehys ValittuKortti%, 0 ValittuKortti% = ValittuKortti% + 3 IF ValittuKortti% > KorttiMaara% THEN ValittuKortti% = ValittuKortti% - 21 END IF WHILE ValittuKortti% < 1 ValittuKortti% = ValittuKortti% + 3 WEND PiirraKehys ValittuKortti%, 1 CASE CHR$(0) + "K" PiirraKehys ValittuKortti%, 0 ValittuKortti% = ValittuKortti% - 3 IF ValittuKortti% < 1 THEN ValittuKortti% = ValittuKortti% + 21 END IF WHILE ValittuKortti% > KorttiMaara% ValittuKortti% = ValittuKortti% - 3 WEND PiirraKehys ValittuKortti%, 1 CASE CHR$(0) + "P" PiirraKehys ValittuKortti%, 0 ValittuKortti% = ValittuKortti% + 1 IF ValittuKortti% MOD 3 = 1 THEN ValittuKortti% = ValittuKortti% - 3 END IF IF ValittuKortti% > KorttiMaara% THEN ValittuKortti% = ValittuKortti% - 3 WHILE ValittuKortti% MOD 3 <> 1 ValittuKortti% = ValittuKortti% + 1 WEND END IF PiirraKehys ValittuKortti%, 1 CASE CHR$(0) + "H" PiirraKehys ValittuKortti%, 0 ValittuKortti% = ValittuKortti% - 1 IF ValittuKortti% MOD 3 = 0 THEN ValittuKortti% = ValittuKortti% + 3 END IF WHILE ValittuKortti% > KorttiMaara% ValittuKortti% = ValittuKortti% - 1 WEND PiirraKehys ValittuKortti%, 1 CASE CHR$(13) IF Valitut%(ValittuKortti%) THEN Valitut%(ValittuKortti%) = 0 ValittuMaara% = ValittuMaara% - 1 PiirraVarjo ValittuKortti%, 0 ELSE Valitut%(ValittuKortti%) = 1 ValittuMaara% = ValittuMaara% + 1 Uudet%(ValittuMaara%) = ValittuKortti% PiirraVarjo ValittuKortti%, 1 END IF IF ValittuMaara% = 3 THEN FOR i% = 1 TO 3 Valitut%(Uudet%(i%)) = 0 PiirraVarjo Uudet%(i%), 0 NEXT ValittuMaara% = 0 IF OnYhdistelma(Uudet%(1), Uudet%(2), Uudet%(3)) THEN Soita 1 SiirraPakkaan Uudet%(1) SiirraPakkaan Uudet%(2) SiirraPakkaan Uudet%(3) LaskeYhdistelmat IF YhdistelmaMaara% = 0 THEN UudetKortit END IF PiirraPoyta IF ValittuKortti% > KorttiMaara% THEN ValittuKortti% = KorttiMaara% END IF PiirraKehys ValittuKortti%, 1 ELSE Soita 2 END IF END IF CASE "a", "A" Aanet% = NOT Aanet% CASE "m", "M" Soita 3 CASE "l", "L" Loppu EXIT SUB CASE CHR$(27) EXIT SUB END SELECT LOOP END SUB SUB PiirraKehys (kohta%, tila%) x% = 2 + ((kohta% - 1) \ 3) * 38 y% = 3 + ((kohta% - 1) MOD 3) * 58 IF tila% = 0 THEN LINE (x% + 1, y%)-STEP(34, 54), 0, B ELSE LINE (x%, y%)-STEP(36, 0), 3, , 21845 LINE (x%, y% + 54)-STEP(36, 0), 3, , 21845 LINE (x% + 1, y% + 1)-STEP(0, 54), 3, , 21845 LINE (x% + 35, y% + 1)-STEP(0, 54), 3, , 21845 END IF END SUB SUB PiirraKortti (x%, y%, kuvio%, vari%, taytto%, maara%) LINE (x%, y%)-STEP(30, 50), vari%, B SELECT CASE maara% CASE 1 PiirraKuvio x% + 10, y% + 20, kuvio%, vari%, taytto% CASE 2 PiirraKuvio x% + 10, y% + 10, kuvio%, vari%, taytto% PiirraKuvio x% + 10, y% + 30, kuvio%, vari%, taytto% CASE 3 PiirraKuvio x% + 10, y% + 5, kuvio%, vari%, taytto% PiirraKuvio x% + 10, y% + 20, kuvio%, vari%, taytto% PiirraKuvio x% + 10, y% + 35, kuvio%, vari%, taytto% END SELECT END SUB SUB PiirraKuvio (x%, y%, kuvio%, vari%, taytto%) IF kuvio% = 1 THEN LINE (x%, y%)-STEP(10, 10), vari%, B ELSEIF kuvio% = 2 THEN CIRCLE (x% + 5, y% + 5), 5, vari%, , , 1.1 ELSEIF kuvio% = 3 THEN LINE (x%, y% + 10)-(x% + 5, y%), vari% LINE (x% + 10, y% + 10)-(x% + 5, y%), vari% LINE (x%, y% + 10)-(x% + 10, y% + 10), vari% END IF IF taytto% = 2 THEN PAINT (x% + 5, y% + 5), CHR$(17 * vari%), vari% ELSEIF taytto% = 3 THEN PAINT (x% + 5, y% + 5), vari%, vari% END IF END SUB SUB PiirraPoyta CLS FOR i% = 1 TO KorttiMaara% x% = 5 + ((i% - 1) \ 3) * 38 y% = 5 + ((i% - 1) MOD 3) * 58 kuvio% = Kortit%(i%, 1) vari% = Kortit%(i%, 2) taytto% = Kortit%(i%, 3) maara% = Kortit%(i%, 4) PiirraKortti x%, y%, kuvio%, vari%, taytto%, maara% NEXT LOCATE 23, 25: PRINT "Yhdistelmiä:"; YhdistelmaMaara% END SUB SUB PiirraTyhja (x%, y%) LINE (x%, y%)-STEP(30, 50), 0, BF END SUB SUB PiirraVarjo (kohta%, tila%) x% = 6 + ((kohta% - 1) \ 3) * 38 y% = 6 + ((kohta% - 1) MOD 3) * 58 IF tila% = 0 THEN PAINT (x%, y%), 0, Kortit%(kohta%, 2) ELSE PAINT (x%, y%), (Kortit%(kohta%, 2) + 1) MOD 3 + 1, Kortit%(kohta%, 2) END IF END SUB SUB SiirraPakkaan (kohta%) PakkaMaara% = PakkaMaara% + 1 KorttiMaara% = KorttiMaara% - 1 Pakka%(PakkaMaara%, 1) = Kortit%(kohta%, 1) Pakka%(PakkaMaara%, 2) = Kortit%(kohta%, 2) Pakka%(PakkaMaara%, 3) = Kortit%(kohta%, 3) Pakka%(PakkaMaara%, 4) = Kortit%(kohta%, 4) Kortit%(kohta%, 1) = Kortit%(KorttiMaara% + 1, 1) Kortit%(kohta%, 2) = Kortit%(KorttiMaara% + 1, 2) Kortit%(kohta%, 3) = Kortit%(KorttiMaara% + 1, 3) Kortit%(kohta%, 4) = Kortit%(KorttiMaara% + 1, 4) END SUB SUB SiirraPoytaan (kohta%) KorttiMaara% = KorttiMaara% + 1 PakkaMaara% = PakkaMaara% - 1 Kortit%(KorttiMaara%, 1) = Pakka%(kohta%, 1) Kortit%(KorttiMaara%, 2) = Pakka%(kohta%, 2) Kortit%(KorttiMaara%, 3) = Pakka%(kohta%, 3) Kortit%(KorttiMaara%, 4) = Pakka%(kohta%, 4) Pakka%(kohta%, 1) = Pakka%(PakkaMaara% + 1, 1) Pakka%(kohta%, 2) = Pakka%(PakkaMaara% + 1, 2) Pakka%(kohta%, 3) = Pakka%(PakkaMaara% + 1, 3) Pakka%(kohta%, 4) = Pakka%(PakkaMaara% + 1, 4) END SUB SUB Soita (aani%) IF Aanet% THEN SELECT CASE aani% CASE 1 PLAY "o3l16ceg>c" CASE 2 PLAY "o1l32e-c" CASE 3 PLAY "t120" PLAY "l64n66n54n26p64p16n45n42p32n64n52p32n67n55n21p64p16n45n42" PLAY "p32n61n49p32n64n52n26p64p16n62n50n45n42p16n21p32p64p16n62" PLAY "n50n45n42p16n71n59n19p64p16n71n59n47n43p16n69n57n23p64p16" PLAY "n45n42p32p16n67n55n28p64p16n67n55n43n40p16n23p32p64p16n67" PLAY "n55n43n40p16n74n62n19p64p16n74n62n47n43p16n73n61n26p64p16" PLAY "n47n43p32n71n59p32n69n57n30p64p16n69n57n45n42p16n26p32p64" PLAY "p16n70n58n42p64p16n71n59n43p64p16p16p16n61n49n45n25p16p16" PLAY "p16n62n50n45n26p16" END SELECT END IF END SUB SUB TeePakka kohta% = 0 FOR kuvio% = 1 TO 3 FOR vari% = 1 TO 3 FOR taytto% = 1 TO 3 FOR maara% = 1 TO 3 kohta% = kohta% + 1 Pakka%(kohta%, 1) = kuvio% Pakka%(kohta%, 2) = vari% Pakka%(kohta%, 3) = taytto% Pakka%(kohta%, 4) = maara% NEXT NEXT NEXT NEXT END SUB SUB UudetKortit LaskeYhdistelmat WHILE KorttiMaara% < 12 OR YhdistelmaMaara% = 0 UusiKortti LaskeYhdistelmat WEND END SUB SUB UusiKortti SiirraPoytaan ArvoLuku(1, PakkaMaara%) END SUB
Vau, hienolta näyttää. Nyt pitäisi vain enää opetella pelaamaan SETiä kunnolla. :)
P.S. Putkavisassa oli hyvät kysymykset!
en tuota jaksanut testata, mutta hyvältä kuulostaa...
ihan hyvä peli!!!
Todella hienoa työtä!
Hyvä systeemi. Kai olisi hyvä peli jos jaksaisi selvittää, mikä siinä on ideana. pelailin 15 minuuttia enkä löytänyt yhtään yhdistelmää :)
Hienoa koodia ! :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.