Eric
Bischoff
&Niels.Reedijk;
2002-04-10
0.03.02
KDE
KTuberling
technische referentie

# Technische referentie

&ktuberling; biedt een elegante en belonende inleiding in het programmeren voor en aanpassen van &kde;. Het programma kan worden uitgebreid. Bijvoorbeeld, zonder dat u hoeft te programmaren kunt u nieuwe speelvelden toevoegen door de grafische bestanden te wijzigen. Door de juiste geluidsbestanden kunnen vertalers de geluiden aanpassen aan hun eigen taal!

Als u het spel uitbreidt, overweeg dan om uw toevoegingen te sturen aan de ontwikkelaar Eric Bischoff zodat ze in toekomstige versies kunnen worden bijgesloten.

## Voor artiesten

De grootte en vorm van het speelveld en het aantal objecten kan worden gewijzigd. Nieuwe speelvelden kunnen worden toegevoegd. U hoeft slechts twee afbeeldingsbestanden te maken voor elk speelveld: een spelbord en een masker. Er zijn maximaal 8 speelvelden mogelijk, waarvan momenteel slechts 3 worden gebruikt.

Er worden zes afbeeldingen gebruikt in &ktuberling;: `potato-game.png`, `potato-mask.png`, `penguin-game.png`, `penguin-mask.png`, `aquarium-game.png` en `aquarium-mask.png`. De standaardlocatie voor deze bestanden is de map `$KDEDIR/share/apps/ktuberling/pics/`.

Het eerste type afbeeldingen, `*-game.png` bevatten het speelveld en de objecten die de gebruiker selecteert. Het is de illustratie die de gebruiker ziet tijdens het spelen van het spel.

Het tweede type afbeeldingen, `*-mask.png` bevat alleen de masker van de objecten. De maskers worden gebruikt om de randen van de objecten te bepalen, en, in sommige gevallen, het object enige transparantie te geven (bijv. de brillenglazen). Het is vereist dat de objecten op dezelfde positie in het spelbord-bestand en maskerbestand worden geplaatst.

In dezelfde map is een bestand genaamd `layout.xml` te vinden (`$KDEDIR/share/apps/ktuberling/pics/layout.xml`). Dit bestand vertelt welke afbeeldingen gebruikt dienen te worden en koppelt ze aan menuopties. Het bevat ook de positieparameters van het speelveld en de objecten in het spelbord en in de maskers. Het koppelt de geluiden aan objecten en plaatst de objecten in groepen. Tot slot declareert het talen als sets vertaalde geluiden. Het volgt de standaard XML-syntaxis (zie hieronder voor meer details).

In dezelfde map bevindt zich ook een bestand genaamd `layout.i18n` (`$KDEDIR/share/apps/ktuberling/pics/layout.i18n`). Deze bevat de tekenreeksen uit `layout.xml` die kunnen worden vertaald:

- De menuopties die gebruikt worden om het speelveld en de taal te selecteren

- De namen van de objectcategorieën

Een map hoger bevindt zich een bestand genaamd `ktuberlingui.rc` (`$KDEDIR/share/apps/ktuberling/ktuberlingui.rc`). Dit is een XML-bestand dat de menu's van &ktuberling; beschrijft. Dit bestand dient één <action>-tag per speelveld en taal te bevatten. De symbolische naam van de actie in dit bestand dient identiek te zijn aan de symbolische naam van de actie in `layout.xml`.

## Vertaling

Naast de gebruikelijke mechanisme met `.po`-bestanden voor het vertalen van programmateksten en documentatie kunnen ook de geluiden worden overgezet naar andere talen.

Als vertalers hun stem kunnen opnemen als `.ogg` of `.wav`-bestand dan kunnen ze deze opslaan in de taalspecifieke submap van de geluidenmap. (`.wav`-bestanden dient u eerst om te zetten naar `.ogg`, lees verderop in de documentatie hoe u dat doet.) De naam van het geluid dient dan te worden toegewezen aan een bestand in het bestand `layout.xml`. Bijvoorbeeld, als de doeltaal Italiaans is, dan kunnen de vertalers hun stem opnemen in `.ogg`-bestanden in de map `$KDEDIR/share/apps/ktuberling/sounds/it`. Vervolgens kunnen ze het geluid genaamd hat toewijzen aan de bestandsnaam `it/cappello.ogg`.

De huidige versies van &ktuberling; maken gebruik van het bestandsformaat OGG Vorbis rc3 voor de geluiden. U kunt uw WAV-bestanden omzetten naar OGG Vorbis rc3 door middel van het volgende commando:

    $ oggenc_rc3 -o geluid.ogg geluid.wav

Informatie over hoe u gebruik kunt maken met de vertaalmechanismen van &kde; is beschikbaar in The KDE Translation HOWTO. Kijk ook op de vertalerswebsite van het Nederlandse KDE-team.

## Voor programmeurs

&ktuberling; is voor programmeurs niet moeilijk om uit te breiden.

### C++-klassen

`TopLevel`

  TopLevel window en basic program management

`PlayGround`

  Beschrijving van een van de spelniveaus

`ToDraw`

  Beschrijving van een van de grafische objecten om te tekenen

`SoundFactory`

  Beschrijving van een van de talen en diens geluiden

`Action`

  Een van de gebruikers' manipulatie in de undo/redo stack

### Bestandsstructuur van `.tuberling`

Een `.tuberling`-bestand bevat alle nodige gegevens om een tuberling te hertekenen. Het kan worden bewerkt met een doorsnee teksteditor.

De eerste regel bevat het nummer van het speelveld.

Op alle andere regels is er een grafisch object per regel, in de volgorde die is gebruikt om ze te tekenen. Elke regel bevat 5 getallen: de identifier van het object en de rechthoek waar het getekend dient te worden (links, boven, rechts, onder). De getallen worden van elkaar gescheiden met witruimtes.

## De structuur van het layout-bestand (`layout.xml`)

De tag top-level is uniek en heet <ktuberling>. Het bevat enkele <playground>-tags, een per speelveld, en enkele <language>-tags, een per taal.

De tag <playground> heeft twee attributen: gameboard en masks. Deze attributen geven de naam van de bestanden die de afbeeldingen bevatten. De tag <playground> bevat ook een <menuitem>-tag, een <editablearea>-tag, meerdere <category>-tags en enkele <object>-tags.

De tag <menuitem> beschrijft de action identifier van de menuoptie voor het selecteren van de positie ban het gebied waar u objecten kan plaatsen, en het label voor deze menuoptie. Deze action identifier dient identiek te zijn aan degene in `ktuberlingui.rc`.

De tag <editablearea> beschrijft de positie van het gebied waar u objecten kunt plaatsen, en de naam van het geluid dat er mee is geassocieerd.

De tag <category> beschrijft de positie en het label van een tekst die een groep objecten beschrijft. Bijvoorbeeld, het kan de positie en de tekst van de groep met hebbedingetjes beschrijven.

De tag <object> beschrijft de positie (in het spelbord en in de maskers) van een object en de naam van het bijhorende geluid.

De tag <language> bevat één attribuut: code. Dit attribuut geeft de code van de taal. De tag <language> bevat een <menuitem>-tag en enkele <sound>-tags.

De tags op een lager niveau worden hier niet uitgelegd, aangezien hun betekenis voor zich spreekt. Als u `layout.xml` bewerkt, vergeet dan niet om ook `layout.i18n` en `ktuberlingui.rc` te wijzigen.