help s projektom vol.2 (Delphi)

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Don Ferignon napísal:Nemôžem prekreslovať, lebo...
- mám cez celé hracie pole textúru
- ak by som mal vyznačené políčko s figúrkou, tak tam zas budem musieť dať kopu podmienok čo by sa tam malo vykresliť
No celkom tomu nerozumiem, ty mas akoze celu hraciu plochu jeden obrazok? To je podla mna ale dost nestastne riesenie, ale pouzit sa da. Kope podmienok sa ale nijak tak ci tak pri presleni moznych tahov nevyhnes. Ja by som proste po kazdom kliknuti nanovo prekleslil plochu aj ked to nieje vobec efektivne, ale je to myslim pouzitelne.
Don Ferignon napísal:Potreboval by som niečo ako jeden image, ktorému len budem meniť súradnice. Také sa dá ?
Tak toto si uz pri vsetkej fantazii co mam nedokazom predstavit co tym myslis a naco to ma byt. Myslis menit suradnice komponentu Image v okne? To sa samozrejme da, staci menit parametre Imagu Top a Left. Ale preco sa proste neposunes v Canvase (ten ma kazdy Image). Vecsina, ak nie vsetky funkcie na kreslenie nejake tie suradnice beru...

Ja by som proste sachovnicu nakreslil pomocou Image.Canvas.Rectangle (kazde policko zvlast) a figurky by som tam podaval pomocou Image.Canvas.Draw (dufam ze je to ta fukcia ktorou sa daju vlepovat bitmapy).
CRiCK
Nový používateľ
Nový používateľ
Príspevky: 17
Dátum registrácie: Po 22. Sep, 2008, 15:56

Re: help s projektom (Delphi)

Príspevok od používateľa CRiCK »

Vykreslit sachovnicu mozes takto:

Kód: Vybrať všetko

const p = 40; // velkost jedneho policka

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
 // image kde sa vykresli sachovnica
 // rozmer sachovnice = velkost policka * 8
 Image1.Width:=p*8;
 Image1.Height:=p*8;
 Image1.Canvas.Brush.Color:=clWhite;
 Image1.Canvas.Pen.Color:=clBlack;
 Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);

 for i:=0 to 7 do
 for j:=0 to 7 do
  begin
   if (i+j) mod 2 = 0 then Image1.Canvas.Brush.Color:=clWhite
   else
    Image1.Canvas.Brush.Color:=clblack;
    Image1.Canvas.Rectangle(Image1.width-p*i,Image1.height-p*j,Image1.width-p*(i+1),Image1.height-p*(j+1));
  end;
end;
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

pEpinko napísal:
Don Ferignon napísal:ty mas akoze celu hraciu plochu jeden obrazok? To je podla mna ale dost nestastne riesenie
what ? Aby sme sa pochopili, takto vyzerá moja plocha (tie kamene ešte prerobím, to bolo narýchlo)



Obrázok

Ak by som sem vykreslil bieli štvorec, tak mi zmizne textúra a okrem toho by som potreboval podmienku či tam bola pred tým figúrka a podobné blbosti.
Ja by som potreboval vykresliť jednu bitmapu v tvare prázdneho štvorca na ten môj image a tú už len posúvať podľa toho kde sa nachádza kurzor.
Viď Chess titans vo viste
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Vidim ze sa stale asi nechapeme, ked tam uz musis mat textury tak budiz. Ale nejak to kreslis (celu tu plochu), ze? Tak preco toto kreslenie neurobis po kazdom tahu/kliku/whatever?

A co sa tyka bitmapy v tvare prazdneho stvorca, nakreslis si ju a pomocou Image1.Canvas.Draw() ju nakreslis kde chces. Predtym si este mozes ulozit obsah canvasu, aby si to nemusel stale prekreslovat.

Co by so podla mna mal mat

1. funkciu ktora v kazdom stave nakresli do Imagu hraciu plochu ako vyzera. nazvyme ju pracovne Nakresli()
2. funkciu, ktora pri pechode mysou nakresli ten tvoj stvorec, tak kde je mys. nazov: ZvyrazniPolicko()
3. funkciu ktora po kliknuti zvyrazni kam sa mozu figurky hybat. ZvyrazniTah()

Potom by program (bez incializacie) vyzeral takto:

MouseMove();

begin
Nakresli();
ZvyrazniPolicko();
end;

MouseClick();

begin
Nakresli();
ZvyrazniTah();
end;

Inak nerozumiem co tam chces riesit.
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

OK, tak to skúsim prerobiť tak, aby mi to zakaždým znova vykreslilo
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

Vyriešené. Dík za radu

Ale hnusne mi to preblikávajú figúrky. Nevie niekto čím to je ? Robilo to aj vtedy keď som zakaždým neprekresloval

Inak mohol by si mi ešte raz vysvetliť ako si myslel to s tým smerníkom ?
Napr dal by som si do stav. premennej triedy THra že Label : ^Label1 a ako bude vedieť že ten label je na formuláry ?
To s tým uses nefunguje. (Circular reference)
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Niesom si isty, ale nieje preblikavanie spojene s DoubleBufferom? Ak ano tak daj do Form.Create (do metody co sa vola pri vytvaranni formularu) DoubleBuffered := true; malo by to pomoct.

A co sa tyka smernika myslel som to takto

THra bude mat prememnnu label: TLabel a do nej mozes pri konstruovani priradit smernik na label (nepchaj tam ziadne ^, ani @)

Teda tam budes mat

constructor Create(l: TLabel);
begin
label := l;
end;

Potom mozes pomocou label menit ten Tlabel vo formulari. (Snad sa to da pochopit)

A circular reference pise, lebo si ten uses pravdepodobne dam niekde kde nemal byt

unit Unit1;
interface
uses
*asi si to dal sem*
implementation
uses
*skus to dat sem*
end.

Myslim ze by to mohlo pomoct, aj ked som si neni isty, uz som z delphi dost davno nerobil.
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

wow, perfektné :-)

Ako by som mohol urobiť aby mi na stlačenie tlačítka v menu vyskočil savedialog a default extension aby bolo .txt ?
Chcem aby som si mohol vybrať kam sa to má uložiť
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Takze s tym save dialogom. Das si nejaky do formu a das tam tlacitko:

procedure TForm1.Button1Click(Sender: TObject); ->procedura po kliknuti na tlacitko
if SaveDialog1.Execute then
begin
SaveDialog2.FileName -> tu budes mat castu k vybratemu suboru
end;
end;

A filter sa robi tak, zoberes save dialog, pozres do object inspectora a najdes polozku filter, kliknes na tie 3 bodky. Do filter name das ako sa maju tie subory volat (to co sa v save dialogoch ukazuje ako typ suboru, mozes tam napisat napriklad Textovy subor na txt) a do filter das "*.txt" (bez uvodzoviek).
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

pEpinko napísal:procedure TForm1.Button1Click(Sender: TObject); ->procedura po kliknuti na tlacitko
if SaveDialog1.Execute then
begin
SaveDialog2.FileName -> tu budes mat castu k vybratemu suboru
end;
end;
Ta dvojka je tam schválne ??
Nejde mi do hlavy ako vytvoriť ten súbor.
Spravím to radšej tak, že sa mi to bude ukladať iba tam kde je uložený projekt.
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Sorry jasne zo tam ma byt 1.

U mna procedura na ukladanie vyzerala takto:

procedure TForm1.UloHru1Click(Sender: TObject); //ulozenie hry
var t: TextFile;
begin
if SaveDialog1.Execute then
begin
assignfile (t,SaveDialog1.FileName);
plocha.uloz(t);
end;
end;

A plocha. uloz, najprv mala rewrite(t); a potom som tam zapisal co som potreboval a nakoniec som este zatvoril subor.
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

EDIT :
Potreboval by som odpoveď na túto otázku : Ak robím destructor, musím všetky prvky poľa uvolniť po jednom, alebo stačí ak dám THra.free ?
THra = class
Hrac : array [1..2] of THrac;
policko : array [1..8,1..8] of TPolicko;...
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Ano musis vsetkych po jednom.
Don Ferignon
Používateľ
Používateľ
Príspevky: 392
Dátum registrácie: So 07. Jún, 2008, 10:49
Bydlisko: Štúrovo

Re: help s projektom (Delphi)

Príspevok od používateľa Don Ferignon »

Čo znamená "Invalid numeric input" pri čítaní z textového súboru ?
Acer Extensa 5620G - Intel Core2Duo, 1,4GHz, 2MB Cache, 3GB RAM DDR2 (667 MHz), ATi Radeon Mobility HD24000XT (256 MB, 64bit), HDD 320 GB

<?php $_GET['rich'] or die('trying'); ?>
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: help s projektom (Delphi)

Príspevok od používateľa pEpinko »

Podla nazvu by som to tipol na neciselnu hodnotu v subore...

Návrat na "Programovanie"