Java GUI编程贪吃蛇小游戏实现3 让小蛇动起来

让小蛇动起来

  • 面板类实现两个接口
public class GamePanel extends JPanel implements KeyListener, ActionListener {
  • 重写方法
//键盘监听事件
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();//获得键盘按键是哪一个
        if (keyCode==KeyEvent.VK_SPACE){//如果按下的是空格键
            isStart=!isStart;//取反
            repaint();
        }
        //小蛇移动
        if (keyCode==KeyEvent.VK_UP){
            fx="U";
        }else if (keyCode==KeyEvent.VK_DOWN){
            fx="D";
        }else if (keyCode==KeyEvent.VK_LEFT){
            fx="L";
        }else if (keyCode==KeyEvent.VK_RIGHT){
            fx="R";
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
    @Override
    public void keyTyped(KeyEvent e) {

    }
    //事件监听-----需要通过固定时间来刷新
    @Override
    public void actionPerformed(ActionEvent e) {
        if (isStart){//如果游戏是开始状态,就让小蛇动起来
            //移动
            for (int i = length-1; i > 0 ; i--) {//后一节移到前一节的位置
                snakeX[i]=snakeX[i-1];
                snakeY[i]=snakeY[i-1];
            }
            //走向
            if (fx.equals("R")){
                snakeX[0]=snakeX[0]+25;
                //边界判断
                if (snakeX[0]>850){
                    snakeX[0]=25;
                }
            }else if (fx.equals("L")){
                snakeX[0]=snakeX[0]-25;
                //边界判断
                if (snakeX[0]<25){
                    snakeX[0]=850;
                }
            }else if (fx.equals("U")){
                snakeY[0]=snakeY[0]-25;
                //边界判断
                if (snakeY[0]<75){
                    snakeY[0]=650;
                }
            }else if (fx.equals("D")){
                snakeY[0]=snakeY[0]+25;
                //边界判断
                if (snakeX[0]>650){
                    snakeX[0]=75;
                }
            }
            repaint();//重画
        }
        timer.start();//定时器开启
    }
  • 初始化构造器添加代码
        public GamePanel(){
        init();
        //获得焦点和键盘事件
        this.setFocusable(true);
        this.addKeyListener(this);
        timer.start();//游戏一开始定时器就启动
    }
  • 设置定时器
Timer timer=new Timer(100,this);//100毫秒执行一次
原创文章 31 获赞 31 访问量 833

猜你喜欢

转载自blog.csdn.net/caixuanji/article/details/106153001