使用PHP在微信公共平台实现24点游戏.docx
- 文档编号:12903779
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:61
- 大小:26.83KB
使用PHP在微信公共平台实现24点游戏.docx
《使用PHP在微信公共平台实现24点游戏.docx》由会员分享,可在线阅读,更多相关《使用PHP在微信公共平台实现24点游戏.docx(61页珍藏版)》请在冰豆网上搜索。
使用PHP在微信公共平台实现24点游戏
使用PHP在微信公共平台实现24点游戏
[导读]使用PHP在微信公共平台实现24点游戏,搭建服务器为SAE,所以很多语句和MYSQL不太一样,24点的数据库存储在24data里面,先用python计算出结果然后存储在本地的txt文件最后倒入SAE的MYSQL,记录了所有有解的4个数字
001.//defineyourtoken
002.define("TOKEN", "ddwm");
003.define("INPUT_NAME", "1");
004.define("START_GAME", "2");
005.define("TIMING_START", "3");
006.define("TIMING_END", "4");
007.
008.
009.$wechatObj = new Why24Point();
010.
011.if ($_GET["echostr"])
012.$wechatObj--->valid();
013.else
014.$wechatObj->responseMsg();
015.
016.class Why24Point{
017.
018.public function responseMsg(){
019.//getpostdata,Maybeduetothedifferentenvironments
020.$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
021.
022.//extractpostdata
023.if (!
emptyempty($postStr)){
024.$postObj =simplexml_load_string($postStr, 'SimpleXMLElement',LIBXML_NOCDATA);
025.$fromUsername = $postObj->FromUserName;
026.$toUsername = $postObj->ToUserName;
027.if($postObj->Event== "subscribe"){
028.$time =time();
029.$textTpl ="
030. --[CDATA[%s]]-->
031. --[CDATA[%s]]-->
032.
033. --[CDATA[%s]]-->
034. --[CDATA[%s]]-->
035.";
036.$msgType = "text";
037.$contentStr = "哟你好亲爱的小伙伴,欢迎来到24点~\n游戏规则:
使用+-*/四则运算得出结果为24即可。
\n任何时候输入主页返回主菜单,\n输入排名查看当前排名哟~\n如果有情况反馈请发送语音信息!
\n请输入任意内容,开始我们的24点职业生涯!
";
038.$resultStr =sprintf($textTpl, $fromUsername, $toUsername, $time,$msgType, $contentStr);
039.echo $resultStr;
040.}
041.$keyword =trim($postObj->Content);
042.$time =time();
043.$textTpl ="
044. --[CDATA[%s]]-->
045. --[CDATA[%s]]-->
046.
047. --[CDATA[%s]]-->
048. --[CDATA[%s]]-->
049.";
050.if (!
emptyempty($keyword)){
051.$msgType = "text";
052.$contentStr = $this->getData($fromUsername, $keyword);
053.$resultStr =sprintf($textTpl, $fromUsername, $toUsername, $time,$msgType, $contentStr);
054.echo $resultStr;
055.} else {
056.echo "输入点东西吧。
。
";
057.}
058.} else {
059.echo "";
060.exit;
061.}
062.}
063.
064.private function getData($fromUsername, $keyword){
065.if($keyword == "主页"){
066.$this->setStep($fromUsername,constant("START_GAME"));
067.return "欢迎来到24点的决战现场。
请输入任意内容,开始我们的24点职业生涯!
任何时候输入主页返回主菜单,输入排名查看当前排名~";
068.}
069.
070.if($keyword == "排名"){
071.return "您的目前排名是:
".$this->getRank($fromUsername);
072.}
073.
074.
075.if ($this->isFirst($fromUsername)){
076.return "这是你第一次参加游戏,请输入你的用户昵称:
";
077.}
078.
079.if ($this->getStep($fromUsername)==constant("INPUT_NAME")){
080.$this->setName($fromUsername, $keyword);
081.$this->setStep($fromUsername,constant("START_GAME"));
082.return "你好," . $keyword . "同学。
请输入任意内容,开始我们的24点职业生涯!
任何时候输入主页返回主菜单,输入排名查看当前排名~";
083.}
084.
085.if ($this->getStep($fromUsername)==constant("START_GAME")){
086.$numbers = $this->getNumbers();
087.$this->setStep($fromUsername,constant("TIMING_START"));
088.return "游戏规则:
使用+-*/四则运算得出结果为24即可。
\n请听题!
" . $this->getNumbers();
089.}
090.
091.if ($this->getStep($fromUsername)==constant("TIMING_START")){
092.if ($this->calcStr($keyword)){
093.//$this->setStep($fromUsername,constant("TIMING_END"));
094.$this->setGrade($fromUsername,5);
095.$this->setStep($fromUsername,constant("START_GAME"));
096.return "结果等于24!
你现在的分数是:
".$this->getGrade($fromUsername);
097.}
098.
099.return "结果错误!
骗子,根本就不等于24!
";
100.
101.//$this->setStep($fromUsername,constant("TIMING_END"));
102.}
103.
104.return "我擦,系统出问题了。
抱了个歉哈!
";
105.}
106.
107.//计算排名
108.private function getRank($fromUsername){
109.$mysql = new SaeMysql();
110.$grade = $this->getGrade($fromUsername);
111.$sql = "SELECTCOUNT(*)FROM `24points`WHERE `grade`>".$grade."";
112.$mysql->closeDb();
113.return intval($mysql->getVar($sql))+1;
114.}
115.
116.//计算成绩
117.private function setGrade($fromUsername, $add){
118.$mysql = new SaeMysql();
119.$sql = "SELECTgradeFROM `24points`WHERE `userid`='" . $fromUsername ."'";
120.$grade = intval($mysql->getVar($sql))+ $add;
121.$sql = "UPDATE `24points`SET `grade`= '" . $grade . "'WHERE `userid`='" . $fromUsername . "';";
122.$mysql->runSql($sql);
123.$mysql->closeDb();
124.}
125.
126.//获得成绩
127.private function getGrade($fromUsername){
128.$mysql = new SaeMysql();
129.$sql = "SELECTgradeFROM `24points`WHERE `userid`='" . $fromUsername ."'";
130.$mysql->closeDb();
131.return intval($mysql->getVar($sql));
132.}
133.
134.
135.//计算等式,返回正确或者错误
136.private function calcStr($keyword){
137.$keyword = str_replace("(","(",$keyword);
138.$keyword = str_replace(")",")",$keyword);
139.$keyword = str_replace("÷","/",$keyword);
140.$keyword = str_replace("/","/",$keyword);
141.$keyword = str_replace("×","*",$keyword);
142.$atr_arr = str_split($keyword);
143.$new_atr = '';
144.for ($i =0; $i < strlen($keyword); $i++){
145.$new_atr = $new_atr . $atr_arr[$i];
146.}
147.$s = eval("return$new_atr;");
148.if ($s ==24){
149.return true;
150.}
151.
152.return false;
153.}
154.
155.//是否是第一次
156.private function isFirst($fromUsername){
157.$mysql = new SaeMysql();
158.$sql = "SELECT*FROM `24points`WHERE `userid`='" . $fromUsername ."'";
159.$data = $mysql->getData($sql);
160.if (count($data)==0){
161.$sql = "INSERTINTO`24points`(`userid`,`step`)VALUES('" .$fromUsername . "','" .constant("INPUT_NAME"). "');";
162.$mysql->runSql($sql);
163.$mysql->closeDb();
164.return true;
165.}
166.return false;
167.}
168.
169.//获取当前的步骤
170.private function getStep($fromUsername){
171.$mysql = new SaeMysql();
172.$sql = "SELECTstepFROM `24points`WHERE `userid`='" . $fromUsername ."'";
173.$mysql->closeDb();
174.return $mysql->getVar($sql);
175.}
176.
177.//获取随机的四个数字用空格隔开
178.private function getNumbers(){
179.$rand_id =rand(1,1362);
180.$mysql = new SaeMysql();
181.$sql = "SELECTnum1FROM `24data`WHERE `id`='" . $rand_id . "'";
182.$num1 = $mysql->getVar($sql);
183.$sql = "SELECTnum2FROM `24data`WHERE `id`='" . $rand_id . "'";
184.$num2 = $mysql->getVar($sql);
185.$sql = "SELECTnum3FROM `24data`WHERE `id`='" . $rand_id . "'";
186.$num3 = $mysql->getVar($sql);
187.$sql = "SELECTnum4FROM `24data`WHERE `id`='" . $rand_id . "'";
188.$num4 = $mysql->getVar($sql);
189.$mysql->closeDb();
190.$numbers = $num1 . "" . $num2 . "" . $num3 . "" . $num4;
191.return $numbers;
192.}
193.
194.//设置当前操作的步数
195.private function setStep($fromUsername, $step){
196.$mysql = new SaeMysql();
197.$sql = "UPDATE `24points`SET `step`= '" . $step . "'WHERE `userid`='" . $fromUsername . "';";
198.$mysql->runSql($sql);
199.$mysql->closeDb();
200.}
201.
202.//设置用户昵称
203.private function setName($fromUsername, $username){
204.$mysql = new SaeMysql();
205.$sql = "UPDATE `24points`SET `username`= '" . $username . "'WHERE `userid`='" . $fromUsername . "';";
206.$mysql->runSql($sql);
207.$mysql->closeDb();
208.}
209.
210.
211.
212.//验证微信
213.public function valid(){
214.$echoStr = $_GET["echostr"];
215.//validsignature,option
216.if ($this->checkSignature()){
217.echo $echoStr;
218.exit;
219.}
220.}
221.
222.//检查签名
223.private function checkSignature(){
224.$signature = $_GET["signature"];
225.$timestamp = $_GET["timestamp"];
226.$nonce = $_GET["nonce"];
227.
228.$token =TOKEN;
229.$tmpArr = array($token, $timestamp, $nonce);
230.sort($tmpArr);
231.$tmpStr =implode($tmpArr);
232.$tmpStr =sha1($tmpStr);
233.
234.if ($tmpStr == $signature){
235.return true;
236.} else {
237.return false;
238.}
239.}
240.}
viewsource
print?
0001.1118
0002.11111
0003.11112
0004.11113
0005.1126
0006.1127
0007.1128
0008.1129
0009.11210
0010.11211
0011.11212
0012.11213
0013.1134
0014.1135
0015.1136
0016.1137
0017.1138
0018.1139
0019.11310
0020.11311
0021.11312
0022.11313
0023.1144
0024.1145
0025.1146
0026.1147
0027.1148
0028.1149
0029.11410
0030.11412
0031.1155
0032.1156
0033.1157
0034.1158
0035.1166
0036.1168
0037.1169
0038.11612
0039.11710
0040.1188
0041.11913
0042.111012
0043.111013
0044.111111
0045.111112
0046.111113
0047.111212
0048.111213
0049.111313
0050.1224
0051.1225
0052.1226
0053.1227
0054.1228
0055.1229
0056.12210
0057.12211
0058.12212
0059.12213
0060.1233
0061.1234
0062.1235
0063.1236
0064.1237
0065.1238
0066.1239
0067.12310
0068.12311
0069.12312
0070.12313
0071.1244
0072.1245
0073.1246
0074.1247
0075.1248
0076.1249
0077.12410
0078.12411
0079.12412
0080.12413
0081.1255
0082.1256
0083.1257
0084.1258
0085.1259
0086.12510
0087.12512
0088.12513
0089.1266
0090.1267
0091.1268
0092.1269
0093.12610
0094.12611
0095.12612
0096.12613
0097.1277
0098.1278
0099.1279
0100.12710
0101.12711
0102.12712
0103.1288
0104.1289
0105.12810
0106.12813
0107.12911
0108.12912
0109.12913
0110.121011
0111.121012
0112.121013
0113.121111
0114.121112
0115.121113
0116.121212
0117.121213
0118.121313
0119.1333
0120.1334
0121.1335
0122.1336
0123.1337
0124.1338
0125.1339
0126.13310
0127.13311
0128.13312
0129.1344
0130.1345
0131.1346
0132.1347
0133.1348
0134.1349
0135.13410
0136.13411
0137.13412
0138.13413
0139.1356
0140.1357
0141.1358
0142.1359
0143.13510
0144.13511
0145.13512
0146.13513
0147.1366
0148.1367
0149.136
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 PHP 公共 平台 实现 24 游戏