渲染模式:dom,cavase,webGL
不同的地图、不同的元素,好玩的道具(充值付费获得道具、融合形成新的道具)
创建项目->资源(json/png)resDepot->模块game
地图、步数、道具、消除
1.地图:元素按照地图排列
最大宽高格子数为8
形状可配置
包含自己的背景图
不同关卡背景图不同
无论地图形状如何改变,尺寸不变
2.步数:
不同关卡步数不同
步数为0时,游戏结束
3.道具
一共五种道具,道具功能不同,使用道具时候不消耗步数,来源于游戏奖励
4.消除:
三个及以上相同元素可消除
元素随机出现
初局开始时,不可有消除元素
没有可消除元素时,自动乱序
数据:地图数据、基础数据、关卡数据、道具数据
视图:元素、背景、关卡、道具
逻辑:主逻辑控制器、数据解析器、地图数据控制器、算法控制器、视图控制器
mapData:
一维数组:数据整理方便,下标
二维数组:空间表示方便,获取位置方便
index = row * 8 + column
json数据描述
地图配置信息如何描述
{"map": [0,1,8,9,6,7,14,15]} 一维数组记录不展示以及不可放置元素的方格
游戏元素数据设计
元素:type、ID(唯一)、location
eg:
mapData[3][6] = element.ID
elements[mapData[3][6]] 元素对象池 访问想要的数据
ID:45
location:30
public static unmapnum: number = 0//空白地图块数量
public static mapData: number[][]//游戏地图,-1表示块地图不能使用,-2表示,此地图没有元素
public static stepNum: number = 0//玩家剩余步数
public static levelStepNum: number = 0//当前关卡步数
public static elementTypes: number[]//当前关卡出现的元素类型
public static unusedElements: number[]//游戏中未使用得元素,仅记录元素ID
public static levelBackgroundImageName = ""//当前关卡背景图资源名
public static MaxRow: number = 8//最大的行
public static MaxColumn: number = 8//最大的列
public static currentElementNum: number = 0//当前关卡游戏中地图可用元素数量
public static levelReq: LevelRequire//当前关卡过关条件
public static elements: GameElement[]//游戏中出现得元素数据池,最多为64个,因为8*8
//舞台宽高,此封装为了方便调用
public static stageW: number = 0
public static stageH: number = 0
DisplayObjectContainer
public constructor() {
super()
this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this)
}
Sprite 类是基本显示列表构造块:一个可包含所有子项的显示列表节点
Sprite() 实例化一个容器
1.背景
var gbg:GameBackGround = new GameBackGround()
this._gameStage.addChild(gbg)
gbg.changeBackground()
2.地图
this.mapc = new MapControl()
this.mapc.createElementAllMap()
3.过关条件
let lec:egret.Sprite = new egret.Sprite()
this._gameStage.addChild(lec)
this.levm = new LevelReqViewManage(lec)
this.levm.createCurrentLevelReq()
4.元素
let cc:egret.Sprite = new egret.Sprite()
this._gameStage.addChild(cc)
this.evm = new ElementViewManage(cc)
this.evm.showAllElements()
1.寻找可消除元素
2.预检索可消除元素算法设计与实现
3.是否可以互相交换
交换后是否可以消除
开发前准备:注册小程序帐号 绑定开发者
登录微信公众平台小程序,进入用户身份- 开发者,新增绑定开发者。
已认证的小程序可以绑定不多于20个开发者。未认证的小程序可以绑定不多于10个开发者。
获取AppID下载并安装开发者工具
下载完成后,使用管理员或者绑定的开发者微信号扫码登录。
一个微信小程序
创建项目
我们需要通过开发者工具,来完成小程序创建和代码编辑。
开发者工具安装完成后,打开并使用微信扫码登录。选择创建“项目”,填入上文获取到的 AppID ,设置一个本地项目的名称(非小程序名称),比如“我的第一个项目”,并选择一个本地的文件夹作为代码存储的目录,点击“新建项目”就可以了。
为方便初学者了解微信小程序的基本代码结构,在创建过程中,如果选择的本地文件夹是个空文件夹,开发者工具会提示,是否需要创建一个 quick start 项目。选择“是”,开发者工具会帮助我们在开发目录里生成一个简单的 demo。
项目创建成功后,我们就可以点击该项目,进入并看到完整的开发者工具界面,点击左侧导航,在“编辑”里可以查看和编辑我们的代码,在“调试”里可以测试代码并模拟小程序在微信客户端效果,在“项目”里可以发送到手机里预览实际效果。
编写代码创建小程序实例
点击开发者工具左侧导航的“编辑”,我们可以看到这个项目,已经初始化并包含了一些简单的代码文件。最关键也是必不可少的,是 app.js、app.json、app.wxss 这三个。其中,.js后缀的是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件。微信小程序会读取这些文件,并生成小程序实例。
//App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。
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'
})
app.js是小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用框架提供的丰富的 API。
//app.js
App({
onLaunch: function() {
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
},
getUserInfo: function(cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" &&cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.login({
success: function() {
wx.getUserInfo({
success: function(res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" &&cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData: {
userInfo: null
}
})
app.json 是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。
{
"pages": [
"pages/index/index",
"pages/logs/logs"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
}
}
app.wxss 是整个小程序的公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。
/**app.wxss**/
.container {
height: 100%
display: flex
flex-direction: column
align-items: center
justify-content: space-between
padding: 200rpx 0
box-sizing: border-box
}
创建一个人品计算器小页面
在这个教程里,我们有1个页面,即欢迎页,他们都在 pages 目录下。微信小程序中的每一个页面的【路径+页面名】都需要写在 app.json 的 pages 中,且 pages 中的第一个页面是小程序的首页。
每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js、index.wxml、index.wxss、index.json。.js后缀的文件是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件,.wxml后缀的文件是页面结构文件。
index.wxml 是页面的结构文件:
<!--index.wxml-->
<text class='title'>人品查看器</text>
<text class='hint'>为您计算当下人品</text>
<button bindtap="setScore" class='check'>点击查询</button>
<view class="container">
<view bindtap="bindViewTap" class="userinfo">
<image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
<text class='score'>{{score}}</text>
<text class='info'>{{info}}</text>
</view>
</view>
本例中使用了<view/>、<image/>、<text/>来搭建页面结构,绑定数据和交互处理函数。
index.js 是页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。
//index.js
//获取应用实例
var app = getApp()
Page({
data: {
score: 0,
userInfo: {}
},
//事件处理函数
setScore: function() {
var score = 60+parseInt(Math.random()*40)
var infos = [
'哇,你当下神仙附体,快去勾搭妹子',
'太阳天空照,花儿对我笑',
'喂,你是猪吗?离我远点'
]
var info
if(score>90){
info=infos[0]
}else if(score>75){
info=infos[1]
}else{
info=infos[2]
}
this.setData({
score:score,
info:info
})
},
onLoad: function () {
console.log('onLoad')
var that = this
//调用应用实例的方法获取全局数据
app.getUserInfo(function(userInfo){
//更新数据
that.setData({
userInfo:userInfo
})
})
}
})
index.wxss 是页面的样式表:
/**index.wxss**/
.title{
font-size: 30px
display: block
padding: 10px
font-weight: bold
text-align: center
}
.hint{
display: block
padding: 10px 20px
color:#999
text-align: center
}
.check{
width: 100px
}
.userinfo {
display: flex
flex-direction: column
align-items: center
}
.userinfo-avatar {
width: 128rpx
height: 128rpx
margin: 20rpx
border-radius: 50%
}
.userinfo-nickname {
color: #aaa
text-align: center
display: block
}
页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。
index.json 是页面的配置文件:
页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。
运行结果如下:
手机预览
开发者工具左侧菜单栏选择"项目",点击"预览",扫码后即可在微信客户端中体验。
手机端效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)