Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: 8th: Java ohjelmointitehtävän arvauspeli

jalski [28.11.2021 21:36:24]

#

Kirjoittelin piruuttani parin lonkeron voimalla Java harjoitustehtävän arvauspelin graafisella käyttöliittymällä varustettuna 8th ohjelmointikielellä. Ehkä Jere kirjoittelee sitten paremman Javalla?

Näyttääpi tältä ja tältä.

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 ;

jalski [29.11.2021 10:08:42]

#

Perkule, unohdin näköjään toteuttaa laskurin arvauksien määrälle... 😄

jalski [29.11.2021 17:38:32]

#

Lisätty tuo käytettyjen arvauksien määrän laskuri ja näyttö ratkaisun jälkeen, kun jäi kiusaamaan...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta