Adol  
          日歷
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789
          統(tǒng)計(jì)
          • 隨筆 - 2
          • 文章 - 6
          • 評論 - 5
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
            1package game6;
            2
            3/*
            4    這里我們按空格后就會(huì)出現(xiàn)一個(gè)子彈形狀的東西向上移動(dòng),用雙緩沖實(shí)現(xiàn)的
            5*/

            6
            7import java.awt.*;
            8import java.awt.event.*;
            9import javax.swing.*;
           10
           11class TestCanvas extends Canvas implements Runnable
           12{
           13    private int x,y; //那個(gè)圓的坐標(biāo)
           14    
           15    private final int ovalWidth=50;
           16    
           17    private final int bulletHeight=10//確定子彈大小的
           18    
           19    private int speed=1;  //子彈的速度
           20    
           21    private int beginX,beginY; //子彈頭的坐標(biāo)
           22    
           23    private int bulletX[]; // 繪制子彈形狀的數(shù)組 橫縱坐標(biāo)
           24    private int bulletY[];
           25    private boolean isDrawBullet; //是否畫子彈 true表示是,false表示否
           26    
           27    TestCanvas()
           28    {
           29        this.setSize(400400);
           30        x=200;
           31        y=50;
           32        isDrawBullet=false;
           33        bulletX=new int[5];
           34        bulletY=new int[5];
           35        initBeginXY();
           36        setBulletXY();
           37    }

           38    
           39    public void setBulletXY() //設(shè)置子彈5個(gè)點(diǎn)的坐標(biāo)
           40    {
           41        bulletX[0]=beginX;
           42        bulletX[1]=beginX+bulletHeight/2;
           43        bulletX[2]=beginX+bulletHeight/2;
           44        bulletX[3]=beginX-bulletHeight/2;
           45        bulletX[4]=beginX-bulletHeight/2;
           46        bulletY[0]=beginY;
           47        bulletY[1]=beginY+bulletHeight;
           48        bulletY[2]=beginY+2*bulletHeight;
           49        bulletY[3]=beginY+2*bulletHeight;
           50        bulletY[4]=beginY+bulletHeight;
           51    }

           52    
           53    public void initBeginXY() //初始化子彈頭坐標(biāo)
           54    {
           55        beginX=200;
           56        beginY=200;
           57    }

           58    
           59    public void leftMove() //左移
           60    {
           61        x-=50;
           62        if(x<=-50) x=this.getWidth();
           63        repaint();
           64    }

           65    
           66    public void rightMove() //右移
           67    {
           68        x+=50;
           69        if(x>=this.getWidth()) x=-50;
           70        repaint();
           71    }

           72    
           73    public void upMove() //上移
           74    {
           75        y-=50;
           76        if(y<=-50) y=this.getHeight();
           77        repaint();
           78    }

           79    
           80    public void downMove() //下移
           81    {
           82        y+=50;
           83        if(y>=this.getHeight()) y=-50;
           84        repaint();
           85    }

           86    
           87    public void drawBullet(Graphics g) //畫出子彈
           88    {
           89        g.fillPolygon(bulletX, bulletY, 5);
           90    }

           91    
           92    public void doOrNotdoDrawBullet(boolean tag) //是否畫出子彈
           93    {
           94        isDrawBullet=tag;
           95        repaint();
           96    }

           97    
           98    public boolean getIsDrawBullet()
           99    {
          100        return isDrawBullet;
          101    }

          102    
          103    public void paint(Graphics g)
          104    {
          105        g.fillOval(x, y, ovalWidth, ovalWidth);
          106    }

          107    
          108    public void update(Graphics g) //實(shí)現(xiàn)消除閃爍
          109    {
          110        Image image;      //創(chuàng)建一張和原來大小一樣的圖像
          111        image=this.createImage(this.getWidth(),this.getHeight()); 
          112        Graphics gp=image.getGraphics(); //獲得此創(chuàng)建圖像的 畫筆
          113        paint(gp);  //調(diào)用paint  對此圖像作畫
          114            
          115        if(isDrawBullet)  drawBullet(gp); //可能畫子彈
          116    
          117        g.drawImage(image, 00this);  //將此圖像畫到(this)畫布上
          118    }

          119    
          120    public void run()
          121    {
          122        while(true)
          123        {
          124            if( isDrawBullet&&
          125                 beginX>=0&&beginX<=this.getWidth()&&
          126                  beginY>=0&&beginY<=this.getHeight()&&
          127                  !(beginX>=x&&beginX<=x+ovalWidth&&
          128                  beginY>=y&&beginY<=y+ovalWidth) )
          129            {
          130                beginY-=speed;  //移動(dòng)
          131                setBulletXY();  //設(shè)置
          132                repaint();  //重繪
          133            }

          134            else
          135                doOrNotdoDrawBullet(false); //子彈消失
          136            try
          137            {
          138                Thread.sleep(10);
          139            }

          140            catch(InterruptedException e)
          141            {
          142                
          143            }

          144        }

          145    }

          146
          147}

          148
          149class MyKeyAdapter extends KeyAdapter
          150{
          151    TestCanvas tc;
          152    Thread th;
          153    MyKeyAdapter(TestCanvas tc)
          154    {
          155        this.tc=tc;
          156        th=new Thread(this.tc);
          157    }

          158    public void keyPressed(KeyEvent e)
          159    {
          160        if(e.getKeyCode()==KeyEvent.VK_LEFT)
          161            tc.leftMove();
          162        else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
          163            tc.rightMove();
          164        else if(e.getKeyCode()==KeyEvent.VK_UP)
          165            tc.upMove();
          166        else if(e.getKeyCode()==KeyEvent.VK_DOWN)
          167            tc.downMove();
          168        if(e.getKeyCode()==KeyEvent.VK_SPACE)
          169        {
          170            if(!tc.getIsDrawBullet())  //判斷子彈是否已畫
          171            {
          172                tc.initBeginXY();            //要畫子彈時(shí)初始化
          173                tc.setBulletXY();  //立即設(shè)置
          174            }

          175            tc.doOrNotdoDrawBullet(true);
          176            try
          177            {
          178                th.start();
          179            }

          180            catch(IllegalThreadStateException ee)
          181            {
          182                
          183            }
                      
          184        }

          185    }

          186}

          187
          188public class BulletAppearAndDis extends JFrame
          189{
          190    BulletAppearAndDis()
          191    {
          192        super("學(xué)習(xí)如何在按空格后出現(xiàn)一個(gè)會(huì)自動(dòng)移動(dòng)的子彈,且是畫的");
          193        setBounds(300150400400);
          194        setVisible(true);
          195        this.addWindowListener(new WindowAdapter()
          196        {
          197            public void windowClosing(WindowEvent e)
          198            {
          199                dispose();
          200                System.exit(0);
          201            }

          202        }
          );
          203    }

          204    public static void main(String[] args)
          205    {
          206        BulletAppearAndDis jf=new BulletAppearAndDis();
          207        TestCanvas tc=new TestCanvas();
          208        tc.addKeyListener(new MyKeyAdapter(tc));
          209        jf.add(tc);
          210        tc.requestFocusInWindow();
          211    }

          212}
          posted on 2009-08-12 23:19 Adol 閱讀(221) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © Adol Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 神木县| 于田县| 汝南县| 翼城县| 格尔木市| 岚皋县| 栖霞市| 崇礼县| 灵山县| 深州市| 上高县| 纳雍县| 青铜峡市| 清丰县| 红河县| 华阴市| 满洲里市| 荆州市| 读书| 三河市| 信阳市| 道孚县| 海丰县| 宁国市| 二连浩特市| 蓬莱市| 高邑县| 柏乡县| 曲水县| 桐柏县| 天津市| 尼勒克县| 德昌县| 抚远县| 象州县| 久治县| 东山县| 比如县| 延庆县| 廊坊市| 鹤山市|