众所周知,现在中国市场上的大部分网游无非“传奇”、“抽卡”之类,这些游戏通过策划的缜密规划,不少玩家深陷其中,为的就是得到得到虚拟世界的满足感和成就感。比如登陆多少天送SSR,签到满多少天送极品屠龙宝刀,保底十连抽数不胜数。游戏策划们通过这种奖励形式的游戏机制,让玩家在玩游戏的同时以少量的代价获得巨大的”利益“,也促使他们的欲望越变越大,最终深陷泥潭。
而有的策划,因为想留住玩家,想出来各种各样的奇葩玩法让玩家获得游戏道具,以增加用户黏性
就比如下面这个玩法机制
游戏规则
在图片的第一行提示了游戏的玩法:
一共9张牌,刚开始每张牌都是背面,每天有20次机会,1次可以随机翻开1-3张牌,9张都被翻开则视为成功
看似人畜无害的翻牌游戏,其实背后隐瞒着惊天大秘密,且不说9张牌,即使把牌数减少到6张,其概率也是难以想象的低。之前有幸吃饱了撑着算了另一个游戏的概率,竟然低至0.23%,前后总共花了2周时间才通关。还有王法吗?还有天理吗?!带着愤慨的情绪,我随手打开另一个游戏,为的就是让自己认清现实(看看我有多长寿),于是写了一个关于需要花多少天的时间可以通关的代码
代码思路
- 首先一共有9张牌,每张都有正反面,我们不妨初始化一个大小为9的整型数组,正反面用正负数表示
- 利用循环语句判断9张牌是否都翻面了 如果没有 我们就执行再翻一次的方法
- 在再翻一次的方法中 我们需要初始化4个随机整形变量,3个用来选择翻牌牌序,1个用来判断翻几张牌
- 定义一个全局变量time,用来计数次数,最后再对time/20+1,用来计算天数(一天只能玩20次)
成果演示
下面是编辑好的代码 还有一些小细节没优化就不用在意了
public class SeerTest2 {
int time = 1;
int[] arr = new int[]{1,2,3,4,5,6,7,8,9};//9张牌
boolean isSuccess = false;
public static void main(String[] args) {
SeerTest2 seerTest2 = new SeerTest2();
seerTest2.fanPai();
System.out.println((seerTest2.time/20)+1+"天");
}
//六界神王翻牌
public void fanPai(){
while (!isSuccess){
time++;
//判断牌是否都翻完
for (int i = 0;i < arr.length;i++){
if (arr[i] != -(i+1)){
break;
}
else if (i == arr.length-1){
isSuccess = true;//判断到最后一张还是翻过的那就说明都翻完了
}
}
zaiFan();
}
}
//再翻一次牌
public void zaiFan(){
while (!isSuccess) {
//初始化三张牌的牌序
int a = 0;
int b = 0;
int c = 0;
int x = 0;
//如果牌序一样的就重新再随机直到三张牌序分别不一样
while (a == b || a == c || b == c) {
a = (int) (1 + Math.random() * 9);
b = (int) (1 + Math.random() * 9);
c = (int) (1 + Math.random() * 9);
}
//选择翻牌牌数
x = (int) (1 + Math.random() * 3);
switch (x){
case 1:arr[a - 1] = -arr[a - 1];break;
case 2:arr[a - 1] = -arr[a - 1];arr[b - 1] = -arr[b - 1];break;
case 3:arr[a - 1] = -arr[a - 1];arr[b - 1] = -arr[b - 1];arr[c - 1] = -arr[c - 1];
}
break;
}
}
}
光放代码没有,我给大家运行看看
测试1:113天
测试2:69天
测试3:5天
测试4:3天
测试5:17天
**应该在主函数里遍历50次方法再算平均值的 不过看到3天也能出的概率我很欣慰(虽然我已经打了3天了)**
the end