Bingshuo Chen
/
Monster_copy_copy
27
Diff: Monster/monster.cpp
- Revision:
- 1:48a028c4089e
- Parent:
- 0:ef959ad27a16
- Child:
- 2:9a31febe6d2f
diff -r ef959ad27a16 -r 48a028c4089e Monster/monster.cpp --- a/Monster/monster.cpp Thu Apr 08 02:09:25 2021 +0000 +++ b/Monster/monster.cpp Fri Apr 09 06:34:43 2021 +0000 @@ -1,8 +1,14 @@ #include "monster.h" Monster::Monster() {} - -void Monster::monster_main(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D) { +/* +void Monster::monster_main(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D, + DigitalOut led1, DigitalOut led2, DigitalOut led3) { + +} +*/ +void Monster::monster_main(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D, + DigitalOut led1, DigitalOut led2, DigitalOut led3) { //设置人物初始位置 monster_x0 = 4; @@ -22,13 +28,14 @@ turn3 = 0; //开启宝石 - jewels_on1 = 1; - jewels_on2 = 1; - jewels_on3 = 1; - jewels_on4 = 1; - jewels_on5 = 1; - jewels_on6 = 1; - jewels_on7 = 1; + int temp_jewels_x[7] = {41,46,2,7,12,38,43}; + int temp_jewels_y[7] = {21,21,39,39,39,36,36}; + + for (int i=0; i<7; i++) { + jewels_on[i] = 1; + jewels_x[i] = temp_jewels_x[i]; + jewels_y[i] = temp_jewels_y[i]; + } while(1) { @@ -36,7 +43,6 @@ //画背景 this->drawbackground1(lcd); - this->drawlifes(lcd); this->drawscores(lcd); //画宝石和反派 @@ -46,11 +52,28 @@ //画人物 this->draw_monster(lcd, button_A, button_B, button_C, button_D); + //失去生命 + this->loss_life(lcd); + + //画生命 + this->drawlifes(lcd, led1, led2, led3); + lcd.refresh(); + + if (monster_x0 >84) { + this->monster_main(lcd, button_A, button_B, button_C, button_D, led1, led2, led3); + } + + if (lifes <= 0) { + break; + } - thread_sleep_for(20); - + thread_sleep_for(15); } + + //游戏结束 + this->game_over(lcd,button_A); + } @@ -64,13 +87,39 @@ } -void Monster::drawlifes(N5110 &lcd) { +//画生命 +void Monster::drawlifes(N5110 &lcd, DigitalOut led1, DigitalOut led2, DigitalOut led3) { for(int i=1; i<=lifes; i++) { lcd.drawSprite(7*i-4,2,4,5,(int *)shapHeart); } + switch (lifes) { + case 3: + led1 = 1; + led2 = 1; + led3 = 1; + break; + + case 2: + led1 = 1; + led2 = 1; + led3 = 0; + break; + + case 1: + led1 = 1; + led2 = 0; + led3 = 0; + break; + + default: + led1 = 0; + led2 = 0; + led3 = 0; + break; + } } @@ -160,30 +209,13 @@ //画宝石 void Monster::draw_jewels(N5110 &lcd) { - if (jewels_on1 == 1) { - lcd.drawSprite(41,21,3,3,(int *)shapStar); - } - if (jewels_on2 == 1) { - lcd.drawSprite(46,21,3,3,(int *)shapStar); - } - - if (jewels_on3 == 1) { - lcd.drawSprite(2,39,3,3,(int *)shapStar); + for (int i=0; i<7; i++) { + + if (jewels_on[i] == 1) { + lcd.drawSprite(jewels_x[i],jewels_y[i],3,3,(int *)shapStar); + } + } - if (jewels_on4 == 1) { - lcd.drawSprite(7,39,3,3,(int *)shapStar); - } - if (jewels_on5 == 1) { - lcd.drawSprite(12,39,3,3,(int *)shapStar); - } - - if (jewels_on6 == 1) { - lcd.drawSprite(38,36,3,3,(int *)shapStar); - } - if (jewels_on7 == 1) { - lcd.drawSprite(43,36,3,3,(int *)shapStar); - } - } @@ -205,7 +237,7 @@ //向右超出 if (monster_x0 > 84) { - + level += 1; } //向左限定 if (monster_x0 < 0) { @@ -219,14 +251,77 @@ if (monster_y0 > 37) { monster_y0 = 37; } - + //障碍限定 if (monster_x0 > 20 && monster_x0 < 56 && monster_y0 > 33) { monster_y0 = 33; } + if (monster_x0 > 16 && monster_x0 < 49) { + if (monster_y0 > 19 && monster_y0 < 29) { + monster_y0 = 19; + } + if (monster_y0 == 29) { + monster_y0 = 30; + } + } + + lcd.drawSprite(monster_x0,monster_y0,6,7,(int *)whiteMonster); - if (abs(monster_x0-41+2) <= 4 + //是否碰到宝石 + for (int i=0; i<7; i++) { + if (abs(monster_x0-jewels_x[i]+2) <= 4 && abs(monster_y0-jewels_y[i]+2) <= 4) { + score += 1; + jewels_x[i] = 100; + jewels_y[i] = 100; + } + } +} +//失去生命 +void Monster::loss_life(N5110 &lcd) { + + if (abs(monster_x0-monster_x1) < 7 && abs(monster_y0-monster_y1) < 6) { + lifes -= 1; + turn1 = 0; + monster_x1 = 100; + monster_y1 = 100; + thread_sleep_for(100); + } + else if (abs(monster_x0-monster_x2) < 7 && abs(monster_y0-monster_y2) < 6) { + lifes -= 1; + turn1 = 0; + monster_x2 = 100; + monster_y2 = 100; + thread_sleep_for(100); + } + else if (abs(monster_x0-monster_x3) < 7 && abs(monster_y0-monster_y3) < 6) { + lifes -= 1; + turn1 = 0; + monster_x3 = 100; + monster_y3 = 100; + thread_sleep_for(100); + } +} + +//游戏结束 +void Monster::game_over(N5110 &lcd, DigitalIn &button_A) { + + //最高分数 + if (score > best_score) { + best_score = score; + } + + //结束界面 + thread_sleep_for(100); + lcd.clear(); + lcd.printString("GAME OVER",16,1); + lcd.printString("PRESS A OUT",0,5); + lcd.refresh(); + + while (button_A == 0) { + + } + main(); }