[ 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 | 1
NapísalOffline : 07.10.2008 16:11 | myš v pascale nefunguje

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ý: 06.03.21
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 07.10.2008 17:11 | myš v pascale nefunguje

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 | 1
Napísal autor témyOffline : 07.10.2008 19:37 | myš v pascale nefunguje

thx for help


 [ Príspevkov: 3 ] 


myš v pascale nefunguje



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

606

15.03.2011 7:25

tiktak1953

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

Nefunguje myš

v Ostatné

2

144

07.06.2020 8:33

Peter Kopor

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

Mys nefunguje spravne

v Externé zariadenia

1

170

13.04.2020 19:57

shiro

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

Po reinštalácii AMD Driverov nefunguje myš

v Externé zariadenia

0

305

24.03.2012 18:46

kacenak

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

Nefunguje klavesnica a mys (Bluetooth napájanie)

v Ostatné

2

534

07.02.2014 16:24

KocuR

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

PS/2 myš nefunguje pod Vistou

v Ostatné

4

691

26.05.2008 16:27

prandof

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

Myš habu Microsoft + Razer - po zapojeni nefunguje

v Externé zariadenia

2

524

25.07.2008 14:50

Thor Steinar

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

951

08.02.2013 13:58

ujo zigo

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

285

28.04.2021 8:28

4040

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

Nefunguje ziadna USB klavesnica ani ziadna USB mys

v Externé zariadenia

1

730

20.10.2011 22:03

michalesku

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

program v pascale

v Ponuka práce

4

997

03.04.2009 22:05

bbeni

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

Zadanie v pascale

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

15

1362

04.10.2008 17:40

dsljohn

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

Hra v pascale

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

4

1024

11.01.2009 17:49

programator

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

program v pascale

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

0

387

24.03.2011 19:42

roxor

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

zahada v pascale

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

3

448

23.02.2008 9:59

Aries

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

grafika v pascale

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

4

1654

27.02.2008 20:45

martin90



© 2005 - 2021 PCforum, edited by JanoF