java小游戏基础设计参考代码

来源:互联网 发布:网络用语dt什么意思 编辑:程序博客网 时间:2024/05/22 07:42
package thread;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class ShootGame extends JFrame implements Runnable{
    
    JPanel panel1
=new JPanel();
    JPanel panel2
=new JPanel();
    
    MyCanvas mc
=new MyCanvas();
    
    JButton btnStart
=new JButton("开始");
    JButton btnStop
=new JButton("停止");
    
    Image imgBack1,imgBack2,imgHawk,imgBullet;
    
    
boolean started=false, fire=false;
    
    
int backY1=0,backY2=mc.getHeight();
    
int hawkX=160,hawkY=140,hawkWidth=50,hawkHeight=50;
    
int StepLength=10;
    
    Thread timer;
    
    
public static void main(String[] args) {
        
new ShootGame();    
    }

    
    
public ShootGame(){
        
this.setTitle("射击游戏");
        
this.getContentPane().setLayout(new BorderLayout());
        
        
this.getContentPane().add(panel1,"Center");
        
this.getContentPane().add(panel2,"South");
        
        imgBack1
=Toolkit.getDefaultToolkit().getImage("thread/background.png");
        imgBack2
=Toolkit.getDefaultToolkit().getImage("thread/background.png");
        imgHawk
=Toolkit.getDefaultToolkit().getImage("thread/hawk.png");
        imgBullet
=Toolkit.getDefaultToolkit().getImage("thread/bullet.png");
        
        mc.setSize(
400,320);
        panel1.add(mc);
        panel2.add(btnStart);
        panel2.add(btnStop);
        
        
this.setSize(400,300);
        
this.setResizable(false);
        
this.setLocationRelativeTo(null);
        
this.setVisible(true);
        
this.pack();        
        
        
//注册监听器
        
        
this.addWindowListener(new WindowAdapter(){
            
public void windowClosing(WindowEvent e) {
                System.exit(
0);
            }

        }
);
        
        btnStart.addActionListener(
new ActionListener(){
            
public void actionPerformed(ActionEvent e) {                
                started
=true;
                mc.requestFocus();
                start();            
            }
            
        }
);
        
        btnStop.addActionListener(
new ActionListener(){
            
public void actionPerformed(ActionEvent e) {
                started
=false;                
            }
            
        }
);
        
        mc.addKeyListener(
new KeyAdapter(){
            
public void keyPressed(KeyEvent e) {                
                
switch(e.getKeyCode()){
                    
case 37//按左方向键
                        hawkX=hawkX-StepLength;
                        
break;
                    
case 100://按数字小键盘区数字4键
                        hawkX=hawkX-StepLength;
                        
break;
                    
case 38//按上方向键
                        hawkY=hawkY-StepLength;
                        
break;
                    
case 104//按数字小键盘区数字8键
                        hawkY=hawkY-StepLength;
                        
break;
                    
case 39://按右方向键
                        hawkX=hawkX+StepLength;
                        
break;
                    
case 102://按数字小键盘区数字6键
                        hawkX=hawkX+StepLength;
                        
break;
                    
case 40://按下方向键
                        hawkY=hawkY+StepLength;
                        
break;
                    
case 98://按数字小键盘区数字2键
                        hawkY=hawkY+StepLength;
                        
break;
                    
case 10://按回车键
                        fire=true;                        
                        
break;        
                    
case 101://按数字小键盘区数字5键
                        fire=true;                        
                        
break;
                }

                    
                
if(hawkX<0)//碰左壁
                    hawkX=0;                    
                }

                
                
if(hawkX>=mc.getWidth()-hawkWidth)//碰右壁
                    hawkX=mc.getWidth()-hawkWidth;                    
                }

                
                
if(hawkY<0)//碰上壁
                    hawkY=0;                    
                }

                
                
if(hawkY>=mc.getHeight()-hawkHeight)//碰下壁
                    hawkY=mc.getHeight()-hawkHeight;                        
                }

                repaint();            
            }
                
        }
);        
    }

    
    
public void start() {
        timer
=new Thread(this);  //创建线程    
        timer.start();  //启动线程        
    }
    
    
    
class MyCanvas extends Canvas{
        
public void paint(Graphics g){            
            g.drawImage(imgBack1,
0,backY1,this.getWidth(),this.getHeight(),this);            
            g.drawImage(imgBack2,
0,backY2,this.getWidth(),this.getHeight(),this);            
            g.drawImage(imgHawk,hawkX,hawkY,
50,50,this);
            
if(fire){
                
for(int i=1;i<15;i++){
                    g.drawImage(imgBullet,hawkX,hawkY
-20*i,10,10,this);
                    g.drawImage(imgBullet,hawkX
+20,hawkY-20*i,10,10,this);
                    g.drawImage(imgBullet,hawkX
+40,hawkY-20*i,10,10,this);
                    
try {
                        Thread.sleep(
1);
                    }
 catch (InterruptedException e) {                
                        e.printStackTrace();
                    }

                }
                    
                fire
=false;
            }
                
        }

        
        
public void update(Graphics g){
            paint(g);
        }

    }


    
public void run() {
        
while(started){
            
try {
                Thread.sleep(
30);
            }
 catch (InterruptedException e) {                
                e.printStackTrace();
            }

            
            
if(backY1>-mc.getHeight())
                backY1
=backY1-1;
            
else
                backY1
=0;
            
            backY2
=backY1+mc.getHeight();
            
            mc.repaint();
        }
                
    }

}

 
原创粉丝点击