27

Dependencies:   N5110

Revision:
2:9a31febe6d2f
Parent:
1:48a028c4089e
--- a/Monster/monster.cpp	Fri Apr 09 06:34:43 2021 +0000
+++ b/Monster/monster.cpp	Sat Apr 24 03:01:47 2021 +0000
@@ -1,14 +1,111 @@
 #include "monster.h"
+#include "cstdlib"
+#include "ctime"
+#include "vector"
+
+using namespace std;
+
+#define random(a,b) (rand()%(b-a)+a)
+
+AnalogIn  joy_v(p20);
+AnalogIn  joy_h(p19);
+InterruptIn joy_button(p17);
+
+volatile int joy_button_flag = 0;
+
+int level = 1;
+int score_temp;
+
+int time_count;
+bool fire = true;
+
+//第三关
+struct Bullets {
+    
+    int x;
+    int y;
+    
+};
+
+Bullets buls;
+int add_bullets = 1;
+vector<Bullets> bullets;
+
+//敌方子弹
+struct BlackBullets {
+    
+    int x;
+    int y;
+    
+};
+
+BlackBullets black_buls;
+vector<BlackBullets> black_bullets;
+
+struct Monster_A {
+    
+    int x;
+    int y;
+    
+};
+
+struct Monster_B {
+    
+    int x;
+    int y;
+    int lives = 2;
+    
+};
+
+struct Monster_C {
+    
+    int x;
+    int y;
+    int lives = 5;
+    
+};
+
+Monster_A m_a;
+vector<Monster_A> monster_a;
+
+Monster_B m_b;
+vector<Monster_B> monster_b;
+
+Monster_C m_c;
+vector<Monster_C> monster_c;
+
+bool add_monster = true;
+
+void joy_button_isr();
 
 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) {
+                               
+    joy_button.fall(&joy_button_isr);
+    joy_button.mode(PullDown);    
+    
+    switch (level) {
+        
+        case 1:
+              this->monster_main1(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);
+              break;     
+        case 2:
+              this->monster_main2(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);
+              break;
+        case 3:
+              this->monster_main3(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);
+              break;
+    }
     
 }
-*/
-void Monster::monster_main(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D,
+
+//第一关
+void Monster::monster_main1(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D,
                            DigitalOut led1, DigitalOut led2, DigitalOut led3) {
+    //初始化暂停键
+    joy_button_flag = 0;
     
     //设置人物初始位置
     monster_x0 = 4;
@@ -41,16 +138,18 @@
         
         lcd.clear();
         
+        //画完背景和生命,移动人物,判断是否有障碍物
+        
         //画背景
         this->drawbackground1(lcd);
         this->drawscores(lcd);
         
+        //画人物
+        this->draw_monster(lcd, button_A, button_B, button_C, button_D);
+        
         //画宝石和反派
         this->draw_jewels(lcd);
-        this->draw_blackmonsters(lcd);
-        
-        //画人物
-        this->draw_monster(lcd, button_A, button_B, button_C, button_D);
+        this->draw_blackmonsters1(lcd);
         
         //失去生命
         this->loss_life(lcd);
@@ -61,12 +160,21 @@
         lcd.refresh();
         
         if (monster_x0 >84) {
-            this->monster_main(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);   
+            score_temp = score;
+            level = 2;
+            this->monster_main2(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);   
         }
         
         if (lifes <= 0) {
             break;
         }
+        
+        //暂停
+        if (joy_button_flag == 1) {
+            
+            this->pause(lcd,button_A,button_B);
+            
+        }
     
         thread_sleep_for(15); 
     }
@@ -76,7 +184,84 @@
     
 }
 
+//第二关
+void Monster::monster_main2(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D,
+                           DigitalOut led1, DigitalOut led2, DigitalOut led3) {
+    //设置人物初始位置
+    monster_x0 = 0;
+    
+    //设置反派位置
+    monster_x1 = 25;
+    monster_y1 = 11;
+    turn1 = 0;
+    
+    monster_x2 = 49;
+    monster_y2 = 30;
+    turn2 = 0;
+    
+    monster_x3 = 71;
+    monster_y3 = 17;
+    turn3 = 0;
+    
+    //开启宝石
+    int temp_jewels_x[7] = {6,11,42,47,52,42,74};
+    int temp_jewels_y[7] = {39,39,11,11,11,32,32};
+    
+    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->drawbackground2(lcd);
+        this->drawscores(lcd);
+        
+        //画人物
+        this->draw_monster(lcd, button_A, button_B, button_C, button_D);
+        
+        //画宝石和反派
+        this->draw_jewels(lcd);
+        this->draw_blackmonsters2(lcd);
+        
+        //失去生命
+        this->loss_life(lcd);
+        
+        //画生命
+        this->drawlifes(lcd, led1, led2, led3);
+        
+        lcd.refresh();
+        
+        if (monster_x0 >84) {
+            this->continueFight(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);  
+        }
+        
+        if (lifes <= 0) {
+            break;
+        }
+        
+        //暂停
+        if (joy_button_flag == 1) {
+            
+            this->pause(lcd,button_A,button_B);
+            
+        }
+    
+        thread_sleep_for(15); 
+    }
+    
+    //游戏结束
+    this->game_over(lcd,button_A);
+    
+}
 
+//画背景1
 void Monster::drawbackground1(N5110 &lcd) {
     
     lcd.drawLine(0,8,84,8,2);
@@ -87,6 +272,18 @@
        
 }
 
+//画背景2
+void Monster::drawbackground2(N5110 &lcd) {
+    
+    lcd.drawLine(0,8,84,8,2);
+    lcd.drawLine(12,9,72,9,1);
+    lcd.drawRect(29,25,26,4,FILL_BLACK);
+    lcd.drawRect(29,38,26,2,FILL_BLACK);
+    lcd.drawRect(82,25,2,23,FILL_BLACK);
+    lcd.drawRect(0,44,17,4,FILL_BLACK);
+    lcd.drawRect(0,22,17,11,FILL_TRANSPARENT);
+}
+
 //画生命
 void Monster::drawlifes(N5110 &lcd, DigitalOut led1, DigitalOut led2, DigitalOut led3) {
     
@@ -131,8 +328,8 @@
     
 }
 
-//画反派
-void Monster::draw_blackmonsters(N5110 &lcd) {
+//画反派 关卡1
+void Monster::draw_blackmonsters1(N5110 &lcd) {
     
     
     //画反派1
@@ -206,6 +403,81 @@
     
 }
 
+//画反派 关卡2
+void Monster::draw_blackmonsters2(N5110 &lcd) {
+    
+    
+    //画反派1
+    if (turn1 == 0) {
+        
+        monster_x1 += 1;
+        lcd.drawSprite(monster_x1,monster_y1,7,7,(int *)blackAntiMonster);
+        
+        if (monster_x1 >= 65) {
+           turn1 = 1;
+        }
+           
+    }
+    
+    if (turn1 == 1) {
+        
+        monster_x1 -= 1;
+        lcd.drawSprite(monster_x1,monster_y1,7,7,(int *)blackAntiMonster);
+        
+        if (monster_x1 <= 12) {
+           turn1 = 0;
+        }
+           
+    }
+    
+    //画反派2
+    if (turn2 == 0) {
+        
+        monster_x2 += 1;
+        lcd.drawSprite(monster_x2,monster_y2,7,7,(int *)blackAntiMonster);
+        
+        if (monster_x2 >= 48) {
+           turn2 = 1;
+        }
+           
+    }
+    
+    if (turn2 == 1) {
+        
+        monster_x2 -= 1;
+        lcd.drawSprite(monster_x2,monster_y2,7,7,(int *)blackAntiMonster);
+        
+        if (monster_x2 <= 29) {
+           turn2 = 0;
+        }
+           
+    }
+    
+    //画反派3
+    if (turn3 == 0) {
+        
+        monster_y3 += 1;
+        lcd.drawSprite(monster_x3,monster_y3,7,7,(int *)blackMonster);
+        
+        if (monster_y3 >= 40) {
+           turn3 = 1;
+        }
+           
+    }
+    
+    if (turn3 == 1) {
+        
+        monster_y3 -= 1;
+        lcd.drawSprite(monster_x3,monster_y3,7,7,(int *)blackMonster);
+        
+        if (monster_y3 <= 17) {
+           turn3 = 0;
+        }
+           
+    }
+    
+}
+
 //画宝石
 void Monster::draw_jewels(N5110 &lcd) {
     
@@ -222,23 +494,31 @@
 //画人物
 void Monster::draw_monster(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D) {
     
-    if (button_A.read() == 1) {
+    if (button_A.read() == 1 && lcd.getPixel(monster_x0+8,monster_y0) == 0 && lcd.getPixel(monster_x0+8,monster_y0+3) == 0 && lcd.getPixel(monster_x0+8,monster_y0+5) == 0) {
         monster_x0 += 1;  
     }
-    else if (button_B.read() == 1) {
+    else if (button_B.read() == 1 && lcd.getPixel(monster_x0,monster_y0-1) == 0 && lcd.getPixel(monster_x0+7,monster_y0-1) == 0) {
         monster_y0 -= 1;  
     }
-    else if (button_C.read() == 1) {
+    else if (button_C.read() == 1 && lcd.getPixel(monster_x0-1,monster_y0) == 0 && lcd.getPixel(monster_x0-1,monster_y0+3) == 0 && lcd.getPixel(monster_x0-1,monster_y0+5) == 0) {
         monster_x0 -= 1;  
     }
-    else if (button_D.read() == 1) {
+    else if (button_D.read() == 1 && lcd.getPixel(monster_x0,monster_y0+6) == 0 && lcd.getPixel(monster_x0+7,monster_y0+6) == 0) {
+        monster_y0 += 1;  
+    }
+    else if (joy_h.read() < 0.25 && lcd.getPixel(monster_x0+8,monster_y0) == 0 && lcd.getPixel(monster_x0+8,monster_y0+3) == 0 && lcd.getPixel(monster_x0+8,monster_y0+5) == 0) {
+        monster_x0 += 1;  
+    }
+    else if (joy_v.read() > 0.75 && lcd.getPixel(monster_x0,monster_y0-1) == 0 && lcd.getPixel(monster_x0+7,monster_y0-1) == 0) {
+        monster_y0 -= 1;  
+    }
+    else if (joy_h.read() > 0.85 && lcd.getPixel(monster_x0-1,monster_y0) == 0 && lcd.getPixel(monster_x0-1,monster_y0+3) == 0 && lcd.getPixel(monster_x0-1,monster_y0+5) == 0) {
+        monster_x0 -= 1;  
+    }
+    else if (joy_v.read() < 0.3 && lcd.getPixel(monster_x0,monster_y0+6) == 0 && lcd.getPixel(monster_x0+7,monster_y0+6) == 0) {
         monster_y0 += 1;  
     }
     
-    //向右超出
-    if (monster_x0 > 84) {
-       level += 1;
-    }
     //向左限定
     if (monster_x0 < 0) {
        monster_x0 = 0;
@@ -248,24 +528,10 @@
        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_y0 > 41) {
+        monster_y0 = 41;   
     }
     
-    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);
     
     //是否碰到宝石
@@ -282,21 +548,21 @@
     
     if (abs(monster_x0-monster_x1) < 7 && abs(monster_y0-monster_y1) < 6) {
         lifes -= 1;
-        turn1 = 0;
+        //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;
+        //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;
+        //turn1 = 0;
         monster_x3 = 100;
         monster_y3 = 100;
         thread_sleep_for(100);
@@ -306,6 +572,9 @@
 //游戏结束
 void Monster::game_over(N5110 &lcd, DigitalIn &button_A) {
     
+    level = 1;
+    score_temp = 0;
+    
     //最高分数
     if (score > best_score) {
         best_score = score;
@@ -325,4 +594,428 @@
        
 }
 
+//暂停游戏
+void Monster::pause(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B) {
+    
+    joy_button_flag = 0;
+    
+    while(1) {
+        
+        lcd.clear();
+    
+        lcd.printString("PAUSE",28,1);
+        lcd.drawLine(0,30,84,30,2);
+        lcd.printString("A.    CONTINUE",0,4);
+        lcd.printString("B.         OUT",0,5);
+        
+        lcd.refresh();
+        
+        if (button_A.read() == 1) {
+            break;   
+        }
+        else if (button_B.read() == 1) {
+            
+            //最高分数
+            if (score > best_score) {
+                best_score = score;
+            }
+            
+            score = score_temp;
+            
+            choice();
+        }
+    
+    }
+}
 
+void joy_button_isr() {
+ 
+    joy_button_flag = 1;
+    
+}
+
+//隐藏关卡的开启
+void Monster::continueFight(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D,
+            DigitalOut led1, DigitalOut led2, DigitalOut led3) {
+    
+    lcd.clear();
+    
+    lcd.printString("CONGRATULATE!",3,0);
+    lcd.printString("YOU WIN",21,2);
+    lcd.printString("PRESS A    OUT",0,5);
+    
+    lcd.refresh();
+    
+    thread_sleep_for(50);
+    
+    while(1) {
+        
+        if (button_A.read() == 1) {
+            
+            level = 1;
+            score_temp = 0;
+            
+            //最高分数
+            if (score > best_score) {
+                best_score = score;
+            }
+            
+            main();
+               
+        }
+        else if (button_D.read() == 1) {
+            
+            score_temp = score;
+            level = 3;
+            
+            lcd.clear();
+            
+            lcd.printString("THE LAST",18,2);
+            lcd.printString("DEFENCE",21,4);
+            
+            lcd.refresh();
+            
+            thread_sleep_for(200);
+            
+            this->monster_main3(lcd, button_A, button_B, button_C, button_D, led1, led2, led3);
+            
+        }
+        
+    }
+    
+}
+
+//**********************************************第三关********************************************************//
+
+//第三关
+void Monster::monster_main3(N5110 &lcd, DigitalIn &button_A, DigitalIn &button_B, DigitalIn &button_C, DigitalIn &button_D,
+                           DigitalOut led1, DigitalOut led2, DigitalOut led3) {
+    
+    //初始化暂停键
+    joy_button.fall(&joy_button_isr);
+    joy_button.mode(PullDown);
+    joy_button_flag = 0;
+    
+    //初始化自动攻击
+    auto_attack = false;
+    
+    //设置人物初始位置
+    monster_x0 = 0;
+    
+    //初始化时间计数
+    time_count = 0;
+    
+    //初始化反派
+    bullets.clear();
+    monster_a.clear();
+    monster_b.clear();
+    monster_c.clear();
+    
+    while(1) {
+     
+        lcd.clear();
+        
+        //最后的防线
+        lcd.drawLine(28,9,28,48,2);
+        
+        //画分数
+        this->drawscores(lcd);
+        
+        //画反派a,b,c
+        this->draw_blackmonsters3(lcd);
+        
+        //画人物
+        this->draw_monster_level3(lcd);
+        
+        //画子弹monster
+        this->draw_bullets(lcd,button_A);
+        
+        //画生命
+        this->drawlifes(lcd, led1, led2, led3);
+                
+        lcd.refresh();
+        
+        if (lifes <= 0) {
+            break;
+        }
+        
+        //暂停
+        if (joy_button_flag == 1) {
+            
+            this->pause(lcd,button_A,button_B);
+            
+        }
+        
+        //自动攻击
+        if (button_C == 1) {
+            auto_attack = !auto_attack;
+        }
+        
+        time_count += 1;
+        if (time_count%3 == 0) {
+            fire = true;   
+        }
+        
+        thread_sleep_for(15);
+        
+    }
+    
+    //游戏结束
+    this->game_over(lcd,button_A);
+    
+    
+}
+
+void Monster::draw_blackmonsters3(N5110 &lcd) {
+    
+    //画反派c
+    if ((time_count % 71) == 0) {
+        for (int j = 0; j < monster_c.size(); j++) {
+            
+            if ( monster_c[j].x < 0 ) {
+                
+                monster_c[j].x = 84;
+                monster_c[j].y = random(10,35);
+                add_monster = false;
+                break;
+            }
+        }
+        
+        if (add_monster == true) {
+            m_c.x = 84;
+            m_c.y = random(10,35);
+            monster_c.push_back(m_c);
+        }
+        add_monster = true;
+    }
+    
+    for (int i_c = 0; i_c < monster_c.size(); i_c++) {
+        
+        monster_c[i_c].x -= 1;
+        lcd.drawSprite(monster_c[i_c].x,monster_c[i_c].y,10,11,(int *)blackMonster_shield);
+        
+        for (int i = 0; i < bullets.size(); i++) {
+            
+            if ( bullets[i].y < (monster_c[i_c].y+10) &&  bullets[i].y > (monster_c[i_c].y-3) && bullets[i].x > (monster_c[i_c].x-5) && bullets[i].x < (monster_c[i_c].x+11)) {
+             
+                bullets[i].x = 100;
+                monster_c[i_c].lives -= 1;
+                
+            }
+            
+        }
+        
+        if (monster_c[i_c].lives == 0) {
+            monster_c[i_c].lives = 5 + (time_count/1000);
+            monster_c[i_c].x = -100;
+            score += 1;
+        }
+        
+        if (monster_c[i_c].x <29 && monster_c[i_c].x >0) {
+            monster_c[i_c].x = -100;
+            lifes -= 1;
+        }
+        
+    }
+    
+    //画反派b
+    if ((time_count % 61) == 0) {
+        for (int j_b = 0; j_b < monster_b.size(); j_b++) {
+            
+            if ( monster_b[j_b].x < 0 ) {
+                
+                monster_b[j_b].x = 84;
+                monster_b[j_b].y = random(10,35);
+                add_monster = false;
+                break;
+            }
+        }
+        
+        if (add_monster == true) {
+            m_b.x = 84;
+            m_b.y = random(10,35);
+            monster_b.push_back(m_b);
+        }
+        add_monster = true;
+    }
+    
+    for (int i_b = 0; i_b < monster_b.size(); i_b++) {
+        
+        monster_b[i_b].x -= 2;
+        lcd.drawSprite(monster_b[i_b].x,monster_b[i_b].y,6,11,(int *)blackMonster_sword);
+        
+        for (int i = 0; i < bullets.size(); i++) {
+            
+            if ( bullets[i].y < (monster_b[i_b].y+6) &&  bullets[i].y > (monster_b[i_b].y-3) && bullets[i].x > (monster_b[i_b].x-5) && bullets[i].x < (monster_b[i_b].x+11)) {
+             
+                bullets[i].x = 100;
+                monster_b[i_b].lives -= 1;
+                
+            }
+            
+            if (monster_b[i_b].lives == 0) {
+                monster_b[i_b].lives = 2 + (time_count/1500);
+                monster_b[i_b].x = -100;
+                score += 1;
+            }
+            
+        }
+        
+        if (monster_b[i_b].x <29 && monster_b[i_b].x >0) {
+            monster_b[i_b].x = -100;
+            lifes -= 1;
+        }
+        
+    }
+    
+    //画反派a
+    if ((time_count % 41) == 0) {
+        for (int j_a = 0; j_a < monster_a.size(); j_a++) {
+            
+            if ( monster_a[j_a].x < 0 ) {
+                
+                monster_a[j_a].x = 84;
+                monster_a[j_a].y = random(10,35);
+                add_monster = false;
+                break;
+            }
+        }
+        
+        if (add_monster == true) {
+            m_a.x = 84;
+            m_a.y = random(10,35);
+            monster_a.push_back(m_a);
+        }
+        add_monster = true;
+    }
+    
+    for (int i_a = 0; i_a < monster_a.size(); i_a++) {
+        
+        monster_a[i_a].x -= 2;
+        lcd.drawSprite(monster_a[i_a].x,monster_a[i_a].y,7,7,(int *)blackMonster);
+        
+        for (int i = 0; i < bullets.size(); i++) {
+            
+            if ( bullets[i].y < (monster_a[i_a].y+6) &&  bullets[i].y > (monster_a[i_a].y-3) && bullets[i].x > (monster_a[i_a].x-5) && bullets[i].x < (monster_a[i_a].x+11)) {
+             
+                bullets[i].x = 100;
+                monster_a[i_a].x = -100;
+                score += 1;
+                
+            }
+            
+        }
+        
+        if (monster_a[i_a].x <29 && monster_a[i_a].x >0) {
+            monster_a[i_a].x = -100;
+            lifes -= 1;
+        }
+        
+    }
+    
+    
+}
+
+//画人物level 3
+void Monster::draw_monster_level3(N5110 &lcd) {
+    
+    if (joy_h.read() < 0.25 && lcd.getPixel(monster_x0+8,monster_y0) == 0 && lcd.getPixel(monster_x0+8,monster_y0+3) == 0 && lcd.getPixel(monster_x0+8,monster_y0+5) == 0) {
+        monster_x0 += 1;  
+    }
+    else if (joy_v.read() > 0.75 && lcd.getPixel(monster_x0,monster_y0-1) == 0 && lcd.getPixel(monster_x0+7,monster_y0-1) == 0) {
+        monster_y0 -= 1;  
+    }
+    else if (joy_h.read() > 0.85 && lcd.getPixel(monster_x0-1,monster_y0) == 0 && lcd.getPixel(monster_x0-1,monster_y0+3) == 0 && lcd.getPixel(monster_x0-1,monster_y0+5) == 0) {
+        monster_x0 -= 1;  
+    }
+    else if (joy_v.read() < 0.3 && lcd.getPixel(monster_x0,monster_y0+6) == 0 && lcd.getPixel(monster_x0+7,monster_y0+6) == 0) {
+        monster_y0 += 1;  
+    }
+    
+    //向左限定
+    if (monster_x0 < 0) {
+       monster_x0 = 0;
+    }
+    //向右限定
+    if (monster_x0 > 15) {
+       monster_x0 = 15;
+    }
+    //向上限定
+    if (monster_y0 < 9) {
+       monster_y0 = 9;
+    }
+    //向下限定
+    if (monster_y0 > 41) {
+        monster_y0 = 41;   
+    }
+    
+    lcd.drawSprite(monster_x0,monster_y0,6,11,(int *)whiteMonster_sword);
+      
+}
+
+//攻击
+void Monster::draw_bullets(N5110 &lcd, DigitalIn &button_A) {
+    
+    if ((button_A == 1 || auto_attack == true) && fire == true) {
+        
+        for (int j = 0; j < bullets.size(); j++) {
+            
+            if ( bullets[j].x >= 100 ) {
+                
+                bullets[j].x = monster_x0+2;
+                bullets[j].y = monster_y0+2;
+                add_bullets = 0;
+                break;
+            }
+        }
+        
+        if (add_bullets == 1) {
+            buls.x = monster_x0+2;
+            buls.y = monster_y0+2;
+            bullets.push_back(buls);
+        }
+        add_bullets = 1;
+        fire = false;
+    }
+    
+    for (int i = 0; i < bullets.size(); i++) {
+        
+        bullets[i].x += 10;
+        lcd.drawSprite(bullets[i].x,bullets[i].y,3,2,(int *)bullet);
+        
+        if (bullets[i].x > 78) {
+            
+            bullets[i].x = 100;
+            
+        }
+        
+    }
+    
+    //****************************//
+    /*
+    int t = bullets.size();
+    char c[14];
+    sprintf(c,"%d",t);
+    lcd.printString(c,40,5);
+    */
+    
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                       
+
+