From f8c9eb5220afaf2f9a62f9a176a45913240f4081 Mon Sep 17 00:00:00 2001 From: raylu Date: Thu, 7 Apr 2011 00:27:27 -0400 Subject: Initial import from Dropbox --- js/mapspecs.js | 688 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 688 insertions(+) create mode 100644 js/mapspecs.js (limited to 'js/mapspecs.js') diff --git a/js/mapspecs.js b/js/mapspecs.js new file mode 100644 index 0000000..fe58658 --- /dev/null +++ b/js/mapspecs.js @@ -0,0 +1,688 @@ +// +// 1.0 +// +// +// + +window.onload = function(){ + //document.getElementById('blocksdisplay').innerHTML = ""+blocks+""; + //doSend(); + loadSol(); +} + +var solution = new Array(); +var blocks = new Array(); +var count = new Array(); +var mapdata = new Array(); +var mapjson = new Array(); +var htmlscores = ''; + +function loadSol(sol) { + //alert("Temporary debug"); + //document.getElementById('debug').innerHTML = "
Exe1..."; + if (sol == null) + if (document.getElementById('mapsol') != undefined) + sol = document.getElementById('mapsol').innerHTML; + + if (sol) { + + tmp = sol.split(':'); + position = tmp[1].split('.'); + mapid = tmp[0]; + + clearwalls(mapid); + + //document.getElementById('debug').innerHTML += "
"+mapid+','+position[1]; + for(var i in position) { + //document.getElementById('debug').innerHTML += "
"+mapid+','+position[i]; + if (document.getElementById(mapid+','+position[i]) != undefined) { + object = document.getElementById(mapid+','+position[i]); + grid_click(object); + + } + //alert(soldata[i]); + } + } +} + +function grid_click(obj) { + + //Prepare data + tmp = obj.id.split(','); + mapid = tmp[0] - 0; + y = tmp[1]; + x = tmp[2]; + + if (solution[mapid] == undefined) { + getmapdata(mapid); + } + //alert(obj.cv); + + if (obj.cv) { + obj.cv = false; + + //obj.style.backgroundColor = '#ffffff'; + obj.setAttribute("class", "grid_td"); + //IE 7 + obj.style.backgroundColor = ''; + blocks[mapid]++; + //alert(obj.id); + //Remove wall + solution[mapid] = solution[mapid].replace('.'+y+','+x+'.', '.'); + //alert(y+','+x+'.'); + } else { + if (blocks[mapid] < 1) { + //alert("Outa blocks!"); + updateDsp(mapid, 'dspWalls', "OUT!"); + //document.getElementById(mapid+',dspWalls').innerHTML = "OUT!"; + return; + } + obj.cv = true; + //obj.style.backgroundColor = '#ff0000'; + obj.setAttribute("class", "grid_td_walls"); + //IE 7: + obj.style.backgroundColor = '#666666'; + //Add Wall + solution[mapid] += y+','+x+'.'; + blocks[mapid]--; + } + //document.getElementById('blocksdisplay').innerHTML = ""+blocks[mapid]+""; + + updateDsp(mapid, 'dspWalls', blocks[mapid]+" walls"); + //document.getElementById(mapid+',dspWalls').innerHTML = " "+blocks[mapid]+" walls"; + +} + +function updateDsp(mapid, element, data) { + if (mapdata[mapid] == undefined) + return; + if (mapdata[mapid].example != true) { + if (document.getElementById(mapid+','+element) != undefined) { + handle = document.getElementById(mapid+','+element); + handle.innerHTML = data; + } + } +} + +function getmapdata(mapid) { + //alert(typeof(JSON)); + if (typeof(JSON) == 'undefined') { + //alert("We're using EVAL instead"); + text = document.getElementById(mapid+',mapdata').innerHTML; + mapdata[mapid] = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); + //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); + } else { + //alert("We're using JSON"); + mapdata[mapid] = JSON.parse(document.getElementById(mapid+',mapdata').innerHTML); + } + + blocks[mapid] = mapdata[mapid].walls; + solution[mapid] = '.'; + + updateDsp(mapid, 'dspWalls', blocks[mapid]+" walls"); + + //document.getElementById(mapid+',dspWalls').innerHTML = " "+blocks[mapid]+" walls"; + //document.getElementById(mapid+',dspWalls').innerHTML = blocks[mapid]; +} + +function doSend(mapid) { + if (solution[mapid] == undefined) { + getmapdata(mapid); + } + + reqstr = ""; + reqstr += "&mapcode="+mapdata[mapid].code; + reqstr += "&mapid="+mapid; + //alert (mapdata[mapid].code); + reqstr += "&solution="+solution[mapid]; + + //alert(reqstr); + //document.getElementById('dispdo').innerHTML = "http://mazetd.4xg.net/do.php?r=getpath"+reqstr + + //alert("request string:"+reqstr); + ajax.requestFile = "do.php?r=getpath"+reqstr; //prepare strdata + ajax.onCompletion = request_path_done; // Specify function to be executed on response. + ajax.runAJAX();// Do it! +} + +function requestSol(solid) { + //alert("requesting solution id:" + solid); + ajax.requestFile = "do.php?r=getsol&solutionid="+solid; //prepare strdata + ajax.onCompletion = requestSolDone; // Specify function to be executed on response. + ajax.runAJAX();// Do it! +} + +function requestSolDone() { + //alert("request complete"); + + if (typeof(JSON) == 'undefined') { + //alert("We're using EVAL instead AGAIN."); + text = ajax.response; + var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); + //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); + } else { + //alert("We're using JSON again"); + var JO = JSON.parse(ajax.response); + } + + clearwalls(JO.mapid); + loadSol(JO.mapid + ":" + JO.solution); +} + +function clearwalls(mapid) { + if (solution[mapid] == undefined) return; + walls = solution[mapid].split('.'); + for(var i in walls) { + //alert(walls[i]); + tmp = walls[i].split(','); + eid = mapid+','+tmp[0]+','+tmp[1]; + //alert('eid:'+eid); + if (document.getElementById(eid) != undefined) { + obj = document.getElementById(eid); + obj.setAttribute("class", "grid_td"); + obj.style.backgroundColor = ''; + obj.cv = false; + //alert("exe"); + } + } + solution[mapid] = undefined; + getmapdata(mapid); +} + +function resetwalls(mapid) { + answer = confirm("Remove walls and start fresh?"); + if (answer) { + clearwalls(mapid); + } +} + +function request_path_done() { + //document.getElementById('mapdisplay').innerHTML = ajax.response; + //alert ("resp: "+ajax.response); + //if (ajax.response == undefined) return; + + if (typeof(JSON) == 'undefined') { + //alert("We're using EVAL instead AGAIN."); + text = ajax.response; + var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); + //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); + } else { + //alert("We're using JSON again"); + var JO = JSON.parse(ajax.response); + } + + mapjson[JO.mapid] = JO; + + //alert ("resp: "+ajax.response); + // if (typeof(JSON) == undefined) { + // var JO = eval(ajax.response); + // } else { + // var JO = JSON.parse(ajax.response); + // } + if (JO.scores) { + updateDsp(JO.mapid, 'dspScore', JO.scores); + } + + for(var i in JO.error) { + alert('\n JO error ' + JO.error[i]); + } + + //document.getElementById('disp').innerHTML = JO.map; + + if (JO.blocked) { + alert("Path is blocked make sure there is a way for it to go!"); + return; + } + //document.write(JO.map); + //alert ("moves: "+JO.moves); + //alert ("path: "+JO.start); + //document.getElementById('disppath').innerHTML = JO.path; + //document.getElementById('disptotalmoves').innerHTML = JO.moves; + var disptext = "Record: "+JO.best+" by "+JO.bestby; + + updateDsp(JO.mapid, 'dspID', disptext); + //document.getElementById(JO.mapid+',dspID').innerHTML = JO.best; + + animatePath(JO.path, JO.mapid, JO.start); + + //Get score update. + ajax.requestFile = "do.php?r=getscores&mapid="+JO.mapid; //prepare strdata + ajax.onCompletion = request_scores_done; // Specify function to be executed on response. + ajax.runAJAX();// Do it! +} + +function animatePath(path, mapid, start) { + tmp = start.split(','); + y = tmp[0]; + x = tmp[1]; + + p = path; + //alert("Begin"); + //t = p.length; + t = ''; + //count[mapid] = 0; + document.getElementById(mapid+',btn').disabled = true; + doanimate(x, y, p, t, mapid); + //setTimeout("doanimate("+x+","+y+",'"+p+"',"+t+")",500); +} + +function animatePathDone(mapid) { + document.getElementById(mapid+',btn').disabled = false; + //alert("animate done..." + htmlscores); + if (htmlscores) { + //alert("showing scores..."); + updateDsp(mapid, 'dspScore', htmlscores); + htmlscores = ''; + } +} + +function request_scores_done() { + + //alert("score request complete"); + //Get scores. + if (typeof(JSON) == 'undefined') { + //alert("We're using EVAL instead AGAIN."); + text = ajax.response; + var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); + //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); + } else { + //alert("We're using JSON again"); + var JO = JSON.parse(ajax.response); + } + //alert("scores saveing " + JO.scores); + htmlscores = JO.scores; +} + + +function checkSound(mapid) { + if (document.getElementById(mapid+',mute').checked) { + return false; + } + if (typeof(soundManager) != 'object') { + return false; + } + return true; +} + +var snake = new Array(); +var snakeeffected = new Array(); +function doanimate(x, y, p, c, mapid) { + + //x, y position + //p path string being trunicated. + //c current target code. + //t next target code. + t = p.substring(0, 1); + + //Animate current square, and move to next one. + if (count[mapid] == undefined) { + count[mapid] = 0; + } + //alert("test"); + if (snake[mapid] == undefined) { + snake[mapid] = new Array(); + snake[mapid]['color'] = '#4444bb'; + } + + //Display movecount + updateDsp(mapid, 'dspCount', count[mapid]+ " moves"); + //document.getElementById(mapid+',dspCount').innerHTML = count[mapid]+ " moves"; + + //Get a handle on the element. + eid = mapid+','+x+','+y; + //Verify. + if (document.getElementById(eid) == undefined) { + alert("Path exited field..?"); + animatePathDone(mapid); + return; + } + handle = document.getElementById(eid); + + //Maintain our original classname, no matter the cost! + origclass = handle.className; + if ( origclass == 'grid_td_path1' || + origclass == 'grid_td_path2' || + origclass == 'grid_td_path3' || + origclass == 'grid_td_path4' ) { + // if (origclass == 'grid_td_animate' || origclass == 'grid_td_animate_pre' ) { + origclass = handle.classOrigName; + //setTimeout(handle.setAttribute('class', origclass), 850); + //alert('ex ' + origclass); + } + //handle.style.backgroundColor = snake[mapid]['color']; + handle.classOrigName = origclass; + + + //Animate. + switch(c) { + case '1': //1 - Up + case '2': //2 - Right + case '3': //3 - Down + case '4': //4 - Left + count[mapid]++; + + switch(count[mapid]) { + case mapjson[mapid].best: + flashelement(mapid+',dspCount', 4, "#FF0000"); + break; + case 500: + case 400: + case 350: + case 300: + case 250: + case 200: + case 150: + case 100: + case 50: + if (checkSound(mapid)) { + soundManager.play('charm'); + } + //alert("count-hit: "+count[mapid]); + //Flash + flashelement(mapid+',dspCount', 4); + break; + } + //if (checkSound(mapid)) { + //soundManager.play('bling'); + //soundManager.play('sc'); + //soundManager.setVolume('click', 50); + //soundManager.play('click'); + //soundManager.play('charm'); + //soundManager.play('ufoblip'); + //} + handle.setAttribute('class', 'grid_td_path'+c); + handle.className = 'grid_td_path'+c; + handle.style.backgroundColor = snake[mapid]['color']; + + string = "if (document.getElementById('"+eid+"').className == 'grid_td_path"+c+"') "; + string += "document.getElementById('"+eid+"').className = '"+origclass+"';"; + //alert (string); + setTimeout(string, 855); + //And incase that didn't work... + //setTimeout("document.getElementById('"+eid+"').className = '"+origclass+"'", 7500); + //setTimeout("document.getElementById('"+eid+"').setAttribute('class', '"+origclass+"')", 855); + + if (handle.pressed == true) { + setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '#dddddd';", 865); + } else { + //alert(eid); + setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '';", 865); + } + + break; + //Teleports + case 't': + //case 'u': + case 'm': + case 'g': + case 'i': + case 'k': + //case 'n': + // if (t == "u" || t == "n") { + //alert("teleport"); + //if (checkSound(mapid)) { + //soundManager.play('bling'); + //soundManager.play('sc'); + //soundManager.play('ufoblip'); + //soundManager.play('002'); + //soundManager.play('003'); + //soundManager.setVolume('click', 50); + //soundManager.play('click'); + //soundManager.play('charm'); + //} + //flashelement(eid, 4); + + // } else { + // break; + // } + //Targets + case 'q': //Teleport out; + case 'b': + case 'c': + case 'd': + case 'e': + + //break + case 'r': + //handle.setAttribute('class', 'grid_td_pressed'); + //handle.classOrigName = 'grid_td_pressed'; + snakeeffected.push("document.getElementById('"+eid+"').style.backgroundColor = '';"); + snakeeffected.push("document.getElementById('"+eid+"').pressed = false;"); + handle.style.backgroundColor = '#dddddd'; + setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '#dddddd';", 865); + handle.pressed = true; + + break; + } + + //Sound effects + if (c == 'r') { + if (checkSound(mapid)) { + soundManager.play('bling'); + //soundManager.play('blip'); + //soundManager.play('charm'); + } + } + + //Done messing with current target + //Now take pre-action regarding the next tile. + + //Speaking of the next tile - does it exist? + //End of the line? + if (t == '') { + + //Did we beat or tie any records? + //Saw someone do this, thought it was clever. + //Switch for range result. + var disptext = "" + switch (true) { + case (count[mapid] > mapjson[mapid].best): + disptext = "Beat "+mapjson[mapid].bestby+"'s record of "+mapjson[mapid].best+" with "+count[mapid]+"!"; + break; + + case (count[mapid] == mapjson[mapid].best): + disptext = "Tied "+mapjson[mapid].bestby+"'s record of "+mapjson[mapid].best; + break; + + case (count[mapid] > mapjson[mapid].mybest): + disptext = "Improved score "+mapjson[mapid].mybest+ " to "+count[mapid]; + break; + + case (count[mapid] == mapjson[mapid].mybest): + disptext = "Tied personal best of "+count[mapid]; + break; + + } + //if anything worth mentioning happend let them know. + if (disptext != "") { + if (checkSound(mapid)) { + soundManager.play('charm'); + soundManager.play('bling'); + soundManager.play('sc'); + } + updateDsp(mapid, 'dspID', disptext); + flashelement(mapid+',dspID', 8, "#FF3377"); + } + + //This is the end, lets reset stuff to defaults. + count[mapid] = 0; + snake[mapid]['color'] = '#4444bb'; + //Bring the color back to our checkpoints/teleports. + for(var i in snakeeffected) { + //eval(snakeeffected[i]); + setTimeout((snakeeffected[i]), 2000); + } + //Clear + snakeeffected = new Array(); + //We're done, + animatePathDone(mapid); + return; + } + + + //The next tile exists, how fast should we get there? + rs = 85; + //How fast should we be going? + selectbox = document.getElementById(mapid+',speed'); + selected = selectbox.options[selectbox.selectedIndex].value; + switch (selected) { + case '1': + rs =310; + break; + + case '2': + rs =85; + break; + + case '3': + rs =45; + break; + + case '4': + rs =23; + break; + + } + + + //The next path code. + switch(t) { + //Are we just moving someplace? + case '1': x--; break; //1 - Up + case '2': y++; break; //2 - Right + case '3': x++; break; //3 - Down + case '4': y--; break; //4 - Left + //Special codes within the path. + //Did we aquire a target? + //Checkpoint targets: + case 'a': + // rs = rs * 9; + snake[mapid]['color'] = '#F777FF'; + break; + case 'b': + rs = rs + 500; + snake[mapid]['color'] = '#FFFF11'; + //handle.style.backgroundColor = "#000000"; + break; + case 'c': + rs = rs + 500; + snake[mapid]['color'] = '#FF4466'; + break; + case 'd': + rs = rs + 500; + snake[mapid]['color'] = '#ff9911'; + break; + case 'e': + rs = rs + 500; + snake[mapid]['color'] = '#00FFFF'; + break; + //Finish target + case 'f': + rs = rs + 500; + snake[mapid]['color'] = '#4444bb'; + break; + + //Hey, we've ran into a teleport. + case 'u': //tp1 + case 'n': //tp2 + case 'h': //tp3 + case 'j': //tp4 + case 'l': //tp5 + //Get teleport coords + tmp = p.split(t); + loc = tmp[1].split(','); + y = loc[0]; + x = loc[1]; + + //Flash teleport-out + //Teleport Element ID + tpEid = mapid+','+x+','+y; + if (checkSound(mapid)) { + soundManager.play('ufoblip'); + //soundManager.play('002'); + //soundManager.play('003'); + } + //alert(tpEid); + document.getElementById(eid).style.backgroundColor='#CCCCCC'; + document.getElementById(tpEid).style.backgroundColor='#CCCCCC'; + //flashelement(eid, 7); + flashelement(tpEid, 8, snake[mapid]['color']); + + + //The path once teleported - and an r to indicate to gray the teleport-out too. + p = 'q'+tmp[2]; + //Slow down + rs = rs + 1500; + setTimeout("doanimate("+x+","+y+",'"+p+"','"+t+"',"+mapid+")",rs); + return; + break; + } + //Remove move from p + p = p.substring(1); + //rs = (10 * p.length) + 40; + + setTimeout("doanimate("+x+","+y+",'"+p+"','"+t+"','"+mapid+"')",rs); +} + +function flashelement(eid, times, color) { + //alert("exe"+eid); + if (document.getElementById(eid) == undefined) return; + if (!color) { + color = "#FFFF44"; + } + //document.getElementById(eid).setAttribute('class', 'no_transition'); + var currentclass = document.getElementById(eid).className; + if (document.getElementById(eid).classOrigName != undefined) + currentclass = document.getElementById(eid).classOrigName; + var currentColor = document.getElementById(eid).style.backgroundColor; + document.getElementById(eid).className='no_transition '+currentclass; + document.getElementById(eid).style.backgroundColor = '#000000'; + for (var i=0; i