Thread: [Toss-devel-svn] SF.net SVN: toss:[1489] trunk/Toss/WebClient (Page 2)
Status: Beta
Brought to you by:
lukaszkaiser
From: <ch...@us...> - 2011-06-19 11:57:24
|
Revision: 1489 http://toss.svn.sourceforge.net/toss/?rev=1489&view=rev Author: chalmi Date: 2011-06-19 11:57:18 +0000 (Sun, 19 Jun 2011) Log Message: ----------- Result continued... Modified Paths: -------------- trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/State.js Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2011-06-18 19:39:12 UTC (rev 1488) +++ trunk/Toss/WebClient/Main.js 2011-06-19 11:57:18 UTC (rev 1489) @@ -53,9 +53,53 @@ lst[2], lst[3], lst[4], UNAME)); } - // Play lists on display. +function get_winners (play)//returns null if tie or play is not finished +{ + var result; + if (play.cur_state.result != null) result = play.cur_state.result; + else return null; + var winners = new Array(); + var maximum, minimum; + if (result[0] != undefined) {minimum = maximum = result[0]; winners.push(play.players[0]);} + else return null; + for (index in result) + { + if (index != 0) + { + if (result[index] > maximum) + { + maximum = result[index]; + winners = new Array(play.players[index]); + } + else if (result[index] == maximum) winners.push(play.players[index]); + if (result[index] < minimum) minimum = result[index]; + } + } + if (maximum > minimum) return winners; + else return null; +} + +function get_formatted_result_string (play) +{ + var result_string = ""; + if (play.cur_state.result == null) return ""; + else + { + winners = get_winners(play); + if (winners == null) return "Tie"; + if (winners.length == 0) return null; + for (var i=0; i < winners.length; i++) + { + if (i > 0) result_string += ', ' + disp_name(winners[i]); + else result_string = disp_name(winners[i]); + } + result_string += " won"; + return result_string; + } +} + function new_play_item (game, i) { var win_s = function (pl, un) { @@ -85,7 +129,7 @@ '" onclick="'+ "play_click('" + game + "', " + PLAYS[i].pid + ", " + i + ')">' + pname + '</button> '; li.innerHTML = bs; - if (PLAYS[i].cur_state.payoff != "") li.innerHTML += '<span class="list_result">' + subst_pl(PLAYS[i], PLAYS[i].cur_state.payoff) + '</span>'; + if (PLAYS[i].cur_state.result != null) li.innerHTML += '<span class="list_result">' + get_formatted_result_string(PLAYS[i]) + '</span>'; // +'<a href="#" onclick="'+ "del_play('"+ fn + "')" + '">Delete</a>'; return (li); } Modified: trunk/Toss/WebClient/State.js =================================================================== --- trunk/Toss/WebClient/State.js 2011-06-18 19:39:12 UTC (rev 1488) +++ trunk/Toss/WebClient/State.js 2011-06-19 11:57:18 UTC (rev 1489) @@ -164,6 +164,7 @@ this.moves = mvs; this.players = pls; this.payoff = ""; + this.result = null; } else { this.moves = []; this.players = []; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ch...@us...> - 2011-06-20 08:57:59
|
Revision: 1491 http://toss.svn.sourceforge.net/toss/?rev=1491&view=rev Author: chalmi Date: 2011-06-20 08:57:53 +0000 (Mon, 20 Jun 2011) Log Message: ----------- formatted result string in object style Modified Paths: -------------- trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/Play.js Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2011-06-19 18:04:31 UTC (rev 1490) +++ trunk/Toss/WebClient/Main.js 2011-06-20 08:57:53 UTC (rev 1491) @@ -53,72 +53,7 @@ } // Play lists on display. - -function get_winners (play)//returns null if tie or play is not finished -{ - var result; - if (play.cur_state.result != null) result = play.cur_state.result; - else return null; - var winners = new Array(); - var maximum, minimum; - if (result[0] != undefined) {minimum = maximum = result[0]; winners.push(play.players[0]);} - else return null; - for (index in result) - { - if (index != 0) - { - if (result[index] > maximum) - { - maximum = result[index]; - winners = new Array(play.players[index]); - } - else if (result[index] == maximum) winners.push(play.players[index]); - if (result[index] < minimum) minimum = result[index]; - } - } - if (maximum > minimum) return winners; - else return null; -} - -function get_formatted_result_string (play) -{ - var result_string = ""; - if (play.cur_state.result == null) return ""; - else - { - winners = get_winners(play); - if (winners == null) return "Tie"; - if (winners.length == 0) return null; - for (var i=0; i < winners.length; i++) - { - if (i > 0) result_string += ', ' + disp_name(winners[i]); - else result_string = disp_name(winners[i]); - } - result_string += " won"; - return result_string; - } -} - function new_play_item (game, i) { - - var win_s = function (pl, un) { - //if (pl == un) { return ("You Win!"); } - return (disp_name(pl) + " won"); - } - var subst_pl = function (pl, str) { - var un = pl.cur_player_uid; - var s = strip (' ', '\n', str); - if (s == "0: 1., 1: -1.") { return (win_s (pl.players[0], un)); } - if (s == "0: -1., 1: 1.") { return (win_s (pl.players[1], un)); } - if (s == "0: 0., 1: 0.") { return ("Tie"); } - var s1 = s.replace (/0:/g, disp_name(pl.players[0]) + ":"); - var s2 = s1.replace (/1:/g, disp_name(pl.players[1]) + ":"); - var s3 = s2.replace (/1.,/g, "1,"); - var s4 = s3.replace (/0.,/g, "0,"); - var s5 = s4.replace (/1.$/g, "1"); - return (s5.replace (/0.$/g, "0")); - } - var li = document.createElement('li'); li.setAttribute ("class", "plays-list-elem"); li.setAttribute ("id", "plays-list-" + game + "-elem-" + i); @@ -128,7 +63,7 @@ '" onclick="'+ "play_click('" + game + "', " + PLAYS[i].pid + ", " + i + ')">' + pname + '</button> '; li.innerHTML = bs; - if (PLAYS[i].cur_state.result != null) li.innerHTML += '<span class="list_result">' + get_formatted_result_string(PLAYS[i]) + '</span>'; + if (PLAYS[i].cur_state.result != null) li.innerHTML += '<span class="list_result">' + PLAYS[i].get_formatted_result_string() + '</span>'; // +'<a href="#" onclick="'+ "del_play('"+ fn + "')" + '">Delete</a>'; return (li); } Modified: trunk/Toss/WebClient/Play.js =================================================================== --- trunk/Toss/WebClient/Play.js 2011-06-19 18:04:31 UTC (rev 1490) +++ trunk/Toss/WebClient/Play.js 2011-06-20 08:57:53 UTC (rev 1491) @@ -163,7 +163,57 @@ } Play.prototype.next_move = play_next_move; +Play.prototype.get_winners = function() +{ + var result; + if (this.cur_state.result != null) result = this.cur_state.result; + else return null; + var winners = new Array(); + var maximum, minimum; + for (index in result) + { + if (maximum != undefined) + { + if (result[index] > maximum) + { + maximum = result[index]; + winners = new Array(this.players[index]); + } + else + { + if (result[index] == maximum) winners.push(this.players[index]); + else minimum = result[index]; + } + } + else + { + minimum = maximum = result[index]; + winners = new Array(this.players[index]); + } + } + if (maximum > minimum) return winners; + else return null; +} +Play.prototype.get_formatted_result_string = function () +{ + var result_string = ""; + if (this.cur_state.result == null) return ""; + else + { + winners = this.get_winners(); + if (winners == null) return "Tie"; + if (winners.length == 0) return null; + for (var i=0; i < winners.length; i++) + { + if (i > 0) result_string += ', ' + disp_name(winners[i]); + else result_string = disp_name(winners[i]); + } + result_string += " won"; + return result_string; + } +} + // --- Wrapper Class for unified handling of Play display functions --- function PlayDisplay (busy_id, cur_move_id) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ch...@us...> - 2011-06-22 07:34:09
|
Revision: 1493 http://toss.svn.sourceforge.net/toss/?rev=1493&view=rev Author: chalmi Date: 2011-06-22 07:34:03 +0000 (Wed, 22 Jun 2011) Log Message: ----------- GamesPage draft - do not use Modified Paths: -------------- trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/msw.html trunk/Toss/WebClient/msw.js Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2011-06-21 14:48:59 UTC (rev 1492) +++ trunk/Toss/WebClient/Main.js 2011-06-22 07:34:03 UTC (rev 1493) @@ -367,11 +367,11 @@ this.play_lists = new Object(); for (var i=2; i < udata.length; i++){ var plays = parse_list("##", udata[i]); - for (var j=0; j<plays.length; j++){ + for (var j=0; j < plays.length; j++){ var play = msw_play_from_string(plays[j]); var key = play.game; - if (this.play_lists[key] == undefined) this.play_lists[key] = new Array(); - this.play_lists[key].push(play); + if (this.play_lists[key] == undefined) this.play_lists[key] = new Object(); + this.play_lists[key][play.pid] = play; } } } Modified: trunk/Toss/WebClient/msw.html =================================================================== --- trunk/Toss/WebClient/msw.html 2011-06-21 14:48:59 UTC (rev 1492) +++ trunk/Toss/WebClient/msw.html 2011-06-22 07:34:03 UTC (rev 1493) @@ -35,6 +35,9 @@ </select> <button id="logoutbt" onclick="logout()">Logout</button> </span> + +<div id="plays"></div> + <div id="game-disp"> <p id="game-info-par"> <span id="game-title"></span> @@ -64,16 +67,6 @@ </div> </div> -<script type="text/javascript"> - UNAME = "michal"; - CUR_PLAY_I = 0; - GAME_NAME = "Chess"; - msw_plays(GAME_NAME); - var info = CONN.open_db(PLAYS[CUR_PLAY_I][2]); - document.getElementById("game-disp").style.display = "block"; - document.getElementById("game-disp").setAttribute ("class", "Game-" + GAME_NAME); - full_redraw(GAME_NAME, info); - //document.write(info); -</script> + </body> </html> Modified: trunk/Toss/WebClient/msw.js =================================================================== --- trunk/Toss/WebClient/msw.js 2011-06-21 14:48:59 UTC (rev 1492) +++ trunk/Toss/WebClient/msw.js 2011-06-22 07:34:03 UTC (rev 1493) @@ -1,171 +1,46 @@ -function msw_list_plays_string (game, lst) { - PLAYS = parse_list ('#', lst); - //var plist = document.getElementById("plays-list-" + game); - //while (plist.childNodes.length > 0) { plist.removeChild(plist.firstChild); } - var d = game.length + 2; - for (var i = 0; i < PLAYS.length; i++) { - var p = PLAYS[i].substring(PLAYS[i].lastIndexOf('/') + d); - PLAYS[i] = parse_list ('_', p); - //plist.appendChild(new_play_item (game, i)); - } - /*if (PLAYS.length == 0) { - document.getElementById("plays-list-" + game).style.display = "none"; - } else { - document.getElementById("plays-list-" + game).style.display = "block"; - }*/ -} +GAMES = new Array( + "Breakthrough", + "Checkers", + "Chess", + "Connect4", + "Entanglement", + "Gomoku", + "Pawn-Whopping", + "Tic-Tac-Toe", + "Concurrent-Tic-Tac-Toe" + ); -function msw_plays (game) { - var lst = CONN.list_plays (game, UNAME); - msw_list_plays_string (game, lst); +function GamesPage(id, games){// html tag id + this.games = games; + this.paragraphs = new Object(); + this.container = document.getElementById(id); + for (var i = 0; i < this.games.length; i++){ + var game = this.games[i]; + var paragraph = this.paragraphs[game] = document.createElement("p"); + paragraph.setAttribute("class", "game-par"); + var button = paragraph.button = document.createElement("button"); + button.setAttribute("class", "boldobt"); + button.setAttribute("onclick", "new_play('" + game + "')"); + button.innerHTML = game; + this.container.appendChild(paragraph); + paragraph.appendChild(button); + + var open_play_list = paragraph.open_play_list = document.createElement("ul"); + open_play_list.setAttribute("class", "play-list"); + open_play_list.setAttribute("id", "a-plays-list-" + game); + paragraph.appendChild(open_play_list); + + var closed_play_list = paragraph.closed_play_list = document.createElement("ul"); + closed_play_list.setAttribute("class", "play-list"); + closed_play_list.setAttribute("id", "d-plays-list-" + game); + paragraph.appendChild(closed_play_list); + } } -function msw_make_move_continue (info) { - document.getElementById("working").style.display = "none"; - full_redraw (GAME_NAME, info); - //var old_li = document.getElementById ("plays-list-" + GAME_NAME + - // "-elem-" + CUR_PLAY_I); - //var li = new_play_item (GAME_NAME, CUR_PLAY_I); - //old_li.parentNode.replaceChild (li, old_li); - if (ST.players.length==1 && PLAYS[CUR_PLAY_I][ST.players[0]]=="computer") { - var mv_time = document.getElementById("speed").value; - suggest_move_async (mv_time, msw_make_move); - } +GamesPage.prototype.show = function(){ + this.container.style.display = "block"; } -function msw_state_draw_model (game) { - var draw_background = function (game) { - var x = SVG_MARGINX; - var y = SVG_MARGINY; - var w = SVG_WIDTH + 2 * x; - var h = SVG_HEIGHT + 2 * x; - var bg = SHAPES.background_svg (game, 0, 0, w, h, []); - if (bg != undefined) {document.getElementById("svg").appendChild(bg);} - } - - // Draw the element [elem]. - var draw_elem = function (game, elem) { - if (game != "Connect4") { - var r = SHAPES.rect ( - elem.x, elem.y, 2 * SHAPES.elem_size_x, 2 * SHAPES.elem_size_y, - [["id", "elem_" + elem.id], ["class", elem_class(elem.id)], - ["onclick", ("msw_handle_elem_click('" + elem.id + "')")]]); - document.getElementById("svg").appendChild(r); - } else { - var circ = SHAPES.circle ( - elem.x, elem.y, 30, - [["id", "elem_" + elem.id], ["class", elem_class(elem.id)], - ["onclick", "msw_handle_elem_click('" + elem.id + "')"]]); - document.getElementById("svg").appendChild(circ); - } - } - - - // Draw relation [rel_name] between elements [args]. - function draw_rel (game, rel) { - if (rel.args.length == 1) { - var ihatrs = [["id", "pred_" + rel.args[0].id + "_" + rel.name], - ["onclick","msw_handle_elem_click('"+rel.args[0].id+"')"]] - var pos = [rel.args[0].x, rel.args[0].y]; - var f = SHAPES.rel_svg (game, pos[0],pos[1],20,20, rel.name,ihatrs); - if (f != undefined) { - document.getElementById("svg").appendChild(f); - } else { - var circ = SHAPES.circle ( - pos[0], pos[1], SHAPES.elem_size_x - 10, - [["id", "pred_" + rel.args[0].id + "_" + rel.name], - ["class", "model-pred-" + rel.name], - ["stroke-width", (SHAPES.elem_size_x / 10) + 2], - ["onclick", ("msw_handle_elem_click('"+rel.args[0].id+"')")]]); - document.getElementById("svg").appendChild(circ); - } - } - if (rel.args.length == 2) { - if (rel.name == "E") { - var l = SHAPES.line (rel.args[0].x, rel.args[0].y, - rel.args[1].x, rel.args[1].y, - [["class", "model-edge-E"]]); - document.getElementById("svg").appendChild(l); - } - } - } - - // Main draw_model function. - var sqrt = Math.round (Math.sqrt (this.elems.length)); - if (sqrt * sqrt == this.elems.length) { // perhaps a grid - SHAPES.elem_size_x = SVG_WIDTH / (2.0 * (sqrt-1)); - SHAPES.elem_size_y = SVG_HEIGHT / (2.0 * (sqrt-1)); - } else { - SHAPES.elem_size_x = SVG_WIDTH / 20; - SHAPES.elem_size_y = SVG_HEIGHT / 20; - } - draw_background (game); - for (var i = 0; i < this.elems.length; i++) { - draw_elem (game, this.elems[i]); - } - for (var i = 0; i < this.rels.length; i++) { - draw_rel (game, this.rels[i]); - } +GamesPage.prototype.hide = function(){ + this.container.style.display = "none"; } -State.prototype.draw_model = msw_state_draw_model; - -function msw_handle_elem_click (elem) { - if (ASYNC_ALL_REQ_PENDING != 0) { return; } - var moves = ST.get_moves (elem, LAST_CLICKED_ELEM); - if (moves.length == 0) { - LAST_CLICKED_ELEM = ""; - moves = ST.get_moves (elem, LAST_CLICKED_ELEM); - }; - if (moves.length == 0) { // still no moves, unhighlight - for (var i = 0; i < CUR_ELEMS.length; i++) { - ST.unhighlight_elem (CUR_ELEMS[i]); - } - CUR_ELEMS = []; - CUR_MOVE = ""; - LAST_CLICKED_ELEM = ""; - } else if (moves.length == 1) { - show_move (moves[0]); - ELEM_COUNTERS[elem] = 1; - if (SIMPLE_MOVES) { msw_make_move (); }; - } else if (LAST_CLICKED_ELEM != "" && LAST_CLICKED_ELEM != elem //move fast - && moves.length == 2 && moves[0].length > moves[1].length) { - show_move (moves[1]); - ELEM_COUNTERS[elem] = 2; - if (SIMPLE_MOVES) { msw_make_move (); }; - } else if (LAST_CLICKED_ELEM != "" && LAST_CLICKED_ELEM != elem //move fast - && moves.length == 2 && moves[1].length > moves[0].length) { - show_move (moves[0]); - ELEM_COUNTERS[elem] = 1; - if (SIMPLE_MOVES) { msw_make_move (); }; - } else if (moves.length > ELEM_COUNTERS[elem]) { - show_move (moves[ELEM_COUNTERS[elem]]); - ELEM_COUNTERS[elem] += 1; - } else if (moves.length > 0) { - show_move (moves[0]); - ELEM_COUNTERS[elem] = 1; - }; - if (moves.length > 1 && LAST_CLICKED_ELEM == "") { - for (var i = 0; i < CUR_ELEMS.length; i++) { - ST.unhighlight_elem (CUR_ELEMS[i]); - } - document.getElementById('cur-move').innerHTML = elem + " — ?" - ST.highlight_elem (elem); - CUR_ELEMS = [elem]; - CUR_MOVE = ""; - }; - LAST_CLICKED_ELEM = elem; -} - -function msw_make_move () { - if (ASYNC_ALL_REQ_PENDING != 0) { alert ("async"); return; } - if (CUR_MOVE == "") return; - var m = parseInt(CUR_MOVE.substring (0, 1)) - 1; - if (!isNaN(m) && PLAYS[CUR_PLAY_I][m] != UNAME && PLAYS[CUR_PLAY_I][m] != "computer") { - alert ("It is your Opponent's move"); - return; - } - if (! SIMPLE_MOVES) { - document.getElementById("working").style.display = "block"; - } - CONN.make_move (CUR_MOVE, play_py_id (CUR_PLAY_I), msw_make_move_continue); -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <luk...@us...> - 2011-06-30 22:13:14
|
Revision: 1498 http://toss.svn.sourceforge.net/toss/?rev=1498&view=rev Author: lukaszkaiser Date: 2011-06-30 22:13:07 +0000 (Thu, 30 Jun 2011) Log Message: ----------- WebClient corrections. Modified Paths: -------------- trunk/Toss/WebClient/Login.js trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/Play.js trunk/Toss/WebClient/Style.css trunk/Toss/WebClient/index.html trunk/Toss/WebClient/profile.html Removed Paths: ------------- trunk/Toss/WebClient/msw.html trunk/Toss/WebClient/msw.js Modified: trunk/Toss/WebClient/Login.js =================================================================== --- trunk/Toss/WebClient/Login.js 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/Login.js 2011-06-30 22:13:07 UTC (rev 1498) @@ -35,18 +35,6 @@ FRIENDS = parse_list (',', lst); } -// Clear view -function clear_view () { - document.getElementById("loginform").style.display = "inline"; - document.getElementById("topright-register").style.display = "inline"; - document.getElementById("topright").style.display = "none"; - document.getElementById("topuser").innerHTML = ""; - document.getElementById("plays").style.display = "none"; - document.getElementById("game-title").style.display = "none"; - document.getElementById("game-disp").style.display = "none"; - document.getElementById("welcome").style.display = "block"; -} - // Onload handler function startup (game) { GAMESPAGE = new GamesPage ("plays", GAMES); @@ -59,6 +47,7 @@ } if (window.location.href.indexOf("?simple=true") > 0) { SIMPLE_SET = true; + document.getElementById("gamestablink").href = "index.html?simple=true"; document.getElementById("pdescChess").style.display = "block"; document.getElementById("pdescConnect4").style.display = "block"; document.getElementById("pdescPawn-Whopping").style.display = "block"; @@ -182,7 +171,6 @@ // Logout function logout () { - //clear_view (); var resp = CONN.logout (); window.location.reload (); return; Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/Main.js 2011-06-30 22:13:07 UTC (rev 1498) @@ -315,13 +315,14 @@ document.getElementById ("topuser").innerHTML = game + ' (<a href="' + wiki + '">Move Rules</a>)'; if (SIMPLE_SET) { document.getElementById ("topuser").innerHTML = game }; - document.getElementById ("pdescBack").style.display = "inline"; document.getElementById ("game-title").style.display = "none"; + document.getElementById ("game-title-move").style.display = "none"; document.getElementById ("game-info-par").style.paddingBottom = "1em"; document.getElementById ("loginform").style.display = "none"; document.getElementById ("topright-register").style.display = "none"; document.getElementById ("topright").style.display = "inline"; - document.getElementById ("logoutbt").style.display = "none"; + document.getElementById ("logouttab").style.display = "none"; + document.getElementById ("profiletab").style.display = "none"; document.getElementById ("welcome").style.display = "none"; if (game == "Chess") { show_chess_warning (); @@ -415,8 +416,8 @@ function suggest_move_async (time, f) { show_moving_msg (time); var fm = function (m) { - document.getElementById ("working").style.display = "none"; - document.getElementById ("working").innerHTML = "Working..."; + document.getElementById("working").style.display = "none"; + document.getElementById("working").innerHTML = "Working..."; if (m != "") { PLAYS[CUR_PLAY_I].show_move (new Move (m)); f() } }; CONN.suggest (PLAYS[CUR_PLAY_I].cur_state.players[0]+1, time, @@ -424,6 +425,7 @@ } function suggest_move_click () { + if (PLAYS[CUR_PLAY_I].move_nbr < PLAYS[CUR_PLAY_I].last_move_nbr) {return;} var mv_time = document.getElementById ("speed").value; suggest_move_async (mv_time, function () {}); } @@ -440,32 +442,11 @@ } else { SIMPLE_MOVES = false; document.getElementById ("play-nbr-info").style.display = "inline"; + document.getElementById ("game-title").style.display = "inline"; + document.getElementById ("game-title-move").style.display = "inline"; document.getElementById ("board").style.paddingTop = "0em"; document.getElementById ("suggestions-toggle").innerHTML = "Move Without Asking"; document.getElementById ("move-info-par").style.display = "block"; } } - -function msw_play_from_string (s) { - var lst = parse_list ('#', s); - return (new Play (lst[0], [0, 1], [lst[1], lst[2]], - lst[3], lst[4], lst[5], UNAME)); -} - -function UserData(){ - var udata = CONN.plays(); - udata = udata.split("@"); - this.user = udata[0]; - this.userName = udata[1]; - this.play_lists = new Object(); - for (var i=2; i < udata.length; i++){ - var plays = parse_list("##", udata[i]); - for (var j=0; j < plays.length; j++){ - var play = msw_play_from_string(plays[j]); - var key = play.game; - if (this.play_lists[key] == undefined) this.play_lists[key] = new Object(); - this.play_lists[key][play.pid] = play; - } - } -} Modified: trunk/Toss/WebClient/Play.js =================================================================== --- trunk/Toss/WebClient/Play.js 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/Play.js 2011-06-30 22:13:07 UTC (rev 1498) @@ -16,12 +16,14 @@ this.players[game_players[i]] = player_names[i]; } this.pid = pid; - this.move_nbr = move; + this.move_nbr = parseInt(move); + this.last_move_nbr = this.move_nbr; var mirror = 0; if (game == "Connect4") { mirror = 0; } else { mirror = (player_names[0] == this.cur_player_uid) ? 0 : 1; } this.cur_state = new State (game, state_str, mirror); + this.last_state_str = state_str; this.ELEM_COUNTERS = {}; this.CUR_MOVE = ""; @@ -33,7 +35,9 @@ function play_new_state (state_str) { this.cur_state = new State (this.game, state_str, this.cur_state.mirror); + this.last_state_str = state_str; this.move_nbr = this.move_nbr + 1; + this.last_move_nbr = this.move_nbr; } Play.prototype.new_state = play_new_state; @@ -56,6 +60,7 @@ PlayDISP.show_payoff (this); this.cur_state.draw_model (this.game); document.getElementById("speedtab").style.display = "inline"; + document.getElementById("movenbr").innerHTML = this.move_nbr; } Play.prototype.redraw = play_redraw; @@ -131,6 +136,7 @@ function play_move () { if (ASYNC_ALL_REQ_PENDING != 0) { alert ("async"); return; } if (this.CUR_MOVE == "") return; + if (this.move_nbr < this.last_move_nbr) { return; } var m = parseInt(this.CUR_MOVE.substring (0, 1)) - 1; if (!isNaN(m) && this.players[m] != this.cur_player_uid && this.players[m] != "computer") { @@ -155,64 +161,65 @@ Play.prototype.move_continue = play_move_continue; function play_prev_move () { - alert (CONN.prev_move (this.pid, this.move_nbr - 1)); + var prev = CONN.prev_move (this.pid, this.move_nbr - 1); + if (prev == "NONE") { return; } + this.cur_state = new State (this.game, prev, this.cur_state.mirror); + this.move_nbr = this.move_nbr - 1; + this.redraw (); } Play.prototype.prev_move = play_prev_move; function play_next_move () { - alert (CONN.prev_move (this.pid, this.move_nbr + 1)); + var next = CONN.prev_move (this.pid, this.move_nbr + 1); + if (next == "NONE") { + this.cur_state = + new State (this.game, this.last_state_str, this.cur_state.mirror); + this.move_nbr = this.last_move_nbr; + } else { + this.cur_state = new State (this.game, next, this.cur_state.mirror); + this.move_nbr = this.move_nbr + 1; + } + this.redraw (); } Play.prototype.next_move = play_next_move; -Play.prototype.get_winners = function() -{ - var result; - if (this.cur_state.result != null) result = this.cur_state.result; - else return null; - var winners = new Array(); - var maximum, minimum; - for (index in result) - { - if (maximum != undefined) - { - if (result[index] > maximum) - { - maximum = result[index]; - winners = new Array(this.players[index]); - } - else - { - if (result[index] == maximum) winners.push(this.players[index]); - else minimum = result[index]; - } - } - else - { - minimum = maximum = result[index]; - winners = new Array(this.players[index]); - } - } - if (maximum > minimum) return winners; - else return null; +Play.prototype.get_winners = function () { + var result; + if (this.cur_state.result != null) { + result = this.cur_state.result; + } else { return null; } + var winners = new Array(); + var maximum, minimum; + for (index in result) { + if (maximum != undefined) { + if (result[index] > maximum) { + maximum = result[index]; + winners = new Array(this.players[index]); + } else { + if (result[index] == maximum) { + winners.push(this.players[index]); + } else { minimum = result[index]; } + } + } else { + minimum = maximum = result[index]; + winners = new Array(this.players[index]); + } + } + if (maximum > minimum) { return winners; } else { return null; } } -Play.prototype.get_formatted_result_string = function () -{ - var result_string = ""; - if (this.cur_state.result == null) return ""; - else - { - winners = this.get_winners(); - if (winners == null) return "Tie"; - if (winners.length == 0) return null; - for (var i=0; i < winners.length; i++) - { - if (i > 0) result_string += ', ' + disp_name(winners[i]); - else result_string = disp_name(winners[i]); - } - result_string += " won"; - return result_string; - } +Play.prototype.get_formatted_result_string = function () { + var result_string = ""; + if (this.cur_state.result == null) { return ""; } + winners = this.get_winners(); + if (winners == null) { return "Tie"; } + if (winners.length == 0) { return null; } + for (var i=0; i < winners.length; i++) { + if (i > 0) result_string += ', ' + disp_name(winners[i]); + else result_string = disp_name(winners[i]); + } + result_string += " won"; + return result_string; } // --- Wrapper Class for unified handling of Play display functions --- Modified: trunk/Toss/WebClient/Style.css =================================================================== --- trunk/Toss/WebClient/Style.css 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/Style.css 2011-06-30 22:13:07 UTC (rev 1498) @@ -170,25 +170,6 @@ opacity: 1; } -.logo-picspan { - position: relative; - top: -0.5em; - left: 0px; - display: none; - font-size: 1.1em; - font-weight: bold; -} - -.logo-pictxt { - position: relative; - top: 0em; - border-radius: 4px; - -moz-border-radius: 4px; - opacity: 1; - font-size: 1em; - background-color: rgba(64, 8, 39, 0.7); -} - #leftupperlogo-img { position: relative; left: -0.2em; @@ -220,11 +201,14 @@ #speed { position: relative; - top: 0px; + top: -0.1em; font-weight: bold; font-family: Verdana, 'TeXGyreHerosRegular', sans; + font-size: 0.8em; color: #fff1d4; background-color: #777777; + padding: 0px; + margin: 0px; border-color: #fff1d4; border-radius: 4px; -moz-border-radius: 4px; @@ -394,33 +378,32 @@ .toprighttab { position: relative; - top: 0.5em; + top: 0.8em; background-color: #260314; border-color: #fff1d4; border-style: solid; border-width: 2px 2px 0px 2px; border-radius: 6px 6px 0px 0px; - padding-top: 0.15em; - padding-bottom: 0.3em; + padding-top: 0.1em; + padding-bottom: 0.2em; -moz-border-radius: 6px 6px 0px 0px; } #bottom { position: absolute; - bottom: 0px; - left: 0em; + bottom: 1px; + left: 0px; width: 100%; padding: 0px; margin: 0px; height: 1.3em; - text-align: center; font-size: 0.9em; font-weight: bold; color: #fff1d4; background-color: #400827; border-color: #260314; border-style: solid; - border-width: 5px 0px 0px 0px; + border-width: 3px 0px 1px 0px; } #bottom a, #bottom a:link, #bottom a:active, #bottom a:visited { @@ -436,27 +419,40 @@ /* Bottom styles. */ -.contact { +#bottomright { position: absolute; - top: 0px; - right: 0.5em; - color: inherit; + top: 0em; + right: 1em; + margin-right: 0em; } -#suggestions-toggle { - position: absolute; - margin: 0px; - padding: 0px; - top: 0px; - left: 0.5em; - border: 0px; - background-color: #400827; +#toss-link, .contact, #suggestions-toggle { + position: relative; + top: -1px; + padding-left: 0.5em; + padding-right: 0.5em; color: #fff1d4; - font-family: Verdana, 'TeXGyreHerosRegular', sans; font-size: 1em; font-weight: bold; + font-family: Verdana; + background-color: #260314; + border-color: #fff1d4; + border-style: solid; + border-width: 0px 2px 2px 2px; + border-radius: 0px 0px 6px 6px; + -moz-border-radius: 0px 0px 6px 6px; } +#toss-link { + display: none; +} + +#suggestions-toggle { + margin: 0px; + padding-top: 0px; + padding-bottom: 0px; +} + #suggestions-toggle:hover { color: #ffffff; text-decoration: underline; @@ -694,6 +690,10 @@ padding: 0px; } +#nextmovebt { + display: inline; +} + #player-info-par { display: none; margin-top: 0.5em; Modified: trunk/Toss/WebClient/index.html =================================================================== --- trunk/Toss/WebClient/index.html 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/index.html 2011-06-30 22:13:07 UTC (rev 1498) @@ -24,9 +24,6 @@ <div id="top"> <div id="logo"> <a id="leftupperlogo-link" href="index.html"> - <span id="pdescBack" class="logo-picspan"> - <span class="logo-pictxt">⇐</span> - </span> <img id="leftupperlogo-img" src="toss.png" alt="tPlay" /> </a> </div> @@ -56,27 +53,14 @@ </div> <span id="topright"> <span class="toprighttab"> - <a href="index.html">Games</a> + <a href="index.html" id="gamestablink">Games</a> </span> - <span class="toprighttab"> + <span class="toprighttab" id="profiletab"> <a href="profile.html">Profile</a> - </span> - <span class="toprighttab"> + </span> + <span class="toprighttab" id="logouttab"> <button id="logoutbt" onclick="logout()">Logout</button> </span> - <span class="toprighttab" id="speedtab" style="display: none;"> - Speed: <select id="speed"> - <option class="speed_val" value="1">1s</option> - <option class="speed_val" value="2">2s</option> - <option class="speed_val" value="3">3s</option> - <option class="speed_val" value="4">4s</option> - <option class="speed_val" value="5">5s</option> - <option class="speed_val" value="10">10s</option> - <option class="speed_val" value="15">15s</option> - <option class="speed_val" value="30">30s</option> - <option class="speed_val" value="60">60s</option> - </select> - </span> </span> <span id="topright-register"> <a href="register.html">Register</a> @@ -189,6 +173,7 @@ <div id="news"> <h3>News</h3> <ul id="welcome-list-news" class="welcome-list"> +<li><b>30/06/11</b> View previous moves in a play</li> <li><b>27/06/11</b> Tabs and searching opponents in the profile page</li> <li><b>22/06/11</b> Better organized lists of plays</li> <li><b>19/06/11</b> News section on the front page of tPlay</li> @@ -233,6 +218,12 @@ <span id="play-nbr-info" style="display:none;"> (game <span id="play-number">?</span>) </span> + <span id="game-title-move">Move <span id="movenbr">?</span> + <button id="prevmovebt" class="bt" onclick="prev_move_click()"> + – + </button><button id="nextmovebt" class="bt" onclick="next_move_click()"> + + + </button></span> <span id="payoffs" style="display:none;">Not Finished Yet</span> </p> <p id="new-play-par"> @@ -249,25 +240,39 @@ <button id="sugbt" class="bt" onclick="suggest_move_click()"> Suggest </button> - <button id="prevmovebt" class="bt" onclick="prev_move_click()"> - Prev - </button> - <button id="nextmovebt" class="bt" onclick="next_move_click()"> - Next - </button> </p> <div id="board"><div id="working">Working...</div></div> </div> <div id="bottom"> -<button id="suggestions-toggle" style="display: none;" - onclick="toggle_suggestions()">Ask Before Move</button> -<a href="http://toss.sourceforge.net" id="toss-link">Powered by Toss</a> -<script type="text/javascript">begin_mailto( - "tossplay", "gmail.com", "Contact Us");</script> -tossplay [AT] gmail [DOT] com -<script type="text/javascript">end_mailto();</script> + <div id="bottomright"> + <a href="http://toss.sourceforge.net" id="toss-link"> + Powered by Toss + </a><script type="text/javascript">begin_mailto( + "tossplay", "gmail.com", "Contact Us");</script> + tossplay [AT] gmail [DOT] com + <script type="text/javascript"> + end_mailto(); + </script> + <button id="suggestions-toggle" style="display: none;" + onclick="toggle_suggestions()"> + Ask Before Move + </button> + <span class="contact" id="speedtab" style="display: none;"> + Speed: <select id="speed"> + <option class="speed_val" value="1">1s</option> + <option class="speed_val" value="2">2s</option> + <option class="speed_val" value="3">3s</option> + <option class="speed_val" value="4">4s</option> + <option class="speed_val" value="5">5s</option> + <option class="speed_val" value="10">10s</option> + <option class="speed_val" value="15">15s</option> + <option class="speed_val" value="30">30s</option> + <option class="speed_val" value="60">60s</option> + </select> + </span> + </div> </div> </div> Deleted: trunk/Toss/WebClient/msw.html =================================================================== --- trunk/Toss/WebClient/msw.html 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/msw.html 2011-06-30 22:13:07 UTC (rev 1498) @@ -1,72 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xml:lang="en" lang="en"> -<head> - <meta http-equiv="Content-Type" content="text/xhtml+xml; charset=UTF-8" /> - <title>tPlay</title> - <meta name="Description" - content="Play the best strategic games online with a nice interface." /> - <meta http-equiv="X-UA-Compatible" content="chrome=1" /> - <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> - <link href="fontstyle.css" media="screen" rel="stylesheet" type="text/css" /> - <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> - <script type="text/javascript" src="crypto-sha256.js"> </script> - <script type="text/javascript" src="Connect.js"> </script> - <script type="text/javascript" src="State.js"> </script> - <script type="text/javascript" src="Main.js"> </script> - <script type="text/javascript" src="Login.js"> </script> - <script type="text/javascript" src="msw.js"></script> - <!--<script type="text/javascript" src="Model.js"></script>--> -</head> - -<body> - -<div id="main"> -<span id="topright"> - Speed: <select id="speed"> - <option class="speed_val" value="1">1s</option> - <option class="speed_val" value="2">2s</option> - <option class="speed_val" value="3">3s</option> - <option class="speed_val" value="4">4s</option> - <option class="speed_val" value="5">5s</option> - <option class="speed_val" value="10">10s</option> - <option class="speed_val" value="15">15s</option> - <option class="speed_val" value="30">30s</option> - <option class="speed_val" value="60">60s</option> - </select> - <button id="logoutbt" onclick="logout()">Logout</button> -</span> - -<div id="plays"></div> - -<div id="game-disp"> - <p id="game-info-par"> - <span id="game-title"></span> - <span id="play-nbr-info" style="display:none;"> - (game <span id="play-number">?</span>) - </span> - <span id="payoffs" style="display:none;">Not Finished Yet</span> - </p> - - <p id="new-play-par"> - <button id="new_game_me" class="bt" onclick="play_anew(true)"> - New Game (You Start) - </button> - <button id="new_game_opp" class="bt" onclick="play_anew(false)"> - New Game (Opponent Starts) - </button> - </p> - - <p id="move-info-par"> - <button id="movebt" class="bt" onclick="make_move ()">Make move:</button> - <span id="cur-move">none</span> - <button id="sugbt" class="bt" onclick="suggest_move_click()"> - Suggest - </button> - </p> - <div id="board"><div id="working">Working...</div></div> -</div> -</div> - - -</body> -</html> Deleted: trunk/Toss/WebClient/msw.js =================================================================== --- trunk/Toss/WebClient/msw.js 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/msw.js 2011-06-30 22:13:07 UTC (rev 1498) @@ -1,46 +0,0 @@ -GAMES = new Array( - "Breakthrough", - "Checkers", - "Chess", - "Connect4", - "Entanglement", - "Gomoku", - "Pawn-Whopping", - "Tic-Tac-Toe", - "Concurrent-Tic-Tac-Toe" - ); - -function GamesPage(id, games){// html tag id - this.games = games; - this.paragraphs = new Object(); - this.container = document.getElementById(id); - for (var i = 0; i < this.games.length; i++){ - var game = this.games[i]; - var paragraph = this.paragraphs[game] = document.createElement("p"); - paragraph.setAttribute("class", "game-par"); - var button = paragraph.button = document.createElement("button"); - button.setAttribute("class", "boldobt"); - button.setAttribute("onclick", "new_play('" + game + "')"); - button.innerHTML = game; - this.container.appendChild(paragraph); - paragraph.appendChild(button); - - var open_play_list = paragraph.open_play_list = document.createElement("ul"); - open_play_list.setAttribute("class", "play-list"); - open_play_list.setAttribute("id", "a-plays-list-" + game); - paragraph.appendChild(open_play_list); - - var closed_play_list = paragraph.closed_play_list = document.createElement("ul"); - closed_play_list.setAttribute("class", "play-list"); - closed_play_list.setAttribute("id", "d-plays-list-" + game); - paragraph.appendChild(closed_play_list); - } -} - -GamesPage.prototype.show = function(){ - this.container.style.display = "block"; -} - -GamesPage.prototype.hide = function(){ - this.container.style.display = "none"; -} Modified: trunk/Toss/WebClient/profile.html =================================================================== --- trunk/Toss/WebClient/profile.html 2011-06-28 00:48:40 UTC (rev 1497) +++ trunk/Toss/WebClient/profile.html 2011-06-30 22:13:07 UTC (rev 1498) @@ -134,11 +134,13 @@ </div> <div id="bottom"> -<a href="http://toss.sourceforge.net" id="toss-link">Powered by Toss</a> -<script type="text/javascript">begin_mailto( - "tossplay", "gmail.com", "Contact Us");</script> -tossplay [AT] gmail [DOT] com -<script type="text/javascript">end_mailto();</script> + <div id="bottomright"> + <a href="http://toss.sourceforge.net" id="toss-link">Powered by Toss</a> + <script type="text/javascript">begin_mailto( + "tossplay", "gmail.com", "Contact Us");</script> + tossplay [AT] gmail [DOT] com + <script type="text/javascript">end_mailto();</script> + </div> </div> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <luk...@us...> - 2011-07-01 23:30:25
|
Revision: 1499 http://toss.svn.sourceforge.net/toss/?rev=1499&view=rev Author: lukaszkaiser Date: 2011-07-01 23:30:17 +0000 (Fri, 01 Jul 2011) Log Message: ----------- Delete obsolete fontstyle, start adding game descriptions to WebClient. Modified Paths: -------------- trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/Style.css trunk/Toss/WebClient/index.html trunk/Toss/WebClient/profile.html trunk/Toss/WebClient/register.html trunk/Toss/WebClient/support.html Removed Paths: ------------- trunk/Toss/WebClient/fontstyle.css Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/Main.js 2011-07-01 23:30:17 UTC (rev 1499) @@ -197,6 +197,8 @@ function play_click (game, play_id, pi) { document.getElementById ("opponents").style.display = "none"; + document.getElementById (game + "-desc").style.display = "block"; + document.getElementById ("game-desc-controls").style.display = "block"; list_plays (game); document.getElementById ("welcome").style.display = "none"; document.getElementById ("game-disp").style.display = "none"; @@ -307,14 +309,7 @@ function new_play_guest (game) { GAME_NAME = game; UNAME = "guest"; - wgame = game; - if (game == "Breakthrough") { wgame = "Breakthrough_(board_game)" }; - if (game == "Pawn-Whopping") { wgame = "Pawn_(chess)" }; - if (game == "Entanglement") { wgame = "Entanglement_(graph_measure)" }; - wiki = "http://en.wikipedia.org/wiki/" + wgame; - document.getElementById ("topuser").innerHTML = - game + ' (<a href="' + wiki + '">Move Rules</a>)'; - if (SIMPLE_SET) { document.getElementById ("topuser").innerHTML = game }; + document.getElementById ("topuser").innerHTML = game; document.getElementById ("game-title").style.display = "none"; document.getElementById ("game-title-move").style.display = "none"; document.getElementById ("game-info-par").style.paddingBottom = "1em"; @@ -332,6 +327,8 @@ } function new_play_do (opp_uid) { + document.getElementById (GAME_NAME + "-desc").style.display = "block"; + document.getElementById ("game-desc-controls").style.display = "block"; list_plays (GAME_NAME); document.getElementById ("welcome").style.display = "none"; document.getElementById ("game-disp").style.display = "none"; @@ -430,6 +427,17 @@ suggest_move_async (mv_time, function () {}); } +function toggle_game_desc () { + var bt = document.getElementById ("descbt"); + if (bt.innerHTML == "Hide") { + bt.innerHTML = "Show"; + document.getElementById (GAME_NAME + "-desc").style.display = "none"; + } else { + bt.innerHTML = "Hide"; + document.getElementById (GAME_NAME + "-desc").style.display = "block"; + } +} + function toggle_suggestions () { var txt = document.getElementById ("suggestions-toggle").innerHTML; if (txt.indexOf ("Before") == -1) { Modified: trunk/Toss/WebClient/Style.css =================================================================== --- trunk/Toss/WebClient/Style.css 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/Style.css 2011-07-01 23:30:17 UTC (rev 1499) @@ -484,7 +484,33 @@ color: #f5f2ef; } +.game-desc { + display: none; + width: 80%; + margin: auto; + padding-bottom: 1em; +} +.game-desc a, .game-desc a:link, .game-desc a:active, .game-desc a:visited { + color: #260314; + text-decoration: underline; +} + +.game-desc a:hover { + color: #400827; +} + +#game-desc-controls { + display: none; + width: 80%; + margin: auto; + text-align: center; +} + +#game-desc-title { + font-weight: bold; +} + /* Content */ .mail, .ta { Deleted: trunk/Toss/WebClient/fontstyle.css =================================================================== --- trunk/Toss/WebClient/fontstyle.css 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/fontstyle.css 2011-07-01 23:30:17 UTC (rev 1499) @@ -1,86 +0,0 @@ -/* Generated by Font Squirrel (http://www.fontsquirrel.com); - http://www.fontsquirrel.com/fonts/TeX-Gyre-Heros - http://www.fontsquirrel.com/fonts/OFL-Sorts-Mill-Goudy -*/ - -@font-face { - font-family: 'OFLSortsMillGoudyRegular'; - src: url('OFLGoudyStM-webfont.eot'); - src: local('OFLMG'), url('OFLGoudyStM-webfont.woff') format('woff'), url('OFLGoudyStM-webfont.ttf') format('truetype'), url('OFLGoudyStM-webfont.svg#webfontwzHaehaw') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'OFLSortsMillGoudyItalic'; - src: url('OFLGoudyStM-Italic-webfont.eot'); - src: local('OFLMGI'), url('OFLGoudyStM-Italic-webfont.woff') format('woff'), url('OFLGoudyStM-Italic-webfont.ttf') format('truetype'), url('OFLGoudyStM-Italic-webfont.svg#webfontRrg0pQHE') format('svg'); - font-weight: normal; - font-style: normal; -} - - -@font-face { - font-family: 'TeXGyreHerosRegular'; - src: url('texgyreheros-regular-webfont.eot'); - src: local('☺'), url('texgyreheros-regular-webfont.woff') format('woff'), url('texgyreheros-regular-webfont.ttf') format('truetype'), url('texgyreheros-regular-webfont.svg#webfontLnIzFk4Q') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosItalic'; - src: url('texgyreheros-italic-webfont.eot'); - src: local('☺'), url('texgyreheros-italic-webfont.woff') format('woff'), url('texgyreheros-italic-webfont.ttf') format('truetype'), url('texgyreheros-italic-webfont.svg#webfontvQjiCLIH') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosBold'; - src: url('texgyreheros-bold-webfont.eot'); - src: local('☺'), url('texgyreheros-bold-webfont.woff') format('woff'), url('texgyreheros-bold-webfont.ttf') format('truetype'), url('texgyreheros-bold-webfont.svg#webfont2ZFI5J8u') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosBoldItalic'; - src: url('texgyreheros-bolditalic-webfont.eot'); - src: local('☺'), url('texgyreheros-bolditalic-webfont.woff') format('woff'), url('texgyreheros-bolditalic-webfont.ttf') format('truetype'), url('texgyreheros-bolditalic-webfont.svg#webfontv2u9PPvQ') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosCnRegular'; - src: url('texgyreheroscn-regular-webfont.eot'); - src: local('☺'), url('texgyreheroscn-regular-webfont.woff') format('woff'), url('texgyreheroscn-regular-webfont.ttf') format('truetype'), url('texgyreheroscn-regular-webfont.svg#webfontQv7FcPaV') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosCnItalic'; - src: url('texgyreheroscn-italic-webfont.eot'); - src: local('☺'), url('texgyreheroscn-italic-webfont.woff') format('woff'), url('texgyreheroscn-italic-webfont.ttf') format('truetype'), url('texgyreheroscn-italic-webfont.svg#webfont4ZGc7aNL') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosCnBold'; - src: url('texgyreheroscn-bold-webfont.eot'); - src: local('☺'), url('texgyreheroscn-bold-webfont.woff') format('woff'), url('texgyreheroscn-bold-webfont.ttf') format('truetype'), url('texgyreheroscn-bold-webfont.svg#webfontsYT6t1M5') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'TeXGyreHerosCnBoldItalic'; - src: url('texgyreheroscn-bolditalic-webfont.eot'); - src: local('☺'), url('texgyreheroscn-bolditalic-webfont.woff') format('woff'), url('texgyreheroscn-bolditalic-webfont.ttf') format('truetype'), url('texgyreheroscn-bolditalic-webfont.svg#webfont4yhgrpSG') format('svg'); - font-weight: normal; - font-style: normal; -} - Modified: trunk/Toss/WebClient/index.html =================================================================== --- trunk/Toss/WebClient/index.html 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/index.html 2011-07-01 23:30:17 UTC (rev 1499) @@ -7,7 +7,6 @@ content="Play the best strategic games online with a nice interface." /> <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> - <link href="fontstyle.css" media="screen" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> <script type="text/javascript" src="crypto-sha256.js"> </script> <script type="text/javascript" src="Connect.js"> </script> @@ -210,8 +209,6 @@ <div id="plays"> </div> - - <div id="game-disp"> <p id="game-info-par"> <span id="game-title"></span> @@ -244,6 +241,144 @@ <div id="board"><div id="working">Working...</div></div> </div> +<div id="game-descs"> + <p id="game-desc-controls"> + <span id="game-desc-title">Game Description</span> + <button id="descbt" class="bt" onclick="toggle_game_desc ()">Hide</button> + </p> + <div class="game-desc" id="Breakthrough-desc"> + <p><a href="http://en.wikipedia.org/wiki/Breakthrough_(board_game)"> + Breakthrough</a> is an abstract strategy board game invented by + Dan Troyka in 2000. It won the 2001 8x8 Game Design Competition.</p> + <p><b>Moves.</b>The players alternate, with each player moving one piece + per turn. A piece may move one space straight or diagonally forward if + the target square is empty. A piece may move into a square containing an + opponent's piece only if that square is one step diagonally forward. + The opponent's piece is removed and the player's piece replaces it. + Capturing is not compulsory, nor is it chained as in checkers.</p> + <p><b>Objective.</b>The first player to reach the opponent's home + row – the one farthest from the player – is the winner. + If all the pieces of a player are captured, that player loses. + A draw is impossible.</p> + </div> + <div class="game-desc" id="Checkers-desc"> + <p><a href="http://en.wikipedia.org/wiki/Checkers">Checkers</a> or + English Draughts, also called American checkers or straight checkers, + are a form of draughts board game. Unlike international draughts, + it is played on an eight by eight squared board (with sixty-four total + squares) with twelve pieces on each side.</p> + <p><b>Moves.</b> A simple move involves sliding a piece one space + diagonally forwards to an adjacent unoccupied dark square. + A jump is a move from a square diagonally adjacent to one of + the opponent's pieces to an empty square immediately and directly on + the opposite side of the opponent's square, thus jumping directly over + the square containing the opponent's piece. An uncrowned piece may only + jump diagonally forwards, kings may jump diagonally backwards. A piece + that is jumped is captured and removed from the board. Multiple-jump + moves are possible if when the jumping piece lands, there is another + immediate piece that can be jumped; even if the jump is in a different + direction. Jumping is mandatory – whenever a player has the option + to jump, she must jump. When multiple-option jumping moves are available, + whether with the one piece in different directions or multiple pieces + that can make various jumping moves, the player may choose which piece to + jump with and which jumping option or sequence of jumps to make. + The jumping sequence chosen does not necessarily have to be the one that + would have resulted in the most captures; however, one must make all + available captures in the chosen sequence.</p> + <p><b>Kings.</b> If a player's piece moves into the kings row on + the opposing player's side of the board, that piece is said to be + crowned (or often kinged in the U.S.), becoming a king and gaining + the ability to move both forwards and backwards. If a player's piece + jumps into the kings row, the current move terminates; having just been + crowned, the piece cannot continue on by jumping back out (as in a + multiple jump), until the next move. Any piece, whether it is + a king or not, can jump a king.</p> + <p><b>Objective.</b> A player wins by capturing all of the opposing + player's pieces or by leaving the opposing player with no legal moves. + The game ends in a draw, if neither side can force a win.</p> + </div> + <div class="game-desc" id="Chess-desc"> + <p><a href="http://en.wikipedia.org/wiki/Chess">Chess</a> is a two-player + board game played on a chessboard, a square-checkered board with 64 + squares arranged in an eight-by-eight grid. Each player begins the game + with sixteen pieces: One king, one queen, two rooks, two knights, + two bishops, and eight pawns. Pieces move in different assigned ways + according to their type, and accordingly are used to attack and capture + the opponent's pieces. The object of the game is to checkmate + the opponent's king, whereby the king is under immediate attack + (in check) if there is no way to move or defend it.</p> + <p><b>Moves.</b> The moves differ by figure.</p> + <p><b>Objective.</b> Checkmate.</p> + </div> + <div class="game-desc" id="Connect4-desc"> + <p><a href="http://en.wikipedia.org/wiki/Connect4">Connect4</a> (also known + as Captain's Mistress, Four Up, Plot Four, Find Four, Four in a Row, + and Four in a Line) is a two-player game played on a standing grid.</p> + <p><b>Moves.</b> The players take turns dropping their colored discs from + the top into a seven-column, six-row grid. The pieces fall straight + down, occupying the next available space within the column, so to make + a move click on a field which is empty and on top of a non-empty one, + or in the bottom row.</p> + <p><b>Objective.</b> The objective of the game is to connect four of + one's own discs of the same color next to each other vertically, + horizontally, or diagonally before the opponent can do so.</p> + </div> + <div class="game-desc" id="Entanglement-desc"> + <p><a href="http://en.wikipedia.org/wiki/Entanglement_(graph_measure)"> + Entanglement</a> is a cops vs. robber game played on a graph, which + plays an important role in structural theory of directed graphs.</p> + <p><b>Moves.</b> The players move in turn. In each move the cops either + stay where they are, or place one of them on the vertex currently + occupied by the robber. The robber must move from her current vertex, + along an edge, to a successor that is not occupied by a cop. The robber + must move even if no cop is following him.</p> + <p><b>Objective.</b> If there is no free successor to which the robber + can move, she is caught, and the cops win. The robber wins if she cannot + be caught and the cops give up.</p> + </div> + <div class="game-desc" id="Gomoku-desc"> + <p><a href="http://en.wikipedia.org/wiki/Gomoku">Gomoku</a> is an abstract + strategy board game and is also called Five in a Row. The name Gomoku is + from the Japanese language, in which it is referred to as gomokunarabe + Go means five, moku is a counter word for pieces and narabe means line-up. + The game is also popular in Korea, where it is called omok.</p> + <p><b>Moves.</b> Players alternate in placing a cross or a circle on an + empty square, starting from an empty 8×8 board.</p> + <p><b>Objective.</b> The winner is the first player to get an unbroken + row of five stones horizontally, vertically, or diagonally.</p> + </div> + <div class="game-desc" id="Pawn-Whopping-desc"> + <p><a href="http://en.wikipedia.org/wiki/Pawn_(chess)">Pawn-Whopping</a> + is a training game for chess players. The aim is to improve one's + handling of pawn play by concentrating solely on this aspect of chess.</p> + <p><b>Moves.</b> The standard Chess pawn moves apply. Normally a pawn moves + by advancing a single square, but the first time each pawn is moved from + its initial position, it has the option to advance two squares. Pawns may + not use the initial two-square advance to jump over an occupied square, + or to capture. Any piece directly in front of a pawn, friend or foe, + blocks its advance. A pawn captures diagonally, one square forward and to + the left or right. Additionally, it may capture en passant. This arises + when a pawn uses its initial-move option to advance two squares instead + of one, and in so doing passes over a square that is attacked by an enemy + pawn. That enemy pawn, which would have been able to capture the moving + pawn had it advanced only one square, is entitled to capture the moving + pawn in passing, as if it had advanced only one square.</p> + <p><b>Objective.</b> The goal in Pawn-Whopping is simply to be the first + to bring one of the pawns to the other end of the board.</p> + </div> + <div class="game-desc" id="Tic-Tac-Toe-desc"> + <p><a href="http://en.wikipedia.org/wiki/Tic-tac-toe">Tic-Tac-Toe</a> + also rendered wick wack woe (in some Asian countries), or noughts and + crosses/Xs and Os as it is known in the UK, Australia and New Zealand, + is a pencil-and-paper game for two players, X and O, who take turns + marking the spaces in a 3×3 grid.</p> + <p><b>Moves.</b> Players alternate in placing a cross or a circle on an + empty square.</p> + <p><b>Objective.</b> The player who first succeeds in placing three + respective marks in a horizontal, vertical, or diagonal row + wins the game.</p> + </div> +</div> <div id="bottom"> <div id="bottomright"> Modified: trunk/Toss/WebClient/profile.html =================================================================== --- trunk/Toss/WebClient/profile.html 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/profile.html 2011-07-01 23:30:17 UTC (rev 1499) @@ -5,7 +5,6 @@ <title>tPlay — Profile</title> <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> - <link href="fontstyle.css" media="screen" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> <script type="text/javascript" src="crypto-sha256.js"> </script> <script type="text/javascript" src="Connect.js"> </script> Modified: trunk/Toss/WebClient/register.html =================================================================== --- trunk/Toss/WebClient/register.html 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/register.html 2011-07-01 23:30:17 UTC (rev 1499) @@ -5,7 +5,6 @@ <title>tPlay — Registration</title> <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> - <link href="fontstyle.css" media="screen" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> <script type="text/javascript" src="crypto-sha256.js"> </script> <script type="text/javascript" src="Connect.js"> </script> Modified: trunk/Toss/WebClient/support.html =================================================================== --- trunk/Toss/WebClient/support.html 2011-06-30 22:13:07 UTC (rev 1498) +++ trunk/Toss/WebClient/support.html 2011-07-01 23:30:17 UTC (rev 1499) @@ -5,7 +5,6 @@ <title>tPlay — Support</title> <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> - <link href="fontstyle.css" media="screen" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> <script type="text/javascript" src="Login.js"> </script> </head> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <luk...@us...> - 2011-07-06 19:55:29
|
Revision: 1504 http://toss.svn.sourceforge.net/toss/?rev=1504&view=rev Author: lukaszkaiser Date: 2011-07-06 19:55:23 +0000 (Wed, 06 Jul 2011) Log Message: ----------- Placeholder for ads. Modified Paths: -------------- trunk/Toss/WebClient/Login.js trunk/Toss/WebClient/Style.css trunk/Toss/WebClient/index.html Modified: trunk/Toss/WebClient/Login.js =================================================================== --- trunk/Toss/WebClient/Login.js 2011-07-05 00:07:39 UTC (rev 1503) +++ trunk/Toss/WebClient/Login.js 2011-07-06 19:55:23 UTC (rev 1504) @@ -46,6 +46,7 @@ if (udata != "") { setup_user (udata.split("@")) }; } if (window.location.href.indexOf("?simple=true") > 0) { + document.getElementById ("ads").style.display = "none"; SIMPLE_SET = true; document.getElementById("gamestablink").href = "index.html?simple=true"; document.getElementById("pdescChess").style.display = "block"; Modified: trunk/Toss/WebClient/Style.css =================================================================== --- trunk/Toss/WebClient/Style.css 2011-07-05 00:07:39 UTC (rev 1503) +++ trunk/Toss/WebClient/Style.css 2011-07-06 19:55:23 UTC (rev 1504) @@ -533,6 +533,16 @@ font-weight: normal; } +#ads { + position: absolute; + top: 6.5em; + right: 0px; + background-color: #f5f2ef; + width: 160px; + height: 600px; + z-index: 99; +} + #main { text-align: left; position: absolute; Modified: trunk/Toss/WebClient/index.html =================================================================== --- trunk/Toss/WebClient/index.html 2011-07-05 00:07:39 UTC (rev 1503) +++ trunk/Toss/WebClient/index.html 2011-07-06 19:55:23 UTC (rev 1504) @@ -19,6 +19,9 @@ <body onload="startup('')"> +<div id="ads"> +</div> + <div id="main"> <div id="top"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <luk...@us...> - 2012-02-01 14:15:07
|
Revision: 1658 http://toss.svn.sourceforge.net/toss/?rev=1658&view=rev Author: lukaszkaiser Date: 2012-02-01 14:15:01 +0000 (Wed, 01 Feb 2012) Log Message: ----------- Tidy up local html, alerts only when asking for move. Modified Paths: -------------- trunk/Toss/WebClient/Main.js trunk/Toss/WebClient/Play.js trunk/Toss/WebClient/local.html Modified: trunk/Toss/WebClient/Main.js =================================================================== --- trunk/Toss/WebClient/Main.js 2012-02-01 10:17:21 UTC (rev 1657) +++ trunk/Toss/WebClient/Main.js 2012-02-01 14:15:01 UTC (rev 1658) @@ -558,10 +558,11 @@ var fm = function (m) { document.getElementById("working").style.display = "none"; document.getElementById("working").innerHTML = "Working..."; - if (typeof m.comp_tree_size != 'undefined') + if (typeof m.comp_tree_size != 'undefined' && SIMPLE_MOVES == false) { alert ("Algorithm constructed tree of size " +m.comp_tree_size + " using exactly "+ (m.comp_ended - m.comp_started)+" seconds."); + } if (m != "") { PLAYS[CUR_PLAY_I].show_move (new Move (m)); f() } }; if (typeof LOCAL == 'undefined') { Modified: trunk/Toss/WebClient/Play.js =================================================================== --- trunk/Toss/WebClient/Play.js 2012-02-01 10:17:21 UTC (rev 1657) +++ trunk/Toss/WebClient/Play.js 2012-02-01 14:15:01 UTC (rev 1658) @@ -161,10 +161,11 @@ PlayDISP.free (); this.new_state (info); this.redraw (); - if (typeof info.comp_tree_size != 'undefined') + if (typeof info.comp_tree_size != 'undefined' && SIMPLE_MOVES == false) { alert ("Algorithm constructed tree of size " +info.comp_tree_size + " using exactly "+ (info.comp_ended - info.comp_started)+" seconds."); + } if (this.cur_state.players.length == 1 && this.players[this.cur_state.players[0]] == "computer") { var mv_time = document.getElementById("speed").value; Modified: trunk/Toss/WebClient/local.html =================================================================== --- trunk/Toss/WebClient/local.html 2012-02-01 10:17:21 UTC (rev 1657) +++ trunk/Toss/WebClient/local.html 2012-02-01 14:15:01 UTC (rev 1658) @@ -8,7 +8,6 @@ <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <link rel="icon" type="image/vnd.microsoft.icon" href="favicon.ico" /> <link rel="stylesheet" type="text/css" href="Style.css" media="screen" title="Default"/> - <script type="text/javascript" src="crypto-sha256.js"> </script> <script type="text/javascript" src="Local.js"> </script> <script type="text/javascript" src="JsHandler.js"> </script> <script type="text/javascript" src="State.js"> </script> @@ -18,34 +17,21 @@ <body onload="startup_local('')"> -<div id="ads"> -</div> <div id="main"> <div id="top"> <div id="logo"> - <a id="leftupperlogo-link" href="index.html"> + <a id="leftupperlogo-link" href="local.html"> <img id="leftupperlogo-img" src="toss.png" alt="tPlay" /> </a> </div> -<span id="topuser"></span> +<span id="localdown" style="position:relative; top: 0.7em;"> + <span id="topuser"></span> +</span> </div> -<div id="chess-level-warning"> -Chess is set to very weak play.</br> -<br/> -No training here, just have fun! -</div> - <div id="welcome"> -<p id="welcome-top">Enjoy the best games on <span class="logo-in">tPlay</span> - for free <span style="float: right;"> - <a href="http://itunes.apple.com/us/app/tplay/id438620686" - ><img style="height: 24px;" src="pics/appstore-small.png" /></a> - <g:plusone></g:plusone> - </span> -</p> <p id="p-under-welcome" style="display: none;"> Strategic games are fun! <a href="register.html">Register</a>, login and enjoy quality games @@ -53,11 +39,12 @@ </p> <p style="width:100%; text-align: justify;"> -<button onclick="new_play_local('Chess')" class="game-picbt" - title="Play Chess"> - <img style="max-width:95%" src="pics/Chess.png" alt="Chess Board" /> - <span id="pdescChess" class="game-picspan"> - <span class="game-pictxt">Chess</span> +<button onclick="new_play_local('Pawn-Whopping')" class="game-picbt" + class="boldobt" title="Play Pawn-Whopping"> + <img style="max-width:95%" src="pics/Pawn-Whopping.png" + alt="Pawn-Whopping Board" /> + <span id="pdescPawn-Whopping" class="game-picspan"> + <span class="game-pictxt">Pawn-Whopping</span> </span> </button> <button onclick="new_play_local('Connect4')" class="game-picbt" @@ -67,17 +54,6 @@ <span class="game-pictxt">Connect4</span> </span> </button> -<button onclick="new_play_local('Pawn-Whopping')" class="game-picbt" - class="boldobt" title="Play Pawn-Whopping"> - <img style="max-width:95%" src="pics/Pawn-Whopping.png" - alt="Pawn-Whopping Board" /> - <span id="pdescPawn-Whopping" class="game-picspan"> - <span class="game-pictxt">Pawn-Whopping</span> - </span> -</button> -</p> - -<p style="width:100%; text-align: justify"> <button onclick="new_play_local('Breakthrough')" class="game-picbt" class="boldobt" title="Play Breakthrough"> <img style="max-width:95%" src="pics/Breakthrough.png" @@ -86,6 +62,17 @@ <span class="game-pictxt">Breakthrough</span> </span> </button> +</p> + +<p style="width:100%; text-align: justify"> +<button onclick="new_play_local('Tic-Tac-Toe')" class="game-picbt" + class="boldobt" title="Play Tic-Tac-Toe"> + <img style="max-width:95%" src="pics/Tic-Tac-Toe.png" + alt="Tic-Tac-Toe Board" /> + <span id="pdescTic-Tac-Toe" class="game-picspan"> + <span class="game-pictxt">Tic-Tac-Toe</span> + </span> +</button> <button onclick="new_play_local('Checkers')" class="game-picbt" class="boldobt" title="Play Checkers"> <img style="max-width:95%" src="pics/Checkers.png" alt="Checkers Board" /> @@ -102,52 +89,8 @@ </button> </p> -<ul id="welcome-list-main" class="welcome-list"> - <li>Play - <a href="http://en.wikipedia.org/wiki/Breakthrough_(board_game)" - >Breakthrough,</a> - <a href="http://en.wikipedia.org/wiki/English_draughts" - >Checkers,</a> - <a href="http://en.wikipedia.org/wiki/Chess" - >Chess,</a> - <a href="http://en.wikipedia.org/wiki/Connect4" - >Connect4,</a> - <a href="http://en.wikipedia.org/wiki/Entanglement_(graph_measure)" - >Entanglement,</a> - <a href="http://en.wikipedia.org/wiki/Gomoku" - >Gomoku,</a> - <a href="http://en.wikipedia.org/wiki/Pawn_(chess)" - >Pawn-Whopping,</a> - and many other board games</li> -<li>Focus fully on the game thanks to our intuitive clean interface</li> -<li>Challenge your friends or play a fast game against the computer for fun</li> -</ul> - -<div id="news"> -<h3>News</h3> -<ul id="welcome-list-news" class="welcome-list"> -<li><b>24/10/11</b> Learning games from examples in web interface</li> -<li><b>19/10/11</b> Games learning engine and first buttons in the UI</li> -<li><b>14/09/11</b> Simple editing of games added to web interface</li> -<li><b>31/07/11</b> Store date and time of moves in games</li> -<li><b>30/07/11</b> Corrected opponent lists in the Profile tab</li> -<li><b>03/07/11</b> Added game descriptions viewable when playing</li> -<li><b>30/06/11</b> View previous moves in a play</li> -<li><b>27/06/11</b> Tabs and searching opponents in the profile page</li> -<li><b>22/06/11</b> Better organized lists of plays</li> -<li><b>19/06/11</b> News section on the front page of tPlay</li> -<li><b>15/06/11</b> Bug with underscores in user names corrected</li> -<li><b>10/06/11</b> New register site handles forgotten passwords</li> -<li><b>05/06/11</b> Pre-caching client states improves response times</li> -<li><b>03/06/11</b> Corrected tPlay 1.1 app accepted on App Store</li> -<li><b>30/05/11</b> Large restructuring of JavaScript code finished</li> -<li><b>24/05/11</b> Breakthrough generation from examples in SVN</li> -<li><b>23/05/11</b> First tPlay application accepted on App Store</li> -</ul> </div> -</div> - <div id="nosvg"> <p style="padding-left: 1.2em; font-size: 1.2em;"><b>SVG Support Missing</b></p> <p>Your browser does not seem to support SVG, @@ -257,6 +200,12 @@ player's pieces or by leaving the opposing player with no legal moves. The game ends in a draw, if neither side can force a win.</p> </div> + <div class="game-desc" id="Tic-Tac-Toe-desc"> + <p><a href="http://en.wikipedia.org/wiki/Tic-tac-toe">Tic-Tac-Toe</a>, + also known as Noughts and Crosses, is one of the simplest popular games. + Just make a line of three: horizontally, vertically, or diagonally. + </p> + </div> <div class="game-desc" id="Chess-desc"> <p><a href="http://en.wikipedia.org/wiki/Chess">Chess</a> is a two-player board game played on a chessboard, a square-checkered board with 64 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |