A levelet megkaptam:). Csak van a thuram@freemail.hu s cimem amire már nem tudok belépni kb 2-3 éve:), de onnan forwardolja a levelemet ahova már beis tudok lépni:)
Nem akarom csufítani a gdb s topikját NevemTeve-nek (eddig olyan szép:) úgyhogy inkább itt tenném fel a primitiv kérdésemet. A lent közölt kódon probáltam használni és valahogy a set -tel nem tudtam beállítani a getchar által kreált s értéket : probáltam set s='x' ill set s=x et de nem fogadta el, meg persze probáltam ; mögéjük rakni:) de nem lett jó sehogy az uhu linux manjában meg nincs róla semmi:(
Off (Hallottam olyan cégtől, ahol nagyon féltek a hard-kódolástól, inkább felvettek egy #define LT_ONE 1 definíciót, nyilván arra az esetre, ha a következő verzióban a "LT_ONE" azt kellene jelentse hogy "2", akkor könnyű legyen a módosítás)
Egyébként a program müködik és azt csinálja amit szeretnék a t tömb felvan töltve csak a kód nem ment át sztem:(..
Az Ascii kódokat nem tudom fejből, és azért használom azt mert azt kellene eldöntenem ott hogy 'a1d4' alakú karaktersorozat jöne be.. És mivel fogalmam sincs mi van az a betű elött ezért Ascii kódot adtam meg..
Szóval ez a programrész egyenlőre jól eltudja dönteni hogy l,load stb ill 'xyxy' beírás történte ahol x a-h ig ill y 1-8 ig megy..
1) az elso while cikuls lenyegesen tobb karaktert tud olvashat be mint a t tombod hossza, ez tulcsordulashoz vezthet.
2) Sose programozzuk azt ujra, amire letezik standard fuggveny. Peldaul az fgets hasznalata ebben az esetben adja magat. Alapvetoen tanacsos megadni a belolvasando karakterek max. szamat. A karakterosztalyok klasszifikalasara is vannak fugvenyek. Feldolgozashoz jo otlet az sscanf illetve a regularis kifejezesek hasznalata.
Szerintem eloszor magadnak kene megfogalmaznod, hogy pontosan mit is akarsz, mert szerintem itt kezdodnek a problemaid. Peldaul a t tombot fel sem toltotted, stb. Mindez abbol fakad, hogy nem gondoltad at, hogy pontosan mit es miert csinalsz. Ha mashogy nem megy, ird fel a strategiadat emberi szavakkal egy papirra, es csak ha teljesen biztos vagy a dolgokban, akkor kezdj neki a kodolasnak.
Egy mellekes technikai tanacs: semmi ertelme nincs a programkodban ASCII-kodokkal mint szamokkal dolgozni. Ez csak foloslegesen gusztustalanna teszi a prgramodat, meg akkor is ha fejbol ismered az osszes kodot.
Egy alapveto filozofia, amit sokan kovetnek es jonak tartanak: Az egyetlen numerikus konstans, ami egy programkod belsejeben elfogadhato: a 0. Minden masra celra hasznaljunk konstansot valtozot, vagy define-t, egy nevven amely tukrozi a konstans jelenteset.
Ami meg a switch-et illeti: igen, létrehozhatsz egy saját változót, amit az input alapján egy függvényében állítasz és a switch ez alapján ágazik el. De nem intet javasolok, hanem enum-ot. Olvashatóbb lesz tőle a kód.
Szeretném tovább fejleszteni adatok beolvasását eddig csak egész számokat beirva tud egy két dolgot csinálni (ráadásul ha nem jót kap végtelen ciklus:), azonban szeretném ha egyenlőre a következőket tudná:
d vagy display -> display () /megjenités n vagy new -> start () /új játék bár ez még kicsit erős:) l vagy load -> egy elmentett lépéssorozat betöltése fájlból s vagy save ... q vagy quit -> kilépés illetve a lépések bevitele d2-d4 stb
Na most ennek a beolvasását és megértését szeretném megirni. Nem tudom mi a szokásos eljárás, 2 dolog között gondolkozok getchar ill scanf. Amin még gondolkozok hogy például egy új egész bevezetésével elöször a beolvasás során az érzékelt karakterekhez hozzárdelnék egy egészt pl d vagy display => i=1; stb majd erre már lehetne használni a switchet. Esetleg van valami jobb javaslat?(
Lenne néhány strukturális kérdésem, hogy mit hogy,hova szokás elhelyezni, illetve lehet hogy valamit feleslegesen használok stb . Felteném a honlapomra a 3 db c filet ha valakinek lenne türelme válaszolni a kérdéseimre..
Egyébként most kisebb gondom támadt a programirásban megint két irány közül kellene választanom, még gondolkodok rajta ha nem jutok dülöre akkor felteszem a kérdést.(az egyik megvalósitás gyorsabbnak tünik nekem, de viszont talán nehezebb ellenörizni a helyességét,szivem szerint ezt választanám..). Egyébként már sikerült használnom a gdb t és kiis javitottam vele egy hibát:))
Szerintem a lepest legeneralni gyorsabb (vagy ugyanolyan gyors), mert ez egy szimpla osszedas, mig a masik esetben a memoriabol kell olvasni, ami altalaban lassabb mint egy regiszteroperacio, meg akkor is, ha a cache-bol tortenik.
Hát ugye egy mezőhöz átlagosan kb 5-6-7 huszár lépés tartozik és 64 el beszorozva ez 400 körül van. Na most akkor azt kérdem hogy 1: letárolom minden mezőhöz 8 biten melyek a legálisak hozzá, azaz ebben benne van pl balra2, fel 1 legális stb na most akkor minden lépésben megtalálom a huszárt megkeresem a hozzá tartozó 8 bitet és legenerálom a hozzá tartozó lépéseket (most már intben akarom ) azaz "d2-e4" ,"d2-f3" stb Vagy! 2:Egyből olyan formában tárolom le amit az 1 pontban leirtam (a nagy bazi 400 elemű tömbről) és akkor már számolást nem igényel csak kikell szedni a tömbből
Melyik a gyorsabb? Azt figyelembe véve hogy ugye általában minden lépésben 4 huszárt találunk főleg az elején a táblán tehát az elején 4* hajtódnak végre a pontok ..
Utólag ne javítgass semmit... előre kell kitalálni... mondjuk van egy 0-1000 közötti értéked -> használj int-et, biztos belefér vagy van egy 0-100000 közötti értéked -> használj long-ot, mert lehet olyan platformod, ahol nem fér el az int-ben vagy 64 bit-re van szükséged -> használj long long-ot, de tudd, hogy van olyan platform, ahol nincs 'long long'... vagy használj helyette 'unsigned char [8]' tömböt, az mindenhol megy, de egy kicsit több programozói munkát igényel a kezelése
Bár azon gondolkodom hogy a lépéseket pl a bástya futóhoz úgy generáltam le hogy int et ad vissza : 0"honnan" "hova" ez ugye 12 bit a végén az elején lévő 4 bitet majd másra kellene felhasználonom, amolyan különleges lépésekre mint pl lehet e még sáncolni a királlyal, mire változon át a gyalog etc . Szóval emiatt a huszárnál is inteket kellene generálnom.