Adol  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 2
          • 文章 - 6
          • 評論 - 5
          • 引用 - 0

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           
            1package game7;
            2
            3/*
            4    每按一下空格,就出現一個子彈,完成 O(∩_∩)O
            5*/

            6
            7import java.awt.*;
            8import java.awt.event.*;
            9import javax.swing.*;
           10
           11class TestPanel extends JPanel implements Runnable
           12{
           13    private int x,y; //那個圓的坐標
           14    
           15    private final int ovalWidth=50//圓的直徑
           16    
           17    TestPanel()
           18    {
           19        this.setSize(400400);
           20        x=200;
           21        y=50;
           22    }

           23    
           24    public void leftMove() //圓左移
           25    {
           26        x-=50;
           27        if(x<=-50) x=this.getWidth();
           28        updater();
           29    }

           30    
           31    public void rightMove() //圓右移
           32    {
           33        x+=50;
           34        if(x>=this.getWidth()) x=-50;
           35        updater();
           36    }

           37    
           38    public void upMove() //圓上移
           39    {
           40        y-=50;
           41        if(y<=-50) y=this.getHeight();
           42        updater();
           43    }

           44    
           45    public void downMove() //圓下移
           46    {
           47        y+=50;
           48        if(y>=this.getHeight()) y=-50;
           49        updater();
           50    }

           51    
           52    public void paint(Graphics g)
           53    {
           54        super.paint(g);  //加上,可以清空原來的,而且沒閃爍,而且不會出問題
           55        g.fillOval(x, y, ovalWidth, ovalWidth); //畫圓
           56    }

           57    
           58    public void updater() //實現消除閃爍
           59    {
           60        Image image;      //創建一張和原來大小一樣的圖像
           61        image=this.createImage(this.getWidth(),this.getHeight()); 
           62        Graphics gp=image.getGraphics(); //獲得此創建圖像的 畫筆
           63        
           64        paint(gp);  //調用paint  對此圖像作畫            
           65        
           66        Graphics g=getGraphics();
           67        g.drawImage(image, 00this);  //將此圖像畫到(this)畫布上
           68        
           69    }

           70    
           71    public void run()
           72    {
           73        int xx,yy;
           74        xx=(int)(Math.random()*10000)%300+50;
           75        yy=(int)(Math.random()*10000)%300+50;
           76        Bullet bl=new Bullet(xx,yy); //創建子彈
           77        bl.setLocation(); //設置子彈初始方位
           78        this.add(bl);  //添加
           79        boolean tag=true;  //控制循環用
           80        while(tag)
           81        {
           82            if(bl.getBulletInPanelX()>=0&&bl.getBulletInPanelX()<=this.getWidth()&&
           83                bl.getBulletInPanelY()>=0&&bl.getBulletInPanelY()<=this.getHeight()&&    
           84                !(bl.getBulletInPanelX()>=x&&bl.getBulletInPanelX()<=x+ovalWidth&&
           85                bl.getBulletInPanelY()>=y&&bl.getBulletInPanelY()<=y+ovalWidth)  )            
           86            {
           87                bl.upMove();  //上移
           88                bl.setLocation();  //設置方位
           89            }

           90            else
           91            {
           92                this.remove(bl); //出界或撞上什么了,移除
           93                tag=false;  //結束
           94            }

           95            try
           96            {
           97                Thread.sleep(10);
           98            }

           99            catch(InterruptedException e)
          100            {
          101                
          102            }

          103        }

          104    }

          105
          106}

          107
          108class Bullet extends Canvas //子彈類,每創建一個此類對象,即是一個子彈
          109{
          110    private final int bulletHeight=10//確定子彈大小的
          111    
          112    private int speed=1;  //子彈的速度
          113    
          114    private int beginX,beginY; //子彈頭的坐標,在自己畫布里的
          115        
          116    private int bulletX[]; // 繪制子彈形狀的數組 橫縱坐標
          117    private int bulletY[]; //這些都是相對自己畫布里的
          118    
          119    private int bulletInPanelX,bulletInPanelY; //子彈在Panel里的坐標,
          120                                                //唯一的2個外部屬性
          121    Bullet(int x, int y)
          122    {
          123        this.setSize(bulletHeight,    2*bulletHeight);
          124        bulletInPanelX=x;
          125        bulletInPanelY=y;
          126        bulletX=new int[5];
          127        bulletY=new int[5];
          128        initBeginXY();
          129        setBulletXY();
          130    }

          131    
          132    public void setBulletXY() //設置子彈5個點的坐標 
          133    {
          134        bulletX[0]=beginX;
          135        bulletX[1]=beginX+bulletHeight/2;
          136        bulletX[2]=beginX+bulletHeight/2;
          137        bulletX[3]=beginX-bulletHeight/2;
          138        bulletX[4]=beginX-bulletHeight/2;
          139        bulletY[0]=beginY;
          140        bulletY[1]=beginY+bulletHeight;
          141        bulletY[2]=beginY+2*bulletHeight;
          142        bulletY[3]=beginY+2*bulletHeight;
          143        bulletY[4]=beginY+bulletHeight;
          144    }

          145    
          146    public void initBeginXY() //初始化子彈頭坐標
          147    {
          148        beginX=(int)(bulletHeight*Math.tan(Math.PI/6));
          149        beginY=0;
          150    }

          151    
          152    public void upMove()  //子彈上移
          153    {
          154        bulletInPanelY-=speed;
          155    }

          156    
          157    public void downMove() //子彈下移
          158    {
          159        bulletInPanelY+=speed;
          160    }

          161    
          162    public void leftMove() //子彈左移
          163    {
          164        bulletInPanelX-=speed;
          165    }

          166    
          167    public void rightMove() //子彈右移
          168    {
          169        bulletInPanelX+=speed;
          170    }

          171        
          172    public void setLocation() //確定子彈坐標
          173    {
          174        this.setLocation(bulletInPanelX, bulletInPanelY);
          175    }

          176    
          177    public void paint(Graphics g) //畫出子彈
          178    {
          179        g.fillPolygon(bulletX, bulletY, 5);
          180    }

          181    
          182    public int getBulletSpeed() //獲得子彈速度
          183    {
          184        return speed;
          185    }

          186    
          187    public int getBulletInPanelX() //獲得子彈的橫坐標
          188    {
          189        return bulletInPanelX;
          190    }

          191    
          192    public int getBulletInPanelY() //獲得子彈的縱坐標
          193    {
          194        return bulletInPanelY;
          195    }

          196}

          197
          198class MyKeyAdapter extends KeyAdapter
          199{
          200    TestPanel tp;
          201    MyKeyAdapter(TestPanel tp)
          202    {
          203        this.tp=tp;
          204    }

          205    public void keyPressed(KeyEvent e)
          206    {
          207        if(e.getKeyCode()==KeyEvent.VK_LEFT)
          208            tp.leftMove();
          209        else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
          210            tp.rightMove();
          211        else if(e.getKeyCode()==KeyEvent.VK_UP)
          212            tp.upMove();
          213        else if(e.getKeyCode()==KeyEvent.VK_DOWN)
          214            tp.downMove();
          215        if(e.getKeyCode()==KeyEvent.VK_SPACE)
          216        {
          217            Thread th=new Thread(tp);  //沒按一次空格,創建一個線程
          218            th.start();    //線程開始,里面有創建子彈,即為每一個子彈創建一個線程
          219        }

          220    }

          221}

          222
          223public class BulletContinus extends JFrame
          224{
          225    BulletContinus()
          226    {
          227        super("學習如何每按一個空格,出現一個自動移動的子彈");
          228        setBounds(300150400400);
          229        setVisible(true);
          230        this.addWindowListener(new WindowAdapter()
          231        {
          232            public void windowClosing(WindowEvent e)
          233            {
          234                System.exit(0);
          235            }

          236        }
          );
          237    }

          238    public static void main(String[] args)
          239    {
          240        BulletContinus jf=new BulletContinus();
          241        TestPanel tp=new TestPanel();
          242        tp.addKeyListener(new MyKeyAdapter(tp));
          243        jf.add(tp);
          244        tp.requestFocusInWindow();    //獲得焦點
          245    }

          246}
          posted on 2009-08-12 23:20 Adol 閱讀(279) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          Copyright © Adol Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 肥乡县| 舞阳县| 共和县| 琼结县| 阳朔县| 高青县| 儋州市| 莱西市| 和田市| 怀集县| 山阳县| 任丘市| 佳木斯市| 太仓市| 长汀县| 会同县| 米易县| 商洛市| 呼图壁县| 沁源县| 大连市| 五原县| 高平市| 尼勒克县| 岢岚县| 靖边县| 临泽县| 渭源县| 秭归县| 克山县| 榆中县| 都昌县| 合作市| 耒阳市| 将乐县| 麦盖提县| 南靖县| 凌云县| 宜兰市| 宁化县| 华容县|