1 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?r=start
\r
2 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?r=quit
\r
3 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?x=X&y=Y (0 indexed)
\r
5 pieceSelected = ""; // currently selected piece
\r
7 colour = "W"; // colour of this player
\r
9 // Unicode representations of chess pieces
\r
10 pieceChar = {"W" : { "p" : "\u2659", "h" : "\u2658", "b" : "\u2657", "r" : "\u2656", "q" : "\u2655", "k" : "\u2654", "?" : "?"},
\r
11 "B" : { "p" : "\u265F", "h" : "\u265E", "b" : "\u265D", "r" : "\u265C", "q" : "\u265B", "k" : "\u265A", "?" : "?"}};
\r
13 // Select (or move) a piece
\r
14 function selectPiece(loc) {
\r
15 x = (""+loc).charAt(1);
\r
16 y = (""+loc).charAt(0);
\r
19 // work out whether to select or move based on the comment tag for the clicked location
\r
20 // It is either "<!--W-->" (white; select) or <!--B-->" (black) or "<!--0-->" (empty)
\r
21 if (pieceSelected == "") {
\r
22 if (document.getElementById(loc).innerHTML.charAt(4) == colour) {
\r
23 console.log("Piece Selected: " + loc);
\r
24 pieceSelected = loc;
\r
25 ajaxUpdate("x=" + x + "&y=" + y);
\r
29 //alert("pieceMoved");
\r
30 if (validMove(pieceSelected, piece, loc)) {
\r
31 doMove(pieceSelected, loc);
\r
32 ajaxUpdate("x=" + x + "&y=" + y);
\r
36 console.log("Invalid Move");
\r
41 function validMove(start, piece, end) {
\r
45 function doMove(start, end) {
\r
46 begin = document.getElementById(start);
\r
47 end = document.getElementById(end);
\r
48 htmlToMove = begin.innerHTML;
\r
49 end.innerHTML = htmlToMove;
\r
50 begin.innerHTML = "<!--0--> <p> </p>";
\r
52 if (end[end.length-1] % 2 == 0)
\r
53 end.innerHTML.replace(/<big>.*<\/big>/i, "<big>?</big>");
\r
54 //console.log("Piece Moved");
\r
57 function boardLoad() {
\r
58 ajaxUpdate("r=force_quit");
\r
62 for (i = 0; i < 8; i++) {
\r
63 for (j = 0; j < 8; j++) {
\r
65 elem = document.getElementById(e)
\r
66 if ((i + j) % 2 == 0)
\r
67 elem.style.background="#FFF";
\r
69 elem.style.background="#DDD";
\r
73 //Place pieces on the board
\r
74 for (i = 0; i < 8; i++) {
\r
75 black = document.getElementById("1" + i);
\r
76 white = document.getElementById("6" + i);
\r
78 black.innerHTML = "<!--B--> " + pieceChar["B"]["p"] + " <big> <bold>?</bold> </big> ?";
\r
79 white.innerHTML = "<!--W--> " + pieceChar["W"]["p"] + " <big> <bold>?</bold> </big> ?";
\r
81 black = document.getElementById("0" + i);
\r
82 white = document.getElementById("7" + i);
\r
84 if (i == 0 || i == 7)
\r
86 if (i == 1 || i == 6)
\r
88 if (i == 2 || i == 5)
\r
95 black.innerHTML = "<!--B--> " + pieceChar["B"][piece] + "<big> <bold>?</bold> </big> ?";
\r
96 white.innerHTML = "<!--W--> " + pieceChar["W"][piece] + "<big> <bold>?</bold> </big> ?";
\r
99 for (j = 2; j < 6; j++)
\r
101 square = document.getElementById(""+j + i);
\r
102 square.innerHTML = "<!--0--> <p> </p>";
\r
106 setTimeout(function(){ajaxUpdate("r=start");}, 1000);
\r
110 function ajaxUpdate(queryString) {
\r
111 var ajaxRequest; // The variable that makes Ajax possible!
\r
114 // Opera 8.0+, Firefox, Safari
\r
115 ajaxRequest = new XMLHttpRequest();
\r
117 // Internet Explorer Browsers
\r
119 ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
\r
122 ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
\r
124 // Something went wrong
\r
125 alert("Your Browser is not Ajax Compatible, Please Upgrade to Google Chrome.");
\r
131 //alert(queryString);
\r
133 // Create a function that will receive data sent from the server
\r
134 ajaxRequest.onreadystatechange = function ()
\r
136 //alert("RS" + ajaxRequest.readyState);
\r
137 if (ajaxRequest.readyState == 4) {
\r
138 console.log("AJAX Response: " + ajaxRequest.responseText);
\r
139 lines = ajaxRequest.responseText.split("\n");
\r
141 for (var i = 0; i < lines.length; ++i)
\r
143 tokens = lines[i].split(" ")
\r
145 if (isNaN(tokens[0]) || isNaN(tokens[1]))
\r
148 pieceSelected = ""+tokens[1]+""+tokens[0];
\r
149 square = document.getElementById(pieceSelected);
\r
150 html = square.innerHTML;
\r
151 c = html.charAt(4);
\r
152 if (tokens[2] == "->" && document.getElementById(""+tokens[4] + "" + tokens[3]).innerHTML.charAt(4) != colour)
\r
154 doMove(""+tokens[1] + "" + tokens[0], ""+tokens[4] + "" + tokens[3]);
\r
156 else if (tokens.length == 4 && !isNaN(tokens[0]) && !isNaN(tokens[1]) && !isNaN(tokens[2]) && isNaN(tokens[3]))
\r
159 if (piece == "knight") //HACK
\r
162 piece = ""+piece.charAt(0);
\r
163 if (tokens[2] == "1")
\r
164 html[html.length-1] = pieceChar[c][piece];
\r
166 square.innerHTML = html.replace(/<big> <bold>.*<\/bold> <\/big>/i, "<big> <bold>"+pieceChar[c][piece]+"</bold> </big>");
\r
167 console.log("innerHTML = " + square.innerHTML);
\r
172 if (ret.charAt(4) == "-" && ret.charAt(5) == ">") {
\r
173 //Piece has been moved
\r
174 //console.log("Moving other piece");
\r
175 lines = ret.split("\n");
\r
176 //if (lines[3] != "SELECT?") {
\r
177 if (lines[2] != "SELECT?") {
\r
178 x1 = lines[2].charAt(0);
\r
179 y1 = lines[2].charAt(2);
\r
180 x2 = lines[2].charAt(7);
\r
181 y2 = lines[2].charAt(9);
\r
182 console.log("Black Move: " + x1 + "" + y1 + " -> " + x2 + "" + y2);
\r
183 doMove(y1 + "" + x1, y2 + "" + x2);
\r
186 console.log("Black Unable to move");
\r
190 lines = ret.split("\n");
\r
191 if (lines[1] == "MOVE?") {
\r
192 //We selected a piece
\r
193 //console.log("choose where to move our piece");
\r
194 piece = lines[0].charAt(6);
\r
195 //console.log("Piece: " + piece);
\r
196 content = document.getElementById(pieceSelected);
\r
197 contentHTML = content.innerHTML;
\r
198 //contentHTML = contentHTML.replace("?", piece);
\r
199 //"W<br /><small>p</small> <bold>?</bold> <small>?</small></span>";
\r
200 if (lines[0].charAt(4) == "1") {
\r
201 //console.log("changing quantum piece");
\r
202 contentHTML = replaceAt(contentHTML, 44, piece);
\r
204 contentHTML = replaceAt(contentHTML, 28, piece);
\r
205 //console.log(contentHTML);
\r
206 //contentHTML = "CHANGED" + contentHTML;
\r
207 content.innerHTML = contentHTML;
\r
215 //ar = "http://progcomp.ucc.asn.au/cgi-bin/qchess.cgi?" + queryString;
\r
216 ar = "/../../../cgi-bin/qchess.cgi?" + queryString;
\r
218 console.log("AJAX Request: " + ar);
\r
220 ajaxRequest.open("GET", ar, true);
\r
221 ajaxRequest.send();
\r
229 function replaceAt(s, n, t) {
\r
230 //console.log(s.substring(0, n) + "\n" + t + "\n" + s.substring(n + 1) + "\n");
\r
231 return (s.substring(0, n) + t + s.substring(n + 1));
\r