该网站正在建设,高校门户网站源码,做网站构思,做网站品牌公司前言
最近玩了一个小游戏#xff0c;感觉挺有意思#xff0c;打算放进我的小程序【自动化小助手】里面#xff0c;“三张押一张#xff0c;专押花姑娘#xff01;”#xff0c;从三张卡牌#xff0c;挑选一张#xff0c;中奖后将奖励进行发放#xff0c;并且创建下一…前言
最近玩了一个小游戏感觉挺有意思打算放进我的小程序【自动化小助手】里面“三张押一张专押花姑娘”从三张卡牌挑选一张中奖后将奖励进行发放并且创建下一期不多说了说做就做
分析
前端分析
前端设计出页面以后从接口处获得参与次数押中次数以及当前期数、开奖时间开奖时间获取到以后和现在的时间进行对比获得倒计时下面是我已经大致构建的画面 这是代码
templateviewview classb-flex-x b-bg-white b-p-32image src/static/guanjun.png modeaspectFit classlogo b-radius-8/imageview classb-flex-item b-ml-32view classb-text-B b-text-48 b-text-black买定离手/viewbrview classb-font-24 b-mt-8 b-text-black-dd参与span stylecolor: navajowhite;2/span次押中span stylecolor: yellowgreen;23/span次/view/view/viewview classb-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd stylecolor: black;font-weight: 500;第1期 开奖倒计时span stylecolor: red;00:00/span/viewview classb-list-user b-bg-white stylewidth: 700rpx;height: 300rpx;margin: auto;text stylecolor: orange;已选择卡牌等待开奖/texttext stylecolor: orange;请选择/textview stylewidth: 680rpx;height: 250rpx;margin: auto;display: flex;flex-direction: row;align-items: center;justify-content: center;image srchttps://floor.huluxia.com/static/img/ya.png modeaspectFit stylewidth: 200rpx; v-ifselect_card1 /imageimage srchttps://floor.huluxia.com/static/img/1_normal.png modeaspectFit stylewidth: 200rpx; v-else clickclick_card(1)/imageimage srchttps://floor.huluxia.com/static/img/ya.png modeaspectFit stylewidth: 200rpx;margin-left: 10rpx; v-ifselect_card2/imageimage srchttps://floor.huluxia.com/static/img/2_normal.png modeaspectFit stylewidth: 200rpx;margin-left: 10rpx; v-else clickclick_card(2)/imageimage srchttps://floor.huluxia.com/static/img/ya.png modeaspectFit stylewidth: 200rpx;margin-left: 10rpx; v-ifselect_card3/imageimage srchttps://floor.huluxia.com/static/img/3_normal.png modeaspectFit stylewidth: 200rpx;margin-left: 10rpx; v-else clickclick_card(3)/image/view/viewview classb-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd stylecolor: black;font-weight: 500;游戏规则/viewview classb-list-user b-bg-white stylewidth: 680rpx;height: 120rpx;margin:auto;text①三张卡牌中有一张是K请选择一张卡牌。/textbrtext②开奖后选中的话可以获得相应的金币反之会失去你的金币。/text/viewview classb-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd stylecolor: black;font-weight: 500;最近开局记录/viewview classb-list-user b-bg-white/view/view
/templatescriptexport default {data() {return {select_card:0}},onShow() {},onLoad() {},methods: {click_card(num){this.select_cardnum;},}}
/scriptstyle langscss.logo{width: 140rpx;height: 140rpx;}
/style
后端分析
后端我这里用的是原生PHP因为php简单配合这次的项目能够发挥很大的效率瘴气氨考虑用python但是因为长连接不考虑所以就 pass了
思路
新建一个php脚本用来触发每一期的开盘 逻辑查询数据库对应表是否有最后一期存在的话开奖然后写入数据库发放奖励通过定时计划任务每几分钟触发用户端在查到数据库信息后换算开盘时间进行押注
创建期数
新建game_system.php
?php
include ../api/conn.php;
require_once(../api/Message_push/mqtt_sender.php);
if ($_GET[password]!iuweojsd8542637lk) {die(json_encode(array(code 200,msg 缺少参数),480)
);
} // 获取当前时间戳
$currentTimestamp time();// 计算5分钟之后的时间戳
$fiveMinutesLaterTimestamp $currentTimestamp (5 * 60);
//每多长时间开盘$fiveMinutesLaterTimestamp//先获取最后一期数
$sql SELECT * FROM game_periods ORDER BY period DESC LIMIT 1;
$result $conn-query($sql);if ($result-num_rows 0) {// 读取查询结果中的一行数据$row $result-fetch_assoc();// 获取period字段的值$period $row[period];//进行随机数计算完成该期数据库写入// 生成1、2或3的随机数$randomNumber mt_rand(1, 3);$sql_updateUPDATE game_periods SET number $randomNumber, is_processed 1 WHERE period $period;$conn-query($sql_update);} else {//没有查询到任何记录//创建第一期$sql_insertINSERT INTO game_periods (id, period, number, next_draw_time, is_processed) VALUES (NULL, 1, ,$fiveMinutesLaterTimestamp, 0);$conn-query($sql_insert);die(创建了第一期);
}//下一期创建
$nextPeriod $period 1;
$sql_insert_ INSERT INTO game_periods (id, period, number, next_draw_time, is_processed) VALUES (NULL, $nextPeriod, , $fiveMinutesLaterTimestamp, 0);
$result $conn-query($sql_insert_);// 匹配奖励结算(未中奖也要说)
$reward SELECT price,openid,number FROM periods_data WHERE period$period;
$result $conn-query($reward);if ($result-num_rows 0) {// 循环读取查询结果中的所有行数据while ($row $result-fetch_assoc()) {$openid $row[openid];$price $row[price];$number_sonal $row[number];// 获得$price的两倍$doublePrice $price * 2;if ($number_sonal$randomNumber) {// 金额到账
$price_update UPDATE user SET price price $doublePrice WHERE openid $openid;
$conn-query($price_update);
$msg恭喜您,选中了K牌奖励已到账;} else {
$msg很遗憾,未选中K牌再接再厉;}$receiver $openid;$content $msg;send_mqtt_message($receiver, $content,$conn,0);// 通知消息}
} // 关闭数据库连接
$conn-close();
?首先代码通过include和require_once引入了一些依赖的文件包括数据库连接文件和消息推送相关的文件。接下来代码检查传入的GET请求参数password是否等于iuweojsd8542637lk如果不等于则返回一个JSON格式的错误信息包含错误代码和错误消息。然后代码获取当前的时间戳并计算出5分钟后的时间戳。代码通过数据库查询获取最后一期的信息如果有查询结果说明已经存在期数记录就对该期进行更新操作生成1、2或3的随机数并将这个随机数以及标记为已处理的状态写入数据库。如果没有查询到任何记录说明是第一期代码将创建第一期的记录并将下一期的信息也插入数据库但这个记录的期数是当前期数加1即第二期。之后代码会检查当前期数的数据记录查询是否有用户参与如果有参与会根据用户选择的数字和随机生成的数字进行奖励结算。如果用户选择的数字与随机数一致会将用户的账户余额增加两倍的奖励金额否则用户得到一条未中奖的消息。最后代码通过消息推送的方式将奖励结果发送给对应的用户。最后关闭数据库连接。
定时计划
通过宝塔的定时计划任务到点后触发URL这个时候你可能会说程序会在创建过程中出现很多BUG是的当速度不匹配用户提交数据有很多不确定性所以我们需要对下面的用户操作部分做一些调整避免出现这些情况
买定离手操作
新建buy.php
?phpinclude ../api/conn.php;
if (!$_POST) {die(json_encode(array(code 200,msg 缺少参数),480)
);
} $period$_POST[period];
$openid$_POST[openid];
$number$_POST[number];
$price$_POST[price];
//查询当前提交期数与系统最后期数一致吗期数一致
$sql1SELECT period,is_processed FROM game_periods ORDER BY period DESC LIMIT 1;
$result $conn-query($sql1);if ($result-num_rows 0) {// 读取查询结果中的一行数据$row $result-fetch_assoc();// 获取id字段的值$period_database $row[period];$is_processed $row[is_processed];if ($period_database$period$is_processed0) {//防止写入两次$query_sqlSELECT id FROM periods_data WHERE period$periodand openid$openid;$result $conn-query($query_sql);if ($result-num_rows 0) {
die(json_encode(array(code 200,msg 已经押注过啦~),480)
);} else {// 余额支付//我的余额查询$cx_yueSELECT price FROM user WHERE openid$openid;$res$conn-query($cx_yue);if ($rowss$res-fetch_assoc()) {$my_money$rowss[price];//我的余额} else {die(json_encode(array(code 200,msg 当前用户未注册),480)
);}$buy$price;//真正需要付的钱// var_dump($buy);//余额判断if ($my_money$buy) {// 余额扣除$residue_money$my_money-$buy;$money_updateUPDATE user SET price $residue_money WHERE openid $openid;$res2$conn-query($money_update);//插入操作$sql2INSERT INTO periods_data (id, period, number, openid, price) VALUES (NULL, $period_database, $number, $openid, $price);$conn-query($sql2);die(json_encode(array(code 100,msg 押注成功),480)
);} else {die(json_encode(array(code 200,msg 余额不足),480)
);
}// 余额支付}} else {die(json_encode(array(code 200,msg 该局游戏不存在请刷新后重试),480)
);}} else {die(json_encode(array(code 200,msg 游戏暂未开盘),480)
);
}// 关闭数据库连接
$conn-close();//放防止重复提交同个用户一期只能提交一次
代码首先通过include引入了数据库连接文件。接下来代码检查是否收到了POST请求如果没有收到POST请求返回一个JSON格式的错误信息表示缺少参数。代码从POST请求中获取了期数 p e r i o d 、用户标识 period、用户标识 period、用户标识openid、用户选择的数字 n u m b e r 以及押注金额 number以及押注金额 number以及押注金额price。代码查询数据库获取系统中最后一期的信息包括期数和是否已经处理的标记。如果查询到最后一期的信息代码会检查用户提交的期数 p e r i o d 是否与系统最后一期的期数一致并且检查该期是否未处理 period是否与系统最后一期的期数一致并且检查该期是否未处理 period是否与系统最后一期的期数一致并且检查该期是否未处理is_processed为0。如果期数一致且未处理继续进行下面的操作。代码查询数据库检查该用户是否已经在当前期数下进行过押注如果已经押注过返回一个JSON格式的错误信息表示已经押注过。如果用户没有在当前期数下进行过押注则继续进行余额支付判断。首先查询该用户的余额并检查余额是否足够支付押注金额。如果余额足够进行余额扣除操作更新用户余额并将押注记录插入periods_data表中。如果余额不足返回一个JSON格式的错误信息表示余额不足。如果系统最后一期的期数与用户提交的期数不一致或者该期已经处理过返回相应的JSON格式错误信息提示游戏状态或操作不合法。最后关闭数据库连接。
前端页面渲染接口
新建get_last_periods.php
?php
include ../api/conn.php;
header(Content-type:text/html;charsetutf-8);//字符编码设置
if (!$_POST) {die(json_encode(array(code 200,msg 缺少参数),480)
);
} $sql SELECT * FROM game_periods ORDER BY period DESC LIMIT 1;
$result $conn-query($sql);
if (!$result) {die(fail);
}$jarr array();
while ($rowsmysqli_fetch_array($result,MYSQLI_ASSOC)){$countcount($rows);//不能在循环语句中由于每次删除 row数组长度都减小 for($i0;$i$count;$i){ unset($rows[$i]);//删除冗余数据 }array_push($jarr,$rows);
}// $strjson_encode($jarr);//将数组进行json编码
// $info json_decode(trim($jarr),true);die(json_encode(array(code 100,data $jarr,msg 获取成功),480)
);?MQTT消息通知写入数据库 $receiver $openid;$content $msg;send_mqtt_message($receiver, $content,$conn,0);演示操作
可以去小程序【自动打卡小助手】里面体验下面是演示视频 【uniapp】实现买定离手小游戏 希望你能喜欢我的其他作品 《记一次云之家签到抓包》 《记一次视频抓包m3u8解密过程》 《抓包部分软件时无网络过代理检测 解决办法 安卓黄鸟httpcanaryvmos》 《Python】记录抓包分析自动领取芝麻HTTP每日免费IP成品教程》 《某课抓包视频 安卓手机黄鸟某课appVirtualXposed虚拟框架》
推荐专栏
《Python爬虫脚本项目实战》
该专栏往期文章 《【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码过Authorization认证》
如果感觉看完文章还不过瘾欢迎查看我的其它专栏 作者对python有很大的兴趣完成过很多独立的项目例如滇医通等等脚本但是由于版权的原因下架了爬虫这一类审核比较严谨稍有不慎就侵权违规了所以在保证质量的同时会对文章进行筛选
如果您对爬虫感兴趣请收藏或者订阅该专栏哦《Python爬虫脚本项目实战》如果你有项目欢迎联系我我会同步教程到本专栏
Python爬虫项目实战系列文章 ⭐⭐欢迎订阅⭐⭐
【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码过Authorization认证 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口
⭐⭐欢迎订阅⭐⭐
Python爬虫脚本项目实战