【uniapp】实现买定离手小游戏

前言

最近玩了一个小游戏,感觉挺有意思,打算放进我的小程序【自动化小助手】里面,“三张押一张,专押花姑娘!”,从三张卡牌,挑选一张,中奖后将奖励进行发放,并且创建下一期,不多说了,说做就做

分析

前端分析

前端设计出页面以后,从接口处获得参与次数,押中次数以及当前期数、开奖时间,开奖时间获取到以后和现在的时间进行对比获得倒计时,下面是我已经大致构建的画面
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这是代码:

<template><view><view class="b-flex-x b-bg-white b-p-32"><image src="@/static/guanjun.png" mode="aspectFit" class="logo b-radius-8"></image><view class="b-flex-item b-ml-32"><view class="b-text-B b-text-48 b-text-black">买定离手</view><br><view class="b-font-24 b-mt-8 b-text-black-dd">参与<span style="color: navajowhite;">2</span>次,押中<span style="color: yellowgreen;">23</span>次</view></view></view><view class="b-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd" style="color: black;font-weight: 500;">第1期 开奖倒计时:<span style="color: red;">00:00</span></view><view class="b-list-user b-bg-white" style="width: 700rpx;height: 300rpx;margin: auto;"><text style="color: orange;">已选择卡牌,等待开奖</text><text style="color: orange;">请选择</text><view style="width: 680rpx;height: 250rpx;margin: auto;display: flex;flex-direction: row;align-items: center;justify-content: center;"><image src="https://floor.huluxia.com/static/img/ya.png" mode="aspectFit" style="width: 200rpx;" v-if="select_card=='1'" ></image><image src="https://floor.huluxia.com/static/img/1_normal.png" mode="aspectFit" style="width: 200rpx;" v-else @click="click_card('1')"></image><image src="https://floor.huluxia.com/static/img/ya.png" mode="aspectFit" style="width: 200rpx;margin-left: 10rpx;" v-if="select_card=='2'"></image><image src="https://floor.huluxia.com/static/img/2_normal.png" mode="aspectFit" style="width: 200rpx;margin-left: 10rpx;" v-else @click="click_card('2')"></image><image src="https://floor.huluxia.com/static/img/ya.png" mode="aspectFit" style="width: 200rpx;margin-left: 10rpx;" v-if="select_card=='3'"></image><image src="https://floor.huluxia.com/static/img/3_normal.png" mode="aspectFit" style="width: 200rpx;margin-left: 10rpx;" v-else @click="click_card('3')"></image></view></view><view class="b-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd" style="color: black;font-weight: 500;">游戏规则:</view><view class="b-list-user b-bg-white" style="width: 680rpx;height: 120rpx;margin:auto;"><text>①三张卡牌中有一张是K,请选择一张卡牌。</text><br><text>②开奖后,选中的话可以获得相应的金币,反之会失去你的金币。</text></view><view class="b-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd" style="color: black;font-weight: 500;">最近开局记录</view><view class="b-list-user b-bg-white"></view></view>
</template><script>export default {data() {return {select_card:'0'}},onShow() {},onLoad() {},methods: {click_card(num){this.select_card=num;},}}
</script><style lang="scss">.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_update="UPDATE `game_periods` SET `number` = '$randomNumber', `is_processed` = '1' WHERE `period` = '$period'";$conn->query($sql_update);} else {//没有查询到任何记录//创建第一期$sql_insert="INSERT 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();
?>
  1. 首先,代码通过include和require_once引入了一些依赖的文件,包括数据库连接文件和消息推送相关的文件。
  2. 接下来,代码检查传入的GET请求参数password是否等于iuweojsd8542637lk,如果不等于则返回一个JSON格式的错误信息,包含错误代码和错误消息。
  3. 然后,代码获取当前的时间戳,并计算出5分钟后的时间戳。代码通过数据库查询获取最后一期的信息,如果有查询结果,说明已经存在期数记录,就对该期进行更新操作:生成1、2或3的随机数,并将这个随机数以及标记为已处理的状态写入数据库。如果没有查询到任何记录,说明是第一期,代码将创建第一期的记录,并将下一期的信息也插入数据库,但这个记录的期数是当前期数加1,即第二期。
  4. 之后,代码会检查当前期数的数据记录,查询是否有用户参与,如果有参与,会根据用户选择的数字和随机生成的数字进行奖励结算。如果用户选择的数字与随机数一致,会将用户的账户余额增加两倍的奖励金额,否则用户得到一条未中奖的消息。
  5. 最后,代码通过消息推送的方式,将奖励结果发送给对应的用户。
  6. 最后关闭数据库连接。

定时计划

通过宝塔的定时计划任务,到点后触发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'];
//查询当前提交期数与系统最后期数一致吗(期数一致)
$sql1="SELECT 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_processed=='0') {//防止写入两次$query_sql="SELECT id FROM `periods_data` WHERE `period`='$period'and `openid`='$openid'";$result = $conn->query($query_sql);if ($result->num_rows > 0) {
die(json_encode(array('code' => 200,'msg' => '已经押注过啦~'),480)
);} else {// 余额支付//我的余额查询$cx_yue="SELECT `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_update="UPDATE `user` SET `price` = '$residue_money' WHERE `openid` = '$openid'";$res2=$conn->query($money_update);//插入操作$sql2="INSERT 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();//放防止重复提交(同个用户一期只能提交一次)
  1. 代码首先通过include引入了数据库连接文件。
  2. 接下来,代码检查是否收到了POST请求,如果没有收到POST请求,返回一个JSON格式的错误信息,表示缺少参数。代码从POST请求中获取了期数 p e r i o d 、用户标识 period、用户标识 period、用户标识openid、用户选择的数字 n u m b e r 以及押注金额 number以及押注金额 number以及押注金额price。
  3. 代码查询数据库,获取系统中最后一期的信息,包括期数和是否已经处理的标记。
  4. 如果查询到最后一期的信息,代码会检查用户提交的期数 p e r i o d 是否与系统最后一期的期数一致,并且检查该期是否未处理( period是否与系统最后一期的期数一致,并且检查该期是否未处理( period是否与系统最后一期的期数一致,并且检查该期是否未处理(is_processed为0)。如果期数一致且未处理,继续进行下面的操作。
  5. 代码查询数据库,检查该用户是否已经在当前期数下进行过押注,如果已经押注过,返回一个JSON格式的错误信息,表示已经押注过。
  6. 如果用户没有在当前期数下进行过押注,则继续进行余额支付判断。首先查询该用户的余额,并检查余额是否足够支付押注金额。
  7. 如果余额足够,进行余额扣除操作,更新用户余额,并将押注记录插入periods_data表中。
  8. 如果余额不足,返回一个JSON格式的错误信息,表示余额不足。
  9. 如果系统最后一期的期数与用户提交的期数不一致,或者该期已经处理过,返回相应的JSON格式错误信息,提示游戏状态或操作不合法。
  10. 最后,关闭数据库连接。

前端页面渲染接口

新建get_last_periods.php

<?php
include '../api/conn.php';
header("Content-type:text/html;charset=utf-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 ($rows=mysqli_fetch_array($result,MYSQLI_ASSOC)){$count=count($rows);//不能在循环语句中,由于每次删除 row数组长度都减小  for($i=0;$i<$count;$i++){  unset($rows[$i]);//删除冗余数据  }array_push($jarr,$rows);
}//  $str=json_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解密过程》
《抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos》
《Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
《某课抓包视频 安卓手机:黄鸟+某课app+VirtualXposed虚拟框架》

推荐专栏:

《Python爬虫脚本项目实战》

该专栏往期文章:
《【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)》

🥦如果感觉看完文章还不过瘾,欢迎查看我的其它专栏
🥦作者对python有很大的兴趣,完成过很多独立的项目:例如滇医通等等脚本,但是由于版权的原因下架了,爬虫这一类审核比较严谨,稍有不慎就侵权违规了,所以在保证质量的同时会对文章进行筛选

如果您对爬虫感兴趣请收藏或者订阅该专栏哦《Python爬虫脚本项目实战》,如果你有项目欢迎联系我,我会同步教程到本专栏!

🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

⭐⭐欢迎订阅⭐⭐
在这里插入图片描述

Python爬虫脚本项目实战
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71108.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何写出高质量代码:特征、编程实践技巧和软件工程方法论

一、 前言 在当今的软件开发行业中&#xff0c;写出高质量代码是每个开发者都应该追求的目标。高质量代码不仅能提升我们自身的编程水平和工作效率&#xff0c;还能减少代码维护和管理的难度&#xff0c;为项目的长期发展奠定坚实的基础。然而&#xff0c;要写出高质量代码并不…

国考省考行测:细节理解,对错判断,要素查找,问什么,找什么,对比分析

国考省考行测&#xff1a;细节理解&#xff0c;对错判断&#xff0c;要素查找&#xff0c;问什么&#xff0c;找什么&#xff0c;对比分析 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要…

想去银行测试?那这套题目你必须要会

一、根据题目要求写出具体LINUX操作命令 1、分别写出一种查看主机IP地址、CPU使用率、内存使用率的命令。 ifconfig top 2、进入/wls/applogs目录&#xff0c;显示该目录下所有文件详细信息&#xff0c;并按照文件变更时间排序 cd /wls/applogs ls -lt 3、在后台运行目录下…

【银行测试】必看的四类题型:这可是最经典的一套题目了

目录&#xff1a;导读 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 四、测试案例设计题 金三银四面试面对大厂面试官提问&#xff0c;如何回答&#xff1a;花3天背完这100道软件测试面试题&#xff01;银行测试的offer还不是手…

政考网:公务员考试拿不到高分,因为你的刷题姿势不对

众所周知&#xff0c;公务员考试竞争是十分激烈的&#xff0c;如果你想成功上岸&#xff0c;首先就要拿到一个比较优秀的笔试分值&#xff0c;这样你才有进行到面试的资格。但是又有很多同学经常说&#xff0c;自己也付出了不少的努力&#xff0c;为什么却拿不到高分呢。关于这…

国外国内都躲不过的面试题,到底怎么答才得分?

大家都知道的是算法面试占比高&#xff0c;可现在系统设计面试也避无可避&#xff01; 有人问&#xff1a;不是SDE2才问系统设计&#xff0c;SDE1只考察OOD吗&#xff1f; 往年也许如此&#xff0c;但今年面试的小伙伴反馈&#xff1a;亚麻分别在三、四轮里出现OOD和系统设计…

长见识!居然还有程序员考公指南这种东西?

整理 | 王晓曼 出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09; 最近&#xff0c;拼多多事件的发酵再次把互联网打工人的996推到了风口浪尖。 虽然并不是每一个猝死事件都能与“过劳”建立直接联系&#xff0c;但互联网行业超负荷加班处理Bug是家常便饭&am…

考研复试之考前准备(上)

文章目录 1. 写在前面的话2. 如何准备复试2.1 和同专业的师兄师姐沟通(跨校)2.2 和目标导师联系1. 写在前面的话 今年的考研初试刚结束,有人欢喜有人忧。欢喜者可能因为初试顺利而沾沾自喜,忧愁者往往因为初试不佳而沮丧失望,导致最终的结果是一致的,那就是迟迟没有进入到复…

【深圳大学】考研初试复试资料分享

给同学们送福利啦~ 提供给同学们计算机/软件工程等相关专业的各种学校的初试复试资料集合。 资料一般包含初试真题&#xff0c;往年学长学姐考研经验&#xff0c;通知&#xff0c;复试资料等等。 这次分享的是 深圳大学 的考研资料~ https://pan.baidu.com/s/10jSyL32Gh-C_5Wf4…

微信机器人终端1.0未来的设想就是做成telegram一样强大的机器人群体集控终端

Bot console 是本人最近研发的一款项目&#xff0c;目前存放在github中 Bot console未来的设想就是做成telegram一样强大的机器人群体集控终端 在自定义机器人和脚本这块可以说是自由度非常高&#xff0c;当然对编程技术也有一定要求&#xff0c;有兴趣的可以一起开发和讨论&am…

如何用GPT轻松搞定一篇毕业论文。

大家好&#xff0c;我是五竹。心血来潮整理了一份手册&#xff1a;《ChatGPT学习指南》并且将为小白们持续更新和GPT相关的资源和教程&#xff0c;专注于打造一部最好的GPT入门指南&#xff0c;欢迎大家转发、收藏、点赞支持&#xff01;谨防失联&#xff01; 下面&#xff0c…

chatgpt赋能python:Python搜索引擎优化:如何搜索网站内容

Python 搜索引擎优化&#xff1a;如何搜索网站内容 随着数字化时代的到来&#xff0c;人们越来越依赖搜索引擎来获取他们所需的信息。当人们在搜索引擎上搜索内容时&#xff0c;他们希望看到相关、有用的信息。这意味着SEO&#xff08;搜索引擎优化&#xff09;已经成为了一个…

类ChatGPT模型ChatGLM-b6本地部署实践

国外ChatGPT火爆持续&#xff0c;前一段时间百度发布“文心一言”还没有全面放开测试&#xff0c;这不阿里“通义千问”又悄然而至&#xff0c;国内大模型AI产品渐渐浮出水面。早在2022年8月份时候清华大学的对话语言模型ChatGLM-6B就发布并开源&#xff0c;本文简要介绍ChatGL…

chatgpt赋能python:Python如何绑定登陆和主界面

Python如何绑定登陆和主界面 Python是一种开发Web应用程序的强大语言&#xff0c;被广泛运用于网站开发和应用程序开发&#xff0c;其可扩展性和丰富的开发库使得Python成为了Web开发的首选语言之一。在Web开发中&#xff0c;绑定登陆和主界面是一个非常重要的步骤&#xff0c…

北京内推 | 百度搜索策略部招聘NLP方向算法实习生(校招同步招收)

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 百度 【百度核心部门——搜索策略部】搜索&#xff0c;二十余年百度的发展根基&#xff1b;…

科研实习 | 新加坡国立大学尤洋老师课题组招收Data-centric AI科研实习生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 新加坡国立大学 新加坡国立大学&#xff08;National University of Singapore)&#xff0c…

北京内推 | 微软亚洲研究院数据知识智能组招聘大模型研究实习生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 微软亚洲研究院 与MSRA Data Knowledge Intelligence组的科学家一起探索前沿最先进大模型&a…

错别字检查软件与人工校对:如何兼顾准确性和效率?

错别字检查软件和人工校对各有优劣&#xff0c;在兼顾准确性和效率方面需要结合实际情况进行选择和应用。以下是一些建议&#xff1a; 1.利用错别字检查软件&#xff1a;错别字检查软件可以帮助我们快速检测和纠正拼写错误&#xff0c;从而提高效率。在一些重复性工作和大规模数…

论文校对错别字检测工具

论文校对错别字检测工具 2018-4-15 07:35:37 论文校对错别字检测工具 盼望着,盼望着,东风来了,春天的脚步近了。毕业季也到来了。 高校中的芸芸学子们也忙着准备找工作、开始准备写毕业论文了。 毕业论文是学习路上的阶段性总结&#xff0c;标志性的报告。如果毕业论文中出现…

chatgpt赋能python:Python实现错别字纠正的重要性与方法

Python实现错别字纠正的重要性与方法 作为一种强大的编程语言&#xff0c;Python已经广泛应用于各行各业。其中&#xff0c;Python实现错别字纠正技术是非常重要的&#xff0c;它可以有效提升企业在线文本的质量和可读性。这篇文章将会介绍Python实现错别字纠正的重要性和方法…