Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Aikaa on 14.6. saakka.

Keskustelu: Koodit näytille: Pelin runko 8th:lla

Sivu 1 / 1

jalski [22.03.2020 21:22:21]

Lainaa #

(Siirretty kilpailun keskustelusta.)

Tein yksinkertaisen kirjaston pelin ajoitusta ja pelitilan hallintaa varten 8th ohjelmointikielelle. Käytän kiinteätä aika-askelta pelin päivitystä varten ja tarvittaessa jätän piirtämättä. Jokaisella pelitilalla on update ja draw sanat, mitkä on tallennettu taulukkoihin pelitilaa vastaavan indeksin kohdalle. Ohjelma ajaa tapahtuma looppia ja se taas ajaa peliä, eli koko hoito toimii yksinkertaisena tilakoneena.

Tein esimerkkipelin kirjaston käytöstä. Räjähdykset pitäisi varmaan tuohon kyllä lisätä!

\
\ Minimal game timing and state manager library for the 8th programmimg language.
\
ns: game


0.01 var, dt
0 var, game-state

var frame-time
var accumulator
var new-time
var current-time

var update-events
var draw-events

: secs
  d:ticks d:ticks/sec n:/ ;

: dt@  \ -- n
  dt @ ;

: dt!  \ n --
  dt ! ;

: state@  \ -- n
  game-state @ ;

: state!  \ n --
  game-state ! ;

: update@
  update-events @ ;

: update!  \ a --
  update-events ! ;

: draw@
  draw-events @ ;

: draw!  \ a --
  draw-events ! ;

: vsync  \ T --
  nk:vsync ;

: init  \ vsync dt game-state update-events draw-events --
  draw-events !
  update-events !
  game-state !
  dt !
  nk:vsync

  accumulator off
  secs current-time ! ;

\ Delta timing routine.
\ Uses fixed time step for update.
\ Skips render frames if needed to keep up with the pace.
: event-loop
  secs new-time !
  new-time @ current-time @ n:- frame-time !
  new-time @ current-time !
  frame-time @ accumulator n:+!
  repeat
    accumulator @ dt @ n:> not if
      break
    else
      update-events @ game-state @
      caseof
      accumulator @ dt @ n:- accumulator !
    then
  again
  draw-events @ game-state @
  caseof ;

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta