设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6589|回复: 7

[其他] 赛车游戏(能力有限,不是很完美,希望大家继续补充)

[复制链接]

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

发表于 2012-6-9 22:09: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. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

65

主题

3

好友

739

积分

超级版主

Rank: 8Rank: 8

自我介绍
新年第一天据说有雨,全民齐赏日出的计划恐要泡汤。”宋仁宗拍着包拯的肩,“朕决定把你悬挂在城门上。”“但微臣额上的不是太阳是月亮啊!”“没事,挂久一点就会升级成太阳
生肖
星座
狮子座
性别

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 论坛元老

发表于 2012-6-10 18:40:44 |显示全部楼层
顶起
回复

使用道具 评分 举报

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

发表于 2012-6-10 19:42:15 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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

你老婆要生了。我要当爹了
回复

使用道具 评分 举报

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

发表于 2012-8-1 22:55:35 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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

回复

使用道具 评分 举报

114

主题

2

好友

975

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
射手座
性别

突出贡献 优秀版主 荣誉管理 论坛元老 最佳新人 灌水之王

发表于 2012-8-3 07:23:15 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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

给所有的胖纸讲个鬼故事,夏天来了。。   
回复

使用道具 评分 举报

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

发表于 2012-8-4 00:35:09 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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


回复

使用道具 评分 举报

2

主题

2

好友

217

积分

中级会员

Rank: 3Rank: 3

性别
保密
发表于 2012-8-23 21:29:23 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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

回复

使用道具 评分 举报

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

发表于 2012-8-23 23:00:27 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:09 编辑

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

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-3-29 22:43 , Processed in 0.131923 second(s), 28 queries .

回顶部