Menü.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113
  1. #include "Menü.h"
  2. #include "Initialisierung.h"
  3. #include <MausEreignis.h>
  4. #include <Textfeld.h>
  5. #include <InitDatei.h>
  6. #include <Text.h>
  7. #include <Datei.h>
  8. #include <TastaturEreignis.h>
  9. #include <KSGTDatei.h>
  10. #include <Schrift.h>
  11. #include <DateiSystem.h>
  12. #include <Rahmen.h>
  13. #include <AsynchronCall.h>
  14. #include <Bildschirm.h>
  15. // Inhalt der MenüVerloren Klasse aus Menü.h
  16. // Kontruktor
  17. MenüVerloren::MenüVerloren(UIInit& uiFactory)
  18. : ReferenceCounter()
  19. {
  20. ram = new LRahmen();
  21. ram->setSize(160, 100);
  22. ram->setPosition(320, 200);
  23. ram->setFarbe(0xFFFFFFFF);
  24. verloren = initTextFeld(325, 210, 150, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, "Du hast verloren.");
  25. neu = initKnopf(350, 240, 100, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, "Neues Spiel");
  26. beenden = initKnopf(350, 270, 100, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, "Zurück");
  27. }
  28. // Destruktor
  29. MenüVerloren::~MenüVerloren()
  30. {
  31. verloren->release();
  32. neu->release();
  33. beenden->release();
  34. ram->release();
  35. }
  36. // nicht constant
  37. int MenüVerloren::doPublicMausEreignis(MausEreignis& me)
  38. {
  39. bool vera = me.verarbeitet;
  40. int ret = 0;
  41. neu->doPublicMausEreignis(me);
  42. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  43. ret = 1;
  44. beenden->doPublicMausEreignis(me);
  45. if (!vera && me.verarbeitet && !ret && me.id == ME_RLinks)
  46. ret = 2;
  47. return ret;
  48. }
  49. bool MenüVerloren::tick(double tickVal)
  50. {
  51. bool ret = verloren->tick(tickVal);
  52. ret |= neu->tick(tickVal);
  53. ret |= beenden->tick(tickVal);
  54. return ret;
  55. }
  56. void MenüVerloren::render(Bild& zRObj)
  57. {
  58. zRObj.alphaRegion(ram->getX(), ram->getY(), ram->getBreite(), ram->getHeight(), 0xD0000000);
  59. verloren->render(zRObj);
  60. neu->render(zRObj);
  61. beenden->render(zRObj);
  62. ram->render(zRObj);
  63. }
  64. // Inhalt der MenüSpiel Klasse aus Menü.h
  65. // Konstruktor
  66. MenüSpiel::MenüSpiel(UIInit& uiFactory, KSGClient::MinigameServerClient* klient)
  67. : ReferenceCounter()
  68. {
  69. scoreT = initTextFeld(690, 10, 100, 20, uiFactory, TextFeld::Style::Text, "Score: 0");
  70. beenden = initKnopf(690, 40, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Beenden");
  71. map = new Map(klient);
  72. verloren = new MenüVerloren(uiFactory);
  73. beendet = 0;
  74. timePuffer = 0;
  75. }
  76. // Destruktor
  77. MenüSpiel::~MenüSpiel()
  78. {
  79. scoreT->release();
  80. beenden->release();
  81. map->release();
  82. verloren->release();
  83. }
  84. // nicht constant
  85. void MenüSpiel::reset()
  86. {
  87. timePuffer = 0;
  88. Text optionen = "Width=";
  89. InitDatei* opd = new InitDatei("data/Minigames/Asteroids/data/optionen.ini");
  90. if (!opd->laden())
  91. DateiPfadErstellen("data/Minigames/Asteroids/data/optionen.ini");
  92. if (opd->wertExistiert("Breite"))
  93. optionen += (int)*opd->zWert("Breite");
  94. else
  95. {
  96. opd->addWert("Breite", "1600");
  97. optionen += "1600";
  98. }
  99. optionen += ",Height=";
  100. if (opd->wertExistiert("Höhe"))
  101. optionen += (int)*opd->zWert("Höhe");
  102. else
  103. {
  104. opd->addWert("Höhe", "1000");
  105. optionen += "1000";
  106. }
  107. optionen += ",Size=";
  108. if (opd->wertExistiert("Größe"))
  109. optionen += (int)*opd->zWert("Größe");
  110. else
  111. {
  112. opd->addWert("Größe", "1000");
  113. optionen += 1000;
  114. }
  115. optionen += ",Timer=";
  116. if (opd->wertExistiert("Timer"))
  117. optionen += (int)*opd->zWert("Timer");
  118. else
  119. {
  120. opd->addWert("Timer", "5000");
  121. optionen += 5000;
  122. }
  123. optionen += ",Ship=";
  124. if (opd->wertExistiert("Ship"))
  125. optionen += (int)*opd->zWert("Ship");
  126. else
  127. {
  128. opd->addWert("Ship", "0");
  129. optionen += 0;
  130. }
  131. optionen += ",Fortsetzen=";
  132. if (opd->wertExistiert("Fortsetzen"))
  133. optionen += (int)*opd->zWert("Fortsetzen") != 0;
  134. else
  135. {
  136. opd->addWert("Fortsetzen", "0");
  137. optionen += 0;
  138. }
  139. optionen += ",AutoKam=";
  140. if (opd->wertExistiert("AutoKam"))
  141. optionen += (int)*opd->zWert("AutoKam") != 0;
  142. else
  143. {
  144. opd->addWert("AutoKam", "0");
  145. optionen += 0;
  146. }
  147. opd->speichern();
  148. opd->release();
  149. map->reset(&optionen);
  150. beendet = 0;
  151. scoreT->setText("Score: ");
  152. scoreT->zText()->append(map->getScore());
  153. }
  154. void MenüSpiel::doPublicMausEreignis(MausEreignis& me)
  155. {
  156. bool vera = me.verarbeitet;
  157. beenden->doPublicMausEreignis(me);
  158. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  159. {
  160. map->speichern();
  161. beendet = 1;
  162. }
  163. map->doPublicMausEreignis(me);
  164. if (map->istBeendet())
  165. {
  166. int ak = verloren->doPublicMausEreignis(me);
  167. if (ak == 1)
  168. reset();
  169. if (ak == 2)
  170. beendet = 1;
  171. }
  172. }
  173. void MenüSpiel::doTastaturEreignis(TastaturEreignis& te)
  174. {
  175. if (map->istBeendet())
  176. {
  177. if (te.id == TE_Release && te.taste == T_Enter)
  178. reset();
  179. if (te.id == TE_Release && te.taste == T_BackSpace)
  180. beendet = 1;
  181. return;
  182. }
  183. map->doTastaturEreignis(te);
  184. }
  185. bool MenüSpiel::tick(double tickVal)
  186. {
  187. timePuffer += tickVal;
  188. bool ret = beenden->tick(tickVal);
  189. while (timePuffer >= 0.02)
  190. {
  191. ret |= map->tick(0.02);
  192. timePuffer -= 0.02;
  193. }
  194. if (map->istBeendet())
  195. ret |= verloren->tick(tickVal);
  196. scoreT->setText("Score: ");
  197. scoreT->zText()->append(map->getScore());
  198. return ret;
  199. }
  200. void MenüSpiel::render(Bild& zRObj)
  201. {
  202. map->render(zRObj);
  203. scoreT->render(zRObj);
  204. beenden->render(zRObj);
  205. if (map->istBeendet())
  206. verloren->render(zRObj);
  207. }
  208. // constant
  209. bool MenüSpiel::istBeendet() const
  210. {
  211. return beendet;
  212. }
  213. // Inhalt der MenüWiederhohlung Klasse
  214. // Konstruktor
  215. MenüWiederhohlung::MenüWiederhohlung(UIInit& uiFactory, Datei* datei, Text* zOptionen)
  216. : ReferenceCounter()
  217. {
  218. scoreT = initTextFeld(690, 10, 100, 20, uiFactory, TextFeld::Style::Text, "Score: 0");
  219. beenden = initKnopf(690, 40, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Beenden");
  220. this->datei = datei;
  221. if (!datei->istOffen())
  222. datei->open(Datei::Style::lesen);
  223. __int64 seed;
  224. datei->lese((char*)&seed, 8);
  225. zOptionen->append(",Fortsetzen=0,AutoKam=0,Seed=");
  226. zOptionen->append(seed);
  227. map = new Map(0);
  228. map->reset(zOptionen);
  229. beendet = 0;
  230. nowTime = 0;
  231. nextTime = 0;
  232. tastenStände = 0;
  233. datei->lese((char*)&nextTime, 8);
  234. timePuffer = 0;
  235. }
  236. // Destruktor
  237. MenüWiederhohlung::~MenüWiederhohlung()
  238. {
  239. scoreT->release();
  240. beenden->release();
  241. map->release();
  242. datei->close();
  243. datei->release();
  244. }
  245. // nicht constant
  246. void MenüWiederhohlung::doPublicMausEreignis(MausEreignis& me)
  247. {
  248. bool vera = me.verarbeitet;
  249. beenden->doPublicMausEreignis(me);
  250. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  251. beendet = 1;
  252. if (map->istBeendet())
  253. beendet = 1;
  254. }
  255. void MenüWiederhohlung::doTastaturEreignis(TastaturEreignis& te)
  256. {}
  257. bool MenüWiederhohlung::tick(double tickVal)
  258. {
  259. bool ret = beenden->tick(tickVal);
  260. // TODO Replay Activity
  261. while (nextTime >= 0 && nowTime + tickVal >= nextTime)
  262. {
  263. while (nowTime < nextTime)
  264. {
  265. ret |= map->tick(0.02);
  266. tickVal -= 0.02;
  267. nowTime += 0.02;
  268. }
  269. char aktion;
  270. datei->lese(&aktion, 1);
  271. if (datei->istEnde())
  272. nextTime = -1;
  273. else
  274. datei->lese((char*)&nextTime, 8);
  275. TastaturEreignis te;
  276. te.verarbeitet = 0;
  277. if ((aktion | 16) == aktion)
  278. {
  279. te.id = TE_Press;
  280. te.taste = T_Space;
  281. }
  282. else if (aktion != tastenStände)
  283. {
  284. if ((aktion & ~1) == (tastenStände & ~1))
  285. {
  286. te.taste = T_Oben;
  287. te.id = ((aktion | 1) == aktion) ? TE_Press : TE_Release;
  288. }
  289. if ((aktion & ~2) == (tastenStände & ~2))
  290. {
  291. te.taste = T_Rechts;
  292. te.id = ((aktion | 2) == aktion) ? TE_Press : TE_Release;
  293. }
  294. if ((aktion & ~4) == (tastenStände & ~4))
  295. {
  296. te.taste = T_Links;
  297. te.id = ((aktion | 4) == aktion) ? TE_Press : TE_Release;
  298. }
  299. if ((aktion & ~8) == (tastenStände & ~8))
  300. {
  301. te.taste = T_Space;
  302. te.id = ((aktion | 8) == aktion) ? TE_Press : TE_Release;
  303. }
  304. tastenStände = aktion;
  305. }
  306. map->doTastaturEreignis(te);
  307. }
  308. timePuffer += tickVal;
  309. while (timePuffer > 0)
  310. {
  311. ret |= map->tick(0.02);
  312. nowTime += 0.02;
  313. timePuffer -= 0.02;
  314. }
  315. scoreT->setText("Score: ");
  316. scoreT->zText()->append(map->getScore());
  317. return ret;
  318. }
  319. void MenüWiederhohlung::render(Bild& zRObj)
  320. {
  321. map->render(zRObj);
  322. scoreT->render(zRObj);
  323. beenden->render(zRObj);
  324. }
  325. // constant
  326. bool MenüWiederhohlung::istBeendet() const
  327. {
  328. return beendet;
  329. }
  330. // Inhalt der MenüStatistik Klasse aus Menü.h
  331. // Konstruktor
  332. MenüStatistik::MenüStatistik(UIInit& uiFactory, KSGClient::MinigameServerClient* klient)
  333. {
  334. this->klient = klient;
  335. wiederH = 0;
  336. ansichtT = initTextFeld(245, 10, 50, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Ansicht:");
  337. ansicht = initAuswahlBox(295, 10, 120, 20, uiFactory, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Tabelle", "Diagramm" });
  338. optionen = initKontrollKnopf(425, 10, 130, 20, uiFactory, KontrollKnopf::Style::Normal, "Optionen beachten");
  339. worldBestT = initObjTabelle(115, 40, 570, 120, uiFactory, ObjTabelle::Style::normal | ObjTabelle::Style::VScroll, { { "Score", 60, 0, 0 }, { "Spieler", 100, 0, 0 }, {"Ansehen", 55, 0, 0 }, { "Breite", 60, 0, 0 }, { "Höhe", 60, 0, 0 }, { "Größe", 70, 0, 0 }, { "Timer", 70, 0, 0 }, { "Ship", 70, 0, 0 } }, 20);
  340. gesammtT = initObjTabelle(115, 170, 570, 290, uiFactory, ObjTabelle::Style::normal | ObjTabelle::Style::VScroll, { { "Score", 70, 0, 0 }, { "Datum", 145, 0, 0 }, { "Breite", 60, 0, 0 }, { "Höhe", 60, 0, 0 }, { "Größe", 70, 0, 0 }, { "Timer", 70, 0, 0 }, { "Ship", 70, 0, 0 } }, 20);
  341. optionenT = initObjTabelle(115, 170, 570, 290, uiFactory, ObjTabelle::Style::normal | ObjTabelle::Style::VScroll, { { "Score", 70, 0, 0 }, { "Datum", 145, 0, 0 }, { "Breite", 60, 0, 0 }, { "Höhe", 60, 0, 0 }, { "Größe", 70, 0, 0 }, { "Timer", 70, 0, 0 }, { "Ship", 70, 0, 0 } }, 20);
  342. gesammtD = initLinienDiagramm(100, 170, 600, 290, uiFactory, LDiag::Style::DatenRahmen, 0);
  343. optionenD = initLinienDiagramm(100, 170, 600, 290, uiFactory, LDiag::Style::DatenRahmen, 0);
  344. remove = initKnopf(10, 470, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Zurücksetzen");
  345. zurück = initKnopf(350, 470, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Zurück");
  346. this->uiFactory = uiFactory;
  347. tr = new TextRenderer(dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  348. asyncFinished = 1;
  349. }
  350. // Destruktor
  351. MenüStatistik::~MenüStatistik()
  352. {
  353. while (!asyncFinished)
  354. Sleep(100);
  355. tr->release();
  356. worldBestT->release();
  357. ansichtT->release();
  358. ansicht->release();
  359. optionen->release();
  360. gesammtT->release();
  361. optionenT->release();
  362. gesammtD->release();
  363. optionenD->release();
  364. remove->release();
  365. zurück->release();
  366. klient->release();
  367. if (wiederH)
  368. wiederH->release();
  369. }
  370. // nicht constant
  371. void MenüStatistik::reset()
  372. {
  373. if (wiederH)
  374. wiederH = (MenüWiederhohlung*)wiederH->release();
  375. ObjTabelle* tmpWBT = dynamic_cast<ObjTabelle*>(worldBestT->getThis());
  376. KSGClient::MinigameServerClient* tmpKlient = dynamic_cast<KSGClient::MinigameServerClient*>(klient->getThis());
  377. asyncFinished = 0;
  378. new AsynchronCall([this, tmpWBT, tmpKlient]()
  379. {
  380. Array< int > score;
  381. RCArray< Text > player;
  382. RCArray< Text > option;
  383. int anz = tmpKlient->getMinigameBestscoreList("Asteroids", &score, &player, &option);
  384. for (int i = 0; i < anz; i++)
  385. {
  386. TextFeld* scoreT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, Text(score.get(i)));
  387. TextFeld* spielerT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, player.z(i)->getText());
  388. Text optionen = option.z(i)->getText();
  389. Text* breite = optionen.getTeilText(optionen.positionVon('=') + 1, optionen.positionVon(','));
  390. Text* höhe = optionen.getTeilText(optionen.positionVon('=', 1) + 1, optionen.positionVon(',', 1));
  391. Text* größe = optionen.getTeilText(optionen.positionVon('=', 2) + 1, optionen.positionVon(',', 2));
  392. Text* timer = optionen.getTeilText(optionen.positionVon('=', 3) + 1, optionen.positionVon(',', 3));
  393. Text* ship = optionen.getTeilText(optionen.positionVon('=', 4) + 1);
  394. switch ((int)*ship)
  395. {
  396. case 0:
  397. ship->setText("Normal");
  398. break;
  399. case 1:
  400. ship->setText("Enterprise");
  401. break;
  402. }
  403. TextFeld* breiteT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, breite->getText());
  404. breite->release();
  405. TextFeld* höheT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, höhe->getText());
  406. höhe->release();
  407. TextFeld* größeT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, größe->getText());
  408. größe->release();
  409. TextFeld* timerT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, timer->getText());
  410. timer->release();
  411. TextFeld* shipT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, ship->getText());
  412. ship->release();
  413. Knopf* ansehenK = initKnopf(0, 0, 0, 0, uiFactory, Knopf::Style::Normal, "Ansehen");
  414. ansehenK->setMausEreignis([this, optionen](void* p, void* obj, MausEreignis me) -> bool
  415. {
  416. if (me.id == ME_RLinks && !me.verarbeitet)
  417. {
  418. ((Knopf*)obj)->removeStyle(Knopf::Style::Erlaubt);
  419. getThis();
  420. new AsynchronCall([this, optionen, obj]()
  421. {
  422. Datei* d = klient->downloadGameCapture("Asteroids", optionen);
  423. ((Knopf*)obj)->addStyle(Knopf::Style::Erlaubt);
  424. if (wiederH)
  425. wiederH = (MenüWiederhohlung*)wiederH->release();
  426. Text options = optionen.getText();
  427. wiederH = new MenüWiederhohlung(uiFactory, d, &options);
  428. release();
  429. });
  430. }
  431. return 1;
  432. });
  433. tmpWBT->addZeile(optionen.getText());
  434. tmpWBT->setZeichnungZ(0, i + 1, scoreT);
  435. tmpWBT->setZeichnungZ(1, i + 1, spielerT);
  436. tmpWBT->setZeichnungZ(2, i + 1, ansehenK);
  437. tmpWBT->setZeichnungZ(3, i + 1, breiteT);
  438. tmpWBT->setZeichnungZ(4, i + 1, höheT);
  439. tmpWBT->setZeichnungZ(5, i + 1, größeT);
  440. tmpWBT->setZeichnungZ(6, i + 1, timerT);
  441. tmpWBT->setZeichnungZ(7, i + 1, shipT);
  442. }
  443. tmpKlient->release();
  444. tmpWBT->release();
  445. }, &asyncFinished);
  446. InitDatei* opd = new InitDatei("data/Minigames/Asteroids/data/optionen.ini");
  447. opd->laden();
  448. if (!opd->wertExistiert("Breite"))
  449. opd->addWert("Breite", "1600");
  450. if (!opd->wertExistiert("Höhe"))
  451. opd->addWert("Höhe", "1000");
  452. if (!opd->wertExistiert("Größe"))
  453. opd->addWert("Größe", "1000");
  454. if (!opd->wertExistiert("Timer"))
  455. opd->addWert("Timer", "5000");
  456. if (!opd->wertExistiert("Ship"))
  457. opd->addWert("Ship", "0");
  458. if (!opd->wertExistiert("Fortsetzen"))
  459. opd->addWert("Fortsetzen", "0");
  460. if (!opd->wertExistiert("AutoKam"))
  461. opd->addWert("AutoKam", "0");
  462. opd->speichern();
  463. KSGTDatei* stb = new KSGTDatei("data/Minigames/Asteroids/data/score.ksgt");
  464. stb->laden();
  465. int anz = stb->getZeilenAnzahl();
  466. bool* fertig = new bool[anz];
  467. ZeroMemory(fertig, anz);
  468. int mS = 0;
  469. int omS = 0;
  470. int oAnz = 0;
  471. for (int i = 0; i < anz; i++)
  472. {
  473. int maxScore = -1;
  474. int p = -1;
  475. for (int j = 0; j < anz; j++)
  476. {
  477. if (!fertig[j] && maxScore < (int)*stb->zFeld(j, 1))
  478. {
  479. p = j;
  480. maxScore = (int)*stb->zFeld(j, 1);
  481. }
  482. }
  483. if (p >= 0)
  484. {
  485. fertig[p] = 1;
  486. TextFeld* scoreT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 1)->getText());
  487. TextFeld* datumT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 0)->getText());
  488. TextFeld* breiteT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 2)->getText());
  489. TextFeld* höheT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 3)->getText());
  490. TextFeld* größeT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 5)->getText());
  491. TextFeld* timerT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 4)->getText());
  492. TextFeld* shipT = initTextFeld(0, 0, 0, 0, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, stb->zFeld(p, 6)->getText());
  493. int ship = (int)*stb->zFeld(p, 6);
  494. switch (ship)
  495. {
  496. case 0:
  497. shipT->setText("Normal");
  498. break;
  499. case 1:
  500. shipT->setText("Enterprise");
  501. break;
  502. }
  503. gesammtT->addZeile(Text() += p);
  504. gesammtT->setZeichnungZ(0, i + 1, scoreT);
  505. gesammtT->setZeichnungZ(1, i + 1, datumT);
  506. gesammtT->setZeichnungZ(2, i + 1, breiteT);
  507. gesammtT->setZeichnungZ(3, i + 1, höheT);
  508. gesammtT->setZeichnungZ(4, i + 1, größeT);
  509. gesammtT->setZeichnungZ(5, i + 1, timerT);
  510. gesammtT->setZeichnungZ(6, i + 1, shipT);
  511. if (breiteT->zText()->istGleich(opd->zWert("Breite")->getText()) &&
  512. höheT->zText()->istGleich(opd->zWert("Höhe")->getText()) &&
  513. größeT->zText()->istGleich(opd->zWert("Größe")->getText()) &&
  514. timerT->zText()->istGleich(opd->zWert("Timer")->getText()) &&
  515. stb->zFeld(p, 6)->istGleich(opd->zWert("Ship")->getText()))
  516. {
  517. optionenT->addZeile(Text() += p);
  518. int n = optionenT->getZeilenNummer(Text() += p);
  519. optionenT->setZeichnungZ(0, n, dynamic_cast<Zeichnung*>(scoreT->getThis()));
  520. optionenT->setZeichnungZ(1, n, dynamic_cast<Zeichnung*>(datumT->getThis()));
  521. optionenT->setZeichnungZ(2, n, dynamic_cast<Zeichnung*>(breiteT->getThis()));
  522. optionenT->setZeichnungZ(3, n, dynamic_cast<Zeichnung*>(höheT->getThis()));
  523. optionenT->setZeichnungZ(4, n, dynamic_cast<Zeichnung*>(größeT->getThis()));
  524. optionenT->setZeichnungZ(5, n, dynamic_cast<Zeichnung*>(timerT->getThis()));
  525. optionenT->setZeichnungZ(6, n, dynamic_cast<Zeichnung*>(shipT->getThis()));
  526. if (!omS)
  527. omS = maxScore;
  528. oAnz++;
  529. }
  530. }
  531. if (!mS)
  532. mS = maxScore;
  533. }
  534. delete[] fertig;
  535. DiagDaten* gd = new DiagDaten();
  536. gd->style = DiagDaten::Style::autoIntervall | DiagDaten::Style::autoRaster | DiagDaten::Style::intervalle | DiagDaten::Style::intervallTexte | DiagDaten::Style::Sichtbar;
  537. gd->hIntervallFarbe = 0xFFFFFFFF;
  538. gd->hIntervallName->setText("Spiel");
  539. gd->rasterDicke = 1;
  540. gd->rasterFarbe = 0xFF505050;
  541. gd->vIntervallFarbe = 0xFFFFFFFF;
  542. gd->vIntervallName->setText("Score");
  543. gesammtD->setDiagDatenZ(gd);
  544. gesammtD->addVIntervallText(mS + 1, Text() += (mS + 1));
  545. gesammtD->addVIntervallText(0, "0");
  546. gesammtD->addHIntervallText(0, "1");
  547. if (anz > 1)
  548. gesammtD->addHIntervallText(anz - 1, Text() += anz);
  549. gesammtD->addWert("Score");
  550. gesammtD->setWertStyle(0, DiagWert::Style::Sichtbar | DiagWert::Style::Hintergrund);
  551. gesammtD->setWertFarbe(0, 0xFF00FF00);
  552. gesammtD->zDiagWert(0)->hintergrund = 0xFF205050;
  553. DiagDaten* od = new DiagDaten();
  554. od->style = DiagDaten::Style::autoIntervall | DiagDaten::Style::autoRaster | DiagDaten::Style::intervalle | DiagDaten::Style::intervallTexte | DiagDaten::Style::Sichtbar;
  555. od->hIntervallFarbe = 0xFFFFFFFF;
  556. od->hIntervallName->setText("Spiel");
  557. od->rasterDicke = 1;
  558. od->rasterFarbe = 0xFF505050;
  559. od->vIntervallFarbe = 0xFFFFFFFF;
  560. od->vIntervallName->setText("Score");
  561. optionenD->setDiagDatenZ(od);
  562. optionenD->addVIntervallText(omS + 1, Text() += (omS + 1));
  563. optionenD->addVIntervallText(0, "0");
  564. optionenD->addHIntervallText(0, "1");
  565. if (oAnz > 1)
  566. optionenD->addHIntervallText(oAnz - 1, Text() += oAnz);
  567. optionenD->addWert("Score");
  568. optionenD->setWertStyle(0, DiagWert::Style::Sichtbar | DiagWert::Style::Hintergrund);
  569. optionenD->setWertFarbe(0, 0xFF00FF00);
  570. optionenD->zDiagWert(0)->hintergrund = 0xFF205050;
  571. int j = 0;
  572. for (int i = 0; i < anz; i++)
  573. {
  574. gesammtD->addPunkt(0, i, (int)*stb->zFeld(i, 1));
  575. if ((int)*stb->zFeld(i, 2) == (int)*opd->zWert("Breite") &&
  576. (int)*stb->zFeld(i, 3) == (int)*opd->zWert("Höhe") &&
  577. (int)*stb->zFeld(i, 5) == (int)*opd->zWert("Größe") &&
  578. (int)*stb->zFeld(i, 4) == (int)*opd->zWert("Timer") &&
  579. (int)*stb->zFeld(i, 6) == (int)*opd->zWert("Ship"))
  580. {
  581. optionenD->addPunkt(0, j, (int)*stb->zFeld(i, 1));
  582. j++;
  583. }
  584. }
  585. stb->release();
  586. opd->release();
  587. beendet = 0;
  588. }
  589. void MenüStatistik::doPublicMausEreignis(MausEreignis& me)
  590. {
  591. if (wiederH)
  592. {
  593. wiederH->doPublicMausEreignis(me);
  594. return;
  595. }
  596. ansicht->doPublicMausEreignis(me);
  597. optionen->doPublicMausEreignis(me);
  598. gesammtT->doPublicMausEreignis(me);
  599. optionenT->doPublicMausEreignis(me);
  600. worldBestT->doPublicMausEreignis(me);
  601. bool vera = me.verarbeitet;
  602. remove->doPublicMausEreignis(me);
  603. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  604. { // Statistik remove
  605. if (optionen->hatStyle(KontrollKnopf::Style::Selected))
  606. { // nur bestimmte Statistik remove
  607. InitDatei* opd = new InitDatei("data/Minigames/Asteroids/data/optionen.ini");
  608. opd->laden();
  609. KSGTDatei* score = new KSGTDatei("data/Minigames/Asteroids/data/score.ksgt");
  610. score->laden();
  611. int zeilen = score->getZeilenAnzahl();
  612. for (int i = 0; i < zeilen; i++)
  613. {
  614. if ((int)*score->zFeld(i, 2) == (int)*opd->zWert("Breite") &&
  615. (int)*score->zFeld(i, 3) == (int)*opd->zWert("Höhe") &&
  616. (int)*score->zFeld(i, 5) == (int)*opd->zWert("Größe") &&
  617. (int)*score->zFeld(i, 4) == (int)*opd->zWert("Timer") &&
  618. (int)*score->zFeld(i, 6) == (int)*opd->zWert("Ship"))
  619. {
  620. score->removeZeile(i);
  621. i--;
  622. zeilen--;
  623. }
  624. }
  625. score->speichern();
  626. score->release();
  627. opd->release();
  628. }
  629. else // alles remove
  630. DateiRemove("data/Minigames/Asteroids/data/score.ksgt");
  631. reset();
  632. }
  633. vera = me.verarbeitet;
  634. zurück->doPublicMausEreignis(me);
  635. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  636. beendet = 1;
  637. }
  638. bool MenüStatistik::tick(double tickVal)
  639. {
  640. if (wiederH)
  641. {
  642. bool ret = wiederH->tick(tickVal);
  643. if (wiederH->istBeendet())
  644. wiederH = (MenüWiederhohlung*)wiederH->release();
  645. return ret;
  646. }
  647. bool ret = ansicht->tick(tickVal);
  648. ret |= optionen->tick(tickVal);
  649. ret |= remove->tick(tickVal);
  650. ret |= zurück->tick(tickVal);
  651. ret |= gesammtT->tick(tickVal);
  652. ret |= optionenT->tick(tickVal);
  653. ret |= gesammtD->tick(tickVal);
  654. ret |= optionenD->tick(tickVal);
  655. ret |= worldBestT->tick(tickVal);
  656. return ret;
  657. }
  658. void MenüStatistik::render(Bild& zRObj)
  659. {
  660. if (wiederH)
  661. {
  662. wiederH->render(zRObj);
  663. return;
  664. }
  665. tr->setSchriftSize(12);
  666. Text weltScore = "Welt Score:";
  667. tr->renderText(10, 40, weltScore, zRObj, 0xFFFFFFFF);
  668. Text localScore = "Dein Score:";
  669. tr->renderText(10, 170, localScore, zRObj, 0xFFFFFFFF);
  670. worldBestT->render(zRObj);
  671. if (!ansicht->getAuswahl())
  672. {
  673. if (optionen->hatStyle(KontrollKnopf::Style::Selected))
  674. optionenT->render(zRObj);
  675. else
  676. gesammtT->render(zRObj);
  677. }
  678. else
  679. {
  680. if (optionen->hatStyle(KontrollKnopf::Style::Selected))
  681. optionenD->render(zRObj);
  682. else
  683. gesammtD->render(zRObj);
  684. }
  685. ansichtT->render(zRObj);
  686. ansicht->render(zRObj);
  687. optionen->render(zRObj);
  688. remove->render(zRObj);
  689. zurück->render(zRObj);
  690. }
  691. // constant
  692. bool MenüStatistik::istBeendet() const
  693. {
  694. return beendet;
  695. }
  696. bool MenüStatistik::istWiederhohlung() const
  697. {
  698. return wiederH != 0;
  699. }
  700. // Inhalt der MenüOptionen aus Menü.h
  701. // Konstruktor
  702. MenüOptionen::MenüOptionen(UIInit& uiFactory)
  703. : ReferenceCounter()
  704. {
  705. breiteT = initTextFeld(310, 120, 130, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Spielfeld Breite:");
  706. breite = initTextFeld(440, 120, 50, 20, uiFactory, TextFeld::Style::TextFeld, "");
  707. breite->setTastaturEreignis(_nurNummernTE);
  708. höheT = initTextFeld(310, 160, 130, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Spielfeld Höhe:");
  709. höhe = initTextFeld(440, 160, 50, 20, uiFactory, TextFeld::Style::TextFeld, "");
  710. höhe->setTastaturEreignis(_nurNummernTE);
  711. aGrößeT = initTextFeld(310, 200, 130, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Asteroiden Größe:");
  712. aGröße = initTextFeld(440, 200, 50, 20, uiFactory, TextFeld::Style::TextFeld, "");
  713. aGröße->setTastaturEreignis(_nurNummernTE);
  714. timerT = initTextFeld(310, 240, 130, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Zeit Abstände:");
  715. timer = initTextFeld(440, 240, 50, 20, uiFactory, TextFeld::Style::TextFeld, "");
  716. timer->setTastaturEreignis(_nurNummernTE);
  717. shipT = initTextFeld(310, 280, 80, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::VCenter, "Raumschiff:");
  718. ship = initAuswahlBox(390, 280, 100, 20, uiFactory, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Normal", "Enterprise" });
  719. autoKam = initKontrollKnopf(310, 320, 180, 25, uiFactory, KontrollKnopf::Style::Normal, "Kamera drehen");
  720. fortsetzen = initKontrollKnopf(310, 360, 180, 25, uiFactory, KontrollKnopf::Style::Normal, "Letztes Spiel fortsetzen");
  721. abbrechen = initKnopf(310, 400, 85, 20, uiFactory, Knopf::Style::Sichtbar, "Abbrechen");
  722. ok = initKnopf(405, 400, 85, 20, uiFactory, Knopf::Style::Sichtbar, "Ok");
  723. beendet = 0;
  724. }
  725. // Destruktor
  726. MenüOptionen::~MenüOptionen()
  727. {
  728. breiteT->release();
  729. breite->release();
  730. höheT->release();
  731. höhe->release();
  732. aGrößeT->release();
  733. aGröße->release();
  734. timerT->release();
  735. timer->release();
  736. shipT->release();
  737. ship->release();
  738. autoKam->release();
  739. fortsetzen->release();
  740. abbrechen->release();
  741. ok->release();
  742. }
  743. // nicht constant
  744. void MenüOptionen::reset()
  745. {
  746. InitDatei* opd = new InitDatei("data/Minigames/Asteroids/data/optionen.ini");
  747. if (!opd->laden())
  748. DateiPfadErstellen("data/Minigames/Asteroids/data/optionen.ini");
  749. breite->setText("1600");
  750. if (opd->wertExistiert("Breite"))
  751. breite->setText(Text() += (int)*opd->zWert("Breite"));
  752. else
  753. opd->addWert("Breite", "1600");
  754. höhe->setText("1000");
  755. if (opd->wertExistiert("Höhe"))
  756. höhe->setText(Text() += (int)*opd->zWert("Höhe"));
  757. else
  758. opd->addWert("Höhe", "1000");
  759. aGröße->setText("1000");
  760. if (opd->wertExistiert("Größe"))
  761. aGröße->setText(Text() += (int)*opd->zWert("Größe"));
  762. else
  763. opd->addWert("Größe", "1000");
  764. timer->setText("5000");
  765. if (opd->wertExistiert("Timer"))
  766. timer->setText(Text() += (int)*opd->zWert("Timer"));
  767. else
  768. opd->addWert("Timer", "5000");
  769. ship->setAuswahl(0);
  770. if (opd->wertExistiert("Ship"))
  771. ship->setAuswahl((int)*opd->zWert("Ship"));
  772. else
  773. opd->addWert("Ship", "0");
  774. autoKam->removeStyle(KontrollKnopf::Style::Selected);
  775. if (opd->wertExistiert("AutoKam"))
  776. autoKam->setStyle(KontrollKnopf::Style::Selected, (int)*opd->zWert("AutoKam") != 0);
  777. else
  778. opd->addWert("AutoKam", "0");
  779. fortsetzen->removeStyle(KontrollKnopf::Style::Selected);
  780. if (opd->wertExistiert("Fortsetzen"))
  781. fortsetzen->setStyle(KontrollKnopf::Style::Selected, (int)*opd->zWert("Fortsetzen") != 0);
  782. else
  783. opd->addWert("Fortsetzen", "0");
  784. beendet = 0;
  785. opd->speichern();
  786. opd->release();
  787. }
  788. void MenüOptionen::doPublicMausEreignis(MausEreignis& me)
  789. {
  790. breite->doPublicMausEreignis(me);
  791. höhe->doPublicMausEreignis(me);
  792. aGröße->doPublicMausEreignis(me);
  793. timer->doPublicMausEreignis(me);
  794. ship->doPublicMausEreignis(me);
  795. autoKam->doPublicMausEreignis(me);
  796. fortsetzen->doPublicMausEreignis(me);
  797. bool vera = me.verarbeitet;
  798. abbrechen->doPublicMausEreignis(me);
  799. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  800. beendet = 1;
  801. vera = me.verarbeitet;
  802. ok->doPublicMausEreignis(me);
  803. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  804. {
  805. InitDatei* opd = new InitDatei("data/Minigames/Asteroids/data/optionen.ini");
  806. if (!opd->laden())
  807. DateiPfadErstellen("data/Minigames/Asteroids/data/optionen.ini");
  808. if ((int)*breite->zText() > 10000)
  809. breite->setText("10000");
  810. if ((int)*breite->zText() < 800)
  811. breite->setText("800");
  812. if (opd->wertExistiert("Breite"))
  813. opd->setWert("Breite", Text() += (int)*breite->zText());
  814. else
  815. opd->addWert("Breite", Text() += (int)*breite->zText());
  816. if ((int)*höhe->zText() > 10000)
  817. höhe->setText("10000");
  818. if ((int)*höhe->zText() < 500)
  819. höhe->setText("500");
  820. if (opd->wertExistiert("Höhe"))
  821. opd->setWert("Höhe", Text() += (int)*höhe->zText());
  822. else
  823. opd->addWert("Höhe", Text() += (int)*höhe->zText());
  824. if ((int)*aGröße->zText() > 10000)
  825. aGröße->setText("10000");
  826. if ((int)*aGröße->zText() < 10)
  827. aGröße->setText("10");
  828. if (opd->wertExistiert("Größe"))
  829. opd->setWert("Größe", Text() += (int)*aGröße->zText());
  830. else
  831. opd->addWert("Größe", Text() += (int)*aGröße->zText());
  832. if ((int)*timer->zText() < 500)
  833. timer->setText("500");
  834. if (opd->wertExistiert("Timer"))
  835. opd->setWert("Timer", Text() += (int)*timer->zText());
  836. else
  837. opd->addWert("Timer", Text() += (int)*timer->zText());
  838. if (opd->wertExistiert("Ship"))
  839. opd->setWert("Ship", Text() += ship->getAuswahl());
  840. else
  841. opd->addWert("Ship", Text() += ship->getAuswahl());
  842. if (opd->wertExistiert("AutoKam"))
  843. opd->setWert("AutoKam", Text() += (int)autoKam->hatStyle(KontrollKnopf::Style::Selected));
  844. else
  845. opd->addWert("AutoKam", Text() += (int)autoKam->hatStyle(KontrollKnopf::Style::Selected));
  846. if (opd->wertExistiert("Fortsetzen"))
  847. opd->setWert("Fortsetzen", Text() += (int)fortsetzen->hatStyle(KontrollKnopf::Style::Selected));
  848. else
  849. opd->addWert("Fortsetzen", Text() += (int)fortsetzen->hatStyle(KontrollKnopf::Style::Selected));
  850. opd->speichern();
  851. opd->release();
  852. beendet = 1;
  853. }
  854. }
  855. void MenüOptionen::doTastaturEreignis(TastaturEreignis& te)
  856. {
  857. breite->doTastaturEreignis(te);
  858. höhe->doTastaturEreignis(te);
  859. aGröße->doTastaturEreignis(te);
  860. timer->doTastaturEreignis(te);
  861. }
  862. bool MenüOptionen::tick(double tickVal)
  863. {
  864. bool ret = breite->tick(tickVal);
  865. ret |= höhe->tick(tickVal);
  866. ret |= aGröße->tick(tickVal);
  867. ret |= timer->tick(tickVal);
  868. ret |= ship->tick(tickVal);
  869. ret |= autoKam->tick(tickVal);
  870. ret |= fortsetzen->tick(tickVal);
  871. ret |= abbrechen->tick(tickVal);
  872. ret |= ok->tick(tickVal);
  873. return ret;
  874. }
  875. void MenüOptionen::render(Bild& zRObj)
  876. {
  877. breiteT->render(zRObj);
  878. breite->render(zRObj);
  879. höheT->render(zRObj);
  880. höhe->render(zRObj);
  881. aGrößeT->render(zRObj);
  882. aGröße->render(zRObj);
  883. timerT->render(zRObj);
  884. timer->render(zRObj);
  885. shipT->render(zRObj);
  886. autoKam->render(zRObj);
  887. fortsetzen->render(zRObj);
  888. abbrechen->render(zRObj);
  889. ok->render(zRObj);
  890. ship->render(zRObj);
  891. }
  892. // constant
  893. bool MenüOptionen::istBeendet() const
  894. {
  895. return beendet;
  896. }
  897. // Inhalt der Menü Klasse aus Menü.h
  898. // Konstruktor
  899. Menü::Menü(UIInit& uiFactory, KSGClient::MinigameServerClient* klient)
  900. : ReferenceCounter()
  901. {
  902. spielen = initKnopf(350, 180, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Spielen");
  903. spielenF = new MenüSpiel(uiFactory, dynamic_cast<KSGClient::MinigameServerClient*>(klient->getThis()));
  904. optionen = initKnopf(350, 220, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Optionen");
  905. optionenF = new MenüOptionen(uiFactory);
  906. statistik = initKnopf(350, 260, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Statistik");
  907. statistikF = new MenüStatistik(uiFactory, klient);
  908. beenden = initKnopf(350, 300, 100, 20, uiFactory, Knopf::Style::Sichtbar, "Beenden");
  909. ram = new LRahmen();
  910. ram->setFarbe(0xFFFFFFFF);
  911. beendet = 0;
  912. status = 0;
  913. LTDBDatei* bgd = new LTDBDatei();
  914. bgd->setDatei(new Text("data/Minigames/Asteroids/bilder/hintergrund.ltdb"));
  915. bgd->leseDaten(0);
  916. hintergrund = bgd->laden(0, new Text("bg.jpg"));
  917. bgd->release();
  918. }
  919. // Destruktor
  920. Menü::~Menü()
  921. {
  922. spielen->release();
  923. spielenF->release();
  924. optionen->release();
  925. optionenF->release();
  926. statistik->release();
  927. statistikF->release();
  928. beenden->release();
  929. if (hintergrund)
  930. hintergrund->release();
  931. ram->release();
  932. }
  933. // nicht constant
  934. void Menü::reset()
  935. {
  936. status = 0;
  937. beendet = 0;
  938. }
  939. void Menü::doPublicMausEreignis(MausEreignis& me)
  940. {
  941. switch (status)
  942. {
  943. case 0:
  944. if (1)
  945. {
  946. bool vera = me.verarbeitet;
  947. spielen->doPublicMausEreignis(me);
  948. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  949. {
  950. spielenF->reset();
  951. status = 3;
  952. }
  953. vera = me.verarbeitet;
  954. optionen->doPublicMausEreignis(me);
  955. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  956. {
  957. optionenF->reset();
  958. status = 1;
  959. }
  960. vera = me.verarbeitet;
  961. statistik->doPublicMausEreignis(me);
  962. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  963. {
  964. statistikF->reset();
  965. status = 2;
  966. }
  967. vera = me.verarbeitet;
  968. beenden->doPublicMausEreignis(me);
  969. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  970. beendet = 1;
  971. }
  972. break;
  973. case 1:
  974. optionenF->doPublicMausEreignis(me);
  975. break;
  976. case 2:
  977. statistikF->doPublicMausEreignis(me);
  978. break;
  979. case 3:
  980. spielenF->doPublicMausEreignis(me);
  981. }
  982. }
  983. void Menü::doTastaturEreignis(TastaturEreignis& te)
  984. {
  985. if (status == 1)
  986. optionenF->doTastaturEreignis(te);
  987. if (status == 3)
  988. spielenF->doTastaturEreignis(te);
  989. }
  990. bool Menü::tick(double z)
  991. {
  992. switch (status)
  993. {
  994. case 0:
  995. if (1)
  996. {
  997. bool ret = spielen->tick(z);
  998. ret |= statistik->tick(z);
  999. ret |= optionen->tick(z);
  1000. ret |= beenden->tick(z);
  1001. return ret;
  1002. }
  1003. case 1:
  1004. if (optionenF->istBeendet())
  1005. {
  1006. status = 0;
  1007. return 1;
  1008. }
  1009. return optionenF->tick(z);
  1010. case 2:
  1011. if (statistikF->istBeendet())
  1012. {
  1013. status = 0;
  1014. return 1;
  1015. }
  1016. return statistikF->tick(z);
  1017. case 3:
  1018. if (spielenF->istBeendet())
  1019. {
  1020. status = 0;
  1021. return 1;
  1022. }
  1023. return spielenF->tick(z);
  1024. }
  1025. return 0;
  1026. }
  1027. void Menü::render(Bild& zRObj)
  1028. {
  1029. if (status != 3 && (status != 2 || !statistikF->istWiederhohlung()))
  1030. zRObj.drawBild(0, 0, hintergrund->getBreite(), hintergrund->getHeight(), *hintergrund);
  1031. switch (status)
  1032. {
  1033. case 0:
  1034. ram->setPosition(300, 170);
  1035. ram->setSize(200, 160);
  1036. zRObj.alphaRegion(ram->getX(), ram->getY(), ram->getBreite(), ram->getHeight(), 0xD0000000);
  1037. ram->render(zRObj);
  1038. spielen->render(zRObj);
  1039. statistik->render(zRObj);
  1040. optionen->render(zRObj);
  1041. beenden->render(zRObj);
  1042. break;
  1043. case 1:
  1044. ram->setPosition(300, 110);
  1045. ram->setSize(200, 320);
  1046. zRObj.alphaRegion(ram->getX(), ram->getY(), ram->getBreite(), ram->getHeight(), 0xD0000000);
  1047. ram->render(zRObj);
  1048. optionenF->render(zRObj);
  1049. break;
  1050. case 2:
  1051. if (!statistikF->istWiederhohlung())
  1052. zRObj.alphaRegion(0, 0, hintergrund->getBreite(), hintergrund->getHeight(), 0xD0000000);
  1053. statistikF->render(zRObj);
  1054. break;
  1055. case 3:
  1056. spielenF->render(zRObj);
  1057. }
  1058. }
  1059. // constant
  1060. bool Menü::istBeendet() const
  1061. {
  1062. return beendet;
  1063. }