Kirjoittelin piruuttani parin lonkeron voimalla Java harjoitustehtävän arvauspelin graafisella käyttöliittymällä varustettuna 8th ohjelmointikielellä. Ehkä Jere kirjoittelee sitten paremman Javalla?
needs nk/gui 26 font:system font:new "font1" font:atlas! drop 22 font:system font:new "font2" font:atlas! drop 52 font:system font:new "font3" font:atlas! drop 0 constant PELI 1 constant VALMIS { bg: "white", flags: [ @nk:WINDOW_NO_SCROLLBAR ] } constant main-win : arvonta \ -- a a:new ( rand-pcg 9 n:mod a:push ) 5 times ; : tarkasta \ a1 a2 -- sum num a:new -rot ( n:= if a:push else drop then ) a:2each drop swap a:@ nip a:len swap ' n:+ 0 a:reduce swap ; : alusta main-win arvonta "koodi" m:_! "arvaus" 0 s:new m:! "arvauksia" 0 m:! "nums" 0 s:new m:! "sum" 0 s:new m:! "tila" PELI m:! drop ; : kokeile "arvaus" nk:get s:len 5 n:= if "arvauksia" dup nk:get n:1+ nk:set "" s:/ ' >n a:map "koodi" nk:get tarkasta dup 5 n:= if 2drop "tila" VALMIS nk:set else "nums" swap nk:set "sum" swap nk:set then else drop "nums" 0 s:new nk:set "sum" 0 s:new nk:set then ; : edit-with-border \ s -- s n nk:widget drop \ assume WIDGET_VALID status dup { margin: 4, rows: 1, cols: 1 } nk:layout-grid-begin swap 6 nk:EDIT_FIELD nk:EDIT_SIG_ENTER n:bor nk:PLUGIN_FILTER_DECIMAL nk:edit-string over s:len nip 1 4 n:between if rot 1 2 "red" nk:stroke-rect else rot drop then nk:layout-grid-end ; : peliruutu null { margin: 4, rows: [0.15, 0.1, 0.15, 0.15, 0.05, 0.15], cols: [0.8, 0.2], cgap: 8, rgap: 8 } nk:layout-grid-begin 0 1 0 2 nk:grid nk:rect>local nk:grid-push "Arvaa viisi numeroinen koodi" nk:TEXT_LEFT "black" nk:label-colored "font2" nk:push-font 2 1 0 1 nk:grid nk:rect>local nk:grid-push "Oikeita numeroita:" nk:TEXT_LEFT "black" nk:label-colored 2 1 1 1 nk:grid dup 1 2 "black" nk:stroke-rect nk:rect>local nk:grid-push "nums" nk:get >s nk:TEXT_CENTERED "black" nk:label-colored 3 1 0 1 nk:grid nk:rect>local nk:grid-push "Oikeiden numeroiden summa:" nk:TEXT_LEFT "black" nk:label-colored 3 1 1 1 nk:grid dup 1 2 "black" nk:stroke-rect nk:rect>local nk:grid-push "sum" nk:get >s nk:TEXT_CENTERED "black" nk:label-colored 5 1 0 1 nk:grid nk:rect>local nk:grid-push "arvaus" nk:get edit-with-border if "arvaus" swap nk:set else drop then 5 1 1 1 nk:grid nk:rect>local nk:grid-push "OK" ' kokeile nk:button-label nk:pop-font nk:layout-grid-end ; : valmisruutu null { margin: 4, rows: [0.5, 0.2, 0.3], cols: [0.5, 0.5], cgap: 8, rgap: 8 } nk:layout-grid-begin "font3" nk:push-font 0 1 0 2 nk:grid nk:rect>local nk:grid-push "koodi" nk:get ' >s a:map "" a:join nk:TEXT_CENTERED "black" nk:label-colored nk:pop-font "font2" nk:push-font 1 1 0 2 nk:grid nk:rect>local nk:grid-push "arvauksia" nk:get "Arvauksia tarvittiin: %d" s:strfmt nk:TEXT_CENTERED "black" nk:label-colored 2 1 0 1 nk:grid nk:rect>local nk:grid-push "Lopeta" ' bye nk:button-label 2 1 1 1 nk:grid nk:rect>local nk:grid-push "Uudelleen" ' alusta nk:button-label nk:pop-font nk:layout-grid-end ; : new-win { name: "main", title: "Arvauspeli", wide: 400, high: 200, resizable: false, bg: "white" } nk:win ; : main-render main-win nk:begin [ ' peliruutu , ' valmisruutu ] "tila" nk:get case nk:end ; : app:main alusta new-win ' main-render -1 nk:render-loop ;
Perkule, unohdin näköjään toteuttaa laskurin arvauksien määrälle... 😄
Lisätty tuo käytettyjen arvauksien määrän laskuri ja näyttö ratkaisun jälkeen, kun jäi kiusaamaan...
Aihe on jo aika vanha, joten et voi enää vastata siihen.