.[ ČeskéHry.cz ].
Návrh hry
Jdi na stránku Předchozí  1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 16:15:34    Předmět: Odpovědět s citátem

Sosarian napsal:
no tohle snad umi aji struct, a ja vim co to dela ale rikam ze to nefunguje jak ma protoze se k tomu muzu dostat aji jinak nez prez ten setter..


a kdo ti zabrani v C# ulozit si bokem referenci na private polozku a zmenit ji - _NIKDO_! - ale proc bys to delal???
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 21. březen 2008, 16:16:42    Předmět: Odpovědět s citátem

Ja mam pocit, ze jemu ukrutne vadia aj tie 2 riadky Very Happy Twisted Evil
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 16:26:08    Předmět: Odpovědět s citátem

rezna napsal:
Sosarian napsal:
no tohle snad umi aji struct, a ja vim co to dela ale rikam ze to nefunguje jak ma protoze se k tomu muzu dostat aji jinak nez prez ten setter..


a kdo ti zabrani v C# ulozit si bokem referenci na private polozku a zmenit ji - _NIKDO_! - ale proc bys to delal???
vsak sem psal ze to nefunguje v zadnym jazyku




edit: proste mi pak vadi ze nevim co dat do objektu a co ne jako kdy pouzit struct a kdy obj apod a hlavne jak ty objekty nazvat... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 16:30:18    Předmět: Odpovědět s citátem

Sosarian napsal:
edit: proste mi pak vadi ze nevim co dat do objektu a co ne jako kdy pouzit struct a kdy obj apod a hlavne jak ty objekty nazvat... Smile


struct == class

s rozdilem ze v class je vychozi private: a ve struct public: - rozdil je jinak syntakticky i prakticky nulovy

klidne vsechny tridy nazvy struct, a nebo vsechno nazvi class

v C++ neni rozdilu. v C# _ANO_. tam je struct hodnotovy a class referencovany.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 21. březen 2008, 16:30:45    Předmět: Odpovědět s citátem

OT k hackovani privatnich polozek:
Jde to fakt strasne snadno. Normalne to neni treba resit, staci vedet, ze zadny slusne se chovajici programator to neudela.
Ale ted jsem delal v C# "hru", kde proti sobe bojuji 2 AI a chtel jsem to nejak hezky objektove navrhnout. Bojovnici samozrejme meli nektere polozky verejne a jine ne (skryta informace).

No a zjistil jsem, ze zajistit, aby neslo podvadet, aby skryta informace byla opravdu skryta je fakt peklo. V podstate bych to musel zasifrovat, nebo oddelit do separatnich procesu nebo alespon assemblies. Vzdycky se tam dala najit nejaka dira ...

... Tak tohle byla vyjimka potvrzujici pravidlo. Cool
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 16:36:07    Předmět: Odpovědět s citátem

MD napsal:
OT k hackovani privatnich polozek:
Jde to fakt strasne snadno. Normalne to neni treba resit, staci vedet, ze zadny slusne se chovajici programator to neudela.
Ale ted jsem delal v C# "hru", kde proti sobe bojuji 2 AI a chtel jsem to nejak hezky objektove navrhnout. Bojovnici samozrejme meli nektere polozky verejne a jine ne (skryta informace).

No a zjistil jsem, ze zajistit, aby neslo podvadet, aby skryta informace byla opravdu skryta je fakt peklo. V podstate bych to musel zasifrovat, nebo oddelit do separatnich procesu nebo alespon assemblies. Vzdycky se tam dala najit nejaka dira ...

... Tak tohle byla vyjimka potvrzujici pravidlo. Cool


ale slo by to Smile - ale to je OT jak prase - v C# muzes udelat pravidla pro pristup ke kodu - a melo byt tam byt i pravidlo ze tento kus pameti muze cist prave jenom tato instance - alespon samotne spusteni kodu se dalo takto ocheckovat - ale je fakt ze i tak by to muselo byt asi pres getter() - zabranit samotnemu secteni pameti asi nebude jednoduche
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 16:36:57    Předmět: Odpovědět s citátem

2MD: co tim myslis? kdyz das vsem vecem private tak snad je kazda "skrytá" a jestli je problem to co sem psal ja tak muzes na jejich vyvareni pouzivat factoryclass nebo ty udaje kopirovat do pomocny promenne ne....

2rezna: to je pravda no...
hlavni problem proste byl ten ze se mi nelibi ze mam class Engine i prezto ze nic z objektu v tehle tride nevyuziju a navic to bude muset byt singleton nebo ta staticlass jak sem psal..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 16:40:22    Předmět: Odpovědět s citátem

Sosarian napsal:
2rezna: to je pravda no...
hlavni problem proste byl ten ze se mi nelibi ze mam class Engine i prezto ze nic z objektu v tehle tride nevyuziju a navic to bude muset byt singleton nebo ta staticlass jak sem psal..


1) v tomhle pripade je singleton cistejsi navrh
2) nemusi to byt singleton, pokud si to budes poctive predavat vsude kde to potrebujes - toto je spravny a cisty objektovy navrh - bez jedineho globalniho objektu - je to extremne pristrizene za vlasy ale je to formalne spravne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 21. březen 2008, 16:52:10    Předmět: Odpovědět s citátem

no a neco jako
class Engine
(
TextureManager textureManager;
Player* arrPlayers;
)

proste vsechno takhle nacpat do jedne velke classy engine je normalni? Smile
nebo pak udelat dalsi singleton, staticlass TextureManager a pole hráčů respektive to by bylo asi spis nejak Engine.World.arrPlayers nebo mozna World.arrPlayers jako jeden singleton na zalezitosti enginu a druhej na zalezitosti hry, i kdyz to rozlisvovani bude asi divny...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 21. březen 2008, 17:00:31    Předmět: Odpovědět s citátem

OT pokracovani:
2rezna: to zni zajimave

A abych to priblizil:
Rekneme, ze data jsou vzdy private a jsou zpristupnena pres nejakou get property.
Slozite to je proto, ze krome bojovniku s tajnou informaci je tam i rozhodci, ktery k ni ma mit pristup.
Bojovnici jsou reseni jako polymorfni tridy a rozhodci ridi souboj.
[edit:] Konkretne jde o takovy kamen nuzky papir s RPG prvky, je tam tedy podstatna tajna informace, v jednom kole hraji vsichni "soucasne" a nakonec o vysledku rohodne rozhodci.

No vymyslel jsem toho hodne, jak zabranit podvadeni, jenze pak jsem vzdy vymyslel i jak vsechny ochrany obejit. Nakonec jsem se rozhodl ze nema smysl byt paranoidni a zatemnovat si kod blbostma ...

Problem s private je samozrejme v tom, ze muzu cist polozky cizich instanci, pokud jsou stejneho typu jako ja.
Podobny problem je s protected.
Celkem se mi osvedcilo zakazat pristup k datum v nepovoleny cas. Jen objekt, co je prave na rade si muze cist sva tajna data.

_________________
- play with objects - www.krkal.org -


Naposledy upravil MD dne 21. březen 2008, 17:15:06, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. březen 2008, 17:13:08    Předmět: Odpovědět s citátem

Sosarian - precti si pls prvne vlakno ktere tu drive odkazoval MD - tam je toho spoustu reseno - a az pak se dal ptej - budem tu omilat to stejne dokola - kazdemu vyhovuje neco jineho - mas tam receno jake jsou zpusoby reseni, jejich vyhody a nevyhody

MD: http://msdn2.microsoft.com/en-us/library/cb6t8dtz(VS.80).aspx - toto je jeden z vychozich bodu - a moje vecne trapeni kdyz jsem delal .NET control bezici v IE - nemas pravo treba ziskat .Parent protoze by ses nahodou mohl dostat k oknu IE a tudiz k pocitaci mozneho pusobiste tveho viru napr.

zaroven lze definovat spoustu jinych pravidel a vyzadovat je bud atributove a nebo explicitne volanim v kodu.

s tim ze jde pristupovat k private polozkam je bordel no Smile - tady vidim jako reseni ze kazdy AI jedinej vygeneruje v konstruktoru sifrovaci klic a tim si data sifruje - ale nejspis by nebyl problem ani toto obejit - ale to uz jde do hnusnych obstrukci s crypto - ale v .NETu je to pekne resene, takze by to snad jit mohlo - bezet kazdou z techto AI komponent v separatnim oddelenem procesu/mistu pameti

a rozhodciho bys vyresil prave tak ze bys povolil cteni z getteru jenom dane instanci tridy ktera te vola - to ta code access security policy dovoluje zjistit
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 21. březen 2008, 19:03:44    Předmět: Odpovědět s citátem

rezna napsal:
bezet kazdou z techto AI komponent v separatnim oddelenem procesu/mistu pameti
Možná AppDomain by to řešila...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 21. březen 2008, 22:43:09    Předmět: Odpovědět s citátem

Sem jsem sepsal moje názory k tomuto tématu http://wiki.ceske-hry.cz/Programovac%C3%AD_tipy je to na wiki, tak se k tomu dostane i někdo jiný.

Jen bych dodal, že k privátním členům se sice různými špinavými triky dá dostat, ale pokud to člověk dělá, asi nepochopil, k čemu to označení private vlastně je a je sám proti sobě (samozřejmě kromě výjimečných případů, kdy je to z nějakého důvodu potřeba a člověk ví, co dělá).

Stejně tak je pravda, že je z technického hlediska v podstatě to samé používat
kód:
Player->MoveRight()

jako
kód:
MoveRight(Player)

jde v podstatě o syntaktický cukr. Ale kdybys měl programovat na Turingově stroji, který je stejně schopný jako C++ (jde v něm naprogramovat to samé), asi bys začal brblat Smile Objekty jsou jeden ze způsobů, jak řešit problémy ve vývoji velkých komplexních softwarů. Je to způsob, jak se v programu vyznat i když je obrovský a starý třeba 10 let. Takže čistě teoreticky bychom mohli kódit i bez nich, ale pak stojí člověk sám proti sobě, když má spravovat obrovský kód.

A nakonec k tomu, proč je WinAPI a jiné API jen v čistém C. Může to být taky proto, že je potřeba umožnit tato rozhraní použít v C. Kdyby byly v C++, programátor v C by měl smůlu.


FOOTNOTE: Samozřejmě někteří lidé objekty nemají rádi a radši si programují v C, případně jim ani nic jiného nezbývá. Toto jsou opět výjimky mimo dosah tohoto příspěvku Smile
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 21. březen 2008, 23:37:57    Předmět: Odpovědět s citátem

Existují API, které mají jen interface v čistém C, ale za oponou je opět C++. Zjednodušuje to bindování funkcí API do jiných jazyků.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 22. březen 2008, 08:20:59    Předmět: Odpovědět s citátem

2Quiark: no pokud je zapouzdreni jen nástroj pro jednoho programátora kterej nesmí jít podle tvých slov sám proti sobe tak to rovnou muzu pouzivat vsechny funkce public a pristupovat k nim prez svoje funkce ne?

jiste chapu ze to s tima objektama a funkcema je prakticky to stejny ze je to jen "syntaktický cukr" a na to se ptám jestli nekde neni napsaný jak se to má dělat, treba jak udelat to s tou class engine a texturemanager nebo .... jak v cecku vubec pojmenovavat class .... Smile



2rezna: zas tolik prispevku, prikladu a reseni v tom topicu nebylo... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna