Einstieg.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "Game.h"
  2. #include <InitDatei.h>
  3. #include <TastaturEreignis.h>
  4. #include <Globals.h>
  5. #include <iostream>
  6. int gameCount = 0;
  7. extern "C"
  8. {
  9. __declspec( dllexport ) MiniGameV *GetMiniGame()
  10. {
  11. return new Game();
  12. }
  13. __declspec( dllexport ) void *InitializeFromPython()
  14. {
  15. initFramework();
  16. gameCount++;
  17. Map *map = new Map( 0 );
  18. InitDatei *opd = new InitDatei( "optionen.ini" );
  19. if( !opd->laden() )
  20. DateiPfadErstellen( "optionen.ini" );
  21. Text optionen = "Width=";
  22. if( opd->wertExistiert( "Breite" ) )
  23. optionen += (int)* opd->zWert( "Breite" );
  24. else
  25. {
  26. opd->addWert( "Breite", "800" );
  27. optionen += 800;
  28. }
  29. optionen += ",Height=";
  30. if( opd->wertExistiert( "Höhe" ) )
  31. optionen += (int)* opd->zWert( "Höhe" );
  32. else
  33. {
  34. opd->addWert( "Höhe", "500" );
  35. optionen += 500;
  36. }
  37. optionen += ",Ziele=";
  38. if( opd->wertExistiert( "Ziele" ) )
  39. optionen += (int)* opd->zWert( "Ziele" );
  40. else
  41. {
  42. opd->addWert( "Ziele", "1" );
  43. optionen += 1;
  44. }
  45. optionen += ",Gegner=";
  46. if( opd->wertExistiert( "+Gegner" ) )
  47. optionen += (int)* opd->zWert( "+Gegner" );
  48. else
  49. {
  50. opd->addWert( "+Gegner", "3" );
  51. optionen += 3;
  52. }
  53. optionen += ",Speed=";
  54. if( opd->wertExistiert( "Geschwindigkeit" ) )
  55. optionen += (int)* opd->zWert( "Geschwindigkeit" );
  56. else
  57. {
  58. opd->addWert( "Geschwindigkeit", "1000" );
  59. optionen += 1000;
  60. }
  61. bool fortsetzen = 0;
  62. optionen += ",Fortsetzen=";
  63. if( opd->wertExistiert( "Fortsetzen" ) )
  64. optionen += (int)* opd->zWert( "Fortsetzen" ) != 0;
  65. else
  66. {
  67. opd->addWert( "Fortsetzen", "0" );
  68. optionen += 0;
  69. }
  70. opd->speichern();
  71. opd->release();
  72. RandomGenerator *rGen = new RandomGenerator();
  73. optionen += Text( ",Seed=" ) + rGen->getSeed();
  74. rGen->release();
  75. map->reset( &optionen );
  76. Sleep( rand() % 1000 );
  77. return map;
  78. }
  79. __declspec( dllexport ) bool CanGoDown( void *game )
  80. {
  81. return ( (Map *)game )->canGoDown();
  82. }
  83. __declspec( dllexport ) bool CanGoLeft( void *game )
  84. {
  85. return ( (Map *)game )->canGoLeft();
  86. }
  87. __declspec( dllexport ) bool CanGoUp( void *game )
  88. {
  89. return ( (Map *)game )->canGoUp();
  90. }
  91. __declspec( dllexport ) bool CanGoRight( void *game )
  92. {
  93. return ( (Map *)game )->canGoRight();
  94. }
  95. __declspec( dllexport ) void GetBestOption( void *game, bool *left, bool *right, bool *up, bool *down )
  96. {
  97. ( (Map *)game )->getBestOption( left, up, right, down, 4 );
  98. }
  99. __declspec( dllexport ) bool NextFrameFromPython( void *game, char left, char right, char top, char down, int *frame )
  100. {
  101. TastaturEreignis te;
  102. te.taste = T_Links;
  103. te.verarbeitet = 0;
  104. te.id = left ? TE_Press : TE_Release;
  105. ( (Map *)game )->doTastaturEreignis( te );
  106. te.taste = T_Oben;
  107. te.verarbeitet = 0;
  108. te.id = top ? TE_Press : TE_Release;
  109. ( (Map *)game )->doTastaturEreignis( te );
  110. te.taste = T_Rechts;
  111. te.verarbeitet = 0;
  112. te.id = right ? TE_Press : TE_Release;
  113. ( (Map *)game )->doTastaturEreignis( te );
  114. te.taste = T_Unten;
  115. te.verarbeitet = 0;
  116. te.id = down ? TE_Press : TE_Release;
  117. ( (Map *)game )->doTastaturEreignis( te );
  118. ( (Map *)game )->tick( 0.05 );
  119. Bild *b = new Bild( 1 );
  120. b->setPixelBuffer( frame, 0, 800, 500 );
  121. ( (Map *)game )->render( *b );
  122. b->release();
  123. return !( (Map *)game )->istBeendet();
  124. }
  125. __declspec( dllexport ) void ReleaseFromPython( void *game )
  126. {
  127. ( (Map *)game )->release();
  128. if( !gameCount-- )
  129. releaseFramework();
  130. }
  131. }