use array,graph,io,math,ui,time; roz=graph.full(true); graph.size(roz[0],roz[1]); o=[]; o['obtiznost']=1; o['strana']=9; o['zacina']=0; o['procentder']=10; o['cervena']=0xFF2020; o['modra']=0x8080FF; o['pozadi']=0xA040A0; o['prubehbarva']=o['modra']; o['sirka']=graph.size()[0]; o['vyska']=graph.size()[1]; o['menusirka']=math.floor(o['vyska']/6); o['menuvyska']=math.floor(o['vyska']/12); o['menufont']=math.round(o['menuvyska']/2); o['napovedasirka']=math.floor(o['vyska']/12); o['napovedavyska']=math.floor(o['vyska']/12); o['napovedafont']=math.round(o['napovedavyska']/2); o['hodnocenisirka']=math.floor(o['sirka']/2); o['hodnocenivyska']=math.floor(o['vyska']/10); o['hodnocenifont']=math.floor(o['vyska']/15); o['jazyk']=0; lang=['English','česky']; text=[ 'menu': ['Menu','Menu'], 'continue': ['Continue Game','Pokračovat ve hře'], 'newgame': ['Restart Game','Nová hra'], 'level': ['Difficulty','Obtížnost'], 'easy': ['Easy','lehká'], 'hard': ['Hard','těžká'], 'veryhard': ['Very hard','velice těžká'], 'warninglongthinking': ['Warning: thinking of computer may be VERY long.'+' It\'s recommended use it on small board only or on ending of game.\nContinue?','Upozornění: počítač může přemýšlet VELICE dlouho.'+' Je doporučeno tuto obtížnost používat pouze na malých polích nebo v koncovkách.\nPokračovat?'], 'warning': ['Warning','Upozornění'], 'firstmove': ['First Move','První tah'], 'wholost': ['Who Lost','kdo prohrál'], 'human': ['Human','člověk'], 'computer': ['Computer','počítač'], 'holepercent': ['Percent of Holes','Procent děr'], 'boardsize': ['Board Size','Velikost pole'], 'lang': ['Language','Jazyk'], 'rules': ['Game Rules','Pravidla hry'], 'about': ['About Game','O hře'], 'quit': ['Quit Game','Skončit hru'], 'gpl': ['Game is distributed under GPL, so share, improve and enjoy it ;-)\n\nMore info at','Hra je uvolněna pod GPL. Šiřte, vylepšujte a užívejte ;-)\n\nVíce informací na'], 'rulestext1': ['Your task is to have more your stones (red) than your opponent (blue).','Vaším úkolem je získat co nejvíce svých (červených) kamenů na úkor modrého protihráče.'], 'rulestext2': ['Control:\nClick on your stone and choose turn.\n\nThere are two types of movement:\n'+'- when you choose near field (green one), than your stone is cloned\n'+'- when you choose field 2 fields far (yellow or red highlighted), your stone is moved there','Ovládání:\nKlikněte na červený kámen a vyberte tah.\n\nJsou dva typy tahů:\n'+'- pokud zahrajete na políčko vedle (vyznačeno zeleně), kámen se rozmnoží\n'+'-pokud zahrajete ob jedno políčko (vyznačeno žlutě nebo červeně), kámen tam přeskočí'], 'rulestext3': ['After this all opponent\'s stones near yours new is turned to yours.','Po výběru tahu se všechny protihráčovy kameny v blízkosti nového kamene přebarví.'], 'tie': ['Tie','Remíza'], 'youwin': ['You win, congratulations!','Vyhrál jsi, gratuluji!'], 'youlost': ['You lost, I\'m afraid..','Prohrál jsi, bohužel..'], 'gameover': ['Game Over','Konec hry'] ]; try proud=io.open('KyblHexxagon.cfg',false,io.utf8); nastav=code(io.read(proud,5)); o['jazyk']=nastav[0]; o['obtiznost']=nastav[1]; o['zacina']=nastav[2]; o['procentder']=nastav[3]; o['strana']=nastav[4]; io.close(proud); catch e by end; o['strana_nova']=o['strana']; .rozdilpoctukamenu=0; function text(co) return .text[co][.o['jazyk']]; end; function vp(pol,hlaska=true) //vypise pole if pol = null then vysl='@null' elsif isboolean(pol) then if pol then vysl='@true' else vysl='@false' end; elsif isnum(pol) then vysl=str(pol); elsif isstr(pol) then vysl=pol; elsif isarray(pol) then vysl='['; i=0; for klic in keys(pol) do if klic = null then vysl=vysl+vp(pol[i],false)+', '; else vysl=vysl+klic+': '+vp(pol[klic],false)+', '; end; i++; end; if len(vysl) > 1 then vysl=substr(vysl,0,len(vysl)-2); end; vysl=vysl+']'; else vysl=''; end; if hlaska then ui.msg(vysl); end; return vysl; end; function uloznastaveni() try proud=io.create('KyblHexxagon.cfg',io.utf8); io.write(proud,char([.o['jazyk'],.o['obtiznost'],.o['zacina'],.o['procentder'],.o['strana_nova']])); io.close(proud); catch e by end; end; function napismenu() while true do obt=[null,'easy','hard','veryhard']; obt=obt[.o['obtiznost']]; case .o['zacina'] in 0: zacina='wholost'; in 1: zacina='human'; in 2: zacina='computer'; else throw 'Neznámá hodnota: '+.o['zacina']; end; poz=ui.list([text('continue'),text('newgame'),text('level')+': '+text(obt),text('firstmove')+': '+text(zacina),text('holepercent')+': '+str(.o['procentder'])+' %',text('boardsize')+': '+str(math.ceil(.o['strana_nova']/2)),text('lang')+': '+.lang[.o['jazyk']],text('rules'),text('about'),text('quit')],false,[],'KýblHexxagon'); if poz = null then break; end; case poz[0] in 0: break; in 1: return 'restart'; in 2: obtiznost=ui.list([text('easy'),text('hard'),text('veryhard')],false,[.o['obtiznost']-1],text('level')); if obtiznost # null then if obtiznost[0] < 2 or ui.confirm(text('warninglongthinking'),text('warning')) then .o['obtiznost']=obtiznost[0]+1; uloznastaveni(); end; end; in 3: zacina=ui.list([text('wholost'),text('human'),text('computer')],false,[.o['zacina']],text('firstmove')); if zacina # null then .o['zacina']=zacina[0]; uloznastaveni(); end; in 4: try procent=ui.query(text('holepercent'),'KýblHexxagon',.o['procentder']); catch e by procent=null; end; if procent # null then if procent < 0 then procent=0; end; if procent > 50 then procent=50; end; .o['procentder']=math.floor(procent); uloznastaveni(); end; in 5: try strana=ui.query(text('boardsize'),'KýblHexxagon',math.ceil(.o['strana_nova']/2)); catch e by strana=null; end; if strana # null then if strana < 3 then strana=3; end; if strana > 10 then strana=10; end; .o['strana_nova']=(math.floor(strana)*2)-1; uloznastaveni(); end; in 6: jazyk=ui.list(.lang,false,[.o['jazyk']],text('lang')); if jazyk # null then .o['jazyk']=jazyk[0]; uloznastaveni(); end; in 7: ui.msg(text('rulestext1'),text('rules')+' (1/3)'); ui.msg(text('rulestext2'),text('rules')+' (2/3)'); ui.msg(text('rulestext3'),text('rules')+' (3/3)'); in 8: ui.msg('KýblHexxagon v1.11\n\nCopyleft Aleš Janda, KÝBLSoft 2008\n\n'+text('gpl')+' www.kyblsoft.cz/mobil',text('about')); //please don't edit this license text. Thanks :-) in 9: return 'konec'; end; end; end; function validnipozice(x,y,pole) return (not (x < 0 or y < 0 or y >= len(pole) or x >= len(pole[y]) or pole[y][x] = null)); end; function vratpolohu(sour,pole) sour[0]-=.o['okrajx']; sour[1]-=.o['okrajy']; pozx=math.floor(sour[0]/.o['rozmer']); zbx=sour[0]%.o['rozmer']; sour[1]-=pozx*(.o['rozmer']/2); sour[1]+=.o['rozmer']*.o['strana']/2/.o['strana']*math.floor(.o['strana']/2); pozy=math.floor(sour[1]/.o['rozmer']); zby=sour[1]%.o['rozmer']; if zbx < math.floor(.o['rozmer']/2) then if zby < math.floor(.o['rozmer']/2) then if zbx < (math.floor(.o['rozmer']/2)-zby) then pozx--; end; else if (zby-math.floor(.o['rozmer']/2)) > zbx then pozx--; pozy++; end; end; end; if not validnipozice(pozx,pozy,pole) then return null; end; return [pozx, pozy]; end; function polevalidnich(hodnoty,pole,ivolne,ihracecislo) vysl=[]; for hodnota in hodnoty do x=hodnota[0]; y=hodnota[1]; if validnipozice(x,y,pole) then if pole[y][x] = 0 then if ivolne then append(vysl,hodnota); end; else if pole[y][x] = ihracecislo then append(vysl,hodnota); end; end; end; end; return vysl; end; function vratsousedni(x,y,pole,ivolne,ihracecislo,idruhauroven) prvni=[[x,y-1],[x+1,y-1],[x+1,y],[x,y+1],[x-1,y+1],[x-1,y]]; prvni=polevalidnich(prvni,pole,ivolne,ihracecislo); if idruhauroven then druhy=[[x,y-2],[x+1,y-2],[x+2,y-2],[x+2,y-1],[x+2,y],[x+1,y+1],[x,y+2],[x-1,y+2],[x-2,y+2],[x-2,y+1],[x-2,y],[x-1,y-1]]; druhy=polevalidnich(druhy,pole,ivolne,ihracecislo); else druhy=[]; end; return [[x,y],prvni,druhy]; end; function jevpoli(co,pol) for p in pol do if p[0]=co[0] and p[1]=co[1] then return true; end; end; return false; end; function nakreslihexagon(pozx,pozy,hrac,hranice=null) if hranice = null then hranice=.o['pozadi']; end; x=pozx*.o['rozmer']+.o['okrajx']; y=pozy*.o['rozmer']+pozx*.o['rozmer']/2-math.floor(.o['strana']/2)*.o['rozmer']/2+.o['okrajy']; l=.o['rozmer']; graph.pen(hranice); graph.brush(.o['pozadi']); graph.poly([x+l/2,x+l,x+3/2*l-1,x+l,x+l/2,x+1],[y+1,y+1,y+l/2,y+l-1,y+l-1,y+l/2]); if hrac # 0 then case hrac in 1: graph.brush(.o['cervena']); in 2: graph.brush(.o['modra']); end; graph.pen(graph.black); graph.circle(x+3/4*l-3/8*l,y+1/8*l,3/4*l); end; end; function nakresliplochu() graph.pen(graph.black); graph.brush(graph.black); graph.rect(0,0,.o['sirka'],.o['vyska']); pole=[]; for pozy=0 to (.o['strana']-1) do append(pole,[]); for pozx=0 to (.o['strana']-1) do if math.random() > .o['procentder']/100 then append(pole[pozy],0); else //dira append(pole[pozy],null); end; end; end; for pozy=0 to math.floor(.o['strana']/2)-1 do for pozx=math.floor(.o['strana']/2)-1-pozy to 0 by -1 do pole[pozy][pozx]=null; end; end; for pozy=math.floor(.o['strana']/2)+1 to (.o['strana']-1) do for pozx=.o['strana']-(pozy-math.floor(.o['strana']/2)) to (.o['strana']-1) do pole[pozy][pozx]=null; end; end; pole[math.floor(.o['strana']/2)][0]=1; pole[.o['strana']-1][0]=2; pole[.o['strana']-1][math.floor(.o['strana']/2)]=1; pole[math.floor(.o['strana']/2)][.o['strana']-1]=2; pole[0][.o['strana']-1]=1; pole[0][math.floor(.o['strana']/2)]=2; for pozy=0 to (.o['strana']-1) do for pozx=0 to (.o['strana']-1) do if pole[pozy][pozx] # null then nakreslihexagon(pozx,pozy,pole[pozy][pozx]); end; end; end; return pole; end; function prekreslinutne(co,pole,ohraniceni) barva=.o['pozadi']; if ohraniceni then barva=graph.white; end; if co[0] # null then nakreslihexagon(co[0][0],co[0][1],pole[co[0][1]][co[0][0]],barva); end; if ohraniceni then barva=graph.green; end; for sous in co[1] do x=sous[0]; y=sous[1]; nakreslihexagon(x,y,pole[y][x],barva); end; for sous in co[2] do if ohraniceni then if len(vratsousedni(sous[0],sous[1],pole,false,1,false)[1]) > 0 then barva=graph.red; else barva=graph.yellow; end; end; nakreslihexagon(sous[0],sous[1],pole[sous[1]][sous[0]],barva); end; end; function vratdruhehohrace(hrac) case hrac in 1: return 2; in 2: return 1; end; ui.error('Špatný hráč!'); end; function prebarvisousedni(x,y,pole,naco) prebarvit=vratsousedni(x,y,pole,false,vratdruhehohrace(naco),false); for pr in prebarvit[1] do pole[pr[1]][pr[0]]=naco; end; return prebarvit; end; function vratvyhodnosthrace(pole,hrac) vysl=[0,0,0]; for y=0 to (.o['strana']-1) do for x=0 to (.o['strana']-1) do case pole[y][x] in 1: vysl[1]++; in 2: vysl[2]++; end; end; end; case hrac in 1: vysl[0]=vysl[1]-vysl[2]; in 2: vysl[0]=vysl[2]-vysl[1]; else throw 'Neznámý hráč!'; end; return vysl; end; function vypisprubeh(prubeh) if prubeh = null then graph.pen(graph.black); graph.brush(graph.black); graph.rect(0,(.o['vyska']-1)-math.ceil(.o['menuvyska']/2),.o['menusirka'],math.ceil(.o['menuvyska']/2)); return; end; if prubeh > 1 then prubeh=1; end; graph.pen(.o['prubehbarva']); graph.brush(graph.black); graph.rect(0,(.o['vyska']-1)-math.ceil(.o['menuvyska']/2),.o['menusirka'],math.ceil(.o['menuvyska']/2)); graph.brush(.o['prubehbarva']); graph.rect(1,(.o['vyska']-1)-math.ceil(.o['menuvyska']/2)+1,math.round(prubeh*(.o['menusirka']-2)),math.ceil(.o['menuvyska']/2)-2); graph.show(); end; function vypisstav(pole) stav=vratvyhodnosthrace(pole,2); graph.pen(graph.black); if stav[0] < 0 then graph.brush(.o['cervena']); elsif stav[0] = 0 then graph.brush(graph.white); else graph.brush(.o['modra']); end; graph.rect(0,0,.o['hodnocenisirka'],.o['hodnocenivyska']); graph.brush(graph.black); graph.rect(math.round(.o['hodnocenivyska']*1/7),math.round(.o['hodnocenivyska']*1/7),.o['hodnocenisirka']-2*math.round(.o['hodnocenivyska']*1/7),.o['hodnocenivyska']-2*math.round(.o['hodnocenivyska']*1/7)); graph.font(['SwissA',.o['hodnocenifont'],true,false]); graph.pen(.o['cervena']); graph.text(math.round(.o['hodnocenisirka']*1/13),math.round(.o['hodnocenivyska']*3/4),str(stav[1])); graph.pen(.o['modra']); graph.text(math.round(.o['hodnocenisirka']*4.5/13),math.round(.o['hodnocenivyska']*3/4),str(stav[2])); graph.font(['SwissA',math.round(.o['hodnocenifont']*5/6),true,false]); graph.pen(0xB0B0B0); graph.text(math.round(.o['hodnocenisirka']*8/13),math.round(.o['hodnocenivyska']*3/4)-math.floor(.o['hodnocenifont']*1/12),str(-(stav[0]+.rozdilpoctukamenu)/2)); .rozdilpoctukamenu=stav[0]; end; function dokoncihru(pole,inaobrazovce) //dobarvi vsechna pole okolo do zmena=false; for y=0 to (.o['strana']-1) do for x=0 to (.o['strana']-1) do if pole[y][x] = 0 then if len(vratsousedni(x,y,pole,false,1,false)[1]) > 0 then pole[y][x]=1; if inaobrazovce then nakreslihexagon(x,y,1); end; zmena=true; elsif len(vratsousedni(x,y,pole,false,2,false)[1]) > 0 then pole[y][x]=2; if inaobrazovce then nakreslihexagon(x,y,2); end; zmena=true; end; end; end; end; until not zmena; if inaobrazovce then vypisstav(pole); graph.show(); vysl=vratvyhodnosthrace(pole,2)[0]; if vysl = 0 then ui.msg(text('tie'),text('gameover')); .tedzacina=math.floor(math.random()*2)+1; elsif vysl < 0 then ui.msg(text('youwin'),text('gameover')); .tedzacina=2; else ui.msg(text('youlost'),text('gameover')); .tedzacina=1; end; end; end; function makamhrat(pole,hrac) for y=0 to (.o['strana']-1) do for x=0 to (.o['strana']-1) do if pole[y][x] = hrac then sousedni=vratsousedni(x,y,pole,true,0,true); if len(sousedni[1]) > 0 or len(sousedni[2]) > 0 then return true; end; end; end; end; return false; end; function vratnejlepsitah(pole,hrac,hloubka,muzedokoncit,stacimax,pisprubeh) forward; function arraycopy(pole) navrat=array.create(len(pole),null); for y=0 to (len(pole)-1) do navrat[y]=array.copy(pole[y]); end; return navrat; end; function vratvyhodnosttahu(x,y,odx,ody,pole,vysl,vzdal,hrac,druhyhrac,pocvyhodnost,vyhodnost,hloubka,stacimax) if hloubka = 1 then hodnota=pocvyhodnost+vyhodnost; else //vetsi hloubka tmppole=arraycopy(pole); tmppole[y][x]=hrac; if vzdal = 2 then tmppole[ody][odx]=0; end; prebarvisousedni(x,y,tmppole,hrac); hodnotapole=vratnejlepsitah(tmppole,druhyhrac,hloubka-1,false,stacimax,false); if hodnotapole=null then //uz je skonceno return; end; hodnota=-hodnotapole['hodnota']; end; if hodnota > vysl['nejlepsihodnota'] then vysl['nejlepsipole']=[]; vysl['nejlepsihodnota']=hodnota; end; if hodnota = vysl['nejlepsihodnota'] then append(vysl['nejlepsipole'],['vzdal': vzdal, 'hodnota': hodnota, 'od': [odx,ody], 'do': [x,y]]); end; end; function vratnejlepsitah(pole,hrac,hloubka,muzedokoncit,stacimax,pisprubeh) vysl=[]; vysl['nejlepsipole']=[]; vysl['nejlepsihodnota']=-10000; druhyhrac=vratdruhehohrace(hrac); pocvyhodnost=vratvyhodnosthrace(pole,hrac)[0]; if pisprubeh then vypisprubeh(0); casnapsaniprubehu=time.get(); end; for y=0 to (.o['strana']-1) do for x=0 to (.o['strana']-1) do if pole[y][x] = 0 then if pisprubeh then casted=time.get(); if casted > casnapsaniprubehu+0.1 then vypisprubeh(y/(.o['strana']-0.6)+x/.o['strana']/(.o['strana']-1)); casnapsaniprubehu=casted; end; end; sousedni=vratsousedni(x,y,pole,false,hrac,true); if len(sousedni[1]) > 0 then sezrat=vratsousedni(x,y,pole,false,druhyhrac,false); vratvyhodnosttahu(x,y,sousedni[1][0][0],sousedni[1][0][1],pole,vysl,1,hrac,druhyhrac,pocvyhodnost,len(sezrat[1])*2+1,hloubka,-vysl['nejlepsihodnota']); if vysl['nejlepsihodnota'] > stacimax then return vysl['nejlepsipole'][len(vysl['nejlepsipole'])-1]; end; end; if len(sousedni[2]) > 0 and (len(sousedni[1]) = 0 or hloubka > 2) then sezrat=vratsousedni(x,y,pole,false,druhyhrac,false); for sous in sousedni[2] do vratvyhodnosttahu(x,y,sous[0],sous[1],pole,vysl,2,hrac,druhyhrac,pocvyhodnost,len(sezrat[1])*2,hloubka,-vysl['nejlepsihodnota']); if vysl['nejlepsihodnota'] > stacimax then return vysl['nejlepsipole'][len(vysl['nejlepsipole'])-1]; end; end; end; end; end; end; if len(vysl['nejlepsipole']) > 0 then poz=math.floor(math.random()*len(vysl['nejlepsipole'])); return vysl['nejlepsipole'][poz]; else //nema kam hrat if muzedokoncit then dokoncihru(pole,true); else tmppole=arraycopy(pole); dokoncihru(tmppole,false); return ['hodnota': vratvyhodnosthrace(pole,hrac)[0]]; end; return null; end; end; function pocitachraje(pole) tah=vratnejlepsitah(pole,2,.o['obtiznost'],true,10000,true); vypisprubeh(null); if tah = null then return false; //konec hry end; if tah['vzdal'] = 2 then pole[tah['od'][1]][tah['od'][0]]=0; end; pole[tah['do'][1]][tah['do'][0]]=2; prekreslinutne([[tah['od'][0],tah['od'][1]],[],[]],pole,true); pouzivane=vratsousedni(tah['do'][0],tah['do'][1],pole,false,1,false); prekreslinutne(pouzivane,pole,true); graph.show(); sleep(500); pouzivane=prebarvisousedni(tah['do'][0],tah['do'][1],pole,2); prekreslinutne([[tah['od'][0],tah['od'][1]],[],[]],pole,false); prekreslinutne(pouzivane,pole,false); pouzivane=[null,[],[]]; vypisstav(pole); graph.show(); return true; end; function sezermysdouvolneni() while true do ui.ptr(false); vstup=ui.cmd(); if isarray(vstup) and vstup[2] = 0 then break; end; end; end; .tedzacina=1; //standardne zacina clovek do skoncit=false; o['strana']=o['strana_nova']; //mohla se zmenit nastavenim o['rozmer']=o['sirka']/(o['strana']+0.5); if o['rozmer'] > o['vyska']/o['strana'] then o['rozmer']=o['vyska']/o['strana']; end; o['rozmer']=math.floor(o['rozmer']/2)*2; o['okrajx']=math.floor((o['sirka']-o['strana']*o['rozmer']-o['rozmer']/2)/2); o['okrajy']=math.floor((o['vyska']-o['strana']*o['rozmer'])/2); .rozdilpoctukamenu=0; pole=nakresliplochu(); vypisstav(pole); graph.pen(0x303030); graph.brush(0x707070); graph.rect(o['sirka']-o['menusirka'],o['vyska']-o['menuvyska'],o['menusirka'],o['menuvyska']); graph.pen(graph.black); graph.font(['SwissA',o['menufont'],true,false]); graph.text(o['sirka']-math.round(o['menusirka']*5/6),o['vyska']-math.round(o['menuvyska']/3),text('menu')); graph.show(); pouzivane=[null,[],[]]; case o['zacina'] in 0: if .tedzacina = 2 then pocitachraje(pole); end; in 2: pocitachraje(pole); end; while true do if not makamhrat(pole,1) then dokoncihru(pole,true); break; end; do ui.ptr(false); ui.keys(false); vstup=ui.cmd(); until isarray(vstup); if vstup[2] = 1 then //stisknuti if vstup[0] > o['sirka']-o['menusirka'] and vstup[1] > o['vyska']-o['menuvyska'] then case napismenu() in 'restart': break; in 'konec': skoncit=true; break; end; end; if vstup[0] < o['napovedasirka'] and vstup[1] > o['vyska']-o['napovedavyska'] then tah=vratnejlepsitah(pole,1,o['obtiznost'],true,10000,false); if tah # null then prekreslinutne(pouzivane,pole,false); pouzivaneted=[tah['od'],[],[tah['do']]]; prekreslinutne(pouzivaneted,pole,true); graph.show(); sezermysdouvolneni(); prekreslinutne(pouzivaneted,pole,false); prekreslinutne(pouzivane,pole,true); end; end; poloha=vratpolohu(vstup,pole); if poloha # null then x=poloha[0]; y=poloha[1]; if jevpoli(poloha,pouzivane[1]) or jevpoli(poloha,pouzivane[2]) then if jevpoli(poloha,pouzivane[2]) then pole[pouzivane[0][1]][pouzivane[0][0]]=0; end; pole[y][x]=1; prekreslinutne(pouzivane,pole,false); pouzivane=vratsousedni(x,y,pole,false,2,false); prekreslinutne(pouzivane,pole,true); graph.show(); sleep(500); pouzivane=prebarvisousedni(x,y,pole,1); prekreslinutne(pouzivane,pole,false); pouzivane=[null,[],[]]; vypisstav(pole); graph.show(); if not pocitachraje(pole) then break; end; else//oznaceni moznych tahu if pole[y][x] = 0 then prekreslinutne(pouzivane,pole,false); pouzivane=vratsousedni(x,y,pole,false,1,true); if len(pouzivane[1]) > 0 or len(pouzivane[2]) > 0 then //zobrazim, cim se na to policko da dostat for pouz in pouzivane[1] do nakreslihexagon(pouz[0],pouz[1],pole[pouz[1]][pouz[0]],graph.white); end; for pouz in pouzivane[2] do nakreslihexagon(pouz[0],pouz[1],pole[pouz[1]][pouz[0]],graph.white); end; graph.show(); sezermysdouvolneni(); for pouz in pouzivane[1] do nakreslihexagon(pouz[0],pouz[1],pole[pouz[1]][pouz[0]],o['pozadi']); end; for pouz in pouzivane[2] do nakreslihexagon(pouz[0],pouz[1],pole[pouz[1]][pouz[0]],o['pozadi']); end; pouzivane=[null,[],[]]; end; elsif pole[y][x] = 1 then prekreslinutne(pouzivane,pole,false); pouzivane=vratsousedni(x,y,pole,true,0,true); if len(pouzivane[1]) = 0 and len(pouzivane[2]) = 0 then //timto nelze tahnout, zobrazim cim tahnout jde lzetahnout=[]; for y=0 to (o['strana']-1) do for x=0 to (o['strana']-1) do if pole[y][x] = 1 then tmpmozne=vratsousedni(x,y,pole,true,0,true); if len(tmpmozne[1]) > 0 or len(tmpmozne[2]) > 0 then append(lzetahnout,[x,y]); nakreslihexagon(x,y,pole[y][x],graph.white); end; end; end; end; graph.show(); sezermysdouvolneni(); for poztmp in lzetahnout do nakreslihexagon(poztmp[0],poztmp[1],pole[poztmp[1]][poztmp[0]],o['pozadi']); end; pouzivane=[null,[],[]]; else prekreslinutne(pouzivane,pole,true); end; end; end; end; graph.show(); end; end; until skoncit;