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 if
–elif
–else
.
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()