GameStatePlay.hpp
上传用户:zhj2929
上传日期:2022-07-23
资源大小:28772k
文件大小:18k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include "GameState.h"
  3. #include "../../JGE/HGE/include/hgefont.h"
  4. #define SAFE_DELETE(x) if (x) delete x
  5. #define VIRTUAL_WIDTH 3968.0f
  6. #define VIRTUAL_HEIGHT 480.0f
  7. #define BIGM_INITIAL_JUMP_VEL -0.57f
  8. #define DEFAULT_GRAVITY 0.001f
  9. #define DEFAULT_WALK_SPEED 0.15f
  10. #define MAX_TILES 10
  11. #define TILE_HILL1 0
  12. #define TILE_HILL2 1
  13. #define TILE_HILL3 2
  14. #define TILE_TUBE 3
  15. #define TILE_BRICK 4
  16. #define TILE_BLOCK1 5
  17. #define TILE_BLOCK2 6
  18. #define TILE_CASTLE 7
  19. #define BLOCK_SOLID 1  //不可碰撞的砖块
  20. #define BLOCK_QUES 2  //可碰撞的砖块
  21. #define BLOCK_BANANA  3   //香蕉     
  22. #define BLOCK_APPLE     4   //苹果     
  23. #define BLOCK_WEASEL 5   //黄鼠狼
  24. #define BLOCK_TUNNEL 6   //管道
  25. #define BLOCK_TURTLE 7   //刺猬
  26. #define BLOCK_SNOWMAN 8   //雪人
  27. #define BLOCK_MONSTER  9   //mushroom
  28. #define CHANGE_SEASON   10  //换季
  29. #define MAX_SFX 12
  30. #define SFX_JUMP1 0
  31. #define SFX_JUMP2 1
  32. #define SFX_COIN 2
  33. #define SFX_GOOD 3
  34. #define SFX_BAD  4
  35. #define SFX_HITWALL 5
  36. #define SFX_BREAKER 6
  37. #define SFX_DEAD     7
  38. #define SFX_CRUSHED 8
  39. #define SFX_PAUSE 9
  40. #define SFX_FIRE 10
  41. #define SFX_WANG       11
  42. #define MAX_STATIC_COIN 20
  43. #define MAX_BAD_FLOWER 10
  44. #define QUES_NUMBER     40
  45. class TileMap;
  46. class Scroller;
  47. class GameObject;
  48. class JumpingBlock;
  49. class JumpingCoin;
  50. class Mario;
  51. class Turtle;
  52. class Weasel;
  53. class Snowman;
  54. class Monster;
  55. class Question;
  56. class BadFlower;
  57. class GameApp;
  58. float mario_x;
  59. float mario_y;
  60. float mapPositionX;
  61. float mapPositionY;
  62. class GameStatePlay:public GameState
  63. {
  64. private:
  65. Scroller* scrollerMount;
  66. Scroller* scrollerCloud;
  67. JMusic* mMusic;
  68. JSample* mSfx[MAX_SFX];
  69. TileMap* mTileMap;
  70. JTexture* mTexture;
  71.     JTexture* mQuestion;
  72. JTexture* VIC;
  73.     JTexture* FAI;
  74.     
  75. JQuad* good;
  76. JQuad* bad;
  77. JQuad* bananaPIC;
  78.     JQuad* applePIC;
  79. JQuad* bookPIC;
  80. JTexture* mBgTex;
  81. JQuad* mCloud;
  82. JQuad* mMountains;
  83. JQuad* mTiles[MAX_TILES];
  84. JTexture* mTileTex;
  85. JTexture* bookTex;
  86. JTexture* mRainbowTex;
  87. JQuad* mRainbow;
  88. JumpingBlock* mBlock;
  89. JumpingCoin* mBanana;
  90. Mario *mMario;
  91. Turtle* mTurtle[5];
  92. int mTurtleCount;
  93. //----------------黄鼠狼-----------------
  94. Weasel* mWeasel[5];
  95. int mWeaselCount;
  96. //-------snowman------------------------
  97.     Snowman* mSnowman[2];
  98. int mSnowmanCount;
  99.   
  100. Monster* mMonster;
  101. Question* question;
  102. //BadFlower* mBadFlowers[MAX_BAD_FLOWER];
  103. //int mBadFlowersCount;
  104.     int victory;
  105. int temp ;
  106. bool answered[QUES_NUMBER];
  107. public:
  108. int apple;
  109. int banana;
  110. float experience0;
  111. int questionNO;
  112. int Season;
  113. int Season1;
  114. GameStatePlay(GameApp* app);
  115. virtual ~GameStatePlay();
  116. virtual void Create();
  117. virtual void Destroy();
  118. virtual void Update();
  119. virtual void Render();
  120. virtual void Start();
  121. virtual void End();
  122.     void quesCalculate(int victory);
  123. JTexture* GetTexture(int id);
  124. TileMap* GetTileMap() { return mTileMap; }
  125. int GetApple(){return apple;}
  126. int GetBanana(){return banana;}
  127. void SetBanana(int i);
  128. void SetApple(int i);
  129. JumpingBlock* GetJumpingBlock() { return mBlock; }
  130. JumpingCoin* GetJumpingCoin() { return mBanana; }
  131.      Weasel* GetWeasel(int i) { return mWeasel
  132.  [i]; }
  133.  Snowman*  GetSnowman(int i)
  134.  {
  135. return mSnowman[i];
  136.  }
  137.  
  138.    Turtle*  GetTurtle(int i)
  139.  {
  140. return mTurtle[i];
  141.  }
  142.      Monster*  GetMonster()
  143.  {
  144. return mMonster;
  145.  }
  146. Mario* GetMario()
  147. {
  148. return mMario;
  149. }
  150. void SpawnTurtle(int col, int row);
  151. void SpawnWeasel(int col, int row);
  152. void SpawnSnowman(int col, int row);
  153. void SpawnMonster(int col, int row); 
  154. //void SpawnBadFlower(int col, int row);
  155. void PlaySfx(int idx);
  156. };
  157. #include "TileMap.hpp"
  158. #include "Scroller.hpp"
  159. #include "GameObject.hpp"
  160. #include "JumpingCoin.hpp"
  161. #include "Question.hpp"
  162. #include "JumpingBlock.hpp"
  163. #include "Mario.hpp"
  164. #include "Turtle.hpp"
  165. #include "Weasel.hpp"
  166. #include "Snowman.hpp"
  167. #include  "monster.hpp"
  168. #include "BadFlower.hpp"
  169. GameStatePlay::GameStatePlay(GameApp* app): GameState(app)
  170. {
  171. Season=0;
  172. mTexture = NULL;
  173. mMario = NULL;
  174. mQuestion =   NULL;
  175.     questionNO=-1;
  176. VIC = NULL;
  177. good = NULL ;
  178. bananaPIC = NULL ;
  179. applePIC = NULL ;
  180. bookPIC = NULL;
  181. apple = 0;
  182. banana =0;
  183. victory = 0;
  184. temp = 500;
  185. experience0=0;
  186. mBgTex = NULL;
  187. mMountains = NULL;
  188. mCloud = NULL;
  189. mMusic = NULL;
  190. int i;
  191. for (i=0;i<MAX_TILES;i++)
  192. mTiles[i] = NULL;
  193. mBlock = NULL;
  194.     question = NULL; 
  195. scrollerCloud = NULL;
  196. scrollerMount = NULL;
  197. mTileTex = NULL;
  198. bookTex =NULL;
  199. mTileMap = NULL;
  200. mRainbowTex = NULL;
  201. mRainbow = NULL;
  202. mBlock = NULL;
  203. mBanana = NULL;
  204. //for (i=0;i<10;i++)
  205. // mTurtle[i] = NULL;
  206. //for (i=0;i<MAX_BAD_FLOWER;i++)
  207. // mBadFlowers[i] = NULL;
  208. for (i=0;i<MAX_SFX;i++)
  209. mSfx[i] =NULL;
  210. for (i=0;i<10;i++)
  211. answered[i] = false ;
  212. }
  213. GameStatePlay::~GameStatePlay()
  214. {
  215. }
  216. void GameStatePlay::Create()
  217. {
  218.    
  219. bookTex = mEngine->LoadTexture("book/book.png", true);
  220. int i;
  221.     if(Season==0)
  222. {
  223. mBgTex = mEngine->LoadTexture("Res/bg1.png", true);
  224. mTileTex = mEngine->LoadTexture("Res/tiles.png", true);
  225. mTexture = mEngine->LoadTexture("Res/mario.png", true); // load texture and put onto VRAM if possible
  226. mQuestion = mEngine->LoadTexture("Res/question.png", true);
  227. VIC = mEngine->LoadTexture("Res/good.png", true);
  228.         FAI = mEngine->LoadTexture("Res/bad.png", true);
  229. mRainbowTex = mEngine->LoadTexture("Res/chun.png", true);
  230. }
  231. if(Season==1)
  232. {
  233. mBgTex = mEngine->LoadTexture("Res/bg1.png", true);
  234. mTileTex = mEngine->LoadTexture("Res/tiles1.png", true);
  235. mTexture = mEngine->LoadTexture("Res/mario.png", true); // load texture and put onto VRAM if possible
  236. mQuestion = mEngine->LoadTexture("Res/question.png", true);
  237. VIC = mEngine->LoadTexture("Res/good.png", true);
  238. FAI = mEngine->LoadTexture("Res/bad.png", true);
  239. mRainbowTex = mEngine->LoadTexture("Res/xia.png", true);
  240. }
  241. if(Season==2)
  242. {
  243. mBgTex = mEngine->LoadTexture("Res/bg1.png", true);
  244. mTileTex = mEngine->LoadTexture("Res/tiles2.png", true);
  245. mTexture = mEngine->LoadTexture("Res/mario.png", true); // load texture and put onto VRAM if possible
  246. mQuestion = mEngine->LoadTexture("Res/question.png", true);
  247. VIC = mEngine->LoadTexture("Res/good.png", true);
  248. FAI = mEngine->LoadTexture("Res/bad.png", true);
  249. mRainbowTex = mEngine->LoadTexture("Res/qiu.png", true);
  250. }
  251. if(Season==3)
  252. {
  253. mBgTex = mEngine->LoadTexture("Res/bg1.png", true);
  254. mTileTex = mEngine->LoadTexture("Res/tiles3.png", true);
  255. mTexture = mEngine->LoadTexture("Res/mario.png", true); // load texture and put onto VRAM if possible
  256. mQuestion = mEngine->LoadTexture("Res/question.png", true);
  257. VIC = mEngine->LoadTexture("Res/good.png", true);
  258. FAI = mEngine->LoadTexture("Res/bad.png", true);
  259. mRainbowTex = mEngine->LoadTexture("Res/dong.png", true);
  260. }
  261. if(Season==4)
  262. {
  263. mBgTex = mEngine->LoadTexture("Res/bg1.png", true);
  264. mTileTex = mEngine->LoadTexture("Res/tiles4.png", true);
  265. mTexture = mEngine->LoadTexture("Res/mario.png", true); // load texture and put onto VRAM if possible
  266. FAI = mEngine->LoadTexture("Res/bad.png", true);
  267. mQuestion = mEngine->LoadTexture("Res/question.png", true);
  268. VIC = mEngine->LoadTexture("Res/good.png", true);
  269. mRainbowTex = mEngine->LoadTexture("Res/bg.png", true);
  270. }
  271. mMountains = new JQuad(mBgTex, 0.0f, 0.0f, 512.0f, 142.0f);
  272. mCloud = new JQuad(mBgTex, 0.0f, 352.0f, 512.0f, 159.0f);
  273. mTiles[TILE_HILL1]  = new JQuad(mBgTex, 0.0f, 143.0f, 200.0f, 133.0f);
  274. mTiles[TILE_HILL2]  = new JQuad(mBgTex, 202.0f, 143.0f, 200.0f, 85.0f);
  275. mTiles[TILE_HILL3]  = new JQuad(mBgTex, 410.0f, 143.0f, 98.0f, 161.0f);
  276. mTiles[TILE_BRICK]  = new JQuad(mBgTex, 48.0f, 278.0f, 64.0f, 64.0f);
  277. mTiles[TILE_BLOCK1] = new JQuad(mBgTex, 118.0f, 278.0f, 32.0f, 32.0f);
  278. mTiles[TILE_BLOCK2] = new JQuad(mBgTex, 160.0f, 278.0f, 32.0f, 32.0f);
  279. mTiles[TILE_CASTLE] = new JQuad(mBgTex, 202.0f, 232.0f, 160.0f, 116.0f);
  280. mTiles[TILE_TUBE] = new JQuad(mBgTex, 366.0f, 232.0f, 43.0f, 84.0f);
  281. mTileMap = new TileMap(this, mTileTex);
  282. mRainbow = new JQuad(mRainbowTex, 0.0f, 0.0f, 512.0f, 512.0f);
  283. mMario = new Mario(this);
  284. mMario->experience=experience0;
  285. if(Season==1)
  286. {
  287. mMario->SetX(0);
  288. mMario->SetY(VIRTUAL_HEIGHT - 96.0f - 1.0f);
  289. }
  290. if(Season==2)
  291. {
  292. mMario->SetX(0);
  293. mMario->SetY(VIRTUAL_HEIGHT - 64.0f - 1.0f);
  294. }
  295. if(Season==3)
  296. {
  297. mMario->SetX(0);
  298. mMario->SetY(VIRTUAL_HEIGHT - 416.0f - 1.0f);
  299. }
  300. if(Season==4)
  301. {
  302. mMario->SetX(0);
  303. mMario->SetY(VIRTUAL_HEIGHT -60.0f - 1.0f);
  304. }
  305. scrollerCloud = new Scroller(mCloud);
  306. scrollerMount = new Scroller(mMountains);
  307. mMusic = mEngine->LoadMusic("Res/smarioa.mod");
  308. char *sfx[] = 
  309. {
  310. "Res/Sfx/jump1.wav",
  311. "Res/Sfx/jump2.wav",
  312. "Res/Sfx/coin.wav",
  313. "Res/Sfx/good.wav",
  314. "Res/Sfx/bad.wav",
  315. "Res/Sfx/brockbreak.wav",
  316. "Res/Sfx/breaker.wav",
  317. "Res/Sfx/dead.wav",
  318. "Res/Sfx/crushed.wav",
  319. "Res/Sfx/pause.wav",
  320. "Res/Sfx/fire.wav",
  321. "Res/Sfx/wang.wav"
  322. };
  323. for (i=0;i<MAX_SFX;i++)
  324. mSfx[i] = mEngine->LoadSample(sfx[i]);
  325. if(Season==0)
  326. mTileMap->Load("Res/map_Dh.dat", "Res/mario_Dh.ent");
  327. if(Season==1)
  328. mTileMap->Load("Res/map_Dh1.dat", "Res/mario_Dh1.ent");
  329. if(Season==2)
  330. mTileMap->Load("Res/map_Dh2.dat", "Res/mario_Dh2.ent");
  331. if(Season==3)
  332. mTileMap->Load("Res/map_Dh3.dat", "Res/mario_Dh3.ent");
  333. if(Season==4)
  334. mTileMap->Load("Res/map_Dh4.dat", "Res/mario_Dh4.ent");
  335. Season1=Season+1;
  336. mBlock = new JumpingBlock(this);
  337. good = new JQuad (VIC , 0.0f , 0.0f , 70.0f , 70.0f);
  338. bad =new JQuad (FAI , 0.0f , 0.0f , 70.0f , 70.0f);
  339. bananaPIC = new JQuad (mTileTex , 64.0f, 0.0f, 32.0f, 32.0f);
  340. applePIC = new JQuad (mTileTex , 32.0f, 0.0f, 32.0f, 32.0f);
  341. bookPIC = new JQuad (bookTex , 32.0f, 0.0f, 32.0f, 32.0f);
  342. mBanana = new JumpingCoin(this);
  343. question = new Question(this);
  344. for (i=0;i<5;i++)
  345. mTurtle[i] = new Turtle(this);
  346. //--------------------------
  347. for (i=0;i<5;i++)
  348. mWeasel[i] = new Weasel(this);
  349. for (i=0;i<2;i++)
  350. mSnowman[i] = new Snowman(this);
  351.     
  352. mMonster = new Monster(this);
  353. /*for (i=0;i<MAX_BAD_FLOWER;i++)
  354. mBadFlowers[i] = new BadFlower(this);*/
  355. }
  356. void GameStatePlay::Start()
  357. {
  358. mTurtleCount = 0;
  359. mWeaselCount = 0;
  360. mSnowmanCount = 0;
  361.     //questionNO = -1 ;
  362. mEngine->PlayMusic(mMusic);
  363. }
  364. void GameStatePlay::End()
  365. {
  366. }
  367. JTexture* GameStatePlay::GetTexture(int id)
  368. {
  369.     if(!id)
  370.     return mTexture;
  371. else
  372. return mQuestion;
  373. }
  374. void GameStatePlay::Destroy()
  375. {
  376. int i;
  377. if (mBgTex)
  378. mEngine->FreeTexture(mBgTex);
  379. SAFE_DELETE(mMountains);
  380. SAFE_DELETE(mCloud);
  381. if (mTexture)
  382. mEngine->FreeTexture(mTexture);
  383. if (mQuestion)
  384. mEngine->FreeTexture(mQuestion);
  385. for (i=0;i<MAX_TILES;i++)
  386. SAFE_DELETE(mTiles[i]);
  387. SAFE_DELETE(mMario);
  388. SAFE_DELETE(scrollerCloud);
  389. SAFE_DELETE(scrollerMount);
  390. if (mMusic)
  391. mEngine->FreeMusic(mMusic);
  392. if (mTileTex)
  393. mEngine->FreeTexture(mTileTex);
  394. if (bookTex)
  395. mEngine->FreeTexture(bookTex);
  396. SAFE_DELETE(mTileMap);
  397. if (mRainbowTex)
  398. mEngine->FreeTexture(mRainbowTex);
  399. SAFE_DELETE(mRainbow);
  400. SAFE_DELETE(mBlock);
  401. SAFE_DELETE(mBanana);
  402. SAFE_DELETE(mPrint);
  403. //for (i=0;i<10;i++)
  404. // SAFE_DELETE(mTurtle[i]);
  405. //黄鼠狼的删除有错误!!!!!!!!!
  406. //for (i=0;i<10;i++)
  407. //SAFE_DELETE(mWeasel[i]);
  408. //for (i=0;i<MAX_BAD_FLOWER;i++)
  409. // SAFE_DELETE(mBadFlowers[i]);
  410. for (i=0;i<MAX_SFX;i++)
  411. if (mSfx[i])
  412. mEngine->FreeSample(mSfx[i]);
  413. }
  414. void GameStatePlay::Update()
  415. {
  416. float dt = mEngine->GetDelta(); // get number of milliseconds passed since last frame
  417. if(mMonster->gameEnd==1)
  418. {
  419. mEngine->StopMusic();
  420. if(mMario->getExperience()>=80)
  421. {
  422. mApp->setI(4);
  423.  mApp->LoadGameStateEnd();
  424.  
  425.          mApp->SetNextState(GAME_STATE_END);
  426. }
  427. if(mMario->getExperience()>=30&&mMario->getExperience()<80)
  428. {
  429. mApp->setI(3);
  430.  mApp->LoadGameStateEnd();
  431.          mApp->SetNextState(GAME_STATE_END);
  432. }
  433. if(mMario->getExperience()>=0&&mMario->getExperience()<30)
  434. {
  435. mApp->setI(2);
  436.  mApp->LoadGameStateEnd();
  437.          mApp->SetNextState(GAME_STATE_END);
  438. }
  439. }
  440. else if(mMonster->gameEnd==2)
  441. {
  442. mEngine->StopMusic();
  443. mApp->setI(1);
  444.  mApp->LoadGameStateEnd();
  445.          mApp->SetNextState(GAME_STATE_END);
  446. }
  447. mMario->Update(dt);
  448. mario_x = mMario->GetX();
  449. mario_y = mMario->GetY();
  450. mTileMap->GetPosition(&mapPositionX, &mapPositionY);
  451. mTileMap->Update(dt);
  452. if(Season==Season1)
  453. {
  454. mApp->SetNextState(GAME_STATE_LOADING);
  455. }
  456.     if (mBlock && mBlock->IsActive())
  457. {
  458. mBlock->Update(dt);
  459. question->Update(dt);
  460. }
  461. char answer;
  462. if(mEngine->GetButtonClick(PSP_CTRL_LEFT))
  463.     {
  464. if(mBlock->questioned==true)
  465. {
  466. answer = 'A';
  467. if((question->getAnswer(questionNO))==answer)
  468.    victory = 1 ;
  469.     else 
  470. {
  471.    victory = 2;
  472. }
  473.    
  474.         quesCalculate(victory);
  475. }
  476. }
  477. else if(mEngine->GetButtonClick(PSP_CTRL_RIGHT))
  478. {
  479. if(mBlock->questioned==true)
  480. {
  481. answer = 'D';
  482. if((question->getAnswer(questionNO))==answer)
  483.    victory = 1 ;
  484.     else 
  485. {
  486.    victory = 2;
  487.  //if(!answered[questionNO])
  488.  // mMario->AnswerWrong();
  489.  // answered[questionNO]=1;
  490. }
  491.     
  492.         quesCalculate(victory);
  493. }
  494. }
  495. if (mBanana && mBanana->IsActive())
  496. {
  497. mBanana->Update(dt);
  498. }
  499. int i;
  500. for (i=0;i<5;i++)
  501. if (mTurtle[i] && mTurtle[i]->IsActive())
  502. mTurtle[i]->Update(dt);
  503. for (i=0;i<5;i++)
  504. if (mWeasel[i] && mWeasel[i]->IsActive())
  505. mWeasel[i]->Update(dt);
  506. for (i=0;i<2;i++)
  507. if (mSnowman[i] && mSnowman[i]->IsActive())
  508. mSnowman[i]->Update(dt);
  509.   
  510. if (mMonster&& mMonster->IsActive())
  511. mMonster->Update(dt);
  512. int frame = -1;
  513. /*for (i=0;i<MAX_BAD_FLOWER;i++)
  514. if (mBadFlowers[i] && mBadFlowers[i]->IsActive())
  515. mBadFlowers[i]->Update(dt);*/
  516. }
  517. void GameStatePlay::Render()
  518. {
  519. PIXEL_TYPE colors[] =
  520. {
  521. ARGB(255,62,114,189),
  522. ARGB(255,62,114,189),
  523. ARGB(255,255,255,255),
  524. ARGB(255,255,255,255)
  525. };
  526. float mapX, mapY;
  527. mTileMap->GetPosition(&mapX, &mapY);
  528. mEngine->FillRect(0, 0.0f-mapY, SCREEN_WIDTH_F, VIRTUAL_HEIGHT, colors); // clear background to black
  529. float x = (mapX+200.0f)*0.02f;
  530. int n = (int) x;
  531. n = (n / 512);
  532. x -= (n*512);
  533. float y = 0.0f-mapY;
  534. x = mapX*0.10f;
  535. n = (int) x;
  536. n = (n / 512);
  537. x -= (n*512);
  538. y = VIRTUAL_HEIGHT-480.0f-mapY;
  539. mEngine->RenderQuad(mRainbow,0, y);
  540. x = mapX*0.20f;
  541. n = (int) x;
  542. n = (n / 512);
  543. x -= (n*512);
  544. float yofs = 50.0f*(208.0f-mapY)/208.0f;
  545. y = VIRTUAL_HEIGHT-142.0f-mapY;
  546. x = mapX*0.50f;
  547. n = (int) x;
  548. n = (n / 960);
  549. x -= (n*960);
  550. x = SCREEN_WIDTH_F - x;
  551. y = VIRTUAL_HEIGHT-84.0f-mapY;
  552. y = VIRTUAL_HEIGHT-160.0f-mapY;
  553. y = VIRTUAL_HEIGHT-132.0f-mapY;
  554. mMario->Render();
  555. if (mBlock && mBlock->IsActive())
  556. {
  557. mBlock->Render();
  558. }
  559. question->setCurrent(questionNO);
  560. if(victory==0&&mBlock->questioned)
  561. {
  562.    question->Render();
  563.    temp=0;
  564. }
  565. else if(victory==1&&temp<=200)
  566. mBlock ->questioned=false;
  567. mEngine->RenderQuad(good, 20.0f, 50.0f);
  568. temp++;
  569. }
  570.     else if(victory==2&&temp<=200)
  571. mBlock ->questioned=false;
  572. //mBlock->SelectBlock(1);
  573. mEngine->RenderQuad(bad, 20.0f, 50.0f);
  574. temp++;
  575. }
  576. if(temp>200) 
  577. {
  578. victory = 0;
  579. }
  580.     mEngine->RenderQuad(bananaPIC, 210.0f, 10.0f);
  581. mEngine->RenderQuad(applePIC, 360.0f, 10.0f);
  582. mEngine->RenderQuad(bookPIC, 70.0f, 10.0f);
  583. if (mBanana && mBanana->IsActive())
  584. mBanana->Render();
  585. int i;
  586. for (i=0;i<5;i++)
  587. if (mTurtle[i] && mTurtle[i]->IsActive())
  588. mTurtle[i]->Render();
  589. //--------------------------------
  590. for (i=0;i<5;i++)
  591. if (mWeasel[i] && mWeasel[i]->IsActive())
  592. mWeasel[i]->Render();
  593. for (i=0;i<2;i++)
  594. if (mSnowman[i] && mSnowman[i]->IsActive())
  595. mSnowman[i]->Render();
  596. if (mMonster&& mMonster->IsActive())
  597. mMonster->Render();
  598. //for (i=0;i<MAX_BAD_FLOWER;i++)
  599. // if (mBadFlowers[i] && mBadFlowers[i]->IsActive())
  600. // mBadFlowers[i]->Render();
  601. mTileMap->Render(0,0);
  602.     mPrint->SetColor(ARGB(255,90,240,120));
  603. float experience = (float)mMario->getExperience();
  604. if(experience<0||mMario->GetY()>=470)
  605.  {
  606.  mEngine->StopMusic();
  607.  mApp->setI(1);
  608.  mApp->LoadGameStateEnd();
  609.          mApp->SetNextState(GAME_STATE_END);
  610.  //mEngine->End();
  611.  return;
  612.  }
  613. mPrint->printf(110.0f,17.0f,"*  %.1f", experience);
  614. mPrint->printf(250.0f,17.0f,"*  %d", banana);
  615. mPrint->printf(400.0f,17.0f,"*  %d", apple);
  616. }
  617. //void GameStatePlay::SpawnBadFlower(int col, int row)
  618. //{
  619. // /*
  620. // mBadFlowers[mBadFlowersCount++]->Spawn(col, row);
  621. // if (mBadFlowersCount >= MAX_BAD_FLOWER)
  622. // mBadFlowersCount = 0;
  623. // */
  624. //}
  625. void GameStatePlay::SpawnTurtle(int col, int row) //乌龟
  626. {
  627. {
  628. mTurtle[mTurtleCount++]->Spawn(col, row);
  629. }
  630. }
  631. //----------------------YB---黄鼠狼----------------------
  632. void GameStatePlay::SpawnWeasel(int col, int row) //黄鼠狼
  633. {
  634. {
  635. mWeasel[mWeaselCount++]->Spawn(col, row);
  636. }
  637. }
  638. void GameStatePlay::SpawnSnowman(int col, int row) //
  639. {
  640. {
  641. mSnowman[mSnowmanCount++]->Spawn(col, row);
  642. }
  643. }
  644. void GameStatePlay::SpawnMonster(int col, int row) //黄鼠狼
  645. {
  646. {
  647. mMonster->Spawn(col, row);
  648. }
  649. }
  650. void GameStatePlay::PlaySfx(int idx)
  651. {
  652. if (mSfx[idx])
  653. mEngine->PlaySample(mSfx[idx]);
  654. }
  655. void GameStatePlay::quesCalculate(int victory)
  656. {
  657. if(!answered[questionNO])
  658. {
  659.        if(victory==1)
  660.  { 
  661.  mMario->AnswerRight();
  662.  PlaySfx(SFX_GOOD);
  663.      answered[questionNO]=1;
  664.  }
  665.   else if(victory==2)
  666.    {
  667.  mMario->AnswerWrong();
  668.  PlaySfx(SFX_BAD);
  669.      answered[questionNO]=1;
  670.    }
  671. }
  672.  else
  673.  return  ;
  674. }
  675. void GameStatePlay::SetBanana(int i)
  676. {
  677.    banana = i;
  678. }
  679. void GameStatePlay::SetApple(int i)
  680. {
  681.    apple = i;
  682. }