首页 > 其他分享 >贪吃蛇game.js代码

贪吃蛇game.js代码

时间:2024-01-05 13:01:13浏览次数:21  
标签:positions headNode js food1 game 贪吃蛇 var stdWid Math

贪吃蛇game.js代码_页面加载

// pages/game/game.js

var positions;

const stdWid = 20;

var direction = -1;//2上1左 -2下-1右

var headNode;

var cvs;

var headImg;

var food1,food2;

var interval;

var speed;

Page({

  /**

   * 页面的初始数据

   */

  data: {

    score:0,

  },


  /**

   * 生命周期函数--监听页面加载

   */

  onLoad(options) {

    speed = options.speed;

    this.initGame()

  },


  //移动函数

  snakeMove: function (e) {

    headNode = positions[positions.length - 1];

    var newNode = {"x":headNode.x,"y":headNode.y};

    switch (direction) {

      case -1:

        newNode.x = headNode.x+stdWid;

        break;

      case 1:

        newNode.x = headNode.x-stdWid;

        break;

      case -2:

        newNode.y = headNode.y+stdWid;

        break;

      case 2:

        newNode.y = headNode.y-stdWid;        

        break;

      default:

        break;

    }

    positions.push(newNode);

  },

  //改变方向函数

  changeDirection: function (e) {

    console.log(e)

    var newDir = e.target.dataset.direct

    if (direction + newDir != 0) {

      direction = newDir;

      headImg = "/images/head_" + e.target.dataset.img + ".jpg"

    }

  },

  // 绘制蛇函数

  drawSnack: function (e) {    

    cvs.drawImage("/images/food.jpg",food1.x,food1.y,stdWid,stdWid)

    cvs.drawImage("/images/food2.jpg",food2.x,food2.y,stdWid,stdWid)

    for (let index = 0; index < positions.length - 1; index++) {

      const e = positions[index];

      cvs.drawImage("/images/star.jpg", e.x, e.y, stdWid, stdWid)

    }

    cvs.drawImage(headImg, positions[positions.length - 1].x, positions[positions.length - 1].y, stdWid, stdWid)

    cvs.draw()

  },


  //collisionTrack 游戏元素碰撞函数

  collisionTrack:function(e){

    // 1)碰到边界,提示游戏结束,停止计时器

    if(headNode.x < 0 || headNode.x >= 280 || headNode.y < 0 || headNode.y >= 280){      

      clearInterval(interval)

      this.handleModel("撞墙了,是否继续?")

    }

    // 2)碰到food1,随机生成新的food1 加长,加分

    if (headNode.x == food1.x && headNode.y == food1.y) {      

      food1 = {'x':Math.floor(Math.random() * 14) * stdWid,

               'y':Math.floor(Math.random() * 14) * stdWid}

      this.setData({score:this.data.score+1});

      if(this.data.score >= 6){

        clearInterval(interval)

        this.handleModel("你赢了!要再玩一次吗?")

      }

    }else{

      positions.shift();

    }

    // 3)碰到food2,判断长度够不够,够则减4;不够die并停止计时

    if (headNode.x == food2.x && headNode.y == food2.y) {

      if(positions.length >= 6){

        positions.splice(0,5);        

      }else {

        clearInterval(interval);

        this.handleModel("中毒太深~要再来一次吗?")

      }

      food2 = {'x':Math.floor(Math.random() * 14) * stdWid,

               'y':Math.floor(Math.random() * 14) * stdWid}

    }

  },

  handleModel:function(content){

    wx.showModal({

      content: content,

      complete: (res) => {

        if (res.cancel) {

          wx.navigateBack()        

        }

        if (res.confirm) {

          this.initGame()          

        }

      }

    })

  },

  initGame:function(){

    clearInterval(interval)

    this.setData({score:0})

    cvs = wx.createCanvasContext('gameCanvas');

    headImg = "/images/head_right.jpg";

    console.log("游戏初始化。。")

    positions = [

      {'x': 20, 'y': 20},

      {'x': 40, 'y': 20},

      {'x': 60, 'y': 20},

      {'x': 80, 'y': 20},

      {'x': 100,'y': 20},

    ]

    food1 = {'x':Math.floor(Math.random() * 14) * stdWid,

             'y':Math.floor(Math.random() * 14) * stdWid}

    food2 = {'x':Math.floor(Math.random() * 14) * stdWid,

             'y':Math.floor(Math.random() * 14) * stdWid}


    interval = setInterval(() => {

      // var head = positions[positions.length -1];

      // newNode = {'x':head.x+20,'y':head.y};

      this.snakeMove();

      this.drawSnack();

      this.collisionTrack();

    }, speed)

    direction = -1

  }

})

标签:positions,headNode,js,food1,game,贪吃蛇,var,stdWid,Math
From: https://blog.51cto.com/u_16349720/9113036

相关文章

  • 【前端】安装指定版本的nodejs
    先安装curlsudoaptinstallcurl以下是Nodejs18.x的安装,一行代码搞定&&\的意思是前面的命令执行无误后,再执行后面代码curl-fsSLhttps://deb.nodesource.com/setup_18.x|sudo-Ebash-&&\sudoapt-getinstall-ynodejs......
  • 用Python的Pygame包实现水果忍者小游戏
    先上一下运行结果长按鼠标左键出刀,切割水果几分,切割炸弹结束游戏,漏掉的水果也会几分,难度会随时间慢慢提高(水果的刷新频率变快) 初始化帧率200帧/秒,游戏窗口大小800×600#游戏设置pygame.init()FPS=200fpsClock=pygame.time.Clock()WIDTH,HEIGHT=80......
  • 贪吃蛇game.wxss代码
    /* pages/game/game.wxss */canvas {  height: 600rpx;  width: 600rpx;  border: 1rpx green solid;}.btnBox {  align-items: center;  margin: 40rpx;  display: flex;  flex-direction: column;}.btnBox button{  margin: 10rpx;}......
  • VUE3 + Three.js 坑
    VUE3+Three.js坑1.问题描述将scene、camera、renderer、controls等变量用reactive变成响应式时,页面渲染会报错:three.module.js?5a89:24471UncaughtTypeError:'get'onproxy:property'modelViewMatrix'isaread-onlyandnon-configurabledatapropertyontheprox......
  • 无涯教程-jsoup - 设置属性
    下面的示例将HTML解析为Document对象后,使用addClass或removeClass方法来增加或删除class类方法。Documentdocument=Jsoup.parse(html);Elementlink=document.select("a").first();link.attr("href","www.yahoo.com");link.addClass("header"......
  • 无涯教程-jsoup - 提取属性
    以下示例将HTML解析为Document对象后,使用Elements方法来获取dom元素的属性。Documentdocument=Jsoup.parse(html);Elementlink=document.select("a").first();System.out.println("Href:"+link.attr("href"));元素对象代表dom元素,并提供了各种获取dom元素属性的方法。......
  • Node-js用FlexSearch给Hexo添加极速全站搜索
    title:Node.js用FlexSearch给Hexo添加极速全站搜索tags:[Node.js,node,Javascript,Debian,Linux,FlexSearch,搜索]新版原文:https://www.carlzeng.top/search?q=Node.js用FlexSearch给Hexo添加极速全站搜索版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA许可协议。......
  • 无涯教程-jsoup - 使用选择器语法
    以下示例将HTML解析为Document对象之后使用Selector方法操作元素,jsoup支持类似于CSSSelector选择器。Documentdocument=Jsoup.parse(html);//awithhrefElementslinks=document.select("a[href]");document.select(expression)方法解析给定的CSSSelector表达式,以选择ht......
  • js 操作 clipboard
     文章目录Document.execCommand()方法复制操作粘贴操作优缺点Clipboard对象介绍Clipboard对象方法Clipboard.readText(https://www.chinaobd2.com/upload/support/smartpro-5000u-plus-chips-support-list.html)粘贴文本Clipboard.read()粘贴数据Clipb......
  • 贪吃蛇game.wxml代码
    <!--pages/game/game.wxml--><view class="container">  <view>玩家得分:{{score}}</view>  <canvas canvas-id="gameCanvas" />  <view class="btnBox">    <button type="primary" size="......