The Ball
Petri Keckman

Tarkoitukseni oli jotain hyödyllistä(?) tehdäkseni ohjelmoida 3D-Amiga-Boing-pallon piirtävä ohjelma. Vaihtelun vuoksi halusin tehdä sen C-kielellä ja Dice-kääntäjällä, joka kerran on tullut hankittua. Ei oikein onnistunut. Mutta pakko oli taas saada Sakulle jokin ohjelma aikaiseksi ja kehitysprojektin ensi raakile löytyy Ohjelmat-hakemistosta:

Directory "Ohjelmat" on Tuesday 22-Jun-99
Ball.c7419----rwedToday18:58:26
Ball.exe11624----rwedToday18:58:26

Vaikka ensi versio piirtää vain yhden staattisen kuvan, ohjelma laskee ensin 3600 kpl sinejä ja kosineja taulukkoon, jotta pyöritysanimaatio olisi sitten nopeampaa kun se valmistuu (siis ohjelma joka sen tekisi - tai ensin pitäisi ohjelmoida se ohjelma, joka ohjelmoisi...). Samoin aloituksessa kuluu hieman aikaa, koska kaikki pallon pintaa määrittelävät pisteet myös taulukoidaan. Alkupisteet lasketaan pallokoordinaateilla, joiden annetaan kulkea toisen 180 astetta ja toisen 360 astetta.

Ball vaatii AGA:n, koska värejä käytetään 256, joista 126 liu'utetaan mustasta punaiseen ja toiset 126 mustasta valkoiseen. Värit 0-4 on säästetty muuhun käyttöön. Alkuperäinen Boing-pallo on varmasti toteutettu paljon yksinkertaisemmalla tavalla kuin tässä: minä yritän pisteen järjestysnumeron perusteella päätellä sen väriä (punainen vai musta), ja kun pisteet on laskettu pallokoordinaateilla, eivät ne yksinkertaisella tavalla tule. Äh! Huomasin että lasken värinkin joka kerta Piirto-aliohjelmassa uudestaan, vaikka senkin olisi voinnut tallettaa tietuerakenteeseen,

structpiste{
int x;/* alkuperäiset x,y.z */
int y;
int z;
float xt;/* kierretyt */
float zt;
float yt;
int xscr,yscr;/* screenin x ja y */
};

joka pisteillä on. Pallon pinta täyttyy siis pisteillä, jotka saadaan pallokoordinaateilla a ja b,

pisteet=(struct piste*) calloc(1,sizeof(struct piste));
for (a=0; a<=1800; a=a+aske)
{

}

sellaisessa järjestyksessä, että se olisi sama kuin kulkisi ensin maapallon ympäri yhteen suuntaan (360 astetta) ja sitten pikkuisen toiseen suuntaan. Toiseen suuntaan ei tarvitse siis mennä kuin 180 astetta, niin koko pallo tulee täytettyä pisteillä. Kaksi peräkkäistä pistettä ja edellisen kierroksen vieruspisteet muodostavat yhden laatan, joka väritetään käyttäen AreaMove-, AreaDraw- ja AreaEnd-funktioita.

Eiköhän tässä olekin dokumenttia ihan tarpeeksi näin kesätunnelmiin. Ainakin tätä kirjoittaessa on sellainen juhannusviikon alkupäivien painostava helle, että pitää ruveta viettämään keskipäivän siestaa.