SKY外语计算机学习

标题: 赛车游戏(能力有限,不是很完美,希望大家继续补充) [打印本页]

作者: 流氓    时间: 2012-6-9 22:09
标题: 赛车游戏(能力有限,不是很完美,希望大家继续补充)
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

Enemy.java

  1. import java.awt.Graphics;
  2. import java.awt.Image;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.util.Random;
  7. import javax.imageio.ImageIO;
  8. public class Enemy {
  9.     private int x;
  10.     public int getX() {
  11.         return x;
  12.     }
  13.     public void setX(int x) {
  14.         this.x = x;
  15.     }
  16.     private int y;
  17.     public int getY() {
  18.         return y;
  19.     }
  20.     public void setY(int y) {
  21.         this.y = y;
  22.     }
  23.     Random rdm_x=new Random();              //只需让x坐标为随机的
  24.     Random rdm_car=new Random();          //车的类型也是随机的
  25.     //四辆阻挡汽车,随机产生
  26.     File file1=new File("D:/图片/enemy1.jpg");
  27.     File file2=new File("D:/图片/enemy2.jpg");
  28.     File file3=new File("D:/图片/enemy3.jpg");
  29.     File file4=new File("D:/图片/enemy4.jpg");
  30.     private BufferedImage imgEnemy;
  31.     public Enemy()
  32.     {
  33.         y=80;
  34.         x=rdm_x.nextInt(500)+201;
  35.         //随机产生一种车
  36.         switch (rdm_car.nextInt(4))
  37.         {
  38.         case 0:
  39.             try {
  40.                 imgEnemy=ImageIO.read(file1);
  41.             } catch (IOException e) {
  42.                 e.printStackTrace();
  43.             }
  44.             break;
  45.         case 1:
  46.             try {
  47.                 imgEnemy=ImageIO.read(file2);
  48.             } catch (IOException e) {
  49.                 e.printStackTrace();
  50.             }
  51.             break;
  52.         case 2:
  53.             try {
  54.                 imgEnemy=ImageIO.read(file3);
  55.             } catch (IOException e) {
  56.                 e.printStackTrace();
  57.             }
  58.             break;
  59.         case 3:
  60.             try {
  61.                 imgEnemy=ImageIO.read(file4);
  62.             } catch (IOException e) {
  63.                 e.printStackTrace();
  64.             }
  65.             break;
  66.         default:
  67.             break;
  68.         }
  69.     }
  70.     public void Draw(Graphics g)
  71.     {
  72.         g.drawImage(imgEnemy,x,this.y,null);
  73.         y+=10;
  74.     }
  75. }
复制代码
GPXMain.java

  1. import javax.swing.JFrame;
  2. public class GPXMain extends JFrame {
  3.     public GPXMain()
  4.     {
  5.         GPXWin win=new GPXWin();
  6.         this.add(win);
  7.     }
  8.     public static void main(String[] args) {
  9.         new GPXMain();
  10.     }
  11. }
复制代码
GPXWin.java

  1. import java.awt.Graphics;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.KeyEvent;
  5. import java.awt.event.KeyListener;
  6. import java.awt.image.BufferedImage;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import javax.imageio.ImageIO;
  12. import javax.swing.JButton;
  13. import javax.swing.JPanel;
  14. public class GPXWin extends JPanel implements ActionListener,KeyListener,Runnable{
  15.     //玩家分数
  16.     private int score;
  17.     //这个变量是用来轮流显示两张马路图片的
  18.     private int Road_Flag=1;
  19.     Road road=new Road();
  20.     JButton startGame=new JButton("开始");
  21.     JButton stopGame=new JButton("结束");
  22.     Player player;
  23.     //游戏线程
  24.     Thread nThread;
  25.     Enemy enemy=new Enemy();
  26.     BufferedImage gameover;
  27.     File gameover_file=new File("D:/图片/gameover.jpg");
  28.     public GPXWin()
  29.     {
  30.         this.score=0;
  31.         try {
  32.             gameover=ImageIO.read(gameover_file);
  33.         } catch (IOException e) {
  34.             // TODO Auto-generated catch block
  35.             e.printStackTrace();
  36.         }
  37.         player=new Player();
  38.         this.add(startGame);
  39.         this.add(stopGame);
  40.         startGame.addActionListener(this);
  41.         stopGame.addActionListener(this);
  42.         this.addKeyListener(this);
  43.     }
  44.     public void paintComponent(Graphics g)
  45.     {
  46.         super.paintComponent(g);
  47.         g.drawString("您的分数是:"+score,30,30);
  48.         if(!Check_Hit())
  49.         {
  50.             repaint();
  51.             g.drawImage(gameover,200,80,null);
  52.             return;
  53.         }
  54.         g.drawRect(30, 80, 900, 600);
  55.         road.Draw(g,Road_Flag);
  56.         player.Draw(g);
  57.         Check_Limit();
  58.         enemy.Draw(g);
  59.     }
  60.     @Override
  61.     public void keyPressed(KeyEvent e) {
  62.         switch (e.getKeyCode()) {
  63.         case KeyEvent.VK_UP:
  64.             this.player.Move(0, -5);
  65.             break;
  66.         case KeyEvent.VK_DOWN:
  67.             this.player.Move(0, 5);
  68.             break;
  69.         case KeyEvent.VK_LEFT:
  70.             this.player.Move(-5, 0);
  71.             break;
  72.         case KeyEvent.VK_RIGHT:
  73.             this.player.Move(5, 0);
  74.             break;
  75.         default:
  76.             break;
  77.         }
  78.     }
  79.     @Override
  80.     public void keyReleased(KeyEvent arg0) {
  81.         // TODO Auto-generated method stub
  82.     }
  83.     @Override
  84.     public void keyTyped(KeyEvent arg0) {
  85.         // TODO Auto-generated method stub
  86.     }
  87.     @Override
  88.     public void actionPerformed(ActionEvent e) {
  89.         if(e.getSource()==startGame)
  90.         {
  91.             nThread=new Thread(this);
  92.             nThread.start();
  93.             this.requestFocus();
  94.             repaint();
  95.         }
  96.         if(e.getSource()==stopGame)
  97.         {
  98.             System.exit(0);
  99.         }
  100.     }
  101.     //这个方法用来检测敌人是否出屏幕
  102.     private void Check_Limit()
  103.     {
  104.         if(this.enemy.getY()+100>=680)
  105.         {
  106.             this.enemy=null;
  107.             this.enemy=new Enemy();
  108.         }
  109.     }
  110.     //判定相撞
  111.     private boolean Check_Hit()
  112.     {
  113.         //四种情况判定
  114.         boolean left_up=enemy.getY()+120>player.getY()&&enemy.getX()+55>player.getX()&&enemy.getY()<player.getY()&&enemy.getX()<player.getX();
  115.         boolean right_up=enemy.getX()>player.getX()&&enemy.getX()<player.getX()+53&&enemy.getY()+120>player.getY()&&enemy.getY()+120<player.getY()+109;
  116.         boolean left_down=enemy.getX()+55>player.getX()&&enemy.getX()+55<player.getX()+53&&player.getY()+109>enemy.getY()&&player.getY()+109<enemy.getY()+120;
  117.         boolean right_down=player.getX()+53>enemy.getX()&&player.getX()+53<enemy.getX()+55&&player.getY()+109>enemy.getY()&&player.getY()+109<enemy.getY()+120;
  118.         if(left_up||right_up||left_down||right_down)
  119.         {
  120.             nThread.stop();
  121.             enemy=null;
  122.             player=null;
  123.             road=null;
  124.             return false;
  125.         }
  126.         return true;
  127.     }
  128.     @Override
  129.     public void run() {
  130.         while(true)
  131.         {
  132.             this.score+=10;
  133.             if(Road_Flag==1)
  134.             {
  135.                 try {
  136.                     Thread.sleep(100);
  137.                 } catch (InterruptedException e) {
  138.                     // TODO Auto-generated catch block
  139.                     e.printStackTrace();
  140.                 }
  141.                 Road_Flag=2;
  142.                 repaint();
  143.             }
  144.             if(Road_Flag==2)
  145.             {
  146.                 try {
  147.                     Thread.sleep(100);
  148.                 } catch (InterruptedException e) {
  149.                     // TODO Auto-generated catch block
  150.                     e.printStackTrace();
  151.                 }
  152.                 Road_Flag=1;
  153.                 repaint();
  154.             }
  155.         }
  156.     }
  157. }
复制代码
Player.java

  1. import java.awt.Graphics;
  2. import java.awt.event.KeyAdapter;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import javax.imageio.ImageIO;
  6. public class Player extends KeyAdapter {
  7.     private BufferedImage img;
  8.     private int x;
  9.     public int getX() {
  10.         return x;
  11.     }
  12.     public void setX(int x) {
  13.         this.x = x;
  14.     }
  15.     private int y;
  16.     public int getY() {
  17.         return y;
  18.     }
  19.     public void setY(int y) {
  20.         this.y = y;
  21.     }
  22.     public Player()
  23.     {
  24.         try {
  25.             img=ImageIO.read(new File("D:/图片/Player.jpg"));
  26.         } catch (Exception e) {
  27.             // TODO: handle exception
  28.         }
  29.         x=400;y=400;
  30.     }
  31.     //画player的方法
  32.     public void Draw(Graphics g)
  33.     {
  34.         g.drawImage(img, this.x,this.y,null);
  35.     }
  36.     //只能左,右,上移动
  37.     public void Move(int x,int y)
  38.     {
  39.         this.x+=x;
  40.         this.y+=y;
  41.     }
  42. }
复制代码
Road.java

  1. import java.awt.Graphics;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import javax.imageio.ImageIO;
  6. public class Road {
  7.     File file1=new File("D:/图片/HorseRoad1.jpg");
  8.     File file2=new File("D:/图片/HorseRoad2.jpg");
  9.     private BufferedImage imgRoad;
  10.     private int x;
  11.     public int getX() {
  12.         return x;
  13.     }
  14.     public void setX(int x) {
  15.         this.x = x;
  16.     }
  17.     private int y;
  18.     public int getY() {
  19.         return y;
  20.     }
  21.     public void setY(int y) {
  22.         this.y = y;
  23.     }
  24.     public Road()
  25.     {
  26.         x=200;
  27.         y=80;
  28.     }
  29.    
  30.     public void Draw(Graphics g,int flag)
  31.     {
  32.         if(flag==1)
  33.         {
  34.             try {
  35.                 imgRoad=ImageIO.read(file1);
  36.             } catch (IOException e) {
  37.                 // TODO Auto-generated catch block
  38.                 e.printStackTrace();
  39.             }
  40.             g.drawImage(imgRoad,this.x,this.y,null);
  41.         }
  42.         if(flag==2)
  43.         {
  44.             try {
  45.                 imgRoad=ImageIO.read(file2);
  46.             } catch (IOException e) {
  47.                 // TODO Auto-generated catch block
  48.                 e.printStackTrace();
  49.             }
  50.             g.drawImage(imgRoad,this.x,this.y,null);
  51.         }
  52.     }
  53. }
复制代码



作者: rogan    时间: 2012-6-10 18:40
顶起
作者: SKY定格    时间: 2012-6-10 19:42
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

很好奇,,几行代码  图像是怎么搞 出来的


作者: 流氓    时间: 2012-8-1 22:55
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

很好奇,,几行代码  图像是怎么搞 出来的[/quote]
我上传图片了  但不能下载啊  不是我的错


作者: 夏师太~·    时间: 2012-8-3 07:23
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

虽然看不懂  还是要顶下啦  嘿


作者: 流氓    时间: 2012-8-4 00:35
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

虽然看不懂  还是要顶下啦  嘿[/quote]



作者: sky7987    时间: 2012-8-23 21:29
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

把你游戏。。。搞个网络版。。


作者: 流氓    时间: 2012-8-23 23:00
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

把你游戏。。。搞个网络版。。[/quote]
呵呵~~~~~~~~你来补充吧






欢迎光临 SKY外语计算机学习 (http://join.skywj.com/) Powered by Discuz! X2.5