Bingshuo Chen
/
Monster_copy_copy
27
Monster/monster.cpp
- Committer:
- cbs27
- Date:
- 2021-04-09
- Revision:
- 1:48a028c4089e
- Parent:
- 0:ef959ad27a16
- Child:
- 2:9a31febe6d2f
File content as of revision 1:48a028c4089e:
#include "monster.h" Monster::Monster() {} /* 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; monster_y0 = 19; //设置反派位置 monster_x1 = 23; monster_y1 = 19; turn1 = 0; monster_x2 = 18; monster_y2 = 37; turn2 = 0; monster_x3 = 68; monster_y3 = 37; turn3 = 0; //开启宝石 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) { lcd.clear(); //画背景 this->drawbackground1(lcd); this->drawscores(lcd); //画宝石和反派 this->draw_jewels(lcd); this->draw_blackmonsters(lcd); //画人物 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(15); } //游戏结束 this->game_over(lcd,button_A); } void Monster::drawbackground1(N5110 &lcd) { lcd.drawLine(0,8,84,8,2); lcd.drawRect(23,26,26,4,FILL_BLACK); lcd.drawRect(0,44,84,4,FILL_BLACK); lcd.drawRect(28,40,26,4,FILL_BLACK); lcd.drawRect(67,22,17,11,FILL_TRANSPARENT); } //画生命 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; } } void Monster::drawscores(N5110 &lcd) { char score_buffer[14]; sprintf(score_buffer,"%d",score); lcd.printString(score_buffer,60,0); } //画反派 void Monster::draw_blackmonsters(N5110 &lcd) { //画反派1 if (turn1 == 0) { monster_x1 += 1; lcd.drawSprite(monster_x1,monster_y1,7,7,(int *)blackMonster); if (monster_x1 >= 43) { turn1 = 1; } } if (turn1 == 1) { monster_x1 -= 1; lcd.drawSprite(monster_x1,monster_y1,7,7,(int *)blackMonster); if (monster_x1 <= 23) { turn1 = 0; } } //画反派2 if (turn2 == 0) { monster_x2 += 1; lcd.drawSprite(monster_x2,monster_y2,7,7,(int *)blackMonster); if (monster_x2 >= 20) { turn2 = 1; } } if (turn2 == 1) { monster_x2 -= 1; lcd.drawSprite(monster_x2,monster_y2,7,7,(int *)blackMonster); if (monster_x2 <= 1) { turn2 = 0; } } //画反派3 if (turn3 == 0) { monster_x3 += 1; lcd.drawSprite(monster_x3,monster_y3,7,7,(int *)blackMonster); if (monster_x3 >= 75) { turn3 = 1; } } if (turn3 == 1) { monster_x3 -= 1; lcd.drawSprite(monster_x3,monster_y3,7,7,(int *)blackMonster); if (monster_x3 <= 56) { turn3 = 0; } } } //画宝石 void Monster::draw_jewels(N5110 &lcd) { for (int i=0; i<7; i++) { if (jewels_on[i] == 1) { lcd.drawSprite(jewels_x[i],jewels_y[i],3,3,(int *)shapStar); } } } //画人物 void Monster::draw_monster(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D) { if (button_A.read() == 1) { monster_x0 += 1; } else if (button_B.read() == 1) { monster_y0 -= 1; } else if (button_C.read() == 1) { monster_x0 -= 1; } else if (button_D.read() == 1) { monster_y0 += 1; } //向右超出 if (monster_x0 > 84) { level += 1; } //向左限定 if (monster_x0 < 0) { monster_x0 = 0; } //向上限定 if (monster_y0 < 9) { monster_y0 = 9; } //向下限定 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); //是否碰到宝石 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(); }