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.