玩转微信小游戏(二):小游戏小探索

前言

来啦老铁!

咱们接着上一篇文章,继续探索微信小游戏。当然,咱们不是,也不可能在这么短时间,这么少经验的情况下,成为一名微信小游戏开发高手,咱们仅仅是玩玩看、了解了解,有机会再深入哈!

微信小程序

小程序与普通网页开发的区别
小程序的运行环境

微信小游戏与微信小程序

微信小游戏与微信小程序
微信小游戏与微信小程序
小游戏开发难点

微信小游戏开发小实践

我打算做个简单的微信小游戏,大概描述一下游戏:

  • 页面掉落方块,玩家通过点击方块使方块消失,从而得分;
  • 当方块掉落出屏幕,则游戏结束;
  • 方块掉落考虑随时间不断累加,掉落速度越来越快,提高游戏可玩性和难度;
  • 游戏需要做开始页面,点击“点我开始”进入游戏;

我们可以给这个游戏起个响亮的名字:

是男人就消灭500个方块!

哈哈~

话不多说,直接上代码:

  1. 在项目根目录下创建一个js文件,文件名任意,比如:qitao.js,并在qitao.js完成代码:
module.exports = function() {
  const { windowWidth, windowHeight } = wx.getSystemInfoSync()
  const canvas = wx.createCanvas()
  const ctx = canvas.getContext('2d')

  var image = wx.createImage()
  image.src = 'images/star.jpg'

  let score=0
  let first_x = 0
  let first_y = parseInt(Math.random()*200-200)
  let second_y = parseInt(Math.random()*200-200)
  let third_y = parseInt(Math.random()*200-200)
  let fourth_y = parseInt(Math.random()*200-200)
  let colors=['lightgreen','orange','cyan','white','pink','lightblue','gold','yellow','gray','purple']
  let first_color=colors[parseInt(Math.random()*10)]
  let second_color=colors[parseInt(Math.random()*10)]
  let third_color=colors[parseInt(Math.random()*10)]
  let fourth_color=colors[parseInt(Math.random()*10)]
  let speed=2
  let speed_interval=0
  let start=false
  setInterval(function(){
    if(!start){
      // 绘制背景
      ctx.fillStyle = 'cyan'
      ctx.fillRect(0, 0, windowWidth, windowHeight)

      // 绘制按钮
      ctx.fillStyle = 'lightpink'
      ctx.fillRect(windowWidth/2-100, windowHeight/2-50, 200, 100)

      // 绘制开始页面的得分
      ctx.fillStyle = 'white'
      ctx.font      = "20px Arial"
      ctx.fillText(`得分:${score}`,windowWidth/2-25,windowHeight/2-60)

      //绘制按钮字体
      ctx.fillStyle = 'white'
      ctx.font      = "40px Arial"
      ctx.fillText('点我开始',windowWidth/2-80,windowHeight/2+10)
      return
    }

    // 清除canvas上的内容,重新绘制
    ctx.clearRect(0, 0, windowWidth, windowHeight)
    // 绘制背景
    ctx.drawImage(image, 0, 0, windowWidth, windowHeight)

    // 得分显示逻辑
    ctx.fillStyle = 'white'
    ctx.font    = "18px Arial"
    ctx.fillText(`得分:${score}`, 20, 30)

    // 方块掉落逻辑
    ctx.fillStyle = first_color
    first_y += speed
    ctx.fillRect(first_x, first_y, windowWidth/4, 50)

    ctx.fillStyle = second_color
    second_y += speed
    ctx.fillRect(windowWidth/4 + 5, second_y, windowWidth/4, 50)

    ctx.fillStyle = third_color
    third_y += speed
    ctx.fillRect((windowWidth/4 + 5)*2, third_y, windowWidth/4, 50)

    ctx.fillStyle = fourth_color
    fourth_y+=speed
    ctx.fillRect((windowWidth/4 + 5)*3, fourth_y, windowWidth/4, 50)

    // 掉落方块加速逻辑
    speed_interval+=1
    if(speed_interval==1000 && speed<=16){
      speed_interval=0
      speed+=1
    }

    // 掉落方块颜色随机逻辑
    if(first_y >= windowHeight || second_y >= windowHeight || third_y >= windowHeight || fourth_y >= windowHeight){
      start=false
      first_x = 0
      first_y = parseInt(Math.random()*200-200)
      second_y = parseInt(Math.random()*200-200)
      third_y = parseInt(Math.random()*200-200)
      fourth_y = parseInt(Math.random()*200-200)
      colors=['lightgreen','orange','cyan','white','pink','lightblue','gold','yellow','gray','purple']
      first_color=colors[parseInt(Math.random()*10)]
      second_color=colors[parseInt(Math.random()*10)]
      third_color=colors[parseInt(Math.random()*10)]
      fourth_color=colors[parseInt(Math.random()*10)]
      speed=2
      speed_interval=0
      start=false
    }
  }, 10)

  wx.onTouchStart((result) => {
    let x = result.changedTouches[0].clientX
    let y = result.changedTouches[0].clientY
    // 开始游戏逻辑
    if(!start && x>windowWidth/2-100 && x<windowWidth/2+100 && y>windowHeight/2-50 && y<windowHeight/2+50){
      score=0
      start=true
    }
    // 得分统计逻辑
    if(x>0 && x<first_x+windowWidth/4 && y<first_y+50 && y>first_y){
      score+=1
      first_y = parseInt(Math.random()*300-300)
      first_color=colors[parseInt(Math.random()*10)]
    }
    if(x>windowWidth/4 + 5 && x<windowWidth/4 + 5+windowWidth/4 && y<second_y+50 && y>second_y){
      score+=1
      second_y = parseInt(Math.random()*300-300)
      second_color=colors[parseInt(Math.random()*10)]
    }
    if(x>(windowWidth/4 + 5)*2  && x<(windowWidth/4 + 5)*2+windowWidth/4 && y<third_y+50 && y>third_y){
      score+=1
      third_y = parseInt(Math.random()*300-300)
      third_color=colors[parseInt(Math.random()*10)]
    }
    if(x>(windowWidth/4 + 5)*3 && x<(windowWidth/4 + 5)*3+windowWidth/4 && y<fourth_y+50 && y>fourth_y){
      score+=1
      fourth_y = parseInt(Math.random()*300-300)
      fourth_color=colors[parseInt(Math.random()*10)]
    }
  })
}

上述代码我没有考虑封装复用,所有实现都在一个js文件内,项目实战时可以考虑将不同操作封装到不同js文件,提高代码可读性,减少代码冗余等;

  1. 修改项目入口文件game.js;
const qitao = require("./qitao")
module.exports=function(){
  qitao()
}()
  1. 编译小游戏;
  • 开发者工具中点击编译按钮;
编译小游戏
  • 编译完成即可在左侧模拟器中看到效果;
预览
  1. 模拟器中试玩小游戏;
    将鼠标移至模拟器中,即可用鼠标光标模拟手指,然后就可以用鼠标试玩游戏啦!
模拟器中试玩小游戏

微信小游戏发布

1. 上传代码;

上传代码
上传成功

2. 发布体验版;

发布体验版入口
选为体验版版本
成功选为体验版

注意:

首次发布体验版才需要这样稍微麻烦,后续发布体验版,直接上传就可以了,实时生效;

  • 使用体验版;

发布完体验版后,手机扫描“选为体验版”成功页面的二维码,就能在手机端玩我们的小游戏啦!

3. 发布线上版本;

点击版本管理页面的提交审核按钮,即可进入发布线上版本流程;

提交审核

之前在发布线上版本小程序时(二者发布流程基本一致),是需要一定的审核时间的,小游戏应该也是,笔者就不再尝试啦,请读者朋友自行实操哦~

好啦,又是一个深夜,咱今天先聊到这里吧,有缘再续~

如果本文对您有帮助,麻烦动动手指点点赞?

谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容