Day06 继贪吃蛇小游戏总结

贪吃蛇小游戏的收获

1.图片大小、坐标值怎么解决?

图片统一大小,(图片:头部、身体、食物、广告栏),

坐标值和图片的大小有关

2.本游戏的制作流程包括哪些?有哪些要点?

流程:

1. 建立一个启动类
2. 建立一个游戏面板类,并在启动类中添加
3. 建立一个游戏数据类,在面板中使用

要点:

  1. 启动类(继承JFrame)中,只负责启动!即创建其它类对象或调用其它类方法

  2. 游戏面板类(继承JPanel),复写JPanel类的paintComponent方法,用该方法中的Graphics画笔来绘制我们的游戏界面

  3. 游戏面板类需要实现两个接口

    1. KeyListener:用来监听我们键盘

      但注要要记得开启("this"表示当前面板对象)

      public GamePanel(){   //构造方法
              init();
              isStart=false;
              this.setFocusable(true);	//获取焦点事件
              this.addKeyListener(this);	//添加键盘监听
              timer.start();
              isFail = false;
          }
      
    2. ActionListener:用来使用定时器,定时刷新界面,才能实现画面的感觉(定时器Timer要求实现的)

      private Timer timer = new Timer(150,this);//1.new一个定时器,150毫秒刷新
      public GamePanel(){						  //2.在构造方法开启
              init();
              isStart=false;
              this.setFocusable(true);
              this.addKeyListener(this);
              timer.start();
              isFail = false;
          }
      public void actionPerformed(ActionEvent e) {//3.执行定时操作,最后也要开启定时器
              if(isStart && isFail == false){
      
                  if(foodX == snakeX[0] && foodY == snakeY[0]){
                      length++;
                      score += 10;
                      foodX = 25 + 25*random.nextInt(34);
                      foodY = 75 + 25*random.nextInt(24);
                  }
      
                  for (int i = length - 1; i > 0; i--) {
                      snakeX[i] = snakeX[i-1];
                      snakeY[i] = snakeY[i-1];
                  }
      
                  if(dir.equals("R")){
                      snakeX[0] += 25;
                      if(snakeX[0] > 850){
                          snakeX[0] = 25;
                      }
                  }else if(dir.equals("L")){
                      snakeX[0] -= 25;
                      if(snakeX[0] < 25){
                          snakeX[0] = 850;
                      }
                  }else if(dir.equals("U")){
                      snakeY[0] -= 25;
                      if(snakeY[0] < 75){
                          snakeY[0] = 650;
                      }
                  }else if(dir.equals("D")){
                      snakeY[0] += 25;
                      if(snakeY[0] > 650){
                          snakeY[0] = 75;
                      }
                  }
      
                  for (int i = 1; i < length; i++) {
                      if(snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]){
                          isFail = true;
                      }
                  }
      
                  repaint(); //数据改完重绘
              }
              timer.start();
          }
      
  4. 修改面板的数据时,一定要repaint()重绘一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值