雷电 游戏

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

 

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Event.*;

 

public class game {

 

 @SuppressWarnings("deprecation")
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  JFrame w = new JFrame();//有标题和边框的顶层窗口。
  w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的小红叉
  w.setSize(430, 500);//设置窗口大小
  w.setBounds(650, 200, 430,500);//对框架的位置和大小进行设置(使窗口处于正中间)
  w.setTitle("雷电");
  MyPanel9 mp = new MyPanel9();
  w.add(mp);
  w.addKeyListener(mp);
  mp.addKeyListener(mp);//鼠标键盘监听
  Thread t = new Thread(mp);//线程
  t.start();//开始线程
  w.show();//展示游戏界面
  w.setVisible(true);
 }
}

 

 @SuppressWarnings("serial")
class MyPanel9 extends JPanel implements Runnable,KeyListener{
 
 int count = 1000;//发射子弹数目
 int flag1 = 0;//标志flag为1时发射子弹
 int m = 0;//记录已发射子弹的数目
 int max = 500;//记录得分
 int life = 1;//记录重新开始次数
 
 int x = 190;//下面飞机坐标,使我方飞机处于游戏屏幕下方正中心
 int y = 410;
 
 int x1[] = new int [15];//上面飞机的坐标
 int y1[] = new int [15];
 
 int x2[] = new int [count];//发射子弹的坐标
 int y2[] = new int [count];
 
 int cnt = 0;
 boolean keyLeft = false;
 boolean keyRight = false;
 boolean keyDown = false;
 boolean keyUp = false;
 
 boolean IsStart = false;//游戏开始提醒
 boolean Regain = false;//判断是否重新开始游戏
 
 public MyPanel9()//上面飞机随机分布
 {
  for(int i = 0;i < 15;i++)
  {
   x1[i]=(int)(Math.random()*400);
   y1[i]=(int)(Math.random()*500);
  }
  
 }
 
 public void paint(Graphics g){
  super.paint(g);
  
  Image img2 = new ImageIcon("src/images/4.jpg").getImage();//画背景图片
  g.drawImage(img2, 0, 0, 430, 500, null);
  Image img1 = new ImageIcon("src/images/7.jpg").getImage();//画下面的飞机
  g.drawImage(img1, x, y, 30, 40, null);
  
  if(max > 0) {
   Font f = new Font("宋体",Font.BOLD,18);
   g.setFont(f);
   g.setColor(Color.RED);//设置字体颜色
   g.drawString("分数:"+max,20, 20);//画分数
   for(int i = 0;i < 10;i++) {
    Image img3 = new ImageIcon("src/images/2.jpg").getImage();//画上面的飞机
    g.drawImage(img3, x1[i], y1[i], 30, 40, null);
   }
  
   if(m == count) m = 0;
   
   if(IsStart == false) {
    Font fff = new Font("",Font.BOLD,20);
    g.setFont(fff);
    g.setColor(Color.orange);//设置字体颜色
    g.drawString("准备好了吗?游戏开始喽!!", 90, 200);//画开始游戏提示
    g.drawString("按返回键退出游戏", 120, 250);//提示按回车键重新开始游戏
   }
   
   if(flag1 ==1 ) {//画新的子弹位置
    x2[m] = x;
    y2[m] = y;
    m++;
    flag1 = 0;
   }
  
   for(int i = 0;i < m;i++) {//绘制子弹
    g.setColor(Color.RED);
    g.fillOval(x2[i]+5,y2[i], 15, 15);//使用当前颜色填充外接指定矩形框的椭圆。即子弹
   }
  }
  
  else {
   Font ff = new Font("",Font.BOLD,36);
   g.setFont(ff);
   g.setColor(Color.RED);
   g.drawString("GAME OVER", 100, 200);//绘制游戏结束
   g.drawString("按回车键重新开始游戏", 10, 250);//提示按回车键重新开始游戏
   g.drawString("按返回键重新退出游戏", 10, 300);//提示按回车键重新开始游戏
   if(Regain == true){
    max = 500;
    x = 190;//恢复游戏开始时我方飞机的位置
    y = 410;
    Regain = false;
   }
   
  }
 }
 
 public void run() {
  while(true) {
   //记录可更新时候
   cnt++;
   for(int i = 0;i<10;i++) {//飞机随机落下
    y1[i]++;
    if(y1[i] > 500) {
     y1[i] = 0;
     x1[i] = (int)(Math.random()*400);
     max -= 50;
    }
   }
   
   for(int j = 0;j < m;j++) {//子弹移动过程
    y2[j] -= 10;
   }
   
   for(int i = 0;i < m;i++) {//子弹击中飞机过程
    if(y2[i] > 0)
     for(int j = 0;j < 10 ; j++) {
      if(0 <= (y2[i]-y1[j]) && (y2[i]-y1[j] <= 10)) {
       if(-15 <= (x2[i]-x1[j]) && (x2[i]-x1[j]) <= 10) {
        max += 10;
        y2[i] =-1;
        x1[j] =(int)(Math.random()*400);
        y1[j] = 0;
       }
      }
     }
    }
   
   if(cnt % 10==0)
   {
    //按下一键后即可控制方向,不可停下来
    if(keyLeft == true)
    {
     x -= 10;
     if(x<0) {
      x = 0;
     }
    }
    
    if(keyRight == true)
    {
     x += 10;
     if(x>400) {
      x = 0;
     }
    }
    
    if(keyDown == true) {//下面的飞机向上移动
     y += 10;
     if(y<0) {
      y = 0;
     }
    }
    
    if(keyUp == true) {//下面的飞机向上移动
     y -= 10;
     if(y>420) {
      y = 0;
     }
    }
    
   }
   
   //if(max < 0) {//注释掉,防止出现卡顿状况
   // return;
   //}
   try {
    Thread.sleep(35);
   }catch(Exception e) {}
   repaint();
   }
  } 
 
 public void Timer()
 {
  
 }
 
 @Override
 public void keyPressed(KeyEvent e) {//按下某个键时调用此方法。
  // TODO Auto-generated method stub  
  
  if( e.getKeyCode() == KeyEvent.VK_LEFT ) {//下面的飞机向左移动
   keyLeft = true;
   keyRight = false;
   keyDown = false;
   keyUp = false;
  }
  
  if( e.getKeyCode() == KeyEvent.VK_RIGHT ) {//下面的飞机向左移动
   keyLeft = false;
   keyRight = true;
   keyDown = false;
   keyUp = false;
  }
  
  if(e.getKeyCode() == KeyEvent.VK_UP) {//下面的飞机向上移动
   keyLeft = false;
   keyRight = false;
   keyDown = false;
   keyUp = true;
  }
  
  if(e.getKeyCode() == KeyEvent.VK_DOWN) {//下面的飞机向下移动
   keyLeft = false;
   keyRight = false;
   keyDown = true;
   keyUp = false;
  }
  
  if(e.getKeyCode() == KeyEvent.VK_B) {//悬停状态
   keyLeft = false;
   keyRight = false;
   keyDown = false;
   keyUp = false;
  }
  
  if(e.getKeyCode()==KeyEvent.VK_ENTER) {//重新开始游戏
   Regain = true;
   life ++;
  }
  
  if(e.getKeyCode() == KeyEvent.VK_SPACE) {//发射子弹
   flag1 = 1;
   IsStart = true;
  }
  
  if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {//退出游戏
   System.exit(0);
  }
  
  this.repaint();//刷新窗口
  
 }

 

 @Override
 public void keyReleased(KeyEvent e) {//释放某个键时调用此方法。
  // TODO Auto-generated method stub
  
 }

 

 @Override
 public void keyTyped(KeyEvent e) {//键入某个键时调用此方法。
  // TODO Auto-generated method stub
  
 }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值