博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序开发(5) 2048游戏
阅读量:4671 次
发布时间:2019-06-09

本文共 20489 字,大约阅读时间需要 68 分钟。

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发2048小游戏。

本文主要分为两个部分,小程序主体部分及小游戏页面部分

 

一、小程序主体部分

一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:

 

1. 小程序逻辑

App({  onLaunch: function() {     // Do something initial when launch.  },  onShow: function() {      // Do something when show.  },  onHide: function() {      // Do something when hide.  },  globalData: 'I am global data'})

 

2. 小程序公共设置

主要注册一个页面,即2048游戏主页

{
"pages":[ "pages/index/index" ], "window":{ "navigationBarBackgroundColor":"#ffffff", "navigationBarTextStyle":"#1AAD16", "navigationBarTitleText":"2048游戏", "backgroundColor":"#eeeeee", "backgroundTextStyle":"light" }, "networkTimeout": {
"request": 10000, "downloadFile": 10000 }, "debug": false}

 

 

二、小游戏页面部分

2048游戏小程序页面主要由以下文件组成。

 

1. 页面结构

其页面结构代码如下

2048
{
{score}}
{
{highscore}}
你能拿到2048吗?
新游戏
{
{overMsg}}
再试一次
{ {cell.value}}

 

2. 样式表

样式代码如下所示

.container {
margin: 0; padding: 20px 0; background: #faf8ef; color: #776e65; font-family: "Helvetica Neue", Arial, sans-serif; font-size: 18px;}.heading:after {
content: ""; display: block; clear: both;}.title {
font-size: 80px; font-weight: bold; margin: 0; display: block; float: left;}.scores-container {
float: right; text-align: right;}.score-container, .best-container {
position: relative; display: inline-block; background: #bbada0; padding: 15px 25px; font-size: 25px; height: 25px; line-height: 47px; font-weight: bold; border-radius: 3px; color: white; text-align: center; margin: 8px 0 0 8px;}.score-container:after, .best-container:after {
position: absolute; width: 100%; top: 10px; left: 0; text-transform: uppercase; font-size: 13px; line-height: 13px; text-align: center; color: #eee4da;}.score-container .score-addition, .best-container .score-addition {
position: absolute; right: 30px; color: red; font-size: 25px; line-height: 25px; font-weight: bold; color: rgba(119, 110, 101, 0.9); z-index: 100; }.score-container:after {
content: "Score";}.best-container:after {
content: "Best";}p {
margin-top: 0; margin-bottom: 10px; line-height: 1.65;}a {
color: #776e65; font-weight: bold; text-decoration: underline; cursor: pointer;}strong.important {
text-transform: uppercase;}hr {
border: none; border-bottom: 1px solid #d8d4d0; margin-top: 20px; margin-bottom: 30px;}.game-container {
margin-top: 40px; position: relative; padding: 15px; cursor: default; -webkit-touch-callout: none; -ms-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -ms-touch-action: none; touch-action: none; background: #bbada0; border-radius: 6px; width: 500px; height: 500px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;}.game-container .game-message { /*display: none;*/ position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(238, 228, 218, 0.5); z-index: 100; text-align: center;}.game-container .game-message p {
font-size: 60px; font-weight: bold; height: 60px; line-height: 60px; margin-top: 222px;}.game-container .game-message .lower {
display: block; margin-top: 59px;}.game-container .game-message a {
display: inline-block; background: #8f7a66; border-radius: 3px; padding: 0 20px; text-decoration: none; color: #f9f6f2; height: 40px; line-height: 42px; margin-left: 9px;}.game-container .game-message .keep-playing-button {
display: none;}.game-container .game-message.game-won {
background: rgba(237, 194, 46, 0.5); color: #f9f6f2;}.game-container .game-message.game-won .keep-playing-button {
display: inline-block;}.game-container .game-message.game-won, .game-container .game-message.game-over {
display: block;}.grid-container {
position: absolute; z-index: 1;}.grid-row {
margin-bottom: 15px;}.grid-row:last-child {
margin-bottom: 0;}.grid-row:after {
content: ""; display: block; clear: both;}.grid-cell {
width: 106.25px; height: 106.25px; margin-right: 15px; float: left; border-radius: 3px; background: rgba(238, 228, 218, 0.35);}.grid-cell:last-child {
margin-right: 0;}.tile-container {
position: absolute; z-index: 2;}.tile, .tile .tile-inner {
width: 107px; height: 107px; line-height: 107px;}.tile.tile-position-1-1 {
-webkit-transform: translate(0px, 0px); -moz-transform: translate(0px, 0px); -ms-transform: translate(0px, 0px); transform: translate(0px, 0px);}.tile.tile-position-1-2 {
-webkit-transform: translate(0px, 121px); -moz-transform: translate(0px, 121px); -ms-transform: translate(0px, 121px); transform: translate(0px, 121px);}.tile.tile-position-1-3 {
-webkit-transform: translate(0px, 242px); -moz-transform: translate(0px, 242px); -ms-transform: translate(0px, 242px); transform: translate(0px, 242px);}.tile.tile-position-1-4 {
-webkit-transform: translate(0px, 363px); -moz-transform: translate(0px, 363px); -ms-transform: translate(0px, 363px); transform: translate(0px, 363px);}.tile.tile-position-2-1 {
-webkit-transform: translate(121px, 0px); -moz-transform: translate(121px, 0px); -ms-transform: translate(121px, 0px); transform: translate(121px, 0px);}.tile.tile-position-2-2 {
-webkit-transform: translate(121px, 121px); -moz-transform: translate(121px, 121px); -ms-transform: translate(121px, 121px); transform: translate(121px, 121px);}.tile.tile-position-2-3 {
-webkit-transform: translate(121px, 242px); -moz-transform: translate(121px, 242px); -ms-transform: translate(121px, 242px); transform: translate(121px, 242px);}.tile.tile-position-2-4 {
-webkit-transform: translate(121px, 363px); -moz-transform: translate(121px, 363px); -ms-transform: translate(121px, 363px); transform: translate(121px, 363px);}.tile.tile-position-3-1 {
-webkit-transform: translate(242px, 0px); -moz-transform: translate(242px, 0px); -ms-transform: translate(242px, 0px); transform: translate(242px, 0px);}.tile.tile-position-3-2 {
-webkit-transform: translate(242px, 121px); -moz-transform: translate(242px, 121px); -ms-transform: translate(242px, 121px); transform: translate(242px, 121px);}.tile.tile-position-3-3 {
-webkit-transform: translate(242px, 242px); -moz-transform: translate(242px, 242px); -ms-transform: translate(242px, 242px); transform: translate(242px, 242px);}.tile.tile-position-3-4 {
-webkit-transform: translate(242px, 363px); -moz-transform: translate(242px, 363px); -ms-transform: translate(242px, 363px); transform: translate(242px, 363px);}.tile.tile-position-4-1 {
-webkit-transform: translate(363px, 0px); -moz-transform: translate(363px, 0px); -ms-transform: translate(363px, 0px); transform: translate(363px, 0px);}.tile.tile-position-4-2 {
-webkit-transform: translate(363px, 121px); -moz-transform: translate(363px, 121px); -ms-transform: translate(363px, 121px); transform: translate(363px, 121px);}.tile.tile-position-4-3 {
-webkit-transform: translate(363px, 242px); -moz-transform: translate(363px, 242px); -ms-transform: translate(363px, 242px); transform: translate(363px, 242px);}.tile.tile-position-4-4 {
-webkit-transform: translate(363px, 363px); -moz-transform: translate(363px, 363px); -ms-transform: translate(363px, 363px); transform: translate(363px, 363px);}.tile {
position: absolute; -webkit-transition: 100ms ease-in-out; -moz-transition: 100ms ease-in-out; transition: 100ms ease-in-out; -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform;}.tile .tile-inner {
border-radius: 3px; background: #eee4da; text-align: center; font-weight: bold; z-index: 10; font-size: 55px;}.tile.tile-2 .tile-inner {
background: #eee4da; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0);}.tile.tile-4 .tile-inner {
background: #ede0c8; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0), inset 0 0 0 1px rgba(255, 255, 255, 0);}.tile.tile-8 .tile-inner {
color: #f9f6f2; background: #f2b179;}.tile.tile-16 .tile-inner {
color: #f9f6f2; background: #f59563;}.tile.tile-32 .tile-inner {
color: #f9f6f2; background: #f67c5f;}.tile.tile-64 .tile-inner {
color: #f9f6f2; background: #f65e3b;}.tile.tile-128 .tile-inner {
color: #f9f6f2; background: #edcf72; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.2381), inset 0 0 0 1px rgba(255, 255, 255, 0.14286); font-size: 45px;}@media screen and (max-width:520px) {
.tile.tile-128 .tile-inner { font-size: 25px; }}.tile.tile-256 .tile-inner {
color: #f9f6f2; background: #edcc61; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.31746), inset 0 0 0 1px rgba(255, 255, 255, 0.19048); font-size: 45px;}@media screen and (max-width:520px) {
.tile.tile-256 .tile-inner { font-size: 25px; }}.tile.tile-512 .tile-inner {
color: #f9f6f2; background: #edc850; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.39683), inset 0 0 0 1px rgba(255, 255, 255, 0.2381); font-size: 45px;}@media screen and (max-width:520px) {
.tile.tile-512 .tile-inner { font-size: 25px; }}.tile.tile-1024 .tile-inner {
color: #f9f6f2; background: #edc53f; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.47619), inset 0 0 0 1px rgba(255, 255, 255, 0.28571); font-size: 35px;}@media screen and (max-width:520px) {
.tile.tile-1024 .tile-inner { font-size: 15px; }}.tile.tile-2048 .tile-inner {
color: #f9f6f2; background: #edc22e; box-shadow: 0 0 30px 10px rgba(243, 215, 116, 0.55556), inset 0 0 0 1px rgba(255, 255, 255, 0.33333); font-size: 35px;}@media screen and (max-width:520px) {
.tile.tile-2048 .tile-inner { font-size: 15px; }}.tile.tile-super .tile-inner {
color: #f9f6f2; background: #3c3a32; font-size: 30px;}@media screen and (max-width:520px) {
.tile.tile-super .tile-inner { font-size: 10px; }}.tile-merged .tile-inner {
z-index: 20;}.above-game:after {
content: ""; display: block; clear: both;}.game-intro {
float: left; line-height: 42px; margin-bottom: 0;}.restart-button {
display: inline-block; background: #8f7a66; border-radius: 3px; padding: 0 20px; text-decoration: none; color: #f9f6f2; height: 40px; line-height: 42px; display: block; text-align: center; float: right;}.game-explanation {
margin-top: 50px;}@media screen and (max-width:520px) {
html, body { font-size: 15px; } body {
margin: 20px 0; padding: 0 20px; } .title {
font-size: 27px; margin-top: 15px; } /*.container { width: 280px; margin: 0 auto; }*/ .score-container, .best-container {
margin-top: 0; padding: 15px 10px; min-width: 40px; } .heading {
margin-bottom: 10px; } .game-intro {
width: 55%; display: block; box-sizing: border-box; line-height: 1.65; } .restart-button {
width: 42%; padding: 0; display: block; box-sizing: border-box; margin-top: 2px; } .game-container {
margin-top: 17px; position: relative; padding: 10px; cursor: default; -webkit-touch-callout: none; -ms-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -ms-touch-action: none; touch-action: none; background: #bbada0; border-radius: 6px; width: 280px; height: 280px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .game-container .game-message {
display: none; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(238, 228, 218, 0.5); z-index: 100; text-align: center; } .game-container .game-message .over-msg {
display: block; font-size: 30px; font-weight: bold; height: 30px; line-height: 30px; /*margin-top: 222px;*/ margin-top: 59px; } .game-container .game-message .lower {
display: block; margin-top: 59px; } .game-container .game-message .retry-button {
display: inline-block; background: #8f7a66; border-radius: 3px; padding: 0 20px; text-decoration: none; color: #f9f6f2; height: 40px; line-height: 42px; margin-left: 9px; } .game-container .game-message .keep-playing-button {
display: none; } .game-container .game-message.game-won {
background: rgba(237, 194, 46, 0.5); color: #f9f6f2; } .game-container .game-message.game-won .keep-playing-button {
display: inline-block; } .game-container .game-message.game-won, .game-container .game-message.game-over {
display: block; } .grid-container {
position: absolute; z-index: 1; } .grid-row {
margin-bottom: 10px; } .grid-row:last-child {
margin-bottom: 0; } .grid-row:after {
content: ""; display: block; clear: both; } .grid-cell {
width: 57.5px; height: 57.5px; margin-right: 10px; float: left; border-radius: 3px; background: rgba(238, 228, 218, 0.35); } .grid-cell:last-child {
margin-right: 0; } .tile, .tile .tile-inner {
width: 58px; height: 58px; line-height: 58px; } .tile.tile-position-1-1 {
-webkit-transform: translate(0px, 0px); -moz-transform: translate(0px, 0px); -ms-transform: translate(0px, 0px); transform: translate(0px, 0px); } .tile.tile-position-1-2 {
-webkit-transform: translate(0px, 67px); -moz-transform: translate(0px, 67px); -ms-transform: translate(0px, 67px); transform: translate(0px, 67px); } .tile.tile-position-1-3 {
-webkit-transform: translate(0px, 135px); -moz-transform: translate(0px, 135px); -ms-transform: translate(0px, 135px); transform: translate(0px, 135px); } .tile.tile-position-1-4 {
-webkit-transform: translate(0px, 202px); -moz-transform: translate(0px, 202px); -ms-transform: translate(0px, 202px); transform: translate(0px, 202px); } .tile.tile-position-2-1 {
-webkit-transform: translate(67px, 0px); -moz-transform: translate(67px, 0px); -ms-transform: translate(67px, 0px); transform: translate(67px, 0px); } .tile.tile-position-2-2 {
-webkit-transform: translate(67px, 67px); -moz-transform: translate(67px, 67px); -ms-transform: translate(67px, 67px); transform: translate(67px, 67px); } .tile.tile-position-2-3 {
-webkit-transform: translate(67px, 135px); -moz-transform: translate(67px, 135px); -ms-transform: translate(67px, 135px); transform: translate(67px, 135px); } .tile.tile-position-2-4 {
-webkit-transform: translate(67px, 202px); -moz-transform: translate(67px, 202px); -ms-transform: translate(67px, 202px); transform: translate(67px, 202px); } .tile.tile-position-3-1 {
-webkit-transform: translate(135px, 0px); -moz-transform: translate(135px, 0px); -ms-transform: translate(135px, 0px); transform: translate(135px, 0px); } .tile.tile-position-3-2 {
-webkit-transform: translate(135px, 67px); -moz-transform: translate(135px, 67px); -ms-transform: translate(135px, 67px); transform: translate(135px, 67px); } .tile.tile-position-3-3 {
-webkit-transform: translate(135px, 135px); -moz-transform: translate(135px, 135px); -ms-transform: translate(135px, 135px); transform: translate(135px, 135px); } .tile.tile-position-3-4 {
-webkit-transform: translate(135px, 202px); -moz-transform: translate(135px, 202px); -ms-transform: translate(135px, 202px); transform: translate(135px, 202px); } .tile.tile-position-4-1 {
-webkit-transform: translate(202px, 0px); -moz-transform: translate(202px, 0px); -ms-transform: translate(202px, 0px); transform: translate(202px, 0px); } .tile.tile-position-4-2 {
-webkit-transform: translate(202px, 67px); -moz-transform: translate(202px, 67px); -ms-transform: translate(202px, 67px); transform: translate(202px, 67px); } .tile.tile-position-4-3 {
-webkit-transform: translate(202px, 135px); -moz-transform: translate(202px, 135px); -ms-transform: translate(202px, 135px); transform: translate(202px, 135px); } .tile.tile-position-4-4 {
-webkit-transform: translate(202px, 202px); -moz-transform: translate(202px, 202px); -ms-transform: translate(202px, 202px); transform: translate(202px, 202px); } .tile .tile-inner {
font-size: 35px; } .game-message p {
font-size: 30px !important; height: 30px !important; line-height: 30px !important; margin-top: 90px !important; } .game-message .lower {
margin-top: 30px !important; }}

 

3、 页面逻辑处理

 

var app = getApp();var Grid = require('./grid.js');var Tile = require('./tile.js');var GameManager = require('./game_manager.js');var config = {    data: {        hidden: false,        // 游戏数据可以通过参数控制        grids: [],        over: false,        win: false,        score: 0,        highscore: 0,        overMsg: '游戏结束'    },    onLoad: function() {        this.GameManager = new GameManager(4);        this.setData({            grids: this.GameManager.setup(),            highscore: wx.getStorageSync('highscore') || 0        });    },    onReady: function() {        var that = this;        // 页面渲染完毕隐藏loading        that.setData({            hidden: true        });    },    onShow: function() {        // 页面展示    },    onHide: function() {        // 页面隐藏    },    onUnload: function() {        // 页面关闭    },    // 更新视图数据    updateView: function(data) {        // 游戏结束        if(data.over){            data.overMsg = '游戏结束';        }        // 获胜        if(data.win){            data.overMsg = '恭喜';        }        this.setData(data);    },    // 重新开始    restart: function() {        this.updateView({            grids: this.GameManager.restart(),            over: false,            won: false,            score: 0        });    },    touchStartClienX: 0,    touchStartClientY: 0,    touchEndClientX: 0,    touchEndClientY: 0,    isMultiple: false, // 多手指操作    touchStart: function(events) {        // 多指操作        this.isMultiple = events.touches.length > 1;        if (this.isMultiple) {            return;        }        var touch = events.touches[0];        this.touchStartClientX = touch.clientX;        this.touchStartClientY = touch.clientY;    },    touchMove: function(events) {        var touch = events.touches[0];        this.touchEndClientX = touch.clientX;        this.touchEndClientY = touch.clientY;    },    touchEnd: function(events) {        if (this.isMultiple) {            return;        }        var dx = this.touchEndClientX - this.touchStartClientX;        var absDx = Math.abs(dx);        var dy = this.touchEndClientY - this.touchStartClientY;        var absDy = Math.abs(dy);        if (Math.max(absDx, absDy) > 10) {            var direction = absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0);            var data = this.GameManager.move(direction) || {                grids: this.data.grids,                over: this.data.over,                won: this.data.won,                score: this.data.score            };            var highscore = wx.getStorageSync('highscore') || 0;            if(data.score > highscore){                wx.setStorageSync('highscore', data.score);            }            this.updateView({                grids: data.grids,                over: data.over,                won: data.won,                score: data.score,                highscore: Math.max(highscore, data.score)            });        }    }};Page(config);

 

除此之外,还引用了原Web版2048游戏的一些js文件。

包括 

游戏管理  game_manager.js

格子管理  grid.js

本地存储管理  local_storage_manager.js

瓦片管理  tile.js

 

 

三、程序效果图

 

 

 

四、源代码下载

扫描下方二维码并关注公众账号,回复 “1239” 获取

源代码使用方法,请参考  

 

转载于:https://www.cnblogs.com/txw1958/p/wxapp-2048.html

你可能感兴趣的文章
全局ajax事件
查看>>
javascript二维数组
查看>>
JavaScript 字符串属性和方法
查看>>
opencv新手注意
查看>>
Source InSight context 窗口丢失的解决办法
查看>>
cut point and bridge总结
查看>>
(5)Oracle基础--约束
查看>>
vmware vcenter orchestrator configuration提示“用户名密码错误或登录失败超过次数被锁定”...
查看>>
【Nginx】磁盘文件写入飞地发
查看>>
默认情况下安装的应用程序C盘后提示权限不足,当你开始介意。。。
查看>>
su root 后还是不能使用useradd ,useradd 等命令
查看>>
URL.createObjectURL图片预览
查看>>
js 中exec、test、match、search、replace、split用法
查看>>
Android开发笔记(一)手势识别
查看>>
mybatis 复习笔记03
查看>>
zoj 3703(背包)
查看>>
一种新的子波域滤波算法
查看>>
cookie之三天免登录代码
查看>>
1043 幸运号码 数位DP
查看>>
js18
查看>>