
           h u g i   s i z e   c o d i n g   c o m p e t i t i o n

                   infofile by adok, german version - v1.2


hi an alle.

nachdem  ich an der pain-size-coding-compo  #2 teilgenommen hatte, faszinierte
mich der gedanke, auch im hugi einen hnlichen wettbewerb zu veranstalten.

es  hie  jetzt,  ein  thema zu  finden,  das  ermglicht,  das zu erstellende
programm  gut  optimieren zu knnen.  andererseits sollte das fertige programm
auch  anregend  und  interessant sein.  nach  lngerem berlegen entschlo ich
mich, folgende aufgabe zu stellen:


                               +++ aufgabe +++

es soll eine sehr einfache variante des nibbles-games programmiert werden.

das  spielfeld  soll  durch  einen rahmen  begrenzt  werden,  der den gesamten
320x200  pixel  groen bildschirm umschlieen  soll.  innerhalb dieses rahmens
soll  eine "schlange" wachsen, die beim  start des programms genau einen pixel
gro sein mu.

nach  dem  start soll die schlange  in jedem schleifendurchlauf um einen pixel
wachsen,  wobei die wachstumsrichtung vom  programmierer bestimmt werden kann.
durch  das  drcken  bestimmter  tasten  des  numerischen  blocks  kann  diese
wachstumsrichtung  der schlange verndert werden. das  ziel des spiels ist es,
die  wachstumsrichtung  der  schlange so zu  steuern,  da sie mglichst lange
weder  den  rahmen berhrt noch sich  selbst  beit. tritt einer dieser beiden
flle ein, soll das spiel beendet werden.

in  diesem  wettbewerb soll der autor  versuchen, eine exe- oder com-datei mit
einer  mglichst geringen anzahl von bytes zu erstellen. sieger wird derjenige
sein, dessen com- oder exe-datei die geringste anzahl von bytes hat.

die   aktuellen   pre-results   dieser  compo   werden   auf  meiner  homepage
(http://adok.home.pages.de)   verffentlicht  und  nach  jedem  eingang  eines
entries  auf den aktuellen stand gebracht. dadurch erhoffe ich mir, den ablauf
der compo spannend zu gestalten.

zum auswerten eines entries mssen dessen

- quellcode und
- compilierte form

eingeschickt werden.

programmiersprache ist assembler. plattform ist dos.


                           +++ beispielprogramm +++

um  sich ein bild machen zu knnen,  wie das programm aussehen soll, knnt ihr
euch  das beispielprogramm nibbles.exe ansehen.  falls es nicht vorhanden sein
sollte,   knnt   ihr   es  auch  auf   meiner   homepage  unter  der  adresse
http://www.geocities.com/siliconvalley/bay/6062/nibbles.zip   downloaden.  das
programm  ist  absichtlich  in  c  und  nicht  in  assembler  geschrieben  und
"aufgeblasen",  um zu verhindern, da jemand  auf die idee kommt, das programm
in  einen  debugger  zu  laden,  um es  nachher  in  seinem  eigenen  entry zu
verwenden.

aus  grnden, die jedem einleuchten, wird empfohlen, das programm in assembler
zu  schreiben.  meine assembler-version, die  ich  nach der c-version erstellt
habe,  betrgt  derzeit 87 bytes, wobei ich  noch  nicht versucht habe, sie zu
optimieren.  ich selber werde an der  compo nicht teilnehmen, sonst knnte der
eindruck  entstehen,  da  ich  mir die  besten  ideen  aus den eingeschickten
entries aussuche und selbst in meinem programm verwende.


                        +++ genauer programmablauf +++

1. in den bildschirmmodus 13h (320x200, 256 farben) wechseln.

2. den rahmen zeichnen. er kann in  einer beliebigen farbe auer farbe 0  sein
   und  mu  das  volle bildschirmfeld  einschlieen.  die  koordinaten seiner
   eckpunkte sind: (0/0), (319/0), (319/199), (0/199).

3. hauptschleife. in ihr mssen folgende teilaufgaben erledigt werden:

   a) ein pixel auf die aktuelle position des schlangenkopfs setzen. die farbe
      des  pixels, der beim schleifendurchlauf gesetzt wird, ist beliebig. sie
      kann  verschieden  sein  von  der  farbe  der  nachfolgenden pixeln. die
      nachfolgenden pixeln mssen jedoch in derselben farbe sein.

   b) tastaturabfrage.  die  schlange kann  in  vier  verschiedene  richtungen
      wachsen:  nach  oben,  nach  unten, nach  links  und  nach rechts. diese
      richtung mu mit folgenden tasten des numerischen blocks gewhlt werden:

      nach oben.....8
      nach unten....2
      nach links....4
      nach rechts...6

      sobald  eine  dieser tasten gedrckt wurde,  wchst  die schlange in die
      gewhlte richtung. sie wchst solange in diese richtung, bis eine andere
      dieser tasten gedrckt wurde.

      das drcken "falscher" tasten mu vom programm nicht abgefangen werden.

   c) wachstum der schlange. die position,  auf der der nchste pixel  gesetzt
      werden mu, mu vom programm berechnet werden.

   d) warteschleife  mittels  des vertical  retrace.  um sicherzustellen,  da
      jeder entry gleich schnell luft, verwendet dazu folgenden programmcode:

      mov dx,3dah
      delay_l1:
       in al,dx
       test al,8
       jne delay_l1
      delay_l2:
       in al,dx
       test al,8
       je delay_l2

   e) berprfen, ob die schlange sich  selbst gebissen hat (das heit,  einen
      der  vorher gesetzten pixel berhrt hat)  oder gegen den rahmen gestoen
      ist. wenn ja: programmausfhrung ab punkt 4 fortsetzen. wenn nein: punkt
      3 wiederholen.

4. in bildschirmmodus 3 (textmodus) wechseln.

5. programm ohne absturz beenden.


                               +++ adresse +++

schickt eure entries an adok.

e-mail: hugi@netway.at


                               +++ homepage +++

auf   dieser   homepage  wird  der   aktuelle  zwischenstand  des  wettbewerbs
verffentlicht.

http://adok.home.pages.de


                               +++ diverses +++

einsendeschlu ist der 30. mai 1998, 23:59.

das endergebnis wird auf meiner homepage und in hugi #11 verffentlicht.

es werden keine preise verliehen - es geht um ruhm und ehre. :) jedenfalls ist
ein  gutes  abschneiden bei einer compo  eine gute visitenkarte und empfehlung
fr jeden teilnehmer. ich freue mich auf eine rege teilnahme.

                                                        - adok, 11. april 1998
