# Handbok &kappname;

## Inledning

### Speltyp:

Brädspel, spelhall

### Antal möjliga spelare:

Fyra

&kajongg; är ett brädspel skapat efter det berömda orientaliska spelet Mah Jong (från kinesiskans 麻將). Det spelas av fyra spelare. Det finns många olika regeluppsättningar runt om i världen. För närvarande stöder &kajongg; de klassiska kinesiska reglerna, som de tillämpas i Tyskland. I framtiden kommer ytterligare huvudregler att följa. Det är möjligt att anpassa eller lägga till nya regeluppsättningar. Gör gärna det och skicka dem till programmets upphovsman för integrering.

&kajongg; kan användas på två olika sätt: Poängsätta ett manuellt spel där du spelar som vanligt utan hjälp av en dator och använder &kajongg; för att beräkna poäng och bokföring. Eller kan du använda &kajongg; för att spela mot vilken kombination som helst av mänskliga eller datorspelare.

## Skärmutläggningen

En skärmbild av &kajongg; Skärmbild

En kort förklaring av spelplanens delar.

Verktygsrad

- Verktygsraden finns under menyraden och innehåller knappar för de oftast använda åtgärderna. Verktygsradens innehåll kan redigeras. Du kan också göra den osynlig, vilket ger större utrymme på skärmen för brädet.

Bräde

- Brädet är den största delen av fönstret. De fyra mursidorna med längden 18 brickor syns (det exakta antalet beror på reglerna, som om bonusbrickor används eller inte). Spelarnas namn är skrivna på mursidorna, tillsammans med handens aktuella värde (så långt det är känt) och deras vindbrickor. Den rådande vinden har en färgad bakgrund. I skärmbilden ovan är det Östan.

  Under spelet samlas brickorna som spelarna kastar innanför murarna. De placeras slumpmässigt. Den senast kastade brickan har en blå fokusram.

  När manuella spel poängsätts, finns ett urval av alla tillgängliga brickor innanför muren, det centrala urvalet. Du kan tilldela dem till spelarna med musen eller tangentbordet.

Spelarens område

- Varje spelare har ett område på skärmen för sina brickor. Den övre raden innehåller öppna brickor, den under raden dolda. Vid poängsättning av manuella spel visas dolda brickor med en skugga över hela brickan. Bonusbrickor hamnar längst till höger.

Dialogruta

- Dialogrutan visar valen som spelaren har. Oftast har den en tidsgräns, med en förloppsrad som visar återstående tid.

Statusrad

- Statusraden finns längst ner på skärmen, och innehåller spelarnas aktuella behållning.

## Poängsätta ett manuellt spel

I detta läge används &kajongg; bara för att göra poängberäkningen. Du spelar som vanligt mot verkliga personer på ett verkligt bord, och i slutet av spelet kan du tala om för &kajongg; vilka brickor en spelare har i sin hand och allt annat som &kajongg; behöver veta för att beräkna poängen, vilket är vad programmet gör. Som alternativ kan du beräkna händernas poäng manuellt och skriva in dem. &kajongg; fördelar därefter betalningar mellan spelarna och skriver in resultaten i en databas. Det är möjligt att tillfälligt avbryta ett spel, starta ett annat spel med andra spelare, och återuppta gamla spel. Alla regler sparas tillsammans med spelen, så olika spel kan spelas med olika regler.

- Välj Spel Poängsätt spel manuellt i menyn, eller tryck på &Ctrl;C.

- Nu kan du antingen välja ett befintligt inte färdigt spel eller starta ett nytt spel. Om du startar ett nytt spel, blir du tillfrågad om spelarna och regeluppsättningen. &kajongg; föreslår samma värden som användes i det förra spelet. Om det inte finns något föregående spel, föreslås de första fyra definierade spelarna. Observera att du inte kan ändra regeluppsättningen eller någon av dess regler efter detta val. Du kan göra det i förväg i inställningsverktyget.

- Nu får du ett nytt fönster som heter "Skriv in omgångens resultat". Läs Låt &kajongg; beräkna poängen för en detaljerad beskrivning.

- Efter att ha sparat handens resultat, fortsätt med nästa hand.

### Skriva in omgångsresultat

#### Poäng

En skärmbild av &kajongg; Skärmbild

Det här är fönstret där händernas resultat skrivs in. Det visas automatiskt när &kajongg; tror att det behövs. Du kan alltid visa eller dölja det genom att trycka på &Ctrl;S eller genom att använda motsvarande menyalternativ.

Som alltid har rådande vind sin bakgrund färgad.

Här kan du manuellt mata in poäng för alla spelare. Som ett alternativ kan du exakt definiera vilka brickor en spelare hade i handen. Om du väljer att göra det, inaktiveras motsvarande fält för det manuella poängvärdet. &kajongg; beräknar automatiskt poängen.

Efter att ha skrivit in all relevant data för en hand, klicka på knappen Spara hand. Handens värden skrivs in i databasen, och de läggs också till i poängtabellen. Du kan bli tillfrågad om att ändra spelarnas platser, men du kan välja att inte göra det. De föreslagna ändringarna går för närvarande inte att anpassa. Om någon regeluppsättning behöver något annorlunda, kommer vi att ändra det.

Om spelaren kan ha vunnit, är kryssrutan i kolumnen "Vinnare" aktiverad. Klicka på den för vinnaren.

Statusraden visar nu spelarnas uppdaterade behållning, och du kan fortsätta med nästa omgång.

##### Skriv in poängen för hand

En bra spelare föredrar troligen att beräkna sina egna poäng. I detta fall kan du skriva in det direkt. Det är bara möjligt när inga brickor är valda för spelaren.

Om du skriver in poäng för hand, måste de redan innehålla allt utom straff. Du får inga valfria regler att välja bland. Det finns ett undantag: "Farligt spel". Det påverkar inte några poäng, och ger heller inget straff. Det betyder bara att betalning mellan spelare är annorlunda: Den bestraffade betalar allt för allt till vinnaren. De övriga två spelarna gör inga betalningar. Det är för närvarande inte möjligt att anpassa.

##### Låt &kajongg; beräkna poängen

Om du uttryckligen talar om för &kajongg; vilka brickor en spelare har, blir inmatningen av poäng inaktiverad för spelaren i det här fönstret. Medan brickor tilldelas en spelare, ser du hur poängen ökar, men så fort du lägger till den 14:e brickan blir resultatet noll. Det kan förvåna dig, men om du inte deklarerar handen som vinnare, betraktas den som en lång hand som alltid har noll poäng. Beteendet definieras av de klassiska kinesiska reglerna, och kan vara annorlunda om du ändrar reglerna eller använder en annan regeluppsättning.

Du kan definiera brickor och kombinationer för en spelare med musen, tangentbordet, eller båda. Flytta helt enkelt brickor med musen genom att dra och släppa dem i spelarens område. När brickan släpps, blir du tillfrågad om vad du vill flytta: Ensam, par, pong, kong, kungjord kong eller chi. Den övre raden är till för öppna brickor, och den undre raden för dolda brickor. Bonusbrickorna visas längst till höger. Du kan också flytta brickor och kombinationer mellan rader, mellan spelare och tillbaka till det centrala urvalet.

Om du föredrar att använda tangentbordet, kan du använda tabulator för att gå mellan det centrala urvalet och spelarnas händer. Tangenterna ösvnÖSVN flyttar en bricka till spelarna östan, sunnan, västan och nordan. Tangenterna xX flyttar tillbaka den till det centrala urvalet. ÖSVN flyttar till den dolda raden, medan ösvn flyttar till den öppna raden. Du kan flytta markören mellan brickor eller kombinationer med piltangenterna, och brickan eller kombinationen som för närvarande är markerad har en blå ram. Eftersom piltangenterna är långt bort från bokstäverna på tangentbordet, kan du också använda bokstäverna hjkl eller HJKL för att flytta markören. hH går åt vänster, jJ går neråt, kK går uppåt och lL går åt höger. Det är sättet som Unix-editorn "vi" använder. Tangenterna kan vara annorlunda om du använder ett annat språk än engelska, men det är för närvarande inte möjligt att ställa in dem.

Alternativen "Sista brickan" och "Sista kombinationen" behövs av vissa regler som "Sista brickan bildar par". De kan bara användas för vinnarens hand.

På höger sida av fönstret kan du verkställa vissa regler manuellt. Vilka regler som visas i listan beror på aktuell regeluppsättning och på brickorna. I exemplet från skärmbilden ovan, kan spelarna som förlorar ha alternativet "Farligt spel", återigen beroende på regeluppsättning och på deras brickor. Det är utvecklarnas mål att hålla den här listan med manuellt valda regler så kort som möjligt. I bästa fall ska &kajongg; alltid automatiskt kunna bestämma om en regel gäller, men ibland har inte &kajongg; tillräckligt med information eller kunskap för att kunna bestämma.

#### Straff

En skärmbild av &kajongg; Skärmbild

I fönstret för att skriva in omgångsresultat, visas det här fönstret där du kan skriva in straff av knappen Straff

Rutan Regelbrott visar alla regelbrott som kan gälla för händerna som spelarna har. Välj bland dem.

Nu kan du anpassa Totalt straff. Det är den totala summan som flyttas från betalarna till betalningsmottagarna. Den kommer att delas jämnt mellan dem.

Beroende på typ av regelbrott, varierar antal betalare och betalningsmottagare. Det rätta antalet spelare visas. Om du väljer en spelare, försäkrar sig &kajongg; om att spelaren bara finns en gång, genom att anpassa övriga spelare.

## Att spela

### Spela mot datorn

Först visas en dialogruta för inloggning. Skriv in spelservern du vill ansluta till och ditt användarnamn. Om du väljer det särskilda värdet "Lokalt spel" behöver du bara skriva in ditt namn (eller acceptera det föreslagna namnet) och önskad regeluppsättning. Det påbörjar omedelbart ett lokalt spel där du spelar mot tre robotspelare.

### Spela med vänner

Om du vill spela mot andra människor, behövs en spelserver som alla spelare, inklusive du själv, måste ansluta till. Gör det genom att välja vilken annan värddator som helst, eller manuellt skriva in ett nytt värddatornamn och ange lösenord för den värddatorn. Det senast använda lösenordet föreslås.

Om du inte har ett konto på servern med namnet du skrev in, blir du tillfrågad om du vill öppna ett konto. Om du svarar ja, visas en ny dialogruta där du kan skriva in önskat lösenord två gånger. Ditt konto skapas automatiskt.

Efter att ha lyckats logga in på spelservern, får du en lista över bord med tillgängliga platser på spelservern. Gå med ett bord eller reservera ett nytt bord. Om du reserverar ett nytt bord, vänta till flera platser är tagna av andra spelare. Du kan starta spelet på ett bord du reserverat när som helst, så tilldelas platserna som inte är tagna till robotspelare.

Bordlistan visar också namnet på regeluppsättningen som spelas på bordet. Regeluppsättningen och dess namn skickas till spelservern av spelaren som påbörjar bordet. Om du har en identisk regeluppsättning visar bordet ditt namn på regeluppsättningen: det kan vara till hjälp om den som påbörjat bordet talar ett annat språk och har namngett regeluppsättningen på ett annat sätt. Om namnet på din lokala regeluppsättning visas, visas det dessutom i svart. Om du dock inte har någon identisk regeluppsättning visas namnet i rött, och du kan använda knappen Jämför för att jämföra den med dina egna regeluppsättningar.

Du kan starta Kajonggs spelserver på två olika sätt:

- anslut till servern "localhost". Det är din egen dator. Om du gör det och ingen spelserver kör, startas den automatiskt. Och när du slutar spela stoppas också servern.

- manuellt starta en server på vilken dator du vill. Allt du behöver göra är att gå till kommandoraden och starta programmet "kajonggserver". Att skriva in "kajonggserver --help" visar alla tillgängliga väljare, som att ändra standardporten 8149. Servern kör till du dödar den.

I båda fallen måste du tala om för dem hur de kan nå din spelserver. De behöver webbadressen, eller helt enkelt en IP-adress och porten servern lyssnar på. Det kan vara någonting som liknar "minpc.dyndns.se:8149", där 8149 är porten. Du måste förstås ställa in brandväggen så att fjärrspelare kan nå porten. Kommunikationen krypteras.

Om du stöder på möjliga fel, bör du kanske använda väljaren "--showtraffic". Den visar dig vilka meddelanden som skickas mellan spelservern och klienterna, i terminalen där servern startades..

#### Problemområden

- Om du vill försäkra dig om att ingen kan fuska, får ingen av de mänskliga spelarna komma åt datorn som spelservern kör på. Du kan naturligtvis aldrig undvika att två spelare hjälper varandra, eftersom du inte kan veta vad de verkligen gör. Två spelare kan till och med vara en och samma person.

### Hur man spelar

Du blir tillfrågad om vad du vill göra. Det är en liten dialogruta som antingen dyker upp till höger eller längst ner, beroende på fönstrets storlek. Om du gör det bredare än högt, visas dialogrutan till höger. Ibland har dialogrutan en tidsgräns - när den har gått ut väljes automatiskt det första möjliga svaret åt dig. Tidsgränsen går att ställa in i regeluppsättningseditorn, under Alternativ, Tidsgräns för kungörelse. Alla spelare ska ha samma tidsgräns, det är därför den är en del av regeluppsättningen.

Om du måste välja en bricka från handen, kan du gå mellan brickorna med högerpil och vänsterpil, eller bokstäverna H och L på tangentbordet. Du kan naturligtvis också använda musen.

Ofta erbjuder dialogrutorna val som inte egentligen är möjliga, som att kungöra Pong när du inte har de nödvändiga brickorna. Det är med avsikt, precis som i ett riktigt spel.

Kastade brickor placeras slumpmässigt mellan murarna. Vissa spelversioner definierar var brickorna ska placeras, men det är dock inte ännu inställningsbart. När det blir inställningsbart, kommer det att ingå i regeluppsättningen.

## Översikt av gränssnittet

### Menyn Spel

Spel Poängsätt spel manuellt

- Poängsätt bara ett manuellt spelat spel.

  Du kan ladda ett gammalt spel eller starta ett nytt. Normalt visas bara väntande (dvs. inte färdiga) spel i urvalslistan. Du kan valfritt visa alla spel, inklusive färdiga. Här kan du också ta bort spel.

Spel Spela

- Spela med andra (personer och datorer)

Spel Avbryt

- Avbryt pågående spel. Om det var ett manuellt spel, enbart med poängsättning, kan du återuppta det senare. Om du spelar med användning av &kajongg;, kan spel ännu inte återupptas.

Spel Avsluta

- Avslutar &kappname;.

### Menyn Visa

Visa Poängberäkning

- Dialogruta för poängberäkning: Visa eller dölj dialogrutan för poängberäkning. Dialogrutan förklaras här.

Visa Poängtabell

- Poängtabell Poängtabell Skärmbild Visa poängtabellen. Kolumnen längst till vänster med värdena Ö,S,V,N visar spelarens vind. Den rådande vinden (rondens vind) har en gulaktig bakgrund. Vinnaren har en grön bakgrund i poängkolumnen. Kolumnen ∆ visar hur mycket spelaren betalade ut till eller tog emot från alla andra spelare i omgången. Kolumnen ∑ visar behållningen. Tipsen ger mer information: de visar alla regler som har används i omgången.

  Den nedre delen visar använd regeluppsättning. Mellan poängtabellen och använd regel finns en avdelare, som låter dig ändra den relativa storleken hos båda delarna.

Visa Förklara poängberäkning

- Förklara poängberäkning Poängtabell Poängtabell Förklarar hur poängen för aktuell omgång beräknades.

### Menyn Inställningar

Inställningar Spelare

- Lägg till, ändra och ta bort spelare.

Inställningar Ändra synvinkel

- Ändrar synvinkeln för brickorna moturs.

Inställningar Fullskärmsläge

- Byter mellan fullskärmsläge och normalt läge.

Inställningar Visa verktygsrad

- Visar eller döljer verktygsraden.

Inställningar Visa statusrad

- Visar eller döljer statusraden.

Inställningar Anpassa genvägar...

- Visar en vanlig dialogruta i &kde; med genvägsinställningar för att ändra snabbtangenter i &kappname;.

Inställningar Anpassa verktygsrader...

- Visar en vanlig dialogruta i &kde; där du kan ställa in verktygsradens ikoner.

Inställningar Anpassa &kappname;...

- Visar en inställningsdialogruta för &kappname;.

### Menyn Hjälp

&help.menu.documentation;

## Spelanpassning

Inställningsdialogrutan Inställningsdialogrutan

Menyalternativet Inställningar Anpassa &kappname;... visar dialogrutan Anpassa - &kappname;.

Om du klickar på knappen Avbryt här, ångras alla ändringar av inställningarna, inklusive allt du gjorde i regeluppsättningseditorn.

Du kan också välja olika flikar med tangentbordet: &Ctrl;1 väljer den första fliken, alternativet Spela, &Ctrl;2 väljer den andra fliken, och så vidare.

### Alternativ för Spel

Visa brickornas skuggor

- Det här visar brickor med kanter och skuggor. Det finns också ett visst mellanrum mellan brickrader, och murens brickor visas så att det går att se om muren är två eller tre brickor hög. Om alternativet inaktiveras, får man alltså en enklare visning med något större brickor. Det kan vara till hjälp för små bildskärmar.

Arrangera om dolda brickor till kombinationer

- Det här grupperar kombinationer på handen. Ibland kan grupperingen kanske inte vara som du vill ha den, så du kanske föredrar att inte ha någon gruppering alls, precis som i ett verkligt spel.

Använd ljud om tillgängliga

- Det är låter dig höra kastade och kungjorda brickor. Om andra spelare spelar in ljudfiler med sina egna röster, kan du höra dem.

Låt andra höra min röst

- Om du spelade in ljudfiler med din egen röst, låter det här alternativet andra spelare höra din egen röst för dina kastade och kungjorda brickor.

#### Ljud

Det är möjligt att spela in ljudfiler för dina tillkännagivanden som kommer att höra av andra spelare. En viss mängd manuellt arbete behövs.

- Först måste du ta reda på var dina ljudfiler ska lagras. Katalogen är normalt ~/.kde/share/apps/kajongg. Om ditt inloggningsnamn är anna, kan det vara /home/anna/.kde/share/apps/kajongg. Där hittar du också databasen kajongg.db.

- Skapa en ny underkatalog med namnet `voices` i katalogen du just hittade.

- Skapa en annan underkatalog i katalogen `voices` med ditt spelarnamn. Det är namnet du använder för att ansluta till en spelserver. Du kanske också vill definiera röster för spelarna `ROBOT 1`, `ROBOT 2`, `ROBOT 3`.

- I den underkatalogen kan du placera ljudfilerna. De måste vara kodade med Ogg Vorbis ljudkomprimering, och filnamnen måste ha filändelsen `.ogg`.

- En enstaka fil har ett namn som `s3.ogg`: det är Bricka 3. Du måste definiera sådana filer för alla brickor och för varje kungörelse och tillkännagivande.

Gör ljudets längd kort men tala tydligt. Spelet kan gå mycket snabbt när man är van vid det. Det är enklare om man först skriver ned en lista med allt som ska läsas upp. Läs det inte som en följd av värden, utan försök uttala varje värde som det var det enda, och som man skulle göra det när man spelare. Att läsa upp detta kräver en del övning.

Det här är bara en möjlighet att skapa ljudfilerna.

- Spela in en ljudfil med programmet `qarecord`, sparat den med `WAV`-format. Läs upp alla ljud i denna enda ljudfil.

- Redigera filen med ljudeditorn `audacity`. Använd musen i den editorn för att markera ett intervall av ljudvågorna. Editorn spelar upp den delen. Upprepa till du har markerat rätt del. Det kan vara enklare om Visa Zooma in används. Använd menykommandot Arkiv Exportera markering och spara med formatet ogg. Välj låg kvalitet under Alternativ, det är tillräckligt, och till och med önskat, eftersom det reducerar tiden för att överföra ljuden till andra spelare.

Följande är namnen på filerna som ska skapas. Lägg alltid till `.ogg` sist i dem.

#### Ljudfilernas namn

&s1; .. &s9; | Bricka 1 till bricka 9
&b1; .. &b9; | Bambu 1 till bambu 9
&c1; .. &c9; | Tecken 1 till tecken 9
&we; &ws; &ww; &wn; | Vindarna östan, sunnan, västan, nordan
&db; &dr; &dg; | Drakarna blå/vit, röd, grön
&chow; &pung; &kong; &mahjongg; | De viktigaste kungörelserna: chi, pong, kong, Mah Jong
&originalcall; &violatesoriginalcall; | Ursprunglig kungörelse och felaktig ursprunglig kungörelse
&dangerousgame; | En spelare fyrar av en kanon (farligt spel)
&nochoice; | En spelare deklarerar att han inte har något val annat än att spela ett farligt spel

### Inställning av Brickor

Brickuppsättningsväljare Brickuppsättningsväljare

Använd val av Brickor för att välja brickornas grafik.

### Alternativen i Bakgrund

Val av bakgrund Val av bakgrund

Använd val av Bakgrund för att välja spelets bakgrundsgrafik.

Vissa bakgrunder, som det kinesiska landskapet, behöver en viss tid för att läsas in. Om du tycker att programmet ska starta snabbare, eller att det tar för lång tid att ändra storlek på huvudfönstret, kan du prova någon annan bakgrund.

### Regeluppsättningseditor

Regeluppsättningseditor Regeluppsättningseditor

Använd regeluppsättningseditorn för att anpassa regeluppsättningar. Fördefinierade regeluppsättningar visas med kursivstil, medan anpassade regeluppsättningar använder normal stil. Fördefinierade regeluppsättningar kan inte ändras av användaren på något sätt. Dock kan en uppdatering av &kajongg; det. Anpassade regeluppsättningar påverkas aldrig av en uppdatering.

När ett nytt spel startas, kan du välja en regeluppsättning för spelet. Alla regeluppsättningar definierade i regeluppsättningseditorn kan användas. Regeluppsättningen sparas tillsammans med spelet, så du kan alltid ändra regeluppsättning här: ändringarna påverkar bara framtida spel.

#### Regel, poäng och enhet

Dubbelklicka på vad du än vill ändra.

#### Definition

Definitionen av en regel kan vara ganska komplicerad. Det finns ett särskilt kapitel för det, Definiera en regel. Normalt behöver du inte ändra någon definition. Närmare bestämt definierar det vilka händer en regel gäller för.

#### Kopiera och ta bort

Du kan kopiera hela regeluppsättningar eller enskilda regler inne i en regeluppsättning. Eftersom fördefinierade regeluppsättningar är opåverkbara, kan bara enskilda regler kopieras mellan anpassade regeluppsättningar.

Du kan ta bort hela anpassade regeluppsättningar eller enskilda regler inne i dem. Återigen kan det göras även om befintliga spel använder regeluppsättningen, eftersom varje spel har sin egen kopia av regeluppsättningen. Du kan titta på regeluppsättningar för gamla spel: Ladda det gamla spelet och visa dess poängtabell.

#### Jämför

Regeluppsättningsjämförelse Regeluppsättningsjämförelse Du kan välja kommandot när en hel regeluppsättning väljes. Det låter dig jämföra den valda regeluppsättningen med vilken annan regeluppsättning som helst.

### Förvalda tangentbindningar

Menyalternativet Inställningar Anpassa genvägar... låter dig ändra de förvalda tangentbindningarna.

De förvalda tangentbindningarna är följande:

F1

- Visar den här handboken.

&Ctrl;C

- Poängsätt ett manuellt spel.

&Ctrl;N

- Spela ett spel med vänner eller datorspelare.

&Ctrl;W

- Avbryt pågående spel.

&Ctrl;Q

- Avsluta programmet.

&Ctrl;T

- Visa poängtabellen.

&Ctrl;G

- Ändra synvinkel.

&Shift;F1

- Vad är det här? hjälp

&Ctrl;&Shift;F

- Fullskärmsläge

## Definiera en regel

Poängsättning och flera andra aspekter av &kajongg; kan anpassas med regeluppsättningseditorn. En regel består av ett namn, ett poängvärde (inklusive enhet) och en definition.

### Regelgrupper

Det finns flera regelgrupper:

Kombinationsregler

- Kombinationsregler används för enstaka kombinationer oberoende av resten av handen.

Handregler

- Handregler används för hela handen, för alla spelare.

Mah Jong-regler

- Mah Jong-regler anger hur en hand som kan vinna måste se ut. Det är normalt fyra kombinationer med 3 eller 4 brickor vardera och ett par. Men specialhänder kan se annorlunda ut, till exempel tretton underverk i det klassiska kinesiska spelet.

Vinnarregler

- Vinnarregler används för hela handen, men bara för vinnaren. Det omfattar de flesta specialhänder. Reglerna måste inte kräva rätt antal brickor.

Alternativ

- Här hittar du flera specialparametrar, såsom poäng för en begränsad hand.

Straff

- Straff verkställs för hand av användaren.

#### Utförandeordning

- skapa en lista med regler att tillämpa från kombinationsregler och handregler

- använd Mah Jong-regler för att ta reda på om den utropade vinnaren verkligen har en vinnarhand.

- lägg till vinnarregler att tillämpa för vinnaren

- om några av reglerna som hittades har åtgärden '&absolute;', behåll bara dem. Det är ännu odefinierat vad som händer om fler än en hittas.

- om några av reglerna definierar begränsningar, ta bort alla andra

- använd de hittade reglerna i den ordningen

### Definitionen

Definitionen är en enda sträng, eftersom vi vill göra det enkelt att lagra den i en databas. Den består av flera delar åtskilda av de två tecknen "||". En del uttrycker antingen ett villkor då regeln gäller, eller några åtgärder. Bara en åtgärdsdel kan definieras, men flera villkorsuttryck. Regeln gäller så snart minst ett villkorsuttryck matchar handen.

&kajongg; levereras med en fördefinierad regeluppsättning, som implementerar de klassiska kinesiska reglerna, enligt definitionen av det tyska DMJL. Det bör ge dig en mängd exempel.

Detta är alla delar som känns igen:

Reguljära uttryck med variabelt skiftläge

- En del som börjar med I är ett reguljärt uttryck som inte gör skillnad på små och stora bokstäver.

Åtgärd

- En del som börjar med A är en lista med åtgärder.

Manuellt uttryck

- Det här är ett valfritt reguljärt uttryck. För att poängsätta manuella spel, definierar det om regeln ska vara valbar av användaren med en kryssruta. Det inledande M:et tillhör inte det reguljära uttrycket. Ett exempel är regeln "Sista brickan tagen från ruinen".

Reguljärt uttryck

- Alla andra delar är ett reguljärt uttryck.

### Reguljära uttryck

Ett reguljärt uttryck är ett mycket kraftfullt programmeringsverktyg för att matcha teckensträngar. Kraftfullt, men också rätt svårt. Det är inte något för den vanliga spelaren. Det finns böcker tillgängliga som inte gör någonting annat än förklarar reguljära uttryck.

Det finns flera dialekter av reguljära uttryck. &kajongg; är skrivet i programspråket Python. Eftersom standardbiblioteket i Python innehåller en modul för reguljära uttryck, är det den dialekten vi använder.

För detaljinformation se

Allting i en hand som kan påverka poängen kodas i en enda sträng. Därefter kontrollerar &kajongg; om det reguljära uttrycket matchar strängen. Om det gör det, används regeln.

Som exempel, matchar följande reguljära uttryck den begränsade handen "Alla gröna":

    ( |[bB][23468]|[dD]g)*[fy/]

#### Strukturen hos en handsträng

Innehållet i en handsträng är alltid likadant oberoende av vilket språk du använder på skrivbordet.

Strängen som representerar en hand består av flera delar åtskilda med mellanslag. Delarnas ordning är alltid likadan, utom för kombinationsdelarna i början.

&kajongg; klarar av att gruppera om dolda brickor till kombinationer med målet att ge högre poäng. Det spelar ingen roll hur dolda brickor är grupperade för att det ska fungera. Dock kan det misslyckas när det gäller begränsade händer. Det är därför &kajongg; provar den ursprungliga grupperingen av brickorna som matades in av användaren, och dessutom den omgrupperade versionen. För båda versioner, verkställs alla regler. Versionen som uppnår det högsta totala poängvärdet används.

Här är ett exempel. Det är i själva verket en rad, men delad här för att förbättra läsbarheten. Dessutom upprepas meningen en gång, eftersom vissa reguljära uttryck är mycket lättare att skriva om delarna kan refereras till i en annan ordning. Se regeln för Spränga kong: dess reguljära uttryck tittar först på L-gruppen (sista brickan) innan det tittar på kombinationerna.

    c1c1c1C1 s1s2s3 b6b6b7b7b8b8 b5b5 fn yn
    /c416s000b000b000b200 -C416s000b000b000b200 %n Mneka LB5B5B5

En bricka representeras av två tecken. Det första är s för sten, b för bambu, c för tecken, w för vind, d för drake, y för årstidsbonus, f för blombonus. Det andra är 1..9 för sviterna, e,s,w,n för vindarna (e = östan, s = sunnan, w = västan, n = nordan), w,r,g för drakarna (w = vit, r = röd, g = grön) och 1, 2, 3, 4 för bonusbrickorna. Öppna brickor har en liten bokstav som första tecken, medan dolda brickor har en stor bokstav.

Alla följande delar är alltid närvarande i denna ordning, utom delen "Sista brickan": Den finns bara för vinnarens hand.

Kombination

- En del som börjar med något av tecknen `sbcdwSBCDW` är en kombination. En kombination innehåller ett godtyckligt antal brickor. &kajongg; delar kombinationer med för många brickor, för att försöka maximera poängen.

  Vi använder en speciell syntax för kong: c1c1c1c1 är en öppen kong. c1c1c1C1 är en öppen kong, där den fjärde brickan kungjordes, som kompletterar en dold pong. Det behövs för det begränsade spelet 'Dold äkta färghand'. c1C1C1c1 är en dold kungjord kong. C1C1C1C1 skulle vara en dold inte kungjord kong. Men eftersom den inte är kungjord, räknas den som en pong. Kombinationen delas alltså i en pong C1C1C1 och en enstaka C1.

  Bonusbrickor visas efter alla andra kombinationer.

Sammanfattning

- En del som börjar med / innehåller sammanfattande information om kombinationerna. Det gör det enklare att skriva reguljära uttryck. Varje kombination representeras av fyra tecken. Det första tecknet är ett av `sbcdwSBCDW`. Det andra tecknet är ett tal som anger hur många brickor som kombinationen innehåller. Det är 1 för en chi, och upp till 4 för en kong. Noll används för en chi. De två sista tecknen innehåller kombinationens värde.

Alternativ sammanfattning

- Delen som börjar med - är identisk med sammanfattningen ovan, men innehåller kungjord kong som dolda kong. Vissa regler som "Tre dolda pong" behandlar en kungjord kong som om den är dold.

Handlängd

- Delen som börjar med % innehåller information om handens längd: s är en kort hand som har för få brickor, n är en hand mer rätt antal brickor, l är en lång hand som har för många brickor.

Mah Jong

- Delen som börjar med m, M eller x innehåller ytterligare information. M betyder vinnarens hand, m betyder en förlorares hand, och x står för en hand som inte får säga Mah Jongg. M/m/x följs av ett tecken för egen vind, ett tecken för rådande vind, ett tecken för källan till den sista brickan som leder till Mah Jong, och ett tecken för kungörelsen som en spelare gjorde.

  Här är de möjliga källorna för den sista brickan: w=muren, d=kastad, e=ruinen, z=sista brickan i muren, Z=sista brickan i muren, kastad, k=sprängd kong, 1=himmelens/jordens välsignelse. Värdena w och d är speciella: de är en sorts mellanliggande värden. Genom att välja en dold bricka som sista brickan, ställs källan in till w. Därefter anger flera regler att de bara gäller om den sista brickan kommer från muren. Det tillåter alltså ett bättre förhandsurval av manuella regler som faktiskt gäller. För att förstå det bättre, ta gärna en titt på de manuella reglerna och läs på om åtgärden &lastsource;.

  Detta är de möjliga deklarationerna: a=kungjord vid inledning, t=dubbel lycka.

Sista brickan

- En del som börjar med L innehåller information om sista brickan. Den innehåller själva den sista brickan, följd av kombinationen som gjordes färdig med den sista brickan. Vi behöver den sista kombinationen för regeln "sista brickan är den enda möjliga", eftersom ibland är det inte tillräckligt att bara känna till den sista brickan. Observera att den sista kombinationen inte kan vara en kong, eftersom om den gör färdigt en kong, måste du dra en ersättningsbricka.

Kungöra begränsad hand

- Det är ännu inte implementerat, men kan behövas för regler som definieras av BMJA (i England). En del som börjar med K innehåller alla möjliga brickor som ska kontrolleras om vi ger poäng för att kungöra en begränsad hand. Vi skulle kunna använda råstyrka, och kontrollera varje bricka, men det kan ta för mycket tid.

### Åtgärder

Alla åtgärder för en regel definieras i en sträng. De åtskiljs av mellanslag. Vissa av dem definierar ett värde.

&payforall;

- Betalaren gjorde något verkligt allvarligt, så hon måste betala allt. Dock är detta inte ett straff, eftersom summan av betalningarna är samma: bara betalaren ändras. Dessutom gör inte de två spelarna som inte är inblandade några betalningar.

&payers;=X

- Definierar hur många betalare straffregeln förutsätter. X är ett tal.

&payees;=X

- Definierar hur många betalningsmottagare straffregeln förutsätter. X är ett tal.

&absolute;

- Regeln definierar en absolut betalning. Handens poäng ignoreras. Används för straffregler.

&lastsource;

- Den här åtgärden definierar källan för den sista brickan. Den används av manuella regler som "sista brickan från ruinen". Att ange den sista källan med åtgärden fungerar som ett filter för övriga regler, om de bara utlöses för vissa källor. Dessa övriga regler kan naturligtvis också vara manuella regler. Filtreringen begränsar alltså det antal manuella regler som visas för användaren i dialogrutan för poängsättning. Om det verkar komplicerat, lek lite med dialogrutan och se hur kryssrutor visas och försvinner beroende på källan för den sista brickan.

## Kända problem

- Det är inte möjligt för spelaren själv att öppna ett konto på spelservern.

- I spelläget är straff ännu inte möjliga.

- Datorspelarna är fortfarande ganska dumma.

- Namnen på datorspelarna kan ännu inte anpassas.

- Datorspel kan ännu inte återupptas.

## Möjliga framtida funktioner

- Lägg till flera regeluppsättningar. Det är valfritt, och kan göras av personer som ofta använder regeluppsättningarna.

- Lägg till ljud. Kungörelsen "Chi" och liknande bör sägas högt, liksom vilka brickor som slängs. Definiera standardljud, men gör det möjligt för spelaren att spela in sin egen röst.

## Vanliga frågor

Jag vill ändra hur spelet ser ut. Kan man göra det?

Ja. Använd menyraden för att öppna inställningsverktyget för att ändra utseendet på &kappname;.

Kan man använda tangentbordet för att tilldela brickor till spelare?

Ja. Se Låt &kajongg; beräkna poängen.

## Tack till och licens

&kappname; för &kde;

Program Copyright © 2009, 2010 Wolfgang Rohdewald wolfgang@rohdewald.de

Dokumentation Copyright © 2009, 2010 Wolfgang Rohdewald wolfgang@rohdewald.de

Översättning Stefan Asserhäll stefan.asserhall@comhem.se

&underFDL; &underGPL;

## Installation

Använd .deb-paketet från . Om det inte fungerar för dig, kan du ladda ner kajongg-x-y.tar.gz från samma adress och därefter utföra:

    tar xfz kajongg-x-y.tar.gz
    cd kajongg-x-y
    ./setup.py install

I båda fallen måste du manuellt försäkra dig om att vissa andra paket som krävs är installerade. Debian-paketet innehåller inte ännu dessa krav. &kajongg; behöver (motsvarande Debian-paket inom parenteser):

- KDE4 spelbiblioteket (libkdegames5)

- Python 2.5 eller senare (python)

- QT4.4 eller senare (libqt4-core, libqt4-gui, libqt4-svg, libqt4-sql, libqt4-sql-sqlite)

- Python-bindningar för QT4 (python-qt4, python-qt4-sql)

- Python-bindningar för KDE4 (python-kde4)

- Python-biblioteket twisted (python-twisted-core)

- sqlite3 (libsqlite3-0)

&documentation.index;