微信公众平台开发实现2048游戏的方法


Posted in PHP onApril 15, 2015

本文实例讲述了微信公众平台开发实现2048游戏的方法。分享给大家供大家参考。具体如下:

一、2048游戏概述

《2048》是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏 。

随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的board game中排进了前200。安卓版非常火爆的有《挑战2048》,其2.0.0版以后还加入了双人对战。其次比较特别的有2048中国朝代版。更有2048自定义版,可以自己定义文字和图片。《2048》是IOS中流行的一款。

HOW TO PLAY:Use yourarrow keysto move the tiles. When two tiles with the same number touch, theymerge into one!
NOTE:This site is the official version of 2048. You can play it on your phone via.All other apps or sites are derivatives or fakes, and should be used with caution.
Created by Gabriele Cirulli.Based on 1024 by Veewo Studioand conceptually similar to Threes by Ashe Vollmer.

游戏规则很简单,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。

游戏的画面很简单,一开始整体16个方格大部分都是灰色的,当玩家拼图出现数字之后就会改变颜色,整体格调很是简单。

在玩法规则也非常的简单,一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所有的数字就会向滑动的方向靠拢,而滑出的空白方块就会随机出现一个数字,相同的数字相撞时会叠加靠拢,然后一直这样,不断的叠加最终拼凑出2048这个数字就算成功。

如果你是一个数字爱好者,或者是比较有天赋的数学天才,一上手便会为之着迷。就算不是数学天才,一般的玩家也能够玩转这款游戏,感兴趣的话就去下载体验一番。

微信公众平台开发实现2048游戏的方法

目前这个游戏是开源的,所以不需要再来重新开发,

完整实例代码点击此处本站下载。

二、微信公众平台

把2048源码放到自己的服务器上,得到游戏url。

当用户关注时,提示回复2048可玩这个游戏,

当用户回复2048时,回复图文消息,图文中带2048游戏链接。

完整代码如下所示。

<?php
/*
 方倍工作室
 CopyRight 2014 All Rights Reserved
*/
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
 $wechatObj->responseMsg();
}else{
 $wechatObj->valid();
}
class wechatCallbackapiTest
{
 //验证签名
 public function valid()
 {
  $echoStr = $_GET["echostr"];
  $signature = $_GET["signature"];
  $timestamp = $_GET["timestamp"];
  $nonce = $_GET["nonce"];
  $token = TOKEN;
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr);
  $tmpStr = implode($tmpArr);
  $tmpStr = sha1($tmpStr);
  if($tmpStr == $signature){
   echo $echoStr;
   exit;
  }
 }
 //响应消息
 public function responseMsg()
 {
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  if (!empty($postStr)){
   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
   $RX_TYPE = trim($postObj->MsgType);
    
   //消息类型分离
   switch ($RX_TYPE)
   {
    case "event":
     $result = $this->receiveEvent($postObj);
     break;
    case "text":
     $result = $this->receiveText($postObj);
     break;
   }
   echo $result;
  }else {
   echo "";
   exit;
  }
 }
 //接收事件消息
 private function receiveEvent($object)
 {
  $content = "";
  switch ($object->Event)
  {
   case "subscribe":
    $content = "欢迎关注方倍工作室\n回复 2048 开始游戏";
    break;
  }
  if(is_array($content)){
   if (isset($content[0])){
    $result = $this->transmitNews($object, $content);
   }else if (isset($content['MusicUrl'])){
    $result = $this->transmitMusic($object, $content);
   }
  }else{
   $result = $this->transmitText($object, $content);
  }
  return $result;
 }
 //接收文本消息
 private function receiveText($object)
 {
  $keyword = trim($object->Content);
  
  if (strstr($keyword, "2048")){
   $content = array();
   $content[] = array("Title"=>"2048游戏", "Description"=>"游戏规则很简单,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。", "PicUrl"=>"http://img.laohu.com/www/201403/27/1395908994962.png", "Url" =>"http://gabrielecirulli.github.io/2048/");
  }else{
   $content = date("Y-m-d H:i:s",time())."\n技术支持 方倍工作室";
  }
  
  if(is_array($content)){
   if (isset($content[0]['PicUrl'])){
    $result = $this->transmitNews($object, $content);
   }else if (isset($content['MusicUrl'])){
    $result = $this->transmitMusic($object, $content);
   }
  }else{
   $result = $this->transmitText($object, $content);
  }
 }

 //回复文本消息
 private function transmitText($object, $content)
 {
  $xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
  $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
  return $result;
 }

 //回复图文消息
 private function transmitNews($object, $newsArray)
 {
  if(!is_array($newsArray)){
   return;
  }
  $itemTpl = " <item>
  <Title><![CDATA[%s]]></Title>
  <Description><![CDATA[%s]]></Description>
  <PicUrl><![CDATA[%s]]></PicUrl>
  <Url><![CDATA[%s]]></Url>
 </item>
";
  $item_str = "";
  foreach ($newsArray as $item){
   $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
  }
  $xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str</Articles>
</xml>";
  $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
  return $result;
 }
}
?>

希望本文所述对大家基于php的微信公众平台开发有所帮助。

PHP 相关文章推荐
php模板之Phpbean的目录结构
Jan 10 PHP
php strcmp使用说明
Apr 22 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php伪静态之APACHE篇
Jun 02 PHP
php单例模式实现方法分析
Mar 14 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
PHP获取毫秒级时间戳的方法
Apr 15 #PHP
基于php的微信公众平台开发入门实例
Apr 15 #PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 #PHP
php实现格式化多行文本为Js可用格式
Apr 15 #PHP
php截取指定2个字符之间字符串的方法
Apr 15 #PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 #PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 #PHP
You might like
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
php include,include_once,require,require_once
2008/09/05 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Koa代理Http请求的示例代码
2018/10/10 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
护理专业的自荐信
2013/10/22 职场文书
机械设计及其自动化专业推荐信
2013/10/31 职场文书
《狼》教学反思
2014/03/02 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
关于学习的演讲稿
2014/05/10 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
公司董事任命书
2015/09/21 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
Python极值整数的边界探讨分析
2021/09/15 Python