Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 07.10.08
Prihlásený: 07.10.08
Príspevky: 2
Témy: 1
Príspevok NapísalOffline : 07.10.2008 16:11

Nevim jak v tomhle zprovoznit mys pise mi to chybu,
Identifier not found "cursorenable"
Identifier not found "cursorsdisable"
Identifier not found "ctistav"

Prosim o pomoc predem dekuji za odpoved.
Kód:
{Reversi}
Program Reversi;

Uses Crt, Mouse, Graph;
{Barvy pouzivane ve hre}
{vychozi nastaveni je v komentari}
Const BPozadi = 0;   {0}
      BPlochy = 6;   {6}
      BCary   = 7;   {7}
      BHrace1 = 15;  {15}
      BObrys1 = 7;   {7}
      BHrace2 = 0;   {0}
      BObrys2 = 7;   {7}
      prodleva = 400; {400; casova prodleva pred tahem pocitace}
                     {(aby hrac stihnul zaregistrovat ucinky sveho tahu)}
Type TRadPole = 0..9;
     THerniPlocha = array [TRadPole, TRadPole] of byte;
Var
  i, j, k, l: integer; {indexy pouzivane v cyklech}
  GDriver, GMode: integer; {promenne pouzite pro spusteni grafickeho rezimu}
  sx, sy, tlacitka, sourx, soury: word; {souradnice a tlacitka mysi}
  {jine souradnice (v grafickem rezimu, souradnice v hernim poli)}
  NewGameOn, PlayerOn, ExitOn: boolean; {stav tlacitek 'New game', 'Player' a}
  {'Exit' (on/off) pri najeti mysi nad tlacitko se zvyraznuje napis tlacitka}
  Finish, HracC, HZmenen: boolean; {stav hry (informace, zda nastal konec hry)}
  {hrac na tahu - pokud HracC=TRUE, hraje pocitac (standardne s cernymi kameny)}
  {zmena hrace - tj. hrac hraje s kameny druhe barvy, zacina hru}
  HPole: THerniPlocha;
  {herni plocha s kameny hracu, 0 - bez kamene, 1 - hrac, 2 - pocitac}
  Tahy, Ohodnoceni: THerniPlocha; {Tabulky vyuzivane pocitacem:}
  {tabulka moznych tahu a priorit tahu v hernim poli}
  klav: char; {pro indikaci stisknute klavesy; <Esc> - konec programu}

{----- Program obsahuje tyto podprogramy: -----
Procedure HerniPlocha
Procedure KresliHKamen
Procedure StartHry
Procedure StartUmisteni
Procedure Init
Function LzeTahnout
Procedure Zajmuti
Procedure StavTlacitek
Function Vysledek
Procedure Vyhodnoceni
Procedure Play
Procedure TahPocitace }


Procedure HerniPlocha;
{vykresli graficke prostredi programu: herni plochu, tlacitka}
Begin
  SetBkColor(BPozadi);
  SetFillStyle(1, BPlochy);
  Bar(128, 38, 512, 422); {herni pole: 384x384, policka 48x48}
  SetColor(BCary);
  Line(126, 36, 514, 36); {obrysove cary}
  Line(126, 424, 514, 424);
  Line(126, 36, 126, 424);
  Line(514, 36, 514, 424);
  i:=38;
  repeat
    Line(128, i, 512, i); {delici cary vodorovne}
    i:=i+48
  until i=470;
  i:=128;
  repeat
    Line(i, 38, i, 422); {delici cary svisle}
    i:=i+48
  until i=560;
  SetColor(BPozadi); {nazev hry u herni plochy:}
  SetFillStyle(1, BCary);
  Bar(224,20,416,35);
  OutTextXY(270,24,'R e v e r s i');
  SetColor(3); {tlacitko 'New game'}
  SetFillStyle(1, 8);
  Bar(540,10,620,40);
  OutTextXY(550,20,'New game');
  Bar(540,50,620,80); {tlacitko 'Player'}
  if HZmenen then OutTextXY(550,60,'Player 2')
             else OutTextXY(550,60,'Player 1');
  Bar(540,90,620,120); {tlacitko 'Exit'}
  OutTextXY(564,100,'Exit')
End;


Procedure KresliHKamen(CisloH, s1, s2: byte);
{Nakresli hraci kamen pro 1. (je-li CisloH=1) nebo 2. hrace (pocitac) na}
{souradnicich herniho pole s1, s2. Je-li nastaven Player 2 (HZmenen), u hracu}
{se prohodi barvy.}
Begin
   if HZmenen then if CisloH=1 then CisloH:=2  {pri zmene hrace se meni barvy}
                               else CisloH:=1;
   if CisloH=1 then begin
     SetColor(BHrace1);
     SetFillStyle(1, BHrace1)
   end
   else begin
     SetColor(BHrace2);
     SetFillStyle(1, BHrace2)
   end;
   CursorDisable;
   {nakresleni hraciho kamene na souradnicich policka v grafickem rezimu}
   PieSlice(104+s2*48, 14+s1*48, 0, 360, 16);
   if CisloH=1 then SetColor(BObrys1)
               else SetColor(BObrys2);
   Circle(104+s2*48, 14+s1*48, 16);
   CursorEnable
End;


Procedure StartHry;
{inicializuje start hry, umistuje startovni kameny hracu}

Procedure StartUmisteni(cislo:byte);
{vnorena; podle nahodne generovaneho cisla umisti startovni kamen pocitace}
Begin
  case cislo of
    0: begin HPole[4,4]:=2; KresliHKamen(2,4,4); end;
    1: begin HPole[4,5]:=2; KresliHKamen(2,4,5); end;
    2: begin HPole[5,4]:=2; KresliHKamen(2,5,4); end;
    3: begin HPole[5,5]:=2; KresliHKamen(2,5,5); end
  end
End;

Begin
  {inicializace promennych pri startu nove hry}
  Finish:=false;
  if not HZmenen then HracC:=true {standardne hraje prvni pocitac}
                 else HracC:=false; {jinak hraje prvni hrac jako Player 2}
  Randomize; {generovani nahodne pozice prvnich 2 kamenu hrace}
  k:=Random(4);
  l:=Random(4);
  if k=l then if k<3 then inc(l) else dec(l);
  {pokud se pro kameny vygeneruji stejna cisla, l se zvetsi (popr. zmensi)}
  StartUmisteni(k); {umisteni kamene do stredu pole podle nahodneho cisla}
  StartUmisteni(l);
  {Na dve volna mista ve stredu pole se umisti kameny protihrace:}
  for i:=4 to 5 do
    for j:=4 to 5 do
      if (HPole[i,j]=0) then begin
        HPole[i,j]:=1;
        KresliHKamen(1,i,j)
      end
End;


Procedure Init;
{inicializace promennych a grafiky na zacatku hry}
Begin
  {vynulovani HPole s popisem rozmisteni kamenu}
  for i:=1 to 8 do
    for j:=1 to 8 do HPole[i,j]:=0;
  CursorDisable;
  DetectGraph(GDriver, GMode); {inicializace grafickeho modu}
  InitGraph(GDriver, GMode,'');
  HerniPlocha; {nakresleni herni plochy a tlacitek}
  CursorEnable;
  NewGameOn:=false;
  PlayerOn:=false;
  ExitOn:=false
End;


Function LzeTahnout(HracC:boolean; x,y:byte):boolean;
{vraci true, pokud muze hrac podle pravidel tah provest na souradnicich [x,y],
tj. pokud dojde k obkliceni souperovych kamenu}
Var Lze: boolean; {proveditelnost obkliceni}
    KamenHrace, KamenSoupere: 1..2;

Begin
  LzeTahnout:=false;
  if HPole[x,y]<>0 then LzeTahnout:=false {policko uz je obsazene}
  else begin {na policku neni jeste zadny kamen}
    Lze:=false;
    {Oznaceni vlastnich kamenu a kamenu protihrace:}
    if HracC then KamenHrace:=2 else KamenHrace:=1;
    if HracC then KamenSoupere:=1 else KamenSoupere:=2;

    {hledani tahu na SZ (severozapadnim smerem v matici HPole)}
    if (x-1>0) and (y-1>0) then if HPole[x-1,y-1]=KamenSoupere then begin
      {o policko dale SZ smerem je kamen soupere}
      k:=x-1; l:=y-1; {presun na toto policko}
      while (k-1>0) and (l-1>0) and (not Lze) do begin {pokud budeme stale na sachovnici}
        dec(k); dec(l); {posuneme se o dalsi policko ve smeru}
        if HPole[k,l]=0 then Break {pokud je policko prazdne, tah neexistuje}
        else if HPole[k,l]=KamenHrace then Lze:=true
        {pokud jsme nasli ve smeru vlastni kamen, tahem lze soupere obklicit}
        {=> tah existuje}
      end
    end;
    {hledani tahu na SV}
    if (not Lze) and (x-1>0) and (y+1<9) then if HPole[x-1,y+1]=KamenSoupere then begin
      k:=x-1; l:=y+1;
      while (k-1>0) and (l+1<9) do begin
        dec(k); inc(l);
        if HPole[k,l]=0 then Break
        else if HPole[k,l]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na JZ}
    if (not Lze) and (x+1<9) and (y-1>0) then if HPole[x+1,y-1]=KamenSoupere then begin
      k:=x+1; l:=y-1;
      while (k+1<9) and (l-1>0) do begin
        inc(k); dec(l);
        if HPole[k,l]=0 then Break
        else if HPole[k,l]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na JV}
    if (not Lze) and (x+1<9) and (y+1<9) then if HPole[x+1,y+1]=KamenSoupere then begin
      k:=x+1; l:=y+1;
      while (k+1<9) and (l+1<9) do begin
        inc(k); inc(l);
        if HPole[k,l]=0 then Break
        else if HPole[k,l]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na S}
    if (not Lze) and (x-1>0) then if HPole[x-1,y]=KamenSoupere then begin
      k:=x-1;
      while (k-1>0) do begin
        dec(k);
        if HPole[k,y]=0 then Break
        else if HPole[k,y]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na J}
    if (not Lze) and (x+1<9) then if HPole[x+1,y]=KamenSoupere then begin
      k:=x+1;
      while (k+1<9) do begin
        inc(k);
        if HPole[k,y]=0 then Break
        else if HPole[k,y]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na Z}
    if (not Lze) and (y-1>0) then if HPole[x,y-1]=KamenSoupere then begin
      l:=y-1;
      while (l-1>0) do begin
        dec(l);
        if HPole[x,l]=0 then Break
        else if HPole[x,l]=KamenHrace then Lze:=true
      end
    end;
    {hledani tahu na V}
    if (not Lze) and (y+1<9) then if HPole[x,y+1]=KamenSoupere then begin
      l:=y+1;
      while (l+1<9) do begin
        inc(l);
        if HPole[x,l]=0 then Break
        else if HPole[x,l]=KamenHrace then Lze:=true
      end
    end;

    if Lze then LzeTahnout:=true;
  end; {policko je (ne)obsazene}
End; {LzeTahnout}


Procedure Zajmuti(HracC:boolean; x,y:byte);
{Zajme nepratelske kameny pri tahu hrace HracC na policku o souradnicich [x,y].}
{Zajate kameny se v HPole prepisou na vlastni kameny hrace a prebarvi se.}
Var KamenHrace, KamenSoupere: 1..2;
Begin
  {urceni cisla kamenu hrace a soupere v matici HPole podle aktualniho hrace}
  if HracC then KamenHrace:=2 else KamenHrace:=1;
  if HracC then KamenSoupere:=1 else KamenSoupere:=2;

  {Z: pri polozeni kamene obarveni kamenu v zapadnim smeru na sachovnici}
  if (y>2) then {na Z je mozne zajmout nejake kameny}
    if HPole[x,y-1]=KamenSoupere then
    {o 1 policko dale ve smeru je nalezen kamen soupere}
      for j:=y-2 downto 1 do {od toho pole dale na okraj sachovnice}
        if (HPole[x,j]=0) then Break
        {je-li nalezeno prazdne policko, zajmuti se nekona}
                          else if HPole[x,j]=KamenHrace then begin
                          {je-li nalezen kamen hrace na [x,j], lze zajmout}
                          {kameny soupere na polich [x,j+1..y-1]}
                            for k:=j+1 to y-1 do begin
                              HPole[x,k]:=KamenHrace; {zajmuti kamene}
                              KresliHKamen(KamenHrace,x,k) {prebarveni na plose}
                            end;
                            Break
                          end;
  {V}
  if (y<7) then
    if HPole[x,y+1]=KamenSoupere then
      for j:=y+2 to 8 do
        if (HPole[x,j]=0) then Break
                          else if HPole[x,j]=KamenHrace then begin
                            for k:=y+1 to j-1 do begin
                              HPole[x,k]:=KamenHrace;
                              KresliHKamen(KamenHrace,x,k)
                            end;
                            Break
                          end;

  {J}
  if (x<7) then
    if HPole[x+1,y]=KamenSoupere then
      for i:=x+2 to 8 do
        if (HPole[i,y]=0) then Break
                          else if HPole[i,y]=KamenHrace then begin
                            for k:=x+1 to i-1 do begin
                              HPole[k,y]:=KamenHrace;
                              KresliHKamen(KamenHrace,k,y)
                            end;
                            Break
                          end;

  {S}
  if (x>2) then
    if HPole[x-1,y]=KamenSoupere then
      for i:=x-2 downto 1 do
        if (HPole[i,y]=0) then Break
                          else if HPole[i,y]=KamenHrace then begin
                            for k:=i+1 to x-1 do begin
                              HPole[k,y]:=KamenHrace;
                              KresliHKamen(KamenHrace,k,y)
                            end;
                            Break
                          end;

  {JV}
  if (x<7) and (y<7) then {na JV je mozne zajmout nejake kameny}
    if HPole[x+1,y+1]=KamenSoupere then begin
    {o 1 policko dale ve smeru je nalezen kamen soupere}
      i:=x+1; j:=y+1; {presun na toto policko}
      while (i<8) and (j<8) do begin {pokud budeme stale na sachovnici}
        inc(i); inc(j); {posun o policko dale ve smeru}
        if (HPole[i,j]=0) then Break
        {je-li nalezeno prazdne policko, zajmuti se nekona}
                          else if HPole[i,j]=KamenHrace then begin
                          {je-li nalezen kamen hrace na [i,j], lze zajmout}
               {kameny soupere na polich [k,l], k=x+1,..,i-1, l=y+1,..,j-1}
                            l:=y;
                            for k:=x+1 to i-1 do begin
                              inc(l);
                              HPole[k,l]:=KamenHrace; {zajmuti kamene}
                              KresliHKamen(KamenHrace,k,l) {prebarveni na herni plose}
                            end;
                            Break
                          end
      end
    end;

  {SZ}
  if (x>2) and (y>2) then
    if HPole[x-1,y-1]=KamenSoupere then begin
      i:=x-1; j:=y-1;
      while (i>1) and (j>1) do begin
        dec(i); dec(j);
        if (HPole[i,j]=0) then Break
                          else if HPole[i,j]=KamenHrace then begin
                            l:=j;
                            for k:=i+1 to x-1 do begin
                              inc(l);
                              HPole[k,l]:=KamenHrace;
                              KresliHKamen(KamenHrace,k,l)
                            end;
                            Break
                          end
      end
    end;

  {SV}
  if (x>2) and (y<7) then
    if HPole[x-1,y+1]=KamenSoupere then begin
      i:=x-1; j:=y+1;
      while (i>1) and (j<8) do begin
        dec(i); inc(j);
        if (HPole[i,j]=0) then Break
                          else if HPole[i,j]=KamenHrace then begin
                            l:=j;
                            for k:=i+1 to x-1 do begin
                              dec(l);
                              HPole[k,l]:=KamenHrace;
                              KresliHKamen(KamenHrace,k,l)
                            end;
                            Break
                          end
      end
    end;

  {JZ}
  if (x<7) and (y>2) then
    if HPole[x+1,y-1]=KamenSoupere then begin
      i:=x+1; j:=y-1;
      while (i<8) and (j>1) do begin
        inc(i); dec(j);
        if (HPole[i,j]=0) then Break
                          else if HPole[i,j]=KamenHrace then begin
                            l:=j;
                            for k:=i-1 downto x+1 do begin
                              inc(l);
                              HPole[k,l]:=KamenHrace;
                              KresliHKamen(KamenHrace,k,l)
                            end;
                            Break
                          end
      end
    end;

End; {Zajmuti}


Procedure StavTlacitek;
{Kosmeticka uprava: zajisteni rozsvicovani napisu tlacitek pri najeti mysi}
{na tlacitka (po startu programu a po vyhodnoceni hry).}
Begin
  if (not NewGameOn) and (sx>67) and (sy>1) and (sx<78) and (sy<6) then begin
    NewGameOn:=true;
    SetColor(15);
    CursorDisable;
    OutTextXY(550,20,'New game');
    CursorEnable
  end
  else if (NewGameOn) and ((sx<=67) or (sy<=1) or (sx>=78) or (sy>=6)) then begin
    NewGameOn:=false;
    SetColor(3);
    CursorDisable;
    OutTextXY(550,20,'New game');
    CursorEnable
  end
  else if (not PlayerOn) and (sx>67) and (sy>6) and (sx<78) and (sy<11) then begin
    PlayerOn:=true;
    SetColor(15);
    CursorDisable;
    SetFillStyle(1, 8);
    Bar(540,50,620,80);
    if not HZmenen then OutTextXY(550,60,'Player 2')
                   else OutTextXY(550,60,'Player 1');
    CursorEnable
  end
  else if (PlayerOn) and ((sx<=67) or (sy<=6) or (sx>=78) or (sy>=11)) then begin
    PlayerOn:=false;
    SetColor(3);
    CursorDisable;
    SetFillStyle(1, 8);
    Bar(540,50,620,80);
    if HZmenen then OutTextXY(550,60,'Player 2')
               else OutTextXY(550,60,'Player 1');
    CursorEnable
  end
  else if (sx>67) and (sy>6) and (sx<78) and (sy<11) and (tlacitka and 1>0) then begin
    if not HZmenen then HZmenen:=true
                   else HZmenen:=false;
    CloseGraph; Init;
    StartHry
  end
  else if (not ExitOn) and (sx>67) and (sy>11) and (sx<78) and (sy<16) then begin
    ExitOn:=true;
    SetColor(15);
    CursorDisable;
    OutTextXY(564,100,'Exit');
    CursorEnable
  end
  else if (ExitOn) and ((sx<=67) or (sy<=11) or (sx>=78) or (sy>=16)) then begin
    ExitOn:=false;
    SetColor(3);
    CursorDisable;
    OutTextXY(564,100,'Exit');
    CursorEnable
  end
End;


Function Vysledek:byte;
{Scita kameny hrace a pocitace na hernim poli. Vraci 1, pokud zvitezil hrac,}
{2, pokud pocitac a 3 pri remize (vitezi hrac s nejvetsim poctem kamenu).}
Begin
  k:=0; {pocet kamenu hrace s kameny 1 v matici HPole}
  l:=0; {pocet kamenu hrace s kameny 2 v matici HPole (pocitac)}
  for i:=1 to 8 do
    for j:=1 to 8 do
      if HPole[i,j]=1 then inc(k)
                      else if HPole[i,j]=2 then inc(l);
  if k>l then Vysledek:=1 {vyhrava hrac}
         else if l>k then Vysledek:=2 {vyhrava pocitac}
                     else Vysledek:=3 {pripadna remiza}
End;


Procedure Vyhodnoceni;
{reprezentuje vysledek hry na obrazovce, zajistuje interaktivitu ovladani}
{i po zobrazeni vyhodnoceni}
Begin
  SetColor(15); {ram pro zobrazeni vyhodnoceni hry}
  SetFillStyle(1, 8);
  Bar(200,434,440,464);
  if Vysledek=1 then {vyhral hrac}
    OutTextXY(250,444,'You are the winner!')
  else if Vysledek=2 then {vyhral pocitac}
    OutTextXY(250,444,'You lost the game!')
  else {remiza}
    OutTextXY(302,444,'Draw!');
  {Zajisteni rozsvicovani napisu tlacitek pri najeti mysi na tlacitka}
  {a pripadneho ukonceni programu pomoci tlacitka 'Exit' nebo klavesy <Esc>}
  {po zobrazeni vyhodnoceni hry:}
  Repeat
    if keypressed then klav:=readkey;
    CtiStav(tlacitka,sx,sy);
    StavTlacitek; {rozsvicovani napisu tlacitek}
    if (sx>67) and (sy>1) and (sx<78) and (sy<6) and (tlacitka and 1>0) then
      Finish:=false {nova hra po stisknuti tlacitka}
    else if (sx>67) and (sy>11) and (sx<78) and (sy<16) and (tlacitka and 1>0) then
      klav:=#27 {ukonceni hry po stisknuti tlacitka 'Exit'}
  Until (not Finish) or (klav=#27) or (keypressed) or (tlacitka and 2>0);
  if klav=#27 then begin {ukonceni po stisknuti <Esc>}
    CursorDisable;
    ClearDevice;
    CloseGraph;
    halt(1)
  end;
  CloseGraph;
  Init;
  StartHry {start dalsi hry}
End;


Procedure Play(sourx,soury:word);
{Kontroluje tah hrace na souradnicich herniho pole [sourx,soury], provadi}
{tah na poli a zajmuti nepratelskych kamenu. Jestlize neexistuje tah hrace,}
{meni hrace. Overuje konec hry, pri ukonceni hry spousti vyhodnoceni.}
Var ExTahHrace: boolean;
Begin
  ExTahHrace:=false; {predpokladame, ze neexistuje tah dalsiho hrace}
  if HracC then begin {hraje pocitac, tah je urcite proveditelny}
    HPole[sourx,soury]:=2; {umisteni kamene (2) do HPole}
    KresliHKamen(2,sourx,soury); {nakresleni na herni plochu}
    Zajmuti(HracC,sourx,soury); {zajmuti kamenu soupere}
    HracC:=false; {zmena hrace; je nutna az zde po provedeni predchozich kroku}
    for i:=1 to 8 do if ExTahHrace then Break else
    for j:=1 to 8 do if ExTahHrace then Break else
      if LzeTahnout(HracC,i,j) then ExTahHrace:=true;
      {pokud existuje alespon jeden tah hrace, hrac muze priste hrat}
    if not ExTahHrace then HracC:=true {jinak priste hraje opet pocitac}
  end
  else {hraje hrac}
  if LzeTahnout(HracC,sourx,soury) then begin {pokud je tah proveditelny}
    HPole[sourx,soury]:=1;
    KresliHKamen(1,sourx,soury);
    Zajmuti(HracC,sourx,soury);
    HracC:=true;
    delay(prodleva) {esteticka prodleva, aby hrac videl, kam tahnul, nez
    mu pocitac kamen prebarvi}
  end;
  if (not ExTahHrace) then begin
    Finish:=true; {ukonceni hry}
    for i:=1 to 8 do if not Finish then Break else
      for j:=1 to 8 do if not Finish then Break else begin
        {jestlize na sachovnici ex. tah jednoho z hracu, hra nebude ukoncena}
        if LzeTahnout(Finish,i,j) then Finish:=false;
        if LzeTahnout(not Finish,i,j) then Finish:=false
      end;
    if Finish then Vyhodnoceni
  end
End;


Procedure TahPocitace;
{zjistuje optimalni tah pocitace pomoci Ohodnoceni, pokud ex. vice moznosti,}
{tah je z nich vybran nahodne}
Var max, PocetTahu:byte;
Begin
  max:=0; {maximalni ohodnoceni tahu pocitace}
  PocetTahu:=0; {pocet tahu s nejvyssim ohodnocenim}
  {nalezeni tahu s nejvetsi prioritou podle Ohodnoceni:}
  for i:=1 to 8 do
    for j:=1 to 8 do begin
      if LzeTahnout(HracC,i,j) then begin
        Tahy[i,j]:=2; {ulozeni mozneho tahu do tabulky tahu}
        if Ohodnoceni[i,j]>max then begin {nalezeni tahu s lepsim ohodnocenim}
          max:=Ohodnoceni[i,j];
          PocetTahu:=1;
          sourx:=i;
          soury:=j
        end
        else if Ohodnoceni[i,j]=max then inc(PocetTahu)
        {nalezli jsme dalsi tah s maximalnim ohodnocenim}
      end
      else Tahy[i,j]:=0
    end;
  Randomize;
  if max>0 then begin {jestlize byl nalezen tah pocitace}
    if PocetTahu>1 then begin {jestlize existuje vice optimalnich tahu}
      k:=Random(PocetTahu);
      inc(k); {k je nahodne cislo jednoho z nejlepsich tahu}
      l:=0;
      for i:=1 to 8 do
        for j:=1 to 8 do
          if (Tahy[i,j]=2) and (Ohodnoceni[i,j]=max) then begin
            inc(l);
            if l=k then begin {nalezeni k-teho nejlepsiho tahu v Ohodnoceni}
              sourx:=i; {souradnice nahodneho tahu s nejlepsim ohodnocenim}
              soury:=j
            end
          end
    end;
    Play(sourx,soury) {provedeni tahu pocitace}
  end
  else HracC:=false
  {jestli nebyl nalezen tah pocitace, pocitac nehraje a na tahu je hrac}
End;


{TELO PROGRAMU: ************************************************************}
Begin
  {vyplneni tabulky ohodnoceni tahu}
  Ohodnoceni[1,1]:=100; {rohy maji velky strategicky vyznam}
  Ohodnoceni[1,8]:=100;
  Ohodnoceni[8,1]:=100;
  Ohodnoceni[8,8]:=100;
  Ohodnoceni[1,2]:=2; {prime okoli rohu neni proto vyhodne}
  Ohodnoceni[2,1]:=2;
  Ohodnoceni[1,7]:=2;
  Ohodnoceni[2,8]:=2;
  Ohodnoceni[7,1]:=2;
  Ohodnoceni[8,2]:=2;
  Ohodnoceni[7,8]:=2;
  Ohodnoceni[8,7]:=2;
  Ohodnoceni[2,2]:=1;
  Ohodnoceni[2,7]:=1;
  Ohodnoceni[7,2]:=1;
  Ohodnoceni[7,7]:=1;
  for j:=3 to 6 do begin
    Ohodnoceni[1,j]:=50; {zbyle kraje jsou take vyznamne}
    Ohodnoceni[8,j]:=50;
    Ohodnoceni[2,j]:=5; {policka u kraju krome rohovych pozic}
    Ohodnoceni[7,j]:=5
  end;
  for i:=3 to 6 do begin
    Ohodnoceni[i,1]:=50;
    Ohodnoceni[i,8]:=50;
    Ohodnoceni[i,2]:=5;
    Ohodnoceni[i,7]:=5
  end;
  for i:=3 to 6 do {stred pole 4x4}
    for j:=3 to 6 do Ohodnoceni[i,j]:=10;
  Ohodnoceni[3,3]:=30; {rohy stredu pole}
  Ohodnoceni[3,6]:=30;
  Ohodnoceni[6,3]:=30;
  Ohodnoceni[6,6]:=30;
  Ohodnoceni[1,3]:=60; {krajni pole 2 policka od rohu}
  Ohodnoceni[1,6]:=60;
  Ohodnoceni[3,1]:=60;
  Ohodnoceni[3,8]:=60;
  Ohodnoceni[6,1]:=60;
  Ohodnoceni[6,8]:=60;
  Ohodnoceni[8,3]:=60;
  Ohodnoceni[8,6]:=60;
  CursorEnable; {zobrazeni kurzoru mysi}
  Init; {inicializace nove hry}
  HZmenen:=false; {jako prvni hraje standardne pocitac}
  StartHry;
  {Zajisteni rozsvicovani napisu tlacitek pri najeti mysi na tlacitka}
  {a pripadneho ukonceni programu pomoci tlacitka 'Exit' nebo klavesy <Esc>}
  {po startu hry:}
  Repeat
    if HracC=false then begin {pokud hraje hrac}
      if keypressed then klav:=readkey;
      CtiStav(tlacitka,sx,sy);
      StavTlacitek; {rozsvicovani napisu tlacitek}
      if (sx>67) and (sy>1) and (sx<78) and (sy<6) and (tlacitka and 1>0) then begin
        CloseGraph; Init;
        StartHry {start nove hry po stisknuti 'New game'}
      end
      else if not Finish and (sx>16) and (sx<65) and (sy>5) and (sy<54) and
      (tlacitka and 1>0) then begin {pri kliknuti na herni plochu}
        {prevod souradnic mysi na souradnice policka v hracim poli}
        k:=trunc((sx*7.9-128)/48+1);
        sourx:=trunc((sy*7.8-38)/48+1); {x-ova souradnice policka}
        soury:=k;
        Play(sourx,soury) {provedeni tahu hrace}
      end
    end
    else TahPocitace {hraje pocitac}
  Until (klav=#27) or ((sx>67) and (sy>11) and (sx<78) and (sy<16) and (tlacitka and 1>0));
  {program bezi dokud neni stisknuto tlacitko 'Exit' nebo <Esc>}
  CursorDisable;
  ClearDevice;
  CloseGraph
End.


Offline

Užívateľ
Užívateľ
myš v pascale nefunguje

Registrovaný: 19.09.06
Prihlásený: 17.01.24
Príspevky: 749
Témy: 31
Bydlisko: Ružomberok&...
Príspevok NapísalOffline : 07.10.2008 17:11

v pascale nie je vstavana mys priamo, cize mas 2 moznosti
1.: vyuzijes kniznicu, ktoru naprogramoval niekto pred tebou a riadne prestudujes dokumentaciu jej funkcii
2.: pomocou inline assembleru a prerusenia 33h vytvoris vlastne trivialne funkcie na pracu s mysou.
funkcia cursordisable by sa dala nahradit funkciou
asm
mov ax,$0002
int $33
end;
a takymito kratkymi funkciami sa daju nahradit vsetky.
http://www.geocities.com/SiliconValley/ ... 33list.htm
na tejto stranke su vsetky "podfunkcie" prerusenia 33h.
mam vistu, cize sa mozem mylit, ale praca s grafikou sa da riesit pomocou prerusenia - http://en.wikipedia.org/wiki/INT_10.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 07.10.08
Prihlásený: 07.10.08
Príspevky: 2
Témy: 1
Príspevok Napísal autor témyOffline : 07.10.2008 19:37

thx for help


Odpovedať na tému [ Príspevkov: 3 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje myš

v Externé zariadenia

1

747

15.03.2011 7:25

tiktak1953 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje myš

v Ostatné

2

310

07.06.2020 8:33

Peter Kopor Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mys nefunguje spravne

v Externé zariadenia

1

490

13.04.2020 19:57

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje myš ani klavesnica

v Antivíry a antispywary

19

512

29.08.2023 15:58

4040 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Po reinštalácii AMD Driverov nefunguje myš

v Externé zariadenia

0

413

24.03.2012 18:46

kacenak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PS/2 myš nefunguje pod Vistou

v Ostatné

4

816

26.05.2008 16:27

prandof Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje klavesnica a mys (Bluetooth napájanie)

v Ostatné

2

756

07.02.2014 16:24

KocuR Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Myš habu Microsoft + Razer - po zapojeni nefunguje

v Externé zariadenia

2

649

25.07.2008 14:50

Thor Steinar Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. USB3.0 nefunguje ako má, Myš a klávesnica v USB2.0 seká

v Intel čipové sady

16

1278

08.02.2013 13:58

ujo zigo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Windows 10 - neviem odomknut windows, nefunguje klavesnica ani mys, v BIOSE funguju

v Operačné systémy Microsoft

11

1039

28.04.2021 8:28

4040 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje ziadna USB klavesnica ani ziadna USB mys

v Externé zariadenia

1

952

20.10.2011 22:03

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. program v pascale

v Ponuka práce

4

1091

03.04.2009 22:05

bbeni Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Programovanie v Pascale

v Ostatné

7

544

05.11.2018 21:07

kikuska222 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zadanie v pascale

v Assembler, C, C++, Pascal, Java

15

1476

04.10.2008 17:40

dsljohn Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hra v pascale

v Assembler, C, C++, Pascal, Java

4

1120

11.01.2009 17:49

programator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Program v pascale

v Assembler, C, C++, Pascal, Java

2

499

23.11.2011 13:25

jojinkho Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra