Skip to content

Instantly share code, notes, and snippets.

@iiic
Created June 8, 2010 18:50
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 iiic/430467 to your computer and use it in GitHub Desktop.
Save iiic/430467 to your computer and use it in GitHub Desktop.
Hra 'lodě' v Delphi
program Lode;
uses
Forms,
Lode_f in 'Lode_f.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
object Form1: TForm1
Left = 192
Top = 107
BorderStyle = bsSingle
Caption = 'N'#225'mo'#345'n'#237' bitva'
ClientHeight = 404
ClientWidth = 677
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
OnActivate = HrajePocitac
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 0
Top = 0
Width = 96
Height = 16
AutoSize = True
Picture.Data = {
07544269746D617032030000424D320300000000000076000000280000006000
0000100000000100040002000000BC0200007412000074120000000000000000
0000C0C0C00080008000808080000080000080800000000000000000F8008000
0000F8000000F8F8F80000000000000000000000000000000000000000000000
0000302202020E2202020E2202020E2200000E0002020E0002020E0000040290
0E2202900E2202900E2200000E00000602066000080000086602066408440008
6602990408440006402299000C00000422990C00022200000E00000602066600
0600000A06660206660006440008466602990C44000422990C00000422990C00
022200000E000008020066600400000C66600204666404440008666402990C44
00042299040004330400000422990C0002220000060000049990040000240200
066600066600020446664446664402990C44000422990C00000422990C000222
00000400000609000900040002020400001E6660666000020444666466644402
99000C4400082299003004000008030022990C00022200000400029004000006
90000200040002060466040000080204444604660444000402990C4400142299
00300330030022990C0002220000040002900400000690000200060000046660
0400000402040444000466640444000402990C44001422990030033003002299
0C00022200000400029004000006900002000400020604660400000802044446
04660444000402990C4400082299003004000008030022990C00022200000400
000609000900040002020400001E666066600002044466646664440299000C44
000422990C00000422990C000222000006000004999004000024020006660006
6600020446664446664402990C4400042299040004330400000422990C000222
00000E000008020066600400000C66600204666404440008666402990C440004
22990C00000422990C00022200000E000006020666000600000A066602066600
0644000A46660299040008440006402299000C00000422990C00022200000E00
00060206600008000008660206640844000466020E9902020E9902020E990202
00000E0002020E0002020E0002020E9902900E9902900E99029000000001}
Visible = False
end
object Label1: TLabel
Left = 8
Top = 312
Width = 334
Height = 29
Caption = '^ Vyst'#345'el do nep'#345#225'telsk'#253'ch vod !'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -23
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object BitBtn1: TBitBtn
Left = 240
Top = 344
Width = 75
Height = 25
Caption = 'nov'#225' h&ra'
TabOrder = 0
OnClick = BitBtn1Click
Kind = bkRetry
end
object BitBtn2: TBitBtn
Left = 360
Top = 344
Width = 75
Height = 25
Caption = 'U&kon'#269'it'
TabOrder = 1
Kind = bkClose
end
object StatusBar1: TStatusBar
Left = 0
Top = 385
Width = 677
Height = 19
Panels = <
item
Width = 50
end>
SimplePanel = True
end
object GroupBox1: TGroupBox
Left = 5
Top = 5
Width = 330
Height = 310
Caption = 'Lod'#283' po'#269#237'ta'#269'e'
TabOrder = 3
object Image2: TImage
Left = 5
Top = 15
Width = 0
Height = 0
ParentShowHint = False
ShowHint = True
OnMouseDown = Image2MouseDown
end
end
object GroupBox2: TGroupBox
Left = 340
Top = 5
Width = 330
Height = 310
Caption = 'Moje Lo'#271'stvo'
TabOrder = 4
object Image3: TImage
Left = 5
Top = 15
Width = 0
Height = 0
end
end
object MainMenu1: TMainMenu
Left = 320
Top = 344
object Hra: TMenuItem
Caption = '&Hra'
object Novhra1: TMenuItem
Caption = '&Nov'#225' hra'
OnClick = BitBtn1Click
end
object N1: TMenuItem
Caption = '-'
end
object Konec1: TMenuItem
Caption = '&Konec'
OnClick = Konec1Click
end
end
object Nastaven1: TMenuItem
Caption = 'Na&staven'#237
object Obtnost1: TMenuItem
Caption = 'Obt'#237#382'nost'
object ICanWin1: TMenuItem
AutoCheck = True
Caption = 'I Can Win'
GroupIndex = 8
RadioItem = True
end
object BringItOn1: TMenuItem
AutoCheck = True
Caption = 'Bring It On'
Checked = True
GroupIndex = 8
RadioItem = True
end
object HurtMePlanty1: TMenuItem
AutoCheck = True
Caption = 'Hurt Me Planty'
GroupIndex = 8
RadioItem = True
end
object Hardcore1: TMenuItem
AutoCheck = True
Caption = 'Hardcore'
GroupIndex = 8
RadioItem = True
end
object Nightmare1: TMenuItem
AutoCheck = True
Caption = 'Nightmare'
GroupIndex = 8
RadioItem = True
end
end
end
object Oaplikaci1: TMenuItem
Caption = '&N'#225'pov'#283'da'
object Pravidlahry1: TMenuItem
Caption = 'Pravidla &hry'
OnClick = Pravidlahry1Click
end
object N2: TMenuItem
Caption = '-'
end
object Zdrojovkdy1: TMenuItem
Caption = 'Zdrojov'#233' k'#243'dy'
OnClick = Zdrojovkdy1Click
end
object Oaplikaci2: TMenuItem
Caption = 'O &aplikaci'
OnClick = Oaplikaci2Click
end
end
end
end
{*
Pokyny ke zpracování:
1.Hra bude realizována jako člověk proti počítači.
2.Velikost hracího pole i počet a tvar lodí si určete sami.
3.V průběhu hry se bude zobrazovat její stav (uhádnutá část soupeřova moře, pokyn ke střelbě,atd.).
4.Ovládání (střílení na pozice) realizujte pomocí myši. Zadávání souřadnic ručně by bylo uživatelsky nepřívětivé.
5.Kdykoliv je možné začít hrát novou hru nebo ukončit aplikaci
6.Umožněte uživateli přečíst si pravidla hry
7.Po ukončení hra zobrazí výsledek = kdo vyhrál
8.Grafické ztvárnění a ostatní ovládací prvky dle fantazie autora (programátora)
Kolik programovacích jazyků umíš tolikrát jsi člověkem. -- @otoman70
*}
unit Lode_f;
interface
uses// Běžní lidé píšou knihy, programátoři knihovny -- @eliskah
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, Buttons, ComCtrls, ShellApi;
// globální konstanty
const sirka = 20;
vyska = 18;
velikost = 16;// velikost čtverce s obrázkem
delkaLodi0 = 8;
delkaLodi1 = 5;
delkaLodi2 = 5;
delkaLodi3 = 3;
delkaLodi4 = 3;
delkaLodi5 = 2;
delkaLodi6 = 1;
delkaLodi7 = 1;
delkaLodi8 = 4;
delkaLodi9 = 8;
delkaLodi10 = 5;
// .
// .
// .
type
TPolicko = class
x,y:integer;// souřadnice políčka x,y
Lod,kliknuto,oznaceno:bool;
constructor Init(x,y:integer);// konstruktor provádějící inicializaci
function najdiPridVraku:string;
end;
TPole = array of array of TPolicko;// dvourozměrné pole s neurčitým počtem prvků
TPoleVedle = array of array of TPolicko;
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
MainMenu1: TMainMenu;
Hra: TMenuItem;
Novhra1: TMenuItem;
N1: TMenuItem;
Konec1: TMenuItem;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
StatusBar1: TStatusBar;
GroupBox1: TGroupBox;
Nastaven1: TMenuItem;
Oaplikaci1: TMenuItem;
Pravidlahry1: TMenuItem;
N2: TMenuItem;
Oaplikaci2: TMenuItem;
GroupBox2: TGroupBox;
Zdrojovkdy1: TMenuItem;
Obtnost1: TMenuItem;
HurtMePlanty1: TMenuItem;
Hardcore1: TMenuItem;
Nightmare1: TMenuItem;
BringItOn1: TMenuItem;
ICanWin1: TMenuItem;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure NovaHra;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; x, y: integer);
procedure Konec1Click(Sender: TObject);
function kolizniKurz(x,y,vypluloLodi,i,znova:integer):bool;
procedure Zdrojovkdy1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Oaplikaci2Click(Sender: TObject);
procedure Pravidlahry1Click(Sender: TObject);
procedure HrajePocitac(Sender: TObject);
private
public// globální proměnné
poleLodi : array[0..7] of byte;
silaCizihoLodstva,silaVlastnihoLodstva,obtiznost:byte;
konechry,prvniKrok:bool;
end;
var
Form1: TForm1;
CiziPole:TPole;
VlastniPole:TPoleVedle;
implementation
{$R *.dfm}
constructor TPolicko.Init(x,y:integer);// metoda konstruktor - nastaví defaultní hodnoty
begin
self.x := x;
self.y := y;
self.Lod := false;
self.Kliknuto := false;
self.Oznaceno := false;
end;
procedure TForm1.FormCreate(Sender: TObject);
var x,y:integer;
begin
randomize;
SetLength(CiziPole,sirka,vyska);// nastaví délku pole
SetLength(VlastniPole,sirka,vyska);// nastaví délku pole
for x := 0 to sirka - 1 do
for y := 0 to vyska - 1 do
begin
CiziPole[x,y] := TPolicko.Init(x,y);// inicializace prvků v poli
VlastniPole[x,y] := TPolicko.Init(x,y);
end;
NovaHra;// rozjede novou hru
end;
procedure TForm1.HrajePocitac(Sender: TObject);
var pokusy:byte;
var stopka:bool;
var x,y:integer;
begin
stopka := false;
if(prvniKrok) then
begin
if (MessageDlg(' Kdo bude hrát první'+#13+'---------------------------------'+#13+#13+'Chceš výhodu prvního tahu?',MtConfirmation,[mbyes,mbno],0) = mryes) then stopka := true;
prvniKrok := false;
end;
if not (stopka) then
begin
pokusy := 0;
repeat
x := random(sirka);
y := random(vyska);
inc(pokusy);
until( (not VlastniPole[x,y].Kliknuto) and ( ((x mod 2)=1) and ((y mod 2)=0) or (pokusy = 3) ) and ((random(obtiznost)=1) or (VlastniPole[x,y].Lod)) ); //počítač cheatuje!
VlastniPole[x,y].Kliknuto := true;
if(VlastniPole[x,y].Lod) then
begin
silaVlastnihoLodstva := silaVlastnihoLodstva-1;
if(y>0) then VlastniPole[x,(y-1)].Kliknuto := true;
if(y<(vyska-1)) then VlastniPole[x,(y+1)].Kliknuto := true;
if( (x<sirka-1) and (VlastniPole[(x+1),y].Kliknuto) ) then
begin
if(y>0) then VlastniPole[(x+1),(y-1)].Kliknuto:= true;
if(y<(vyska-1)) then VlastniPole[(x+1),(y+1)].Kliknuto:= true;
end;
if( (x>0) and (VlastniPole[(x-1),y].Kliknuto) ) then
begin
if(y>0) then VlastniPole[(x-1),(y-1)].Kliknuto:= true;
if(y<(vyska-1)) then VlastniPole[(x-1),(y+1)].Kliknuto:= true;
end;
Image3.Canvas.CopyRect(Rect(x*velikost-1,y*velikost-1,(x+1)*velikost-1,(y+1)*velikost-1),Image1.Canvas,Rect(1*velikost,0,2*velikost,velikost));
end
else
begin
Image3.Canvas.CopyRect(Rect(x*velikost-1,y*velikost-1,(x+1)*velikost-1,(y+1)*velikost-1),Image1.Canvas,Rect(0*velikost,0,1*velikost,velikost));
end;
end;
if silaVlastnihoLodstva = 0 then// kontrola vítězství
begin
konechry := true;// konec hry
if messagedlg('Bohužel, prohrál jsi!,'+#13+'dáme ještě jednu hru?',mtCustom,[mbYes,mbNo],0) = mryes then Novahra;// dotaz na novou hru
end;
end;
procedure TForm1.NovaHra;
var i,j,znova,x,y,vypluloLodi:integer;// řídící proměnné cyklu
var pridlodi:array[0..2] of byte;
var druheKolo:bool;
begin
poleLodi[0] := delkaLodi0;// délky lodí z jejich konstant
poleLodi[1] := delkaLodi1;
poleLodi[2] := delkaLodi2;
poleLodi[3] := delkaLodi3;
poleLodi[4] := delkaLodi4;
poleLodi[5] := delkaLodi5;
poleLodi[6] := delkaLodi6;
poleLodi[7] := delkaLodi7;
if(Obtnost1.Items[0].Checked) then obtiznost := 2;// naplnění obtížnosti podle zvolené položky menu
if(Obtnost1.Items[1].Checked) then obtiznost := 3;
if(Obtnost1.Items[2].Checked) then obtiznost := 5;
if(Obtnost1.Items[3].Checked) then obtiznost := 8;
if(Obtnost1.Items[4].Checked) then obtiznost := 13;
//Fibonacci ty se zase opiješ jako hovado!
silaVlastnihoLodstva := 0;
silaCizihoLodstva := 0;
prvniKrok := true;
for x := 0 to sirka - 1 do// vynulování starých hodnot
for y := 0 to vyska - 1 do
begin
CiziPole[x,y].Kliknuto := false;
CiziPole[x,y].Lod := false;
CiziPole[x,y].Oznaceno := false;
VlastniPole[x,y].Kliknuto := false;
VlastniPole[x,y].Lod := false;
VlastniPole[x,y].Oznaceno := false;
end;
Image2.Width := sirka*velikost-1;// nastavení rozměrů obrázku v závislosti na velikosti pole
Image2.Height := vyska*velikost-1;
Image3.Width := sirka*velikost-1;// rovné pole pro všechny
Image3.Height := vyska*velikost-1;
for x := 0 to sirka - 1 do
for y := 0 to vyska - 1 do
begin
Image2.Canvas.CopyRect(Rect(velikost*x-1,velikost*y-1,velikost*(x+1)-1,velikost*(y+1)-1),Image1.Canvas,Rect(5*velikost,0,6*velikost,velikost));// rozkopírování políček z obrázku Image1 na Image2
Image3.Canvas.CopyRect(Rect(velikost*x-1,velikost*y-1,velikost*(x+1)-1,velikost*(y+1)-1),Image1.Canvas,Rect(5*velikost,0,6*velikost,velikost));// rozkopírování políček z obrázku Image1 na Image3
end;
druheKolo := false;
for j:=0 to 1 do
begin
for vypluloLodi := 0 to Length(poleLodi)-1 do
begin
x := random(sirka);
y := random(vyska);
i := 0;
repeat
if(druheKolo) then
znova := 1
else
znova := 0;
if(kolizniKurz(x,y,vypluloLodi,i,znova)) then
begin
x := random(sirka);
y := random(vyska);
i := 0;
continue;
end;
if(i=0) then
begin
pridLodi[0] := x;
pridLodi[1] := y;
pridLodi[2] := 1;// @todo orientace lodi
end;
inc(i);
inc(x);
until (i >= poleLodi[vypluloLodi]);// true opakuje cyklus
for i := 1 to poleLodi[vypluloLodi] do
begin
if (druheKolo) then
begin
VlastniPole[pridLodi[0],pridLodi[1]].Lod := true;// umístění lodě na políčko
Image3.Canvas.CopyRect(Rect(velikost*pridLodi[0]-1,velikost*pridLodi[1]-1,velikost*(pridLodi[0]+1)-1,velikost*(pridLodi[1]+1)-1),Image1.Canvas,Rect(3*velikost,0,4*velikost,velikost));// cheat
end
else
begin
CiziPole[pridLodi[0],pridLodi[1]].Lod := true;// umístění lodě na políčko
//Image2.Canvas.CopyRect(Rect(velikost*pridLodi[0]-1,velikost*pridLodi[1]-1,velikost*(pridLodi[0]+1)-1,velikost*(pridLodi[1]+1)-1),Image1.Canvas,Rect(3*velikost,0,4*velikost,velikost));// cheat
end;
pridLodi[0] := pridLodi[0]+1;
end;
silaCizihoLodstva := silaCizihoLodstva+poleLodi[vypluloLodi];
end;
druheKolo := true;
end;//konec druhého kola
silaCizihoLodstva := (silaCizihoLodstva div 2);// cyklus proběhl 2x (pro obě pole) takže nejjednodužší bude dělit počet lodí 2.
silaVlastnihoLodstva := silaCizihoLodstva;// bude to těžký boj
StatusBar1.SimpleText := 'Hrajem ! Síla nepřátelsného loďstva: '+inttostr(silaCizihoLodstva);// výpis informací do statusu
konechry := false;
if (Form1.Active) then HrajePocitac(nil);// Form1.Active vrací false pokud se formulář právě vytvořil (pravděpodobně)
Label1.Visible := true;// ukáže popisek aby každý věděl kam klikat
end;
function TForm1.kolizniKurz(x,y,vypluloLodi,i,znova:integer):bool;
begin
Result := false;
if (x+poleLodi[vypluloLodi]-i > sirka) then Result := true;// loď přepadá svým koncem přes okraj světa
if(znova=0) then
begin
if (CiziPole[x,y].Lod) then Result := true;// lepení přídě na příď je přísně zakázáno
if ( (y>0) and (CiziPole[x,(y-1)].Lod) ) then Result := true;// ^
if ( (x<sirka-1) and (y>0) and (CiziPole[(x+1),(y-1)].Lod) ) then Result := true;// ^>
if ( (x<sirka-1) and (CiziPole[(x+1),y].Lod) ) then Result := true;// >
if ( (x<sirka-1) and (y<vyska-1) and (CiziPole[(x+1),(y+1)].Lod) ) then Result := true;// >v
if ( (y<vyska-1) and (CiziPole[x,(y+1)].Lod) ) then Result := true;// v
if ( (x>0) and (y<vyska-1) and (CiziPole[(x-1),(y+1)].Lod) ) then Result := true;// v<
if ( (x>0) and (CiziPole[(x-1),y].Lod) ) then Result := true;// <
if ( (x>0) and (y>0) and (CiziPole[(x-1),(y-1)].Lod) ) then Result := true;// <^
end
else
begin
if (VlastniPole[x,y].Lod) then Result := true;// lepení přídě na příď je přísně zakázáno
if ( (y>0) and (VlastniPole[x,(y-1)].Lod) ) then Result := true;// ^
if ( (x<sirka-1) and (y>0) and (VlastniPole[(x+1),(y-1)].Lod) ) then Result := true;// ^>
if ( (x<sirka-1) and (VlastniPole[(x+1),y].Lod) ) then Result := true;// >
if ( (x<sirka-1) and (y<vyska-1) and (VlastniPole[(x+1),(y+1)].Lod) ) then Result := true;// >v
if ( (y<vyska-1) and (VlastniPole[x,(y+1)].Lod) ) then Result := true;// v
if ( (x>0) and (y<vyska-1) and (VlastniPole[(x-1),(y+1)].Lod) ) then Result := true;// v<
if ( (x>0) and (VlastniPole[(x-1),y].Lod) ) then Result := true;// <
if ( (x>0) and (y>0) and (VlastniPole[(x-1),(y-1)].Lod) ) then Result := true;// <^
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);// hromadné uvlonění z paměti
var x,y:byte;
begin
for x := 0 to sirka - 1 do
for y := 0 to vyska - 1 do
begin
CiziPole[x,y].Free;
VlastniPole[x,y].Free;
end;
CiziPole := nil;
VlastniPole := nil;
end;
function TPolicko.najdiPridVraku:string;
var i,j,k:integer;
begin
i := 0;
repeat
inc(i);
until( ((x-i)<0) or not (CiziPole[(x-i),y].Lod) );
j := x-i+1;// x-ová souřadnice přídi lodi
i := 0;
k := 1;
repeat
if (CiziPole[(j+i),y].Kliknuto) then inc(k);
inc(i);
until( ((j+i)>(sirka-1)) or not CiziPole[(j+i),y].Lod );
if( i=k ) then
Result := inttostr(i)+'|'+inttostr(j)// kéž bych věděl jak vrátit pole
else
Result := 'null';
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var sx,sy,i:integer;
var pokusy:byte;
var vrakLodi:string;
begin
sx:= x div velikost;// zjištění souřadnic zmáčknutého políčka
sy:= y div velikost;
if(Label1.Visible) then Label1.Visible := false;
if ( (not CiziPole[sx,sy].Kliknuto) and (not konechry) ) then// musíme zkontrolovat, zda-li již není políčko označené a zda-li není konec hry
begin
if (Button = mbLeft) then// pokud se stříli ostrejma
begin
if(CiziPole[sx,sy].Lod) then
begin
silaCizihoLodstva := silaCizihoLodstva-1;
vrakLodi := CiziPole[sx,sy].najdiPridVraku;// vrací string int(délka lodi)|int(x-ová souřadnice přídi)
if not (vrakLodi = 'null') then// !=
begin
StatusBar1.SimpleText := 'Podařilo se potopit nepřátelskou loď! Síla jejich loďstva je ještě: '+inttostr(silaCizihoLodstva);// výpis informací do statusu
for i:= 1 to strtoint(copy(vrakLodi,1,(pos('|',vrakLodi)-1))) do
Image2.Canvas.CopyRect(Rect((strtoint(copy(vrakLodi,(pos('|',vrakLodi)+1),99))+i-1)*velikost-1,sy*velikost-1,((strtoint(copy(vrakLodi,(pos('|',vrakLodi)+1),99))+i-1)+1)*velikost-1,(sy+1)*velikost-1),Image1.Canvas,Rect(2*velikost,0,3*velikost,velikost));
end
else// jinak ještě pluje
begin
Image2.Canvas.CopyRect(Rect(sx*velikost-1,sy*velikost-1,(sx+1)*velikost-1,(sy+1)*velikost-1),Image1.Canvas,Rect(1*velikost,0,2*velikost,velikost));
StatusBar1.SimpleText := 'Podařilo se zasáhnout nepřátelskou loď! Síla jejich loďstva je ještě: '+inttostr(silaCizihoLodstva);// výpis informací do statusu
end;
end
else
begin
Image2.Canvas.CopyRect(Rect(sx*velikost-1,sy*velikost-1,(sx+1)*velikost-1,(sy+1)*velikost-1),Image1.Canvas,Rect(0*velikost,0,1*velikost,velikost));
StatusBar1.SimpleText := 'Jenom voda! Síla nepřátelské flotily je: '+inttostr(silaCizihoLodstva);// výpis informací do statusu
end;
CiziPole[sx,sy].Kliknuto := true;// označení, že se zde už hrálo
if silaCizihoLodstva = 0 then// kontrola vítězství
begin
konechry := true;// konec hry
if messagedlg('Gratuluji, vyhrál jsi!,'+#13+'dáme ještě jednu hru?',mtCustom,[mbYes,mbNo],0) = mryes then Novahra;// dotaz na novou hru
end;
if (not konechry) then// a teď hraje počítač
HrajePocitac(nil);// třeste se
end
else// jinak se jenom značkuje
begin
if (CiziPole[sx,sy].Oznaceno) then
begin
CiziPole[sx,sy].Oznaceno := false;
Image2.Canvas.CopyRect(Rect(sx*velikost-1,sy*velikost-1,(sx+1)*velikost-1,(sy+1)*velikost-1),Image1.Canvas,Rect(5*velikost,0,6*velikost,velikost));// odznačím
end
else
begin
CiziPole[sx,sy].Oznaceno := true;
Image2.Canvas.CopyRect(Rect(sx*velikost-1,sy*velikost-1,(sx+1)*velikost-1,(sy+1)*velikost-1),Image1.Canvas,Rect(4*velikost,0,5*velikost,velikost));// označím
end;
end;
end;
end;
procedure TForm1.Konec1Click(Sender: TObject);// tlačítko konec z menu
begin
close();// Kdo se směje naposledy, má největší ping. -- @vtipy
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if ( konechry or (MessageDlg('Chcete začít novou hru?',MtConfirmation,[mbyes,mbno],0) = mryes) ) then
novahra;
end;
procedure TForm1.Zdrojovkdy1Click(Sender: TObject);
begin
ShellExecute(0,'open',Pchar('http://gist.github.com/430467'),nil,nil,Sw_ShowNormal);
showmessage('Stránka se zdrojovýmy kódy se otevře v defaultním prohlížeči.');
end;
procedure TForm1.Oaplikaci2Click(Sender: TObject);
begin
showmessage('Námořní bitva verze 0.0.0.8 '+#13+'Delphi je satan!'+#13+#13+' created by ic '+#13+' ic@icweb.eu');
end;
procedure TForm1.Pravidlahry1Click(Sender: TObject);
begin
showmessage('Námořní bitva verze 0.0.0.8 '+#13+'----------------------------------------------------'+#13+'Lodě se pro oba hráče vygenerují náhodně'+#13+'a oba hráči mají vždy stejný počet lodí.'+#13+#13+'Lodě se nikdy nedotýkají jedna druhé,'+#13+'ale mohou se dotýkat okrajů hracího pole.'+#13+#13+'Začíná vždy uživatel a počítač hraje'+#13+'bezprostředně po něm bez čekání.'+#13+#13+'Vyhrává ten komu se podaří potopit všechny'+#13+'lodě (i části lodí) protihráče.'+#13+#13+'Obtížnost hry si zvolíte v nastavení.');
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment