Little Alchemy 游戏 - 扒答案。。 Java
2016-01-08 16:05
549 查看
Little Alchemy 是个用四个基本元素组合生成的小游戏。。。连Excalibur都可以有
写的代码是从这个游戏的hint页面得到答案的
写的代码是从这个游戏的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(); } } }
相关文章推荐
- Retrofit 和 RxJava 结合使用
- Java SWT 设计RS232/RS485串口接受的界面,用线程读取和发送
- Eclipse 安装反编译插件
- java线程池在web项目中应用
- Java中的继承
- Java enum的用法详解
- java中在写入mysql数据库时出现的乱码问题
- java.lang.NoClassDefFoundError
- JAVA类
- Java日志框架slf4j、jcl、jul、log4j1、log4j2、logback大总结
- struts表单属性设置
- Java三目算法
- Java中典型的内存泄露问题和解决方法
- eclipse下 带图片的java工程-->jar文件-->exe文件
- JAVA CAS原理深度分析
- eclipse SWT 中实现工程图标最小化到托盘,并只能右键托盘图标选择关闭
- Java中的存储
- JAVA-Semaphore信号灯-可实现维护自身线程访问数
- 成为JAVA GC专家系列
- Struts + Spring + Hibernate 进阶开端(一)