# Teknisk referens

Potatismannen erbjuder en mjuk och lönande inledning till anpassning och programmering av &kde;. Programmet kan utökas. Utan att koda kan till exempel nya lekplatser läggas till genom att ändra grafikfiler. Genom att lägga till lämpliga ljudfiler, kan översättare ändra ljuden till sitt modersmål!

Om du utökar eller lägger till något i spelet, fundera på att skicka dina tillägg till utvecklaren Eric Bischoff så att de kan läggas till i framtida utgåvor.

## För grafiker

Storleken och formen på lekplatsen och antalet objekt kan ändras. Nya lekplatser kan läggas till. Bara två bildfiler behöver skapas för varje lekplats: ett spelbräde och en mask. Maximalt åtta lekplatser tillåts, med endast tre i användning för närvarande.

Sex bilder används i Potatismannen: `potato-game.png`, `potato-mask.png`, `penguin-game.png`, `penguin-mask.png`, `aquarium-game.png` och `aquarium-mask.png`. Den normala platsen för de här filerna är katalogen `$KDEDIR/share/apps/ktuberling/pics/`.

Den första typen bilder, `*-game.png` innehåller lekplatsen och objekten som användaren väljer. Det här är grafiken som användaren ser när spelet används.

Den andra typen bilder, `*-mask.png` innehåller bara masker för objekt. Maskerna används för att avgränsa kanterna på objekten, och i vissa fall ge objekten en viss genomskinlighet (till exempel glasögonen). Det rekommenderas, men krävs inte, att placera objekten på samma plats i spelbrädesfilen som i maskfilen.

I samma katalog, talar filen som heter `layout.xml` (`$KDEDIR/share/apps/ktuberling/pics/layout.xml`) om vilka bilder som ska användas och länkar ihop dem med menyalternativ. Den innehåller också platsparametrar för spelbrädet, objekten på spelbrädet och maskerna. Den tilldelar den ljuden till objekt och placerar objekten i grupper. Slutligen deklarerar den språk som en uppsättning med översatta ljud. Den följer vanlig XML-syntax (se nedan för detaljer).

Fortfarande i samma katalog, upprepar en fil som heter `layout.i18n` (`$KDEDIR/share/apps/ktuberling/pics/layout.xml`) strängarna i `layout.xml` som kan översättas:

- Menyalternativen som låter dig välja lekplats och språket

- Namnen på objektkategorier

En katalog ovanför finns en fil som heter `ktuberlingui.rc` `$KDEDIR/share/apps/ktuberling/ktuberlingui.rc`), som är en andra XML-fil där Potatismannens menyer beskrivs. Den ska innehålla en `<action>`-tagg för varje lekplats och språk. Det symboliska namnet på åtgärden i den här filen ska vara identiskt med det symboliska namnet på åtgärden i `layout.xml`.

## Översättning

Förutom den vanliga `.po`-fil mekanismen för att översätta programrubriker och promptrar, kan ljuden också anpassas.

Om de olika översättarna kan spela in sina röster i `.wav` filer, kan de lagra filerna i en språkspecifik underkatalog i katalogen sounds. Namnen på ljuden tilldelas sedan till en fil i filen `layout.xml`. Om språket som översätts till är till exempel italienska, kan översättaren spela in sin röst i `.wav`-filer som placeras i `$KDEDIR/share/apps/ktuberling/sounds/it`. Därefter kan de tilldela ljudet som heter hat till filnamnet `it/capello.wav`.

I en framtida utgåva, kommer &ktuberling; att använda OGG Vorbis rc3 filformatet för ljud. För närvarade är det möjligt att konvertera WAV-filer till OGG Vorbis rc3, med följande kommandorad:

    $ oggenc_rc3 -o ljud.ogg ljud.wav

Information om hur man arbetar med översättningsmekanismen i &kde; finns tillgänglig på KDE Translation HOWTO.

## För programmerare

Potatismannen är inte särskilt svår att utöka för programmerare.

### C++ klasser

`TopLevel`

- Toppnivåfönster och grundläggande programhantering

`PlayGround`

- Beskrivning av en av spelets nivåer

`ToDraw`

- Beskrivning av ett av de grafiska objekten som ska ritas

`SoundFactory`

- Beskrivning av ett av språken och dess ljud

`Action`

- En av användarens åtgärder i stacken med ångra och gör om.

### Struktur för filen `.tuberling`

En `.tuberling`-fil innehåller all nödvändig data för att rita om en potatisman. Den kan redigeras med en vanlig texteditor.

Den första raden innehåller antalet lekplatser.

På alla andra rader finns det ett grafiskt objekt per rad, i den ordning som används för att rita upp dem. Varje rad innehåller fem tal: objektets identifierare och rektangeln där det ska ritas (vänster, över, höger, under). Talen skiljs med mellanslag.

## Struktur för layoutfilen (`layout.xml`)

Toppnivåtaggen är unik och heter `<ktuberling>`. Den innehåller flera `<playground>`-taggar, en för varje lekplats, och flera `<language>`-taggar, en per språk.

Taggen `<playground>` har två attribut: `gameboard` och `masks`. Dessa attribut ger namnen på filerna som innehåller bilderna. Taggen `<playground>` innehåller också en tagg som heter `<menuitem>`, en tagg som heter `<editablearea>`, flera taggar som heter `<category>` och flera taggar som heter `<object>`.

Taggen `<menuitem>` beskriver identifieraren för menyalternativet som tillåter att platsen för området där man kan släppa objekt väljs, och namnet på det här menyalternativet. Den här identifieraren ska vara identisk med den i `ktuberlingui.rc`.

Taggen `<editablearea>` beskriver platsen för området där man kan släppa objekt, och namnet på ljudet som hör ihop med detta.

Taggen `<category>` beskriver platsen och namnet på en text som anger en grupp av objekt. Den kan till exempel beskriva platsen och namnet på gruppen med godsaker.

Taggen `<object>` beskriver platsen för ett objekt (på spelbrädet och i maskerna), samt namnet på ljudet som hör ihop med det.

Taggen `<language>` har ett attribut: `code`. Dessa attribut ger koden på landet för det språket. Taggen `<language>` innehåller också en tagg som heter `<menuitem>` och flera taggar som heter `<sound>`.

Taggarna på lägre nivå förklaras inte här, eftersom deras betydelse är ganska rättfram. Om du ändrar `layout.xml`, glöm då inte att också ändra `layout.i18n` och `ktuberlingui.rc`.