菜鸟的小游戏开发记录——小赛车(线程的学习)
菜鸟的小游戏开发记录——小赛车(线程的学习)
喵五郎 发表于10个月前
菜鸟的小游戏开发记录——小赛车(线程的学习)
  • 发表于 10个月前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

/*
 * 1:该程序学习了线程的使用,继承Thread类 插入run方法
 * 2:利用异常抛出代码 try  catch 实现永久循环
 * 3:Move m = new Move();
 *    m.start();   用该代码在构造函数中调用该线程
  */
 package test2;
 
 import javax.swing.*;
 import javax.swing.event.*;
 import java.awt.*;
 import java.awt.event.*;
                  //创建的类paodao1继承JFrame       
 public class saiche2 extends JFrame {
                  //设置游戏屏幕的大小
     final int WIDTH = 900,HEIGHT = 650;
                   //设置车的行驶速度
     double p1Speed = .5,p2Speed = .5;
     /*
      * 下面是待绘制的矩形
      * 创建矩形的代码起初看起来有点复杂,但是各个矩形的创建大同小异,
      * 它们的大小都取决于 WIDTH 和HEIGET 属性值
      */
                    //下面的矩形分别表示赛场的左右上下部分,以及赛场中央区域
      Rectangle left = new Rectangle(0,0,WIDTH/9,HEIGHT);
      Rectangle right = new Rectangle((WIDTH/9)*9,0,WIDTH/9,HEIGHT);
      Rectangle top = new Rectangle(0,0,WIDTH,HEIGHT/9);
      Rectangle bottom = new Rectangle(0,(HEIGHT/9)*9,(WIDTH/9)*10,HEIGHT/9);
      Rectangle center = new Rectangle((int)((WIDTH/9)*2.5),(int)((HEIGHT/9)*2.5),(int)((WIDTH/9)*5),(HEIGHT/9)*4);
                    
                   //下面的矩形用于绘制跑道上的障碍物 ,以增加赛车的难度
      Rectangle obstacle = new Rectangle(WIDTH/2,(int)((HEIGHT/9)*7),WIDTH/10,HEIGHT/9);  
      Rectangle obstacle2 = new Rectangle(WIDTH/3,(int)((HEIGHT/9)*5),WIDTH/10,HEIGHT/4);           
      Rectangle obstacle3 = new Rectangle(2*(WIDTH/3),(int)((HEIGHT/9)*5),WIDTH/10,HEIGHT/4);  
      Rectangle obstacle4 = new Rectangle(WIDTH/3,HEIGHT/9,WIDTH/30,HEIGHT/9);  
      Rectangle obstacle5 = new Rectangle(WIDTH/2,(int)((HEIGHT/9)*1.5),WIDTH/30,HEIGHT/4);  
     
                   //下面的矩阵用于绘制内外跑道的终点线
      Rectangle finish = new Rectangle(WIDTH/9,(HEIGHT/2)-HEIGHT/9,(int)((WIDTH/9)*1.5),HEIGHT/70);  
     
                   //下面的矩阵代表第一辆车
      Rectangle p1 = new Rectangle(WIDTH/9,HEIGHT/2,WIDTH/30,WIDTH/30);
                  //下面的矩阵代表第二辆车
      Rectangle p2 = new Rectangle(((WIDTH/9)+((int)((WIDTH/9)*1.5)/2)),(HEIGHT/2)+(HEIGHT/10),WIDTH/30,WIDTH/30);
               
                  //构造方法
    public saiche2(){

              //使用下列代码设置JFrame
       super("Radical Racing");
       setSize(WIDTH/9*10,HEIGHT/9*10);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setVisible(true);
       
              //初始化内部类
       Move1 m1 = new Move1();
       Move2 m2 = new Move2();
       m1.start();
       m2.start();
         
      }

         
 
               //该方法用于绘制赛车和赛场
      public void paint(Graphics g){
          super.paint(g);
     
         
                     //绘制赛场背景
          g.setColor(Color.DARK_GRAY);
          g.fillRect(0, 0,WIDTH, HEIGHT);
         
                    //绘制时先将场地设置为绿色
          g.setColor(Color.GREEN);
         
                   //下面的矩阵用于绘制外跑道的起跑线
     Rectangle lineO = new Rectangle(WIDTH/9,HEIGHT/2,(int)((WIDTH/9)*1.5)/2,HEIGHT/140);  
    
                 //下面的矩阵用于绘制内跑道的起跑线
     Rectangle lineI = new Rectangle(((WIDTH/9)+((int)((WIDTH/9)*1.5)/2)),(HEIGHT/2)+(HEIGHT/10),(int)((WIDTH/9)*1.5)/2,HEIGHT/140);  
    
                     //现在绘制各个矩形
          g.fillRect(left.x,left.y , left.width, left.height);
          g.fillRect(right.x,right.y , right.width,right.height);
          g.fillRect(top.x,top.y , top.width, top.height);
          g.fillRect(bottom.x,bottom.y , bottom.width, bottom.height);
          g.fillRect(center.x,center.y , center.width, center.height);
          g.fillRect(obstacle.x,obstacle.y , obstacle.width, obstacle.height);
          g.fillRect(obstacle2.x,obstacle2.y , obstacle2.width, obstacle2.height);
          g.fillRect(obstacle3.x,obstacle3.y , obstacle3.width, obstacle3.height);
          g.fillRect(obstacle4.x,obstacle4.y , obstacle4.width, obstacle4.height);
          g.fillRect(obstacle5.x,obstacle5.y , obstacle5.width, obstacle5.height);
         
                          //设置起跑线为白色
         g.setColor(Color.WHITE);
                          //绘制起跑线
         g.fillRect(lineO.x, lineO.y, lineO.width, lineO.height);
         g.fillRect(lineI.x, lineI.y, lineI.width, lineI.height);
                          //终点线为黄色
         g.setColor(Color.YELLOW);
                          //绘制终点线
         g.fillRect(finish.x, finish.y, finish.width, finish.height);
                          //设置小车1位蓝色   使用的方法为    fill3DRect()
         g.setColor(Color.BLUE);
         g.fill3DRect(p1.x, p1.y, p1.width, p1.height,true);
                          //设置小车2为红色   使用的方法为    fill3DRect()
        g.setColor(Color.RED);
        g.fill3DRect(p2.x, p2.y, p2.width, p2.height,true);
      }
       
      private class Move1 extends Thread{
          public void run (){
                  //通过永久循环语句使得小车1不断行驶
          while(true){
              try{
                      //刷新游戏屏幕
                  repaint();
                     //赛车行驶中加速
                  if(p1Speed <=5){
                     p1Speed +=.2;
                  }
              p1.y -=p1Speed;
                     //设置每次加速的时间间隔
              Thread.sleep(75);
              }catch(Exception e){
                 break;//如果运行出错就退出循环
              }
          }
          }
     
     
      }
     
     
      private class Move2 extends Thread{
          public void run (){
                  //通过永久语句使得赛车2不断行驶
          while(true){
              try{
                      //刷新游戏屏幕
                  repaint();
                     //赛车行驶中加速
                  if(p2Speed <=5){
                     p2Speed +=.2;
                  }
              p2.y -=p2Speed;
                     //设置每次加速的时间间隔
              Thread.sleep(75);
              }catch(Exception e){
                 break;//如果运行出错就退出循环
              }
          }
          }
     
     
      }
     

    public static void main(String[] args) {
        new saiche2();

    }

}

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
喵五郎
粉丝 0
博文 10
码字总数 4647
×
喵五郎
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: