Keresés

Részletes keresés

Ismeretlen Személy :) Creative Commons License 2011.10.06 0 0 8727

Tehát, ha mondjuk a fajlnev.sff (Saját Fájl Formátumba:-) ) akarok írni valamit, az így fog kinézni:

 

'fajlnev.sff'.write(itemType, sizeof(itemType); // itt kiirod azt a byte-ot, ami megmondja, hogy egy tPointEventItem kovetkezik

'fajlnev.sff'.write(eventItem, sizeof(eventItem)); // itt kiirod magat a record-ot binarisan

 

 

Előzmény: NevemTeve (8726)
NevemTeve Creative Commons License 2011.10.06 0 0 8726

Ami a write előtt van, ponttal elválasztva, na az utal a megnyitott fájlra, amibe éppen írsz.

Előzmény: Ismeretlen Személy :) (8725)
Ismeretlen Személy :) Creative Commons License 2011.10.06 0 0 8725

Köszönöm fáradozásaid, érthető amit írtál. Már csak azt nem tudom, hogy lehet elnevezni a fájl formátumot. Például *.kjf fájlt akarok.

 

 itemType:= ft_event;

fileStream.write(itemType, sizeof(itemType); // itt kiirod azt a byte-ot, ami megmondja, hogy egy tPointEventItem kovetkezik

fileStream.write(eventItem, sizeof(eventItem)); // itt kiirod magat a record-ot binarisan

 

És ennél a résznél, hol adom meg, hogy melyik fájlba akarom meneteni. Lehet, hogy akkor mégsem annyira értem.:-)

Előzmény: attoparsec (8724)
attoparsec Creative Commons License 2011.10.05 0 0 8724

szoval binaris fajlformatumra van szukseged.

az elv ugyanaz, mint a szoveges formatumnal: valahogyan jelezned kell, hogy a fajlban az eppen kovetkezo adatoknak mi az ertelme.

az elobbi peldaban az "event" szo jelezte, hogy egy esemeny kovetkezik. binaris formatumnal nem egy szo (karaktersorozat), hanem pl egy byte erteke fogja ezt jelezni. az azt koveto adatok is binarisan lesznek kodolva, termeszetsen.

a binaris iras/olvasat erdemes egy TFileStream obiektummal vegezni. a TFileStream.write segitsegevel tudsz kiirni binarisan adatokat, a TFileStream.read pedig be tudja olvasni.

minden kulonbozo tipusu adathoz, ami a fajlban lesz, egy kodot kell rendelj, pl igy:

 

const // file item types

  ft_event    = 1;

  ft_map      = 2;

  <stb>

 

ezeket fogod hasznalni az olyan kulcsszavak helyett, hogy "event" .

 

ahhoz, hogy binarisan kiird a peldaban szereplo adatokat, egy structurat kell definialj, pl igy:

 

tPointEventItem = packed record   // a packed kulcszora figyelj oda, ez fontos; ha tombot irsz ki, packed array legyen

  eventType  : tPointEvent;

  x                 : integer;

  y                 : integer;

end;

 

a szerkesztoben eloszor az esemenyeket ilyen strukturaban tarolod:

 

var eventItem: tPointEventItem;

...

  eventItem.eventType:= pe_weapon_down;

  eventItem.x:= 31;   // persze a 31 helyett pl azt, ami az eger helyzete

  eventItem.y:= 42;

..

 

ezt igy tudod kiirni:

 

procedure writeMapToStream(fileStream: tFileStream);

var itemtype: byte;

...

  itemType:= ft_event;

  fileStream.write(itemType, sizeof(itemType); // itt kiirod azt a byte-ot, ami megmondja, hogy egy tPointEventItem kovetkezik

  fileStream.write(eventItem, sizeof(eventItem));  // itt kiirod magat a record-ot binarisan

..

 

a beolvast forditva csinalod: eloszor mindig beolvasol egy byte-ot. az fogja megmondani, hogy utana mi kovetkezik

 

procedure readMapFromStream(fileStream: tFileStream);

var itemtype: byte;

var eventItem: tPointEventItem;

..

  fileStream.read(itemType, sizeof(itemType));  // beolvasod a byte-ot, ami megmondja, mi kovetkezik

  case itemType of

     ft_event  :  begin // tPointEventItem kovetkezik

        fileStream.read(eventItem, sizeof(eventItem); // beolvasod a tPointEventItem adatokat

        pointEventTable[eventItem.x, eventItem.y]:= eventItem.eventType; // felhasznalod az adatokat

    end;

    ft_map :

 ...

end;

Ismeretlen Személy :) Creative Commons License 2011.10.05 0 0 8723

Huh. Kösz ez nagy segítség.

Obiektumorientalt programozassal tisztában vagyok, a példákat is értem, amiket írtál.

De saját fájl formátumot azt, hogy hozok létre, hogy azt más ne tudja megnyitni, mert egy sima txt fájlba elmenteni az elég amatőr.:-)

 

Amúgy kösz, így már könnyen fog menni, legalább is ez a része. De még így is elég hosszú projektnek nézek elébe.:-)

Előzmény: attoparsec (8722)
attoparsec Creative Commons License 2011.10.05 0 0 8722

a szerkeszto irjon ki egy szovegfajlba egy sort minden ilyen esemenyre, pl igy:

 

event weapon_down 31 42

 

a jatek, amikor olyan sort olvas be amelyik az "event" szoval kezdodik, akkor vizsgalja meg, hogy mi a kovetkezo szo (az esemeny tipusa). ha ez a szo "weapon_down", akkor olvassa be a sor hatralevo reszet mint x es y kordinatat. az (x,y) ponthoz valahogy rendelje hozza az esemenyt.

 

amikor egy katona a jatekban megvaltoztatja a helyet, a program megnezi, hogy az uj poziciohoz van-e valamilyen esemeny rendelve. ha van, akkor  a megfelelo muveletet vegrehajtja.

 

tobb lehetoseg van arra, hogy hogyan abrazolod az esemenyeket a jatekban es hogyan rendeled hozza mondjuk egy ponthoz. az egyik legegyszerubb (de amin meg sokat lehet javitani) a kovetkezo lehet:

(gondolom, a jatekban van egy veges meretu terkeped, legyen ennek a merete dimX, dimY)

keszits egy felsorolt tipust, ami a lehetseges esemenyeket megadja, pl:

 

type tPointEvent = (pe_none, pe_weapon_down, pe_guard, <stb>);

 

tarold egy tombben minden ponthoz a hozzarendelt esemenyt, pl igy:

 

type tPointEventTable = array[0..dimX-1, 0..dimY-1] of tPointEvent;

var pointEventTable : tPointEventTable;

 

a program elejen minden elemet ennek a tombnek pe_none ertekre allitod.

amikor beolvasol egy "event weapon_down 31 42" sort, akkor hajtsd vegre a

 

pointEventTable[31, 42]:= pe_weapon_down;  utasitast.

 

a katona mozgatasanak a rutinjaban legyen egy resz, amelyik ellenorzi, hogy valamilyen esemenyt vegre kell-e hajtani, pl:

 

procedure moveSoldierTo(soldier: tSoldier; x, y: integer); begin

...

checkEvent(soldier, x, y);

...

end;

 

procedure checkEvent(soldier: tSoldier, x, y: integer); begin

  case pointEventTable[x, y] of

    pe_none : begin end; // nincs esemeny

    pe_weapon_down : putDownWeapon(soldier);

  ...

end;

 

ha tisztaban vagy az obiektumorientalt programozassal, akkor persze hasznalj osztalyokat a tombok helyett. (ha nem vagy tisztaban, akkor talan erdemes lenne azzal kezdeni, hogy megtanulod).

 

Ismeretlen Személy :) Creative Commons License 2011.10.05 0 0 8721

Kösz a linkeket.

Hát konkrét példát nehéz mondani, mert kb. csak a fejemben van meg a játék.:-)

Odáig sikerült eddig eljutnom, hogy a felülröl nézetes katona megy az egér után.:-)

De tudok azért konkrét példát hozni. Pl.: a szerkeztőbe bejelölök egy pontot(X,Y koordinátáju), utána annak a pontnak adok egy eseményt:

 

Feltétel:

Ha a pontott eléri a katona

Esemény:

Akkor (például) leteszi a fegyverét

 

Úgye ez így fog kinézni a játékben: Ha oda viszem a katonát, magától leteszi a fegyverét.

A szerkeztőben, meg csak pontok lesznek, amikhez eseményeket rendelek.

Előzmény: attoparsec (8720)
attoparsec Creative Commons License 2011.10.04 0 0 8720

azt hiszem, amire szukseged van, az az, hogy megtalald a megfelelo adatstrukturat, amiben a jatekod adatait tarolod.

ha ez megvan, innen mar eleg konnyu egy formatumot talalni, amiben az adatokat a fajlba irod ill onnan olvasod.

 

az adatstukturakrol mindenkeppen erdemes olvasnod, ha fejleszteni akarod a programozoi tudasodat.

 

-a "mester" konyve : N.Wirth: Algoritmusok+Adatstrukturak=Programok  // http://www.diakoldal.hu/index.php?op=books&bookid=38299

-itt  van meg egy, ez pdf-ben letoltheto: Kraly Zoltan: Adatstrukturak // http://www.cs.elte.hu/~kiraly/Adatstrukturak.pdf

 

ezek eleg "elmeleti" konyvek, de ha sikerul legalabb az alapokat elsajatitani beloluk, egesz mas ralatasod lesz a programozasra.

 

altalanos jellegu javaslatom: ha olyan problemaval talalkozol, hogy nem tudod, merre indulj, probald meg a feladatot a vegletekig leegyszerusiteni, es ugy megoldani. ha igy sikerul, abbol altalaban tanulsz annyit, hogy az igazi feladatra is talalsz majd megoldast.

 

irj valami konkretumot arrol, hogy mit akarsz a szerkesztobol a jatekodnak atadni. konkret pelda alapjan konyebb megoldast javasolni.

Előzmény: Ismeretlen Személy :) (8719)
Ismeretlen Személy :) Creative Commons License 2011.10.04 0 0 8719

Már kezdem kapisgálni, hogy miről is van szó. De ti könnyen beszéltek, valószinűleg már csináltatok ilyet, nekem ez tök új. Gondolom ez nem egy fél óra megtanulni. Valami könyvet tudtok ajánlani, ami ezt pontossan leírja?

attoparsec Creative Commons License 2011.10.04 0 0 8718

:: amikor a játékkal játszok akkor a tervezőben megadott események következzenek be.

 

ha jol ertem, a szerkeszto delphi eljarasokat (forraskodot) irna ki egy szovegfajlba, valahogy igy: "procedure onSomeEvent; begin doDomeAction; end;"

aztan a jatek ezt beolvasna, es vegrahajtana.

 

sajnos ez nem fog menni.

a delphi egy forditoprogram (compiler), nem pedig egy ertelmezo (interpreter).

egy mar leforditott delphi program (ismeretlenjatek.exe) nem kepes delphi forraskodot vegrehajtani.

 

valamilyen alkalmas formatumban el kell mented az osszes adatot, amire szuksege van a jateknak, hogy egy adott esemenyre megfeleloen reagaljon.  a jatekprogramodban pedig elore megirt eljarasok gondoskodnak arrol, hogy a beolvasott adatok alapjan a megfelelo valaszt adja.

 

 

http://hu.wikipedia.org/wiki/Fordítóprogram

http://hu.wikipedia.org/wiki/Értelmező

Előzmény: Ismeretlen Személy :) (8710)
84kata Creative Commons License 2011.10.04 0 0 8717

Sziasztok !

 

Sikerült a számolásnál amit mondtatok:

 

"query1.active:='false'

  query1.active:='true'    " , mostmár nem kell a progit újra indítani, vagy futtatni, de a szüréssel nem igazán boldogulok.

 

Szóval: van a 2 tábla 

 

Sütemények (id, sutemenyek,db)

Receptek (id, suti_id, nya_id, mennyiseg)

 

Ez össze van kötve Master Detaillal. Van rajta  Új süti felvétel, Módosítás, Törlés.

 

Ez megnyit egy Modify formot . A süteményekhez fel van vezetve az összes süti, meg torta.

Tételezük fel 70 db. A söteményhez beírom a darabot, amit csinálok, ugy számol a progi és gyüjti quick reportba.

Ezt a süteményt amire nekem szükségem van egy adott nap,(mondjuk 15db )  amit csináltam azt akkor hogy kell szúrni? Mert sok féle képpen próbáltam és nem akar sikerülni. Vagy még nem jöttem rá a jó megoldásra.

 

Segítsetek már nekem ebben. Köszi előre is.

Előzmény: Hipertér Kft. (8707)
SzeZo Creative Commons License 2011.10.04 0 0 8716

Gondolkodtam a szmájlin. Ezek szerint kellett volna.

Előzmény: NevemTeve (8712)
NevemTeve Creative Commons License 2011.10.04 0 0 8715

Nem túl bonyolult adatszerkezetekhez, amik ritkán módosulnak, az INI-formátum is egész jó lehet.

 

http://msdn.microsoft.com/en-us/library/ms724875.aspx

 

Ezen a lapon keresd meg azt a részt, hogy 'The following are the initialization-file functions. They retrieve information from and copy information to a system- or application-defined initialization file. These functions are provided only for compatibility with 16-bit versions of Windows. New applications should use the registry.'

 

Na azok a hasznos és értelmes függvények -- nem csoda, hogy a MS le akar beszélni róluk...

Előzmény: Ismeretlen Személy :) (8714)
Ismeretlen Személy :) Creative Commons License 2011.10.04 0 0 8714

Kösz a gyors választ!

Mondjuk sok mindent eddig nem tudtam leszűrni, de utánanézek. Ha már felsoroltál 3 variációt melyiket ajánlod?

Előzmény: NevemTeve (8712)
NevemTeve Creative Commons License 2011.10.04 0 0 8713

Namostan Delphi magyarul Delphoi, és újgörögül beszélnek ott.

Előzmény: SzeZo (8711)
NevemTeve Creative Commons License 2011.10.04 0 0 8712

Nincs olyan, hogy 'Delphi kód', meg 'Delphi nyelv'; neked kell kitalálnod a fájl formátumát, legyen bár bináris vagy INI-szerű, vagy éppen XML.

Előzmény: Ismeretlen Személy :) (8710)
SzeZo Creative Commons License 2011.10.04 0 0 8711

Az lenne a kérdésem hozzátok, hogy hol lehet Delphi nyelven programozást tanulni.

Ismeretlen Személy :) Creative Commons License 2011.10.03 0 0 8710

Sziasztok!

 Szeretnék csinálni egy tervező programot, aminek van saját fájl formátuma, és semmi más nem tudja megnyitni csak az a program. Illetve még egy programot akarok csinálni, ami ugyanazt a fájl formátumot megtudja nyitni csak nem tervezésre, hanem hasznosításra. :-)

  Na, akkor egy kicsit érthetőbben: Egy játékot akarok csinálni, de nem akarok minden pályát külön-külön beprogramozni, hanem csak egy pályatervezőt csinálni. Csak fogalmam sincs, hogy csináljam meg, hogy amikor a játékkal játszok akkor a tervezőben megadott események következzenek be.

 Gondoltam arra, hogy tervezés közben delphi kódban menti el a beállítottakat egy szövegfájlba, mert a játék úgy is csak delphi nyelven fog tudni. 

 

Nem tudom ez így mennyire érthető. :-)

NevemTeve Creative Commons License 2011.09.30 0 0 8709

Hol vagyunk már attól... egyébként sem dolgoztam Delphivel soha életemben...

Előzmény: Hipertér Kft. (8708)
Hipertér Kft. Creative Commons License 2011.09.30 0 0 8708

vevemteve=Nevemteve sorry

Előzmény: Hipertér Kft. (8707)
Hipertér Kft. Creative Commons License 2011.09.30 0 0 8707

"Könyvet kell venni, vagy a neten van fent hozzá valami anyag? Vagy hol keresgéljek?"

 

vagy 

 

menj feleségül vevemteve-hez;-)

 

amúgy a kódban kell beírni, pl.

 

procedure TForm1.FormCreate(Sender:TObject);

begin

adoquery1.filter:='valami';

adoquery1.filtered:=true;

end;

Előzmény: 84kata (8706)
84kata Creative Commons License 2011.09.29 0 0 8706

 

Ezt az sql lekérdezésbe kell beírni, vagy hova? Néztem egy számlázó progit és azon úgy volt, hogy rá állok a termék ablakra duplán kattintok, az behoz egy ablakot és egy másik táblába rakja be a termékeket amire szükség van. Én is ebből indultam ki, azért nem világos még számomra a dolog, hogy-hogy kell ezt megoldani.

 

Egyébként honnan érdemes ezt az adatbázis részt megtanulni? Könyvet kell venni, vagy a neten van fent hozzá valami anyag? Vagy hol keresgéljek?

Tudtok adni nekem valami jó ötletet?

Előzmény: Hipertér Kft. (8704)
NevemTeve Creative Commons License 2011.09.29 0 0 8705

query1.filter:= 'tipus=''csokis''';

 

Az apostolok száma rendre: 1, 2 és végül 3

Előzmény: Hipertér Kft. (8704)
Hipertér Kft. Creative Commons License 2011.09.29 0 0 8704

Erre filter-t kell használnod.

 

Pl: 

 

lekérdezés neve: query1

 

mező neve: tipus

 

akkor:

 

query1.filter:= 'tipus='csokis''

query1.fileterd:=true;

Előzmény: 84kata (8703)
84kata Creative Commons License 2011.09.28 0 0 8703

Köszi szépen, főleg a sok segítséget amit tőletek kapok itt a fórumon. Érdekel a programozás ahogy már korábban írtam. Viszont ezt nem értem, hogy hova kell írni azt a queríname stb kódot?

Ja és egyre jobban megjött a kedvem a progamozáshoz. Milyen könyvből, vagy honnan érdemes megtanulni?

 

Most egyébként azzal küszködök, hogy nyomtatásnál ne az összes sötit jelenítse meg hanem csak amire éppen szükségem van.mert sok lap elmegy vele feleskegesen Úgy próbálom megoldeni, hogy a sütemények DB Gridjének az OnDblClick eseményébe raktam egy Modify-t (frmModify1.Showmodal, frmModify1.Setmodify), és próbálom, hogy másolja át nekem egy másik táblába és egy sql utasítással majd kigyüjtöm, de még a másolás nem megy. Valami nem az igazi. Csak még nem jöttem rá, hogy mi.

Előzmény: Hipertér Kft. (8701)
Strasszer Creative Commons License 2011.09.28 0 0 8702

Egyszerűbben:

queryname.requery

 

Előzmény: Hipertér Kft. (8700)
Hipertér Kft. Creative Commons License 2011.09.28 0 0 8701

Ja és ügyes vagy hogy végigcsináltad gratulálok!

Előzmény: 84kata (8698)
Hipertér Kft. Creative Commons License 2011.09.28 0 0 8700

A lekérdezéseket frissítsd:

 

queryname.active:=false;

queryname.active:=true;

 

 

PS: Remélem azért kapunk némi sütit?!

Előzmény: 84kata (8698)
Törölt nick Creative Commons License 2011.09.26 0 0 8699

Művelet után frissíttesd a kiíratást.

Előzmény: 84kata (8698)
84kata Creative Commons License 2011.09.26 0 0 8698

Sziasztok !

 

Most egy olyan kérdésem lenne, elkészültem a progival amiben segítettek nekem a sütis progi.

 

Szóval amikor szoroz a program 2 táblának az eredményét, akkor nem egyből dobja a megoldást, hanem be kell zárni az egész progit,  utánna ismét meg kell nyitni és csak akkor jelenik meg az eredmény. Mi a teendő ebben az esetben?, hogy ne kelljen bezárni és ismét megnyitni a progit, hogy mutassa egyből az eredményt. Egyébként a progi jól müxik, megérte bajlódni vele több hónapon keresztül.

Előzmény: Fergabor (8697)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!