有真的也有假的
假的就是对你需求不关心,直接给你说个时间,然后就跟你要钱
真的是具体的问你很多细节,包括时间都是没办法给你个固定的,只能给你估个大概的时间
做这个东西是需要技术实力的
之前给一个客户做过,他是需要透视
当时的过程简单还原一下吧
用Fiddler进行数据截取
需要从代码层次入手,因为平台采用了加密通讯
这里面找到CreateRawCall 函数,这个就是收发数据的地方,
然后再进入这个函数去看看 内部的一些关键代码
很快就找到了 协议所在的地方,只需要破解了游戏的正常协议通讯规则,就可以模拟游戏APP发送数据包,比如某个牌还没有开出来,这个时候可以通过程序,模拟发送一次开牌 ,提前开牌,这就是这个东西的原理了
有需求的参考下图找我交流
import java.io.*;
import java.util.*;
public class CalcWeightAndDoc {
//这三个常量是训练文章的存储的地方
private final String positiveArticlePath = "/home/geekgao/practice/positive";
private final String negativeArticlePath = "/home/geekgao/practice/negative";
private final String unsureArticlePath = "/home/geekgao/practice/unsure";
//这两个是词典的位置
private final String posiDictPath = "/home/geekgao/朴素贝叶斯/台湾大学情感词典/ntusd-positive.txt";
private final String negaDictPath = "/home/geekgao/朴素贝叶斯/台湾大学情感词典/ntusd-negative.txt";
private Map<String,Integer> positiveWord;//存储积极词汇的map
private Map<String,Integer> negativeWord;//存储消极词汇的map
private Map<String,Integer> unsureWord;//存储不确定词汇的map
//这两个存储词典中的词语
private Set<String> positiveDict;
private Set<String> negativeDict;
//需要的全局变量
private boolean isGroup = false;
String strTemp;//从xml文件解析词语时用到的临时变量
public static void main(String[] args) {
new CalcWeightAndDoc().launch();
}
public void launch() {
positiveDict = new HashSet<String>();
negativeDict = new HashSet<String>();
readEmotionWord(positiveDict,posiDictPath);
readEmotionWord(negativeDict,negaDictPath);
//这里两个地址是目标地址,生成的文件就在下面两个地址里
calcDoc("/home/geekgao/doc.xml");
calcWeight("/home/geekgao/weight.xml");
System.out.println("执行完毕!");
}
public void readEmotionWord(Set<String> Dict, String dictPath) {
File file = new File(dictPath);
BufferedReader reader = null;
try {
String t;
reader = new BufferedReader(new FileReader(file));
while ((t = reader.readLine()) != null) {
Dict.add(t);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
}现金斗地主
原文标题:手机麻将软件是否能模拟现实中的概率
|