微信小程序-贪吃蛇开发8 贪吃蛇绘制

本系列是作者自学实践过程的记录
本文是贪吃蛇和食物绘制
有问题欢迎讨论

一、初始化蛇

这里我们使用二维数组来表示对应的二维坐标,和初始化操场一样,在data中定义Array,snake[]和food[]
然后定义初始化函数并在onLoad函数加载时就调用此函数
根据上一篇文章,我们使用全0表示地图,1表示小蛇的身体,2表示食物,所以我们只需要在蛇身体所在的区域,将ground赋值为1那么便可以在逻辑上生成小蛇了。

  // 初始化蛇,蛇的初始化长度为3,宽度为1
  initSnake:function(len){
    for(var i=0;i<len;i++){
      // 起初蛇只占一行
      this.data.ground[0][i] = 1
      // 保存小蛇的身体坐标
      this.data.ground.push([0,i])
    }
    console.log(this.data.ground)
  },

显示效果:
显示效果:

二、初始化食物

和创建小蛇一样,将地图ground坐标设置成2则表示此地图块为食物,这里我们要用到随机函数Math.random(),这里生成的是0-1之间的数,我们只需要乘以行数和列数就可以生成一个随机的坐标进行使用。
注意点:

  1. 随机分布
  2. 不能与蛇身体的坐标重合
  // 初始化食物
  initFood:function(){
    // 生成随机的坐标
    var x = Math.floor(Math.random()* this.data.rows)
    var y = Math.floor(Math.random()* this.data.cols)
    var ground = this.data.ground
    var snake = this.data.snake
    ground[x][y] = 2

    for(var i=0;i<snake.length;i++){
      // 取出蛇身体坐标的所有行坐标
      var node = snake[i][1]

      if(x == 0 && y == node){ // 坐标重复
        initFood()
        return
      }
      else{   // 坐标不重复
        // 食物只有一个,所以不用push,使用赋值函数
        this.setData({
          ground: ground,
          food: [x,y]
        })
      }
    }
  },

显示效果:
在这里插入图片描述
在这里插入图片描述

三、颜色区分

CSS:

/* 
  蛇身体所在块样式
*/
.block_1{
  background: blue;
}
/* 
  食物所在块样式
*/
.block_2{
  background: yellow;
}

WXML:

  <view class="ground">
    <view class="rows" wx:for="{{ground}}" wx:for-item="cols">
      <view class="blocks block_{{item}}" wx:for="{{cols}}"></view>
    </view>
  </view>

这里要注意使用item进行数据绑定,这里的item结果是ground里的数据,为0、1、2,block_0没有定义所以不生效,block_1定义是蛇的身体所以显示蓝色,block_2定义是食物所以是黄色。
class中写两个值,后一个如果有定义的话则会覆盖第一个渲染的效果。

效果图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小子挺不错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值