Skip to content

Instantly share code, notes, and snippets.

@vvondra
Created February 23, 2011 22:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vvondra/841353 to your computer and use it in GitHub Desktop.
Save vvondra/841353 to your computer and use it in GitHub Desktop.
program lodky;
uses crt;
type HraciPole = array[0..11,0..11] of byte;
var pole: HraciPole;
polesuper: HraciPole;
i,j,y,rota: byte;
x: char;
input: string;
nextX, nextY: shortint;
zasah: boolean; // Pokud je tah true, tak je pocitac v rezimu strileni kolem pole
zasahSmer: byte; // Pokud pocitac zkousi tahy okolo, toto je posledni smer (po smeru hodinovych rucicek), kam zkousel strilet okolo zasahu
zasahX: byte; // Souradnice posledniho zasahu pocitace
zasahY: byte;
napoveda:char;
pismenko: array[1..10] of char;
hlaska,hlaska2: string;
tvojezasahy,jehozasahy: byte;
farba,farba2:byte;
{.... blablabla ...}
procedure tahPocitace;
begin
// Pokud jsme v rezimu, ze strilime okolo daneho pole, tak zkousime okolni
if zasah then
begin
// zkousim strilet do kola na pole ktere jsem jeste nemel
while true do
begin
case zasahSmer of
0: begin // zkousim strilet nahoru
if (zasahX = 1) or (pole[zasahX-1,zasahY] = 3) or (pole[zasahX-1,zasahY] = 2) then break; // na minus prvni radek strilet nejde nebo uz jsme na pole strileli
if pole[zasahX-1,zasahY] = 1 then // trefa
begin
pole[zasahX-1,zasahY] := 3;
zasah := false;
zd;
exit;
end;
if pole[zasahX-1,zasahY] = 0 then //chyba
begin
pole[zasahX-1,zasahY] := 2;
npc;
end;
end;
1: begin // zkousim strilet doprava
if (zasahY = 10) or (pole[zasahX,zasahY+1] = 3) or (pole[zasahX,zasahY+1] = 2) then break; // na minus prvni radek strilet nejde nebo uz jsme na pole strileli
if pole[zasahX,zasahY+1] = 1 then // trefa
begin
pole[zasahX,zasahY+1] := 3;
zasah := false;
zd;
exit;
end;
if pole[zasahX,zasahY+1] = 0 then //chyba
begin
pole[zasahX,zasahY+1] := 2;
npc;
end;
end;
2: begin // zkousim strilet dolu
if (zasahX = 10) or (pole[zasahX+1,zasahY] = 3) or (pole[zasahX+1,zasahY] = 2) then break; // na minus prvni radek strilet nejde nebo uz jsme na pole strileli
if pole[zasahX+1,zasahY] = 1 then // trefa
begin
pole[zasahX+1,zasahY] := 3;
zasah := false;
zd;
exit;
end;
if pole[zasahX+1,zasahY] = 0 then //chyba
begin
pole[zasahX+1,zasahY] := 2;
npc;
end;
end;
3: begin // zkousim strilet doleva
if (zasahY = 1) or (pole[zasahX,zasahY-1] = 3) or (pole[zasahX,zasahY-1] = 2) then break; // na minus prvni radek strilet nejde nebo uz jsme na pole strileli
if pole[zasahX,zasahY-1] = 1 then // trefa
begin
pole[zasahX,zasahY-1] := 3;
zasah := false;
zd;
exit;
end;
if pole[zasahX,zasahY-1] = 0 then //chyba
begin
pole[zasahX,zasahY-1] := 2;
npc;
end;
end;
end;
inc(zasahSmer);
if zasahSmer = 0 then
begin
zasah := false;
break;
end;
end;
exit;
end;
{Tah pocitaca}
if pole[nextX,nextY] = 0 then
begin
pole[nextX,nextY] := 2;
zasah := false;
npc;
end;
if pole[nextX,nextY] = 1 then
begin
pole[nextX,nextY] := 3;
zasah := true;
zasahSmer := 0;
zasahX := nextX;
zasahY := nextY;
zd;
end;
{Vypocitanie dalsieho policka pre mriezkovu strategiu}
if nextY > 8 then
begin
inc(nextX, 2);
nextY := (nextX mod 2) - 2;
if nextY = -2 then nextY := 0;
end;
if nextX = 11 then
begin
nextX := 2;
nextY := 0;
end;
inc(nextY, 2);
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment