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

📄 grabgame.java

📁 利用Java编程制作的小游戏 实现了经典游戏 螃蟹过街 简单适合初学者参考学习
💻 JAVA
字号:
   import java.applet.Applet;
   import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;
   public class GrabGame extends JApplet  implements Runnable{

       Graphics g2;//前台图形
       Image road;//道路图片
       Image tank;//坦克图片
       Image truck;//卡车图片
       Image crab;//螃蟹图片
       Image UFO;//UFO图片
       Image rocket;//火箭图片
       Image die;//被撞螃蟹图片
       Image gameover;//游戏结束图片
       Image img2;//后台缓冲区
       int xCrab;//螃蟹座标
       int yCrab;
       int xUFO;//UFO座标
       int xRocket;//火箭座标
       int xTank;//坦克座标
       int xTruck;//卡车座标
       int num;//生命数目
       int score;//积分
       int SuccessTimes;//成功通过街道的次数
       int sleepTime;//线程休眠时间
       int speed;//速度等级
       boolean st=true;//线程运行开关,为true时线程运行
       private Thread CrabThread;
       
       public GrabGame(){//构造方法,用于设定初值
          xCrab = 140;
          yCrab = 205;
          xUFO = -80;
          xRocket = 320;
          xTank = -80;
          xTruck = 320;
          num = 5;//有5次机会。或者说有5条命
          sleepTime = 30;
          speed = 1;
       }

       public void start(){//创建并启动线程
          if(CrabThread == null){
             CrabThread = new Thread(this);
             CrabThread.start();
          }
       }

       public void stop(){//停止并销毁线程
          if(CrabThread != null){
             CrabThread.stop();
             CrabThread = null;
          }
       }

       public void run(){
          do{
              try{
                 repaint();
                 Thread.sleep(sleepTime);
              }
              catch(InterruptedException e){
              }
           } while(st);//st为true时,线程运行,否则停止
       }    
       

       public void destroy(){
       }

       public void init(){
           this.addKeyListener(new HandleKey());
          road = getImage(getCodeBase(), "pic/road.jpg");
          tank = getImage(getCodeBase(), "pic/tank.jpg");
          crab = getImage(getCodeBase(), "pic/crab.jpg");
          truck = getImage(getCodeBase(), "pic/truck.jpg");
          die = getImage(getCodeBase(), "pic/die.jpg");
         rocket = getImage(getCodeBase(), "pic/rocket.jpg");
         UFO = getImage(getCodeBase(), "pic/UFO.jpg");
         gameover = getImage(getCodeBase(), "pic/game.jpg");
         img2 = createImage(320, 240);//创建后台缓冲区
         g2 = img2.getGraphics();
         requestFocus();
         setSize(420, 340);
       }

       public void paint(Graphics g){       	  
          g2.drawImage(road, 0, 0, this);
          if(xUFO <= 320){//如果没有走到最左端
             xUFO += 4; //则一直向前走
          }
          else{
             xUFO = -80;//否则回到出发点
          }
          if(xRocket >= -80){ //如果没有走到最右端
             xRocket -= 3; //则一直向前走
           }
          else{
             xRocket = 320; //否则回到出发点
           }
          if(xTank <= 320){
             xTank += 2;
          }
          else{
             xTank = -80;
          }
          if(xTruck >= -80){
             xTruck--;
          }
          else{
             xTruck = 320;
          }
          g2.drawImage(UFO, xUFO, 41, this);
          g2.drawImage(rocket, xRocket, 81, this);
          g2.drawImage(tank, xTank, 121, this);
          g2.drawImage(truck, xTruck, 161, this);
          g2.drawImage(crab, xCrab, yCrab, this);
             //以下为螃蟹与各种交通工具的碰撞检查
          if(yCrab > 40&& yCrab < 80 && xCrab >= xUFO - 40
            && xCrab <= xUFO + 80){
               g2.drawImage(die, xCrab, yCrab, this);
               try{
                    CrabThread.sleep(500);
               }catch(InterruptedException e){}
               num--;
               xCrab = 140;
               yCrab = 205;
           }
           if(yCrab > 80 && yCrab < 120 && xCrab >= xRocket - 40
             && xCrab <=xRocket + 80){
               g2.drawImage(die, xCrab, yCrab, this);
               try{
                    CrabThread.sleep(500);
               }catch(InterruptedException e){}
               num--;//发生碰撞则少了一条命
               xCrab = 140;//螃蟹回到出发点
               yCrab = 205;
           }
           if(yCrab > 120 && yCrab < 160 && xCrab >=xTank - 40
             && xCrab <= xTank + 80){
               g2.drawImage(die, xCrab, yCrab, this);
               try{
                    CrabThread.sleep(500);
               }catch(InterruptedException e){}
               num--;
               xCrab = 140;
               yCrab = 205;
           }
           if(yCrab > 160 && yCrab < 200 && xCrab >=xTruck - 40
             && xCrab <= xTruck + 80){
               g2.drawImage(die, xCrab, yCrab, this);
               try{
                    CrabThread.sleep(500);
               }catch(InterruptedException e){}
               num--;
               xCrab = 140;
               yCrab = 205;
           }
            //以下为螃蟹成功通过道路的处理方法
           if(yCrab > 205){
              yCrab = 205;//回到出发点
           }
           if(yCrab <= 4){//如果成功通过道路
              yCrab = 205;//则回到出发点
              score += 100;//并且加100分
              SuccessTimes++;//记录成功的次数
           }
           if(SuccessTimes == 5){//如果5次成功通过道路
              if(sleepTime >= 10) {//则交通工具速度加快
                 sleepTime -= 6;
                 if(speed < 4){
                   speed++;
                 }   
                 else{  
                    speed = 4;
                 }      
                   
              } 
              else{
                   sleepTime = 10;
              }
              num++;//命数加1
              SuccessTimes = 0;
           }
           if(num < 0){//如果命数为0,则游戏结束
              g2.drawImage(gameover, 0, 0, this);
              st=false;
           }
           g2.drawString("生命=" + num + " ", 10, 10);
           g2.drawString("成绩=" + score + " ", 10, 30);
           g2.drawString("速度=" + speed + " ", 60, 10);
           g.drawImage(img2, 0, 0, this);
       }

       public void update(Graphics g){
           paint(g);
       }
       
        //键盘事件响应
        class   HandleKey  extends KeyAdapter{
            public  void keyPressed(KeyEvent  e){
                if(e.getKeyCode()==KeyEvent.VK_UP){
                     yCrab -= 40;
                }
                if(e.getKeyCode()==KeyEvent.VK_DOWN){
                    yCrab += 40;
                }
                 if(e.getKeyCode()==KeyEvent.VK_LEFT){
                    xCrab -= 40;
                }
                 if(e.getKeyCode()==KeyEvent.VK_RIGHT){
                    xCrab += 40;
                }
                repaint();
            }
        }    
 }

⌨️ 快捷键说明

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