您的位置:首页 > 编程语言 > Java开发

Little Alchemy 游戏 - 扒答案。。 Java

2016-01-08 16:05 549 查看
Little Alchemy 是个用四个基本元素组合生成的小游戏。。。连Excalibur都可以有

写的代码是从这个游戏的hint页面得到答案的

import java.io.*;
import java.net.URL;
import java.util.*;

public class Main {

public static void main(String[] args) {
String urlStr = "https://littlealchemy.com/cheats/?element=";
String mark = "<a href=\"?element=";

Map<String, Integer> map = new HashMap<String, Integer>();
String[][] c = new String[600][3];

try{
int cnt = 0;
String curr = "christmas stocking";
URL url = new URL(urlStr + curr.replaceAll(" ", "%20"));

Scanner in = new Scanner(new File("result.txt"));
while(in.hasNext()){
String line;
line = in.nextLine();
String[] ss = line.split(" [=\\+] ");
map.put(ss[0], cnt);
c[cnt][0] = ss[0];
c[cnt][1] = ss[1];
c[cnt][2] = ss[2];
cnt++;
}
in.close();

//            550-4
int maxn = 525;//找到maxn个条目就停止
int times = 0;
while(map.size() < maxn) {
++times;
if(times % 100 == 0){
System.out.println(times);
}
BufferedInputStream stream = new BufferedInputStream(url.openStream());
byte[] data = new byte[10000];
stream.read(data);
stream.close();

String str = new String(data);
int start = str.indexOf(mark) + mark.length();
int end = str.indexOf("\" class=\"randomButtonTop\">try random element</a>");
if(start > 0 && end > 0) {

int e1s = str.indexOf(mark, start);
int e1e = str.indexOf("\"><img class=\"elementImg\"", e1s>0?e1s:0);
e1s += mark.length();

int e2s = str.indexOf(mark, e1e);
int e2e = str.indexOf("\"><img class=\"elementImg\"", e2s>0?e2s:0);
e2s += mark.length();

//                    if(!map.containsKey(curr)){
//                        System.out.println(curr);
//                    }
//                    if(e1s>start && e1e>e1s && !map.containsKey(str.substring(e1s, e1e))){
//                        System.out.println(str.substring(e1s, e1e));
//                    }
//                    if(e2s>e1e && e2e>e2s && !map.containsKey(str.substring(e2s, e2e))){
//                        System.out.println(str.substring(e2s, e2e));
//                    }

if(!map.containsKey(curr) && e1s>start && e1e>e1s && e2s>e1e && e2e>e2s){
map.put(curr, cnt);
c[cnt][0] = curr;
c[cnt][1] = str.substring(e1s, e1e);
c[cnt][2] = str.substring(e2s, e2e);
cnt++;
System.out.println(cnt+". "+curr+" = "+str.substring(e1s, e1e)+" + "+str.substring(e2s, e2e));
}

String next = str.substring(start, end);
url = new URL(urlStr + next.replaceAll(" ", "%20"));
curr = next;
}
else {
//                    System.out.println("\tWAITING...");
Thread.sleep(2000);
}
}

Arrays.sort(c, 0, cnt, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[0].compareTo(o2[0]);
}
});
PrintWriter out = new PrintWriter("result.txt");
for(int i = 0; i < cnt; ++i){
out.printf("%s = %s + %s\n", c[i][0], c[i][1], c[i][2]);
//                System.out.printf("%d. %s = %s + %s\n", i+1, c[i][0], c[i][1], c[i][2]);
}
out.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: