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
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
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).
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.
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?
:: 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.
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.
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...
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.
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?
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.
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.