Sevel ur c'hoari strategiezh

Digoradur

Pa zeu ar c’hoant da grouiñ ur c’hoari video bennak, gwelloc’h kregiñ gant ur prototip war paper. Kalz primoc’h ez a evit kinnig pe testiñ reolennoù nevez. Gwelloc’h eo gortoz e vefe sklaer a-walc’h hor mennozhioù a-raok skrivañ al linennoù kod kentañ war urzhiataer.

E-pad daou brantad on eus klasket dielfennañ reolennoù c’hoari klok war un tablez c’hoari c’hwec’hgorneg e paper. Labouret on eus gant kreionoù ha sizailhoù nemetken.

Ur perzh dedennus eus ar c’haelioù c’hwec’hgorneg eo hag e vez ken pell ur gellig eus ar 6 gellig all stag diouti.

Kod ar c’hoari a c’hellit kavout war github.

Reolennoù

Setu dindan doare kentañ ar reolennoù bet divizet ganeomp. Da glokaat int c’hoazh !

# Geriaoueg
 * Kellig : ul lec'h war ar gael
 * Tiriad : hollad ar c'helligoù aloubet gant ur c'hoarier ha staget etrezo. An tiriadoù hag a vez distaget dre un tagadenn eus peurest an tiriad (hag a chom liammet d'an orin) a vez kollet.


# Lore
Pal ar c'hoari a zo aloubiñ un enezenn gouez (or something).


# Reolennoù
Pep c'hoarier a grog war ur c'hombod war bord an enezenn en ur c'hellig dibabet gant pep c'hoarier. N'eus ket tu da daou c'hoarier kregiñ war ar memes bord.
Ar c'hellig a orin a dalv 1. Da lavaret eo e vo gounezet ur poent d'an nebeutañ gant pep c'hoarier pep tro.
Dizoloet e vez ar c'helligoù tro-dro gant pep c'hoarier a-raok ma krogfe da vat ar c'hoari.

Un talvoud a zo gant pep kellig : eus 1 betek 5.
Pep tro e vez gounezet kement a poentoù ha talvoud ar c'helligoù e-lec'h m'ho peus savet un uzin.


## Game loop (evit pep c'hoarier)
 * Kontañ ar poentoù : pep kellig e-lec'h ma vez un uzin a produ ar memes niver a boentoù eget talvoud ar c'hellig dindan (ar pezh orin a gont evel un uzin hag a produ ur poent pep tro)
 * Aloubiñ kelligoù (ret eo dispign ar memes priz eget talvoud ar c'hellig), krouiñ uzinoù (2 wech talvoud ar c'hellig, o c'hortoz d'an nebeutañ un tro war lec'h bezañ aloubet ar c'hellig)
 * Dizoleiñ ar c'helligoù tro-dro ar c'helligoù aloubet.

## Reolennou an uzinou
    5 uzin max (ar c'hellig a orin ne gont ket evel un uzin)
    finval un uzin : priz al lec'h orin + 2x talvoud ar c'hellig ez ez

## Tagan
   Posupl eo tagan ar c'helligoù amezog (d'ho kelligoù dija aloubet aboe > 1 tro) nemetken.
   Koust a ra 2 × (3× ma zeus un uzin) priz ar c'hellig taget - 0.5 × an niver a tiriadou dit tro-dro + 1 × an niver tiriadou ar c'hoarier aloubet tro dro.
   Reolenn "troc'h" :
    Goude bezañ taget ur c'hellig d'un enebour e vez kollet gant an difenner hollad an tiriadoù a n'int ket liammet d'ar c'hellig a orin. An tiriadoù kollet a tistro gouez hag an uzinoù a vez adlaket e "réserve" an difenner.
    

Kod Python

Gwelomp penaos tresañ ur c’hwec’hgorneg eus neusforz peseurt ment gant Processing (yezh Python). An diazez !

def draw_hex(posx, posy, rad):
    h = rad * sin(radians(60))
    line(posx, posy - rad, posx + h, posy - rad*0.5)
    line(posx + h, posy - rad*0.5, posx + h, posy + rad*0.5)
    line(posx + h, posy + rad*0.5, posx, posy + rad)
    line(posx, posy + rad, posx - h, posy + rad*0.5)
    line(posx - h, posy + rad*0.5, posx - h, posy - rad*0.5)
    line(posx - h, posy - rad*0.5, posx, posy - rad)

Gant a doare kinniget a-us e vez liammet pep poent eus ar c’hwec’hgorneg gant linennoù. Ur c’hwec’hgorneg a vo treset da vat met penaos ober m’on eus c’hoant livañ diabarzh ar stumm ? Ret e vo tresañ ur « poligon » leun d’ar mare-mañ.

Tu vo implij ar fonksion fill evit dibab liv ar stumm.

def draw_hex_poly(posx, posy, rad):
    h = rad * sin(radians(60))
    beginShape();
    vertex(posx, posy - rad)
    vertex(posx + h, posy - rad*0.5)
    vertex(posx + h, posy + rad*0.5)
    vertex(posx, posy + rad)
    vertex(posx - h, posy + rad*0.5)
    vertex(posx - h, posy - rad*0.5)
    endShape(CLOSE);

Sevel un tablez a-bezh

Bremañ m’emaomp gouest da dresañ ur c’hwec’hgorneg, klaskomp sevel un tablez gant un niver kemmus (dre ur varienn) a c’hwec’hgornegoù. Stumm an tablez a rank bezañ stumm ur c’hwec’hgorneg ivez !

N = 12 # Ment an tablez (niver a gelligoù dre kostez)
S = 16 # Ment pep kellig (e pixeloù)

def setup():
    size(800, 600)
    noLoop()


def draw():
    background(255)
    draw_kael(N, S)


def draw_kael(n, rad):
    """
        Fonksion evit tresañ un tablez c'hwec'hgornegoù
        Roet e vez ment a tablez (n)
        ha ment pep kellig (rad)
    """
    
    # Kreizennet e vez an tablez war ar skramm
    kreizX = width*0.5
    kreizY = height*0.5
    
    d = rad * sin(radians(60))
    d2 = 2 * d
    
    x0 = kreizX - (n-1) * d2
    y0 = kreizY
    
    # Treset e vez a linenn c'hwec'hgornegoù e-kreiz
    for i in range(2*n - 1):
        draw_hex(x0 + i*d2, kreizY, rad)
    
    # Treset e vez ar linennoù c'hwec'hgornegoù a-us ha dindan
    for i in range(1, n):
        xi = x0 + i * d
        yi_down = y0 + i * (rad + 0.5 * d)
        yi_up = y0 - i * (rad + 0.5 * d)
        for j in range(2*n - 1 - i):
            # Ul linenn dindan
            draw_hex(xi + j*d2, yi_down, rad)
            # Ul linenn a-us
            draw_hex(xi + j*d2, yi_up, rad)


def draw_hex(posx, posy, rad):
    """
        Fonksion evit tresañ ur c'hwec'hgorneg
        Roet e vez an daveenoù (posx ha posy)
        ha ment ar c'hwec'hgorneg (rad, e pixeloù)
    """
    
    h = rad * sin(radians(60))
    beginShape();
    vertex(posx, posy - rad)
    vertex(posx + h, posy - rad*0.5)
    vertex(posx + h, posy + rad*0.5)
    vertex(posx, posy + rad)
    vertex(posx - h, posy + rad*0.5)
    vertex(posx - h, posy - rad*0.5)
    endShape(CLOSE);

Taol kentañ hag efedoù grafik

Betek poent e c’heller c’hoari un taol n’eus forzh pelec’h war an tablez, memes an taol kentañ, padal e rankfe bezañ berzet taolioù ‘zo. Da skouer, taol kentañ pep c’hoarier a rankfe bezañ war vord an tablez nemetken. Pep taol da-heul a rank bezañ stok diouzh tiriadoù perc’hennet dija.
Er fonksion mousePressed (galvet bep gwech ma vez kliket en ul lec’h bennak war ar prenestr), ar varienn is_valid_move a servijo deomp da wiriekañ ma’z eo bet graet un taol aotreet gant ar c’hoarier, pe get. Lakaet e vo an talvoud False gant ar varienn-se, dre ziouer.

Berzañ an taol kentañ

Er c’hlasad (class) Choarier e vez kavet ur varienn n_taol evit mirout soñj eus an niver a daolioù a zo bet c’hoariet gant pep hini.
Bep gwech ma kliket war ur gellig vo tu sellet ouzh stad ar varienn-se, ha ma’z eo kevatal da 0 (taol kentañ) e vo aotreet da aloubiñ an tiriadoù war ar bord nemetken. Gouezet e vez ez eo un tiriad war ar bord p’en deus nebeutoc’h eget 6 amezeg (len(Kellig.amezeien) < 6)

# Galvet bep gwech ma vez kliket er prenestr
def mousePressed():
    global n_choarier   # niverenn ar c'hoarier
    
    if tostan:
        # Kliket eo bet war ur c'hellig
        # Liammet eo bet ar c'hellig-se d'ar varienn 'tostan'
        
        is_valid_move = False
        if tostan.dizoloet and tostan.aloubet_gant == None:
            # Aloubet e vez ar c'hellig
            # ...
            is_valid_move = True
        elif not tostan.dizoloet:
            if choarierien[n_choarier].n_taol == 0 and len(tostan.amezeien) < 6:
                # Taol kentañ
                # ...
                is_valid_move = True
            
        if is_valid_move:
            # Dizoloiñ ar c'helligoù tro-dro
            # ha tremen d'ar c'hoarier da-heul
            # ..

Diskouez an tiriadoù liammet

Evit ma teufe war vel gwelloc’h tiriadoù pep c’hoarier e vez treset ur c’helc’h liv ar c’hoarier dindan talvoud pep tiriad. Evit diskouez splannoc’h hollad an tiriadoù hag al liammoù etre pep kellig e tresimp linennoù tev etre pep kellig hag e amezeien, gant ma vezont aloubet gant ar memes c’hoarier.

Trugarez da Matilin ha Paolig da vezañ labouret war ar c’hod-se !

class Kellig:
    # ...
    def draw(self):
        # Fonksion galvet evit tresañ pep kellig
        
        if self.dizoloet:
            # ...
            if self.aloubet_gant != None:
                # Tresañ merk liv ar c'hoarier n'eus aloubet ar c'hellig mañ
                
                pushStyle()  # envoreniñ stad ar "style" (liv, tevder a linennoù...)
                # ...
                for k in self.amezeien:
                    if self.aloubet_gant == k.aloubet_gant:
                        # Al linenn etre ar c'hellig-mañ ar ur c'hellig amezeg eus ar memes liv
                        line(self.pos.x, self.pos.y, k.pos.x, k.pos.y)
                popStyle()  # gervel ar "style" kozh en dro
            
            text(self.value, self.pos.x-5, self.pos.y+5) # Talvoud skrivet a-us ar c'hellig
        else:
            # tresañ ur c'hellig el latar
            # ...

Elfennoù « game design »

Kalz a labour a chom d’ober evit ma teufe da vezañ ur gwir c’hoari…

Kempenn ‘bug’ sifr an talvoudoù

Echuet on oa, ar wech diwezhañ, en ul leuskel ur bugig grafik : sifr talvoud ar c’helligoù a oa kuzhet a-wechoù, abalamour ma veze treset linennoù ar c’helligoù amezeg a-us dezho.

Evit kempenn ar gudenn-se eo bet ret deomp rannañ ar fonksion Kellig.draw evit dispartiañ tresañ ar gellig diouzh tresañ sifr an talvoudoù. Tennet eo bet neuze al linennoù kod a drese an talvoudoù ha lakaet int bet en ur fonksion nevez, anvet Kellig.draw_talvoud, adskrivet dindan :

# Kavet e vez ar fonskion se er c'hlas 'Kellig'
def draw_talvoud(self):
    # Skrivañ talvoud ar c'hellig a-us dezhi
    if self.dizoloet == True:
        fill(255)
        textSize(20)
        text(self.talvoud, self.pos.x-5, self.pos.y+5)

Galvet e vez ar fonksion nevez-se e diabarzh ar fonksion draw pennañ:

# Tresañ ar gael a-bezh
noStroke()
for k in kelligou:
    k.draw()
for k in kelligou:
    k.draw_talvoud()

Evel-se e vo treset an holl kelligoù penn-da-benn (pep c’hwec’hgornek, livioù ar c’hoarierien hag all) a-raok tresañ pep talvoud a-us.

Ur gael gant kelligoù dizingal

Jeneret e oa talvoudoù pep kellig eus ar gael en un doare ankivil. Pep kellig en doa ar memes probablentez da gaout un talvoud etre 1 ha 5. C’hoant on eus bremañ e vefe raloc’h an talvoudoù bras eget an talvoudoù bihan.
Graet e vo se gant ar c’hod da-heul, lakaet er fonksion setup, war-lerc’h bezañ bet krouet ar gael.

Lakaet e vez un talvoud ‘1’ da bep kellig eus ar bord (anavezet int dre m’o deus nebeutoc’h eget 6 amezeg).
Evit ar re all e vez goulennet un talvoud ankivil etre 0 ha 100, gant ar fonksion random, hag hervez an talvoud roet e vo dibabet talvoud ar gellig. Evel-se, 60% chañs vo da zibab an talvoud ‘1’ evit ar gellig, 20% evit an talvoud ‘2’, 10% evit an talvoud ‘3’, 7% evit an talvoud ‘4’ ha 3% evit an talvoud ‘5’.

Un doare dispar da ziskouez implij ar framm ifelifelse.

for k in kelligou:
    if len(k.amezeien) < 6:
        k.talvoud = 1
    else:
        r = random(100)
        if r < 60:
            k.talvoud = 1
        elif r < 80:
            k.talvoud = 2
        elif r < 90:
            k.talvoud = 3
        elif r < 97:
            k.talvoud = 4
        else:
            k.talvoud = 5

Gounid poentoù pep tro

Brav ha plijus e krog da vezañ klikañ pep lec’h ha brasaat tiriad pep c’hoarier met n’ez eus c’hoari ebet c’hoazh. Poent eo reiñ poentoù da bep c’hoarier e penn-kentañ pep taol. Graet e vo se er fonksion mousePressed, ma’z eo bet graet un taol aotreet.

def mousePressed():
    # ...
    choarier = choarierien[n_choarier]
    # ...
    
    if is_valid_move:
        # ...
        
        # Tremen d'ar c'hoarier da-heul
        choarier.n_taol += 1
        if n_choarier >= len(choarierien):
            n_choarier = 0
        
        #Reiñ poentoù
        choarier.poentou += 1

Diskouez an taolioù aotreet gant un efed blinkañ

N’eo ket anat kompren petra e vez gortozet digant ar c’hoarier, dreist-holl keit ma ne vez « tuto » ebet pe den ebet da zisplegañ deoc’h ar reolennoù.

Sikour a ra kalz lakaat war vel an taolioù aotreet, gant un efed grafik simpl.
Ar fonksion cos(inus) he deus ur perzh _gwagenniñ_ hag a adkas talvoudoù bevennet etre -1 ha 1. Implijet e vo ar fonksion-se evit kemm treuzwelusted al liv a vo lakaet a-us ar c’helligoù a c’hell ar c’hoarier aloubiñ.

E penn kentañ pep tro e vo klasket, gant ar fonksion Choarier.update_taoliou_aloubin listennad ar c’helligoù a c’hell bezañ aloubet gant ar c’hoarier (ar re a zo tro-dro dezhañ, ma’z int dieub ha ma’z int « mac’hamat » a-walc’h).

Er fonksion draw pennañ e vo kavet neuze :

for k in kelligou:
        k.draw()
for k in choarier.taoliou_aloubin:
    # Livañ a-us d'ar c'helligoù a c'hell bezañ aloubet gant ar c'hoarier
    fill(choarier.liv, (1+cos(t_choarier * 0.1) * 60))
    draw_hex(k.pos.x, k.pos.y, k.rad)
for k in kelligou:
    k.draw_talvoud()