html5游戏
来源:互联网 发布:python对接matlab 编辑:程序博客网 时间:2024/05/22 01:25
以前同事做的html5游戏,我稍作修改了一下
<!DOCTYPE html><html><head><title>Orbz</title></head><body style="font-family:'lucida grande', tahoma, verdana, arial, sans-serif;background-color: #f7f7f7;color: #333;"><h1>OMG CALL YOUR MUM AND TELL HER YOU JUST PLAYED <del>ORBZ</del> CRAZY CUBEZ IN HTML5</h1><img id="spacebg" src="space.jpg" style="display:none" /><canvas id="canvas" width="360" height="510" style="border:1px dotted;float:left"></canvas><b>Click two orbz to swap. Click on a combo to clear. No time limit, just survive as long as possible!</b><hr /><form> <p>Adjust paramaters here. They will be updated after your current game finishes.</p> NumRows: <input type="text" id="numRows" value="7"/><br/> NumColumns: <input type="text" id="numColumns" value="9"/><br/> BoxSize: <input type="text" id="boxSize" value="80"/><br/> SpawnRate: <input type="text" id="spawnRate" value="0.004"/><br/> StepTime: <input type="text" id="stepTime" value="30"/><br/> MinComboSize: <input type="text" id="minComboSize" value="3"/><br/> ComboBonus: <input type="text" id="comboBonus" value="1.3"/> <i>(Every extra ball in the combo multiplies your score by this amount)</i><br/></form><script language="javascript">var cs = document.getElementById("canvas");var ct = cs.getContext("2d");var spacebg = document.getElementById("spacebg");var numRows;var numColumns;var boxSize;var canvasX;var canvasY;var footerY = 30;var spawnRate;var stepTime;var minComboSize;var highScore = 0;var score;var selected;var nuked;var grid;var interval;function init() { window.clearInterval(interval); numRows = getVal("numRows"); numColumns = getVal("numColumns"); boxSize = getVal("boxSize"); spawnRate = getVal("spawnRate"); stepTime = getVal("stepTime"); minComboSize = getVal("minComboSize"); comboBonus = getVal("comboBonus"); canvasX = numColumns * boxSize; canvasY = numRows * boxSize; spawnMultiplier = 1; cs.width = canvasX; cs.height = canvasY + footerY; cs.addEventListener("click", doClick, false); score = 0; selected = []; nuked = []; grid = new Grid(numColumns, numRows); interval = setInterval(step, stepTime); }function getVal(valName) { return parseFloat(document.getElementById(valName).value);}function Grid(x,y) { this.grid = [] for(var i = 0; i < x; i++) {var col = [];for(var j = 0; j < y; j++) { col.push(new Cell(i,j));}this.grid.push(col); } this.get = function(x,y) {var col = this.grid[x];if(col) { var cell = col[y]; if(cell) {return cell;}}return null; } this.col = function(x) {var col = this.grid[x];if(col) { return col;}return null; }}function Cell(x,y) { var colours = ["#900","#090","#009","#d0d","#dd0"]; this.draw = function() {if(this.hasItem) { // ct.beginPath(); // ct.arc((x+0.5) * boxSize, ((y+0.5) * boxSize), (boxSize/2), 0, Math.PI * 2, false); // ct.closePath(); ct.fillStyle = this.nuked ? "white" : this.colour; // ct.fill(); ct.fillRect((x * boxSize)+1,(y*boxSize)+1,boxSize-2,boxSize-2); if(this.selected) {ct.lineWidth = 2;ct.strokeStyle = 'rgb(240,240,240)';ct.strokeRect(x * boxSize, y * boxSize, boxSize, boxSize); }}if(this.exploding && this.explosionSize > 0) { ct.beginPath(); ct.arc((x+0.5) * boxSize, ((y+0.5) * boxSize), (boxSize/2) + this.explosionSize, 0, Math.PI * 2, false); ct.closePath(); ct.lineWidth = 4; ct.strokeStyle = 'rgb(240,240,240)'; ct.stroke();} } if(Math.random() < (spawnRate * spawnMultiplier)) {this.hasItem = true;this.colour = colours[Math.floor(Math.random() * colours.length)]; } else {this.hasItem = false; } this.x = x; this.y = y; this.exploding = false;}function draw(grid) { ct.fillStyle = "black"; ct.fillRect(0,0,canvasX,canvasY) ct.drawImage(spacebg, 0, 0); ct.fillStyle = "#444"; ct.fillRect(0,canvasY,canvasX,footerY) for(var i = 0; i < numColumns; i++) {for(var j = 0; j < numRows; j++) { grid.get(i,j).draw();} } ct.fillStyle = "white"; ct.font = "bold 16px sans-serif"; ct.fillText("Score:"+score+" High Score:"+highScore+" Spawn Rate:"+(spawnRate*spawnMultiplier),10, canvasY + 20); }function step() { for(var i = 0; i < numColumns; i++) { var col = grid.col(i); for(var j = numRows - 1; j >= 0; j--) { var cell = col[j]; // (j <= numRows - 2) -> balls on bottom row can't fall down, so don't check if they can if(j <= numRows -2 && cell.hasItem && !col[j+1].hasItem) { col[j+1].hasItem = true; col[j+1].colour = cell.colour; cell.hasItem = false; cell.colour = null; } if(cell.exploding) { cell.explosionSize > 20 ? cell.exploding = false : cell.explosionSize += 3; } } if(!col[0].hasItem) { col[0] = new Cell(i,0); } else { if(Math.random() < (spawnRate * spawnMultiplier)) {gameOver();} } } draw(grid); } function gameOver() { alert("Game Over!"); if(score > highScore) {highScore = score;} init();}function doClick(e) { if (e.pageX != undefined && e.pageY != undefined) {x = e.pageX;y = e.pageY; } else {x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } x -= cs.offsetLeft; y -= cs.offsetTop; gridX = Math.floor(x / boxSize); gridY = Math.floor(y / boxSize); select(grid.get(gridX,gridY));}function select(cell) { //if(!cell.hasItem) {return;}//debugger; switch(selected.length) {case 0 : if(nuke(cell)) { return;} else {if(!cell.hasItem){break;} cell.selected = true; selected.push(cell);}break;case 1 :if(cell == selected[0]) {cell.selected=false;selected=[];return;}cell.selected = true;selected.push(cell);swap();break; }}function nuke(cell) { nukeColour = cell.colour; cell.nuked = true; nuked = []; nuked.push(cell); nukeNeighbours(cell,nukeColour); var result; if(nuked.length >= minComboSize) {score += Math.floor(Math.pow(comboBonus,nuked.length) * 10);spawnMultiplier = 1 + (score / 700);for(var i = 0; i < nuked.length; i++) { nuked[i].nuked = false; nuked[i].hasItem = false; nuked[i].exploding = true; nuked[i].explosionSize = 0 - (i * 6);}result = true; } else {for(var i = 0; i < nuked.length; i++) { nuked[i].nuked = false;}cell.selected = true;result = false; } nuked = []; return result;}function nukeNeighbours(cell,nukeColour) { var x = cell.x; var y = cell.y; var n; if(n = grid.get(x-1,y)) {nukeChild(n,nukeColour);} if(n = grid.get(x+1,y)) {nukeChild(n,nukeColour);} if(n = grid.get(x,y-1)) {nukeChild(n,nukeColour);} if(n = grid.get(x,y+1)) {nukeChild(n,nukeColour);}}function nukeChild(cell,nukeColour) { if(!cell || !cell.hasItem || cell.nuked || cell.colour != nukeColour) {return;} cell.nuked = true; nuked.push(cell); nukeNeighbours(cell,nukeColour);}function swap() {if(selected[0].hasItem){if(selected[1].hasItem){var temp = selected[0].colour;selected[0].colour = selected[1].colour;selected[1].colour = temp;} else{selected[1].hasItem=true;selected[0].hasItem=false;selected[1].colour = selected[0].colour;selected[0].colour=null;}} selected[0].selected = false; selected[1].selected = false; selected = [];}window.onload=init;</script></body></html>游戏的背景图片
- html5游戏
- html5 游戏
- HTML5 游戏开发---骰子游戏
- html5游戏闲谈
- JS+HTML5 游戏模板
- 使用HTML5制作游戏
- html5 游戏背景切换
- HTML5游戏多声道问题
- HTML5 canvas五子棋游戏
- html5 骰子游戏
- HTML5游戏开发实战
- HTML5游戏开发
- html5 游戏学习
- html5开发游戏总结
- 游戏引擎cocos2d-html5
- HTML5躲避小行星游戏
- html5进行游戏开发
- html5 游戏研究 参考
- 设计模式之(责任链模式)
- jQuery图片播放器 1.3
- Haypi创始人:移动游戏赚钱秘笈
- 批处理
- 关于功能自动化测试的一些想法(持续更新ing)
- html5游戏
- php wordpress 小工具制作解剖
- 一个网站下载程序遇到的问题
- StructLayout特性
- 以“用户体验”为核心的app推广方式
- php魔术方法之_call()
- JavaEE的成长路线应该怎样?
- android自定义对话框
- Linux挂载目录或文件无法操作