I just finished Jewel Quest yesterday after getting hooked to it after understanding how everything works. It
is a good game that’s similar in standard game play like Bejeweled but having a different twist. To start off, you are presented with a board of jewels and to score and finish your goal, you would have to match 3 or more jewels horizontally and/or vertically much like how you play it in Bejeweled. Now, here’s the twist. Once you match jewels, the square area that they are placed in, turns to gold. The object of the game is to turn all squares in the
board into gold and you’re off to the next round. Easy? At first, yes. But as the game goes on, new levels introduce you to new twists like coins (image on the right), which I never understood what it really does until I was almost a few levels to the end of the game. Another twist in the game is having rocks instead of
jewels that show a little color at first (small image on the left). What this means is that you actually need to pair this one with the same colored jewel in order to match it. I never understood how those rocks worked until when I was almost done with the game. I’m not sure if
there is a game over i this game because with the number of times that I did not clear the board, I was sure that I ran out of lives haha. You will also encounter monkey faces which means that if you match them together, if the square area is already gold, it turns back to its original color and you would have to make it gold again, delaying your goal. Both coins and monkeys disappear when they reach the bottom of the board. If you do match up coins together, you get a coin bonus which you can use to color a square area gold if you see time is running out and you cannot do any matches anywhere near the square area. The game is easy to play if only the board is proportion horizontally and vertically. Problem is, the board changes shape on each level, and your goal gets harder (photo on the right is not from the iTouch version, but you get the idea).
Month: September 2008
Java Keeping Track Of Cookies
I came across someone else’s code a long time ago and I thought someone else may find this useful since this class has been part of my library whenever my program involves cookies. It is a class by Saar Machtinger.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
public class CookieTool { static Hashtable theCookies = new Hashtable(); /** * Send the Hashtable (theCookies) as cookies, and write them to * the specified URLconnection * * @param urlConn The connection to write the cookies to. * @param printCookies Print or not the action taken. * * @return The urlConn with the all the cookies in it. */ public URLConnection writeCookies(URLConnection urlConn, boolean printCookies){ String cookieString = ""; Enumeration keys = theCookies.keys(); while (keys.hasMoreElements()) { String key = (String)keys.nextElement(); cookieString += key + "=" + theCookies.get(key); if (keys.hasMoreElements()) cookieString += "; "; } urlConn.setRequestProperty("Cookie", cookieString); if (printCookies) System.out.println("Wrote cookies:\n " + cookieString+"\n"); return urlConn; } /** * Read cookies from a specified URLConnection, and insert them * to the Hashtable * The hashtable represents the Cookies. * * @param urlConn the connection to read from * @param printCookies Print the cookies or not, for debugging * @param reset Clean the Hashtable or not */ public void readCookies(URLConnection urlConn, boolean printCookies, boolean reset) { if (reset) theCookies.clear(); int i=1; String hdrKey; String hdrString; String aCookie; while ((hdrKey = urlConn.getHeaderFieldKey(i)) != null) { if (hdrKey.equals("Set-Cookie")) { hdrString = urlConn.getHeaderField(i); StringTokenizer st = new StringTokenizer(hdrString,","); while (st.hasMoreTokens()) { String s = st.nextToken(); aCookie = s.substring(0, s.indexOf(";")); // aCookie = hdrString.substring(0, s.indexOf(";")); int j = aCookie.indexOf("="); if (j != -1) { if (!theCookies.containsKey(aCookie.substring(0, j))) { // if the Cookie do not already exist then when keep it, // you may want to add some logic to update // the stored Cookie instead. thanks to rwhelan theCookies.put(aCookie.substring(0, j),aCookie.substring(j + 1)); if (printCookies) { System.out.println("Reading Key: " + aCookie.substring(0, j)); System.out.println(" Val: " + aCookie.substring(j + 1)); } } } } } i++; } } /** * Display all the cookies currently in the HashTable * */ public void viewAllCookies() { System.out.println("All Cookies are:"); Enumeration keys = theCookies.keys(); String key; while (keys.hasMoreElements()) { key = (String)keys.nextElement(); System.out.println(" " + key + "=" + theCookies.get(key)); } } /** * Display the current cookies in the URLConnection, * searching for the: "Cookie" header * * This is Valid only after a writeCookies operation. * * @param urlConn The URL to print the associates cookies in. */ public void viewURLCookies(URLConnection urlConn) { System.out.print("Cookies in this URLConnection are:\n"); System.out.println(urlConn.getRequestProperty("Cookie")); } /** * Add a specific cookie, by hand, to the HastTable of the Cookies * * @param _key The Key/Name of the Cookie * @param _val The Calue of the Cookie * @param printCookies Print or not the result */ public void addCookie(String _key, String _val, boolean printCookies) { if (!theCookies.containsKey(_key)) { theCookies.put(_key, _val); if (printCookies){ System.out.println("Adding Cookie: "); System.out.println(" " + _key + " = " + _val); } } } } |
Say for example you wish to log in to a site and want to keep your session intact when you access the site’s other pages (since they require you to be logged in). To use this class, do the following
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
URL url = new URL("URL_SITE_HERE"); HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); httpcon.setDoOutput(true); String data = "username=" + YOUR_USERNAME + "password=" + YOUR_PASSWORD; OutputStreamWriter wr = new OutputStreamWriter(httpcon.getOutputStream()); wr.write(data); wr.flush(); wr.close(); httpcon.setInstanceFollowRedirects(false); CookieTool ct = new CookieTool(); ct.readCookies(httpcon, false, false); httpcon.disconnect(); ct.viewAllCookies(); |
We need a URL connection to set which site we want to log in to. Then specify the username and password and use the OutputStreamWriter’s write() method to emulate an HTML Form post action. The last method call, viewAllCookies() displays all data that are stored in the cookie. Please remember that the parameters passed like username and password are not the same in all sites. You should check the site’s HTML FORM tags and see what other hidden fields are included that could possible be needed in order for you to be able to logged in properly.
If you wish to access other links of the site that require you to be logged in, just use the CookieTool object ct like this
|
1 2 3 |
URL url = new URL("LINK_HERE"); HttpURLConnection httpcon = IMDBTool.getCookiedHttpURLConnection(ct, url); ct.readCookies(httpcon, false, false); |
You can then use the HttpURLConnection’s getInputStream() method to get the InputStream and use it to retrieve the contents of the HTML page. Getting the contents of the InputStream and storing it in a String object is another story. There is a nifty code that I use to do this (I forgot who coded this). Just go here.
Javascript Create A Hyperlink Element
Creating a hyperlink element using Javascript is pretty simple. Do the following. Notice, that the hyperlink element contains two text ‘click me’ that’s been set twice. This is because IE only accepts its proprietary innerText property to set a hyperlink’s text while other browsers use textContent. To set a CSS class name, you need to use the className attribute because the class property is a reserved word in Javascript. You can either use it as element.classname = 'class_name' or element.setAttribute('className', 'class_name');
|
1 2 3 |
<body> <div id="div"></div> </body> |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<script> div = document.getElementById('div'); a = document.createElement('a'); a.innerText = 'click me'; a.textContent = 'click me'; a.href = 'javascript://'; a.setAttribute('className', 'more_right'); a.setAttribute('onclick', 'alert("clicked");'); div.appendChild(a); </script> |