⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 planegamecanvas.java

📁 一款益智类的手机游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        private final int m_screenWidth;
        private final int m_screenHeight;
        private int m_x;
        private int m_y;
        private Image myBulletImage;
        private Image eBulletImage;
        private Image bossBulletImage;

        public BulletScroller(Canvas screen, int interval)
        {

            m_screenWidth = screen.getWidth();
            m_screenHeight = screen.getHeight();

            myBulletImage = mybullet[0].getImage();
            eBulletImage = eBullet[0].getImage();
            bossBulletImage = bossBullet[0].getImage();

            m_updateTimer.schedule(this, 0, interval);
            ClockTag = 0;
        }

        public void run()
        {
            ClockTag++;
            if (ClockTag % 2 == 0) {
                SendBulletTag = true;
                ClockTag = 0;
            }

            //my bullets move
            for (int i = 0; i < mybullet.length; i++) {
                if (mybullet[i].IsShow()) {
                    mybullet[i].ChangePos(mybullet[i].GetXSpeed(), 0); //move

                    if (mybullet[i].getXPos() >= m_screenWidth) { //out of the screen
                        mybullet[i].ShowFalse();
                    }
                }
            } //for

            //enemy plane bullets move and judge whether hit my plane
            for (int i = 0; i < eBullet.length; i++) {
                if (eBullet[i].IsShow()) {
                    eBullet[i].ChangePos( -eBullet[i].GetXSpeed(), 0); //move
                    if (eBullet[i].getXPos() <= 0) { //out of screen
                        eBullet[i].ShowFalse();
                    } //if
                    if (Collision(eBullet[i], myplane)) { //hit my plane?
                        eBullet[i].ShowFalse();
                        myplane.ChangeHP( -1);
                        myplane.SetState(PlaneGameObject.HIT);
                        if (myplane.getHP() <= 0) {
                            myplane.SetState(PlaneGameObject.BOMBING);
                        }
                    }
                } //if
            } //for

            //enemy boss bullets move
            for (int i = 0; i < bossBullet.length; i++) {
                if (bossBullet[i].IsShow()) {
                    bossBullet[i].ChangePos(bossBullet[i].GetXSpeed(),
                                            bossBullet[i].GetYSpeed());
                    if (bossBullet[i].getXPos() < 0 ||
                        bossBullet[i].getYPos() < 0 ||
                        bossBullet[i].getYPos() >= m_screenHeight) {
                        bossBullet[i].ShowFalse();
                    }
                    if (Collision(bossBullet[i], myplane)) { //hit my plane?
                        bossBullet[i].ShowFalse();
                        myplane.ChangeHP( -1);
                        myplane.SetState(PlaneGameObject.HIT);
                        if (myplane.getHP() <= 0) {
                            myplane.SetState(PlaneGameObject.BOMBING);
                        }
                    }
                }
            } //for
        } //void run()

        void paint(Graphics g)
        {
            int x, y;
            //draw my bullets
            for (int i = 0; i < mybullet.length; i++) {
                if (mybullet[i].IsShow()) {
                    x = mybullet[i].getXPos();
                    y = mybullet[i].getYPos();
                    g.drawImage(myBulletImage, x, y,
                                Graphics.VCENTER | Graphics.HCENTER);
                } //if
            } //for

            //draw enemy plane bullets
            for (int i = 0; i < eBullet.length; i++) {
                if (eBullet[i].IsShow()) {
                    x = eBullet[i].getXPos();
                    y = eBullet[i].getYPos();
                    g.drawImage(eBulletImage, x, y,
                                Graphics.VCENTER | Graphics.HCENTER);
                } //if
            } //for

            //draw enmey boss bullets
            for (int i = 0; i < bossBullet.length; i++) {
                if (bossBullet[i].IsShow()) {
                    x = bossBullet[i].getXPos();
                    y = bossBullet[i].getYPos();
                    g.drawImage(bossBulletImage, x, y,
                                Graphics.VCENTER | Graphics.HCENTER);
                } //if
            } //for

        } //void paint()
    } //end of class BulletScroller

    //class PlaneScroller controls the move of the enemy planes by time
    class ePlaneScroller
        extends TimerTask
    {
        private final Timer m_updateTimer = new Timer();
        private int ClockTag = 0;

        private Random generator = new Random();

        private final int m_maxX; //最大的横坐标值
        private final int m_maxY; //最大的纵坐标值
        private int m_x;
        private int m_y;

        private Image ExpImage;
        private Image BossExpImage;
        private Image BossRedImage;
        private Image tempImage;

        public ePlaneScroller(Canvas screen, int interval)
        {
            m_maxX = screen.getWidth() - 1;
            m_maxY = screen.getHeight() - 1;
            m_updateTimer.schedule(this, 200, interval);

            try {
                ExpImage = Image.createImage("/explosion.png");
            }
            catch (Exception e) {
                ExpImage = null;
            }
            try {
                BossExpImage = Image.createImage("/bossexplosion.png");
            }
            catch (Exception e) {
                BossExpImage = null;
            }
            try {
                BossRedImage = Image.createImage("/Boss01_red.PNG");
            }
            catch (Exception e) {
                BossRedImage = null;
            }
        }

        public void run()
        {
            int temp;
            int i, dx, dy;

            ClockTag++;
            //generate enemy planes
            for (i = 0; i < ePlane.length; i++) {
                if (!ePlane[i].IsShow()) { //generate a radom int
                    temp = (generator.nextInt() % (3 * m_maxY));

                    if (temp < m_maxY) { //generate a new enemy plane
                        ePlane[i].ShowTrue();
                        ePlane[i].SetPos(m_maxX, temp); //!SetPos not ChangePos

                        temp = (generator.nextInt() % 3 + 1);
                        ePlane[i].SetValue(temp); //decide plane type
                    }
                }

            }
            // enemy plane flys(change position)
            for (i = 0; i < ePlane.length; i++) {
                if (ePlane[i].IsShow() &&
                    ePlane[i].getState() == PlaneGameObject.ALIVE) {
                    dx = ePlane[i].getXSpeed();
                    dy = ePlane[i].getYSpeed();
                    switch (ePlane[i].getFlyType()) {
                        case 1:
                            ePlane[i].ChangePos( -dx, 0);
                            break;
                        case 2:
                            ePlane[i].ChangePos( -2 * dx, -dy);
                            break;
                        case 3:
                            ePlane[i].ChangePos( -2 * dx, dy);
                            break;
                        default:
                            ePlane[i].ChangePos( -dx, 0);
                    }
                    if (ePlane[i].getXPos() <= 0 || ePlane[i].getYPos() <= 0 ||
                        ePlane[i].getYPos() >= m_maxY) { //dismiss it
                        ePlane[i].ShowFalse();
                    } //end if
                }
            } //end for

            //enemy planes send bullets
            for (i = 0; i < ePlane.length; i++) {
                if (ePlane[i].IsShow() &&
                    ClockTag * (4 - ePlane[i].getID()) % 240 == 0) {
                    sendBullet(ePlane[i].getXPos(), ePlane[i].getYPos(), 1);
                }
            } //for

            //judge ePlane whether hitten
            for (i = 0; i < ePlane.length; i++) {
                if (ePlane[i].IsShow()) {
                    //whether hitten by the bullets?
                    for (int j = 1; j < mybullet.length; j++) {
                        if (mybullet[i].IsShow() &&
                            Collision(ePlane[i], mybullet[j])) {
                            mybullet[j].ShowFalse();
                            ePlane[i].SetState(PlaneGameObject.BOMBING);
                        } //if
                    } //for j
                    //whether collaps with my plane
                    if (Collision(ePlane[i], myplane)) {
                        ePlane[i].SetState(PlaneGameObject.BOMBING);
                        myplane.ChangeHP( -1);
                        myplane.SetState(PlaneGameObject.HIT);
                        if (myplane.getHP() <= 0) {
                            myplane.SetState(PlaneGameObject.BOMBING);
                        }
                    }
                } //if
            } //for i

            //enemy boss send bullets
            if (eBoss.IsShow() && ClockTag % 100 == 0) {
                sendBullet(eBoss.getXPos(), eBoss.getYPos(), 2);
            }
            //judge whether boss hitten
            if (eBoss.IsShow()) {
                for (i = 1; i < mybullet.length; i++) {
                    if (mybullet[i].IsShow() && Collision(eBoss, mybullet[i])) {
                        mybullet[i].ShowFalse();
                        eBoss.SetState(PlaneGameObject.HIT);
                        eBoss.ChangeHP( -1);
                        if (eBoss.getHP() == 0) {
                            eBoss.SetState(PlaneGameObject.BOMBING);
                        }
                    } //if
                } //for
            } //if

        } //void run()

        void paint(Graphics g)
        {
            int x, y;

            //draw enmey boss
            if (eBoss.IsShow()) {
                x = eBoss.getXPos();
                y = eBoss.getYPos();
                tempImage = eBoss.getImage();

                switch (eBoss.getState()) {
                    case PlaneGameObject.ALIVE:
                        g.drawImage(tempImage, x, y,
                                    Graphics.VCENTER | Graphics.HCENTER);
                        break;
                    case PlaneGameObject.HIT:
                        g.drawImage(BossRedImage, x, y,
                                    Graphics.VCENTER | Graphics.HCENTER);
                        if (eBoss.getHP() > 10) {
                            eBoss.SetState(PlaneGameObject.ALIVE);
                        }
                        break;
                    case PlaneGameObject.BOMBING:
                        g.drawImage(BossExpImage, x, y,
                                    Graphics.VCENTER | Graphics.HCENTER);
                        eBoss.ShowFalse();
                }
            } //if

            //draw enemy planes
            for (int i = 0; i < ePlane.length; i++) {
                if (ePlane[i].IsShow()) {
                    x = ePlane[i].getXPos();
                    y = ePlane[i].getYPos();
                    switch (ePlane[i].getState()) {
                        case PlaneGameObject.ALIVE:
                            tempImage = ePlane[i].getImage();
                            g.drawImage(tempImage, x, y,
                                        Graphics.VCENTER | Graphics.HCENTER);
                            break;
                        case PlaneGameObject.BOMBING:
                            g.drawImage(ExpImage, x, y,
                                        Graphics.VCENTER | Graphics.HCENTER);
                            ePlane[i].ShowFalse();
                            break;
                    } //switch
                } //if
            } //for

        } //void paint()
    } //class ePlaneScroller

    class ImageScroller
        extends TimerTask
    {
        private final Timer m_updateTimer = new Timer();
        private Image m_image;
        private final int m_screenWidth;
        private final int m_screenHeight;
        private final int m_imageWidth;
        private final int m_imageHeight;
        private final int m_leftOffset;
        private final int m_topOffset;
        private int m_x;
        private int m_y;

        private int ClockTag = 0;
//	private BackGround bground = new BackGround(1);

        public ImageScroller(Canvas screen, int interval)
        {

            //m_image = bground.getImage();

            try {
                m_image = Image.createImage("/BackGround01.png");
            }
            catch (Exception e) {
                m_image = null;
            }

            // calculate all the necessary constants
            m_screenWidth = screen.getWidth();
            m_screenHeight = screen.getHeight();
            m_imageWidth = m_image.getWidth();
            m_imageHeight = m_image.getHeight();
            m_leftOffset = (m_screenWidth - m_imageWidth) / 2;
            m_topOffset = (m_screenHeight - m_imageHeight) / 2;
            m_y = m_screenHeight - m_imageHeight;
            m_x = m_screenWidth;

            m_updateTimer.schedule(this, 0, interval);
        }

        /**
             * For each iteration of the scheduler, it updates the vertical position.
         */
        public void run()
        {
            // scroll
            m_x--;
            ClockTag++;
            if (ClockTag == 100) {
                eBoss.ShowTrue();
            }
        }

        /**
         * Draws the background on the Graphics object specified.
         *
         * @param g The Graphics object on which to draw the background.
         */
        public void paint(Graphics g)
        {
            // if we have reached the screen height then move back to bottom
            if (m_x <= 0) {
                g.drawImage(m_image, m_screenWidth, m_topOffset,
                            Graphics.TOP | Graphics.RIGHT);
                m_x = m_screenWidth;
            }
            else if (m_x <= m_imageWidth) {
                g.drawImage(m_image, m_screenWidth + m_x, m_topOffset,
                            Graphics.TOP | Graphics.RIGHT);
            }

            g.drawImage(m_image, m_x, m_topOffset,
                        Graphics.TOP | Graphics.RIGHT);
        }
    } //end of class ImageScroller

} //end of class PlaneGameCanvas

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -