`
357029540
  • 浏览: 735927 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

HTML5一个小迷宫游戏

阅读更多
     通过《HTML5游戏开发》摘抄了一个小迷宫游戏,感觉还不错,可以画画,写字,把摘抄的代码放上来分享下,喜欢的同学可以拿来玩玩!

<html>
<head>
<title>创建运行迷宫</title>
<script type="text/javascript">
//用于清除画布
var cwidth = 900;
var cheight = 350;
var ctx;//画布上下文
var everything = [];//用于保存所有的对象
var curwall;//对应当前墙
var wallwidth = 5;//固定墙宽
var wallstyle = "rgb(200,0,200)";
var walls = [];//保存所有墙
var inmotion = false;//指标,指示正在通过拖动鼠标构建墙
var unit = 10;//token移动的单位

function Token(sx,sy,rad,stylestring,n){
this.sx = sx;
this.sy = sy;
this.rad = rad;
this.draw = drawtoken;
this.n = n;
this.angle = (2*Math.PI)/n;
this.moveit = movetoken;
this.fillstyle = stylestring;
}

function drawtoken(){
ctx.fillstyle = this.fillstyle;
var i;
var rad = this.rad;
ctx.beginPath();
ctx.moveTo(this.sx+rad*Math.cos((i-.5)*this.angle),this.sy+rad*Math.sin((i-.5)*this.angle));//移动到多边形的第一个顶点
for(i = 1;i < this.n;i++){
ctx.lineTo(this.sx+rad*Math.cos((i-.5)*this.angle),this.sy+rad*Math.sin((i-.5)*this.angle));//指定连线到下一个点,用于绘制一条边
}
ctx.fill();//绘制token
}

function movetoken(dx,dy){
this.sx += dx;
this.sy += dy;
var i;
var wall;
for(i = 0;i < walls.length;i++){
wall = walls[i];
//检查是否相交,如果这个token新位置与特定的墙相交
if(intersect(wall.sx,wall.sy,wall.fx,wall.fy,this.sx,this.sy,this.rad)){
this.sx -= dx;//不做移动
this.sy -= dy;
break;
}
}
}

function Wall(sx,sy,fx,fy,width,stylestring){
this.sx = sx;
this.sy = sy;
this.fx = fx;
this.fy = fy;
this.width = width;
this.draw = drawAline;
this.strokestyle = stylestring;
}

function drawAline(){
ctx.lineWidth = this.width;//设置线宽
ctx.strokeStyle = this.strokestyle;
ctx.beginPath();
ctx.moveTo(this.sx,this.sy);//设置起始点
ctx.lineTo(this.fx,this.fy);//设置终点
ctx.stroke();
}

var mypent = new Token(100,100,20,"rgb(0,0,250)",5);
everything.push(mypent);

function init(){
ctx = document.getElementById("canvas").getContext("2d");
var canvas1 = document.getElementById("canvas");
canvas1.addEventListener("mousedown",startwall,false);
canvas1.addEventListener("mousemove",strecthwall,false);
canvas1.addEventListener("mouseup",finish,false);
window.addEventListener("keydown",getkeyAndMove,false);
drawall();
}

function startwall(ev){
var mx;
var my;
//获取鼠标位置
if(ev.layerX || ev.layerX == 0){
mx = ev.layerX;
my = ev.layerY;
}else if(ev.offsetX || ev.offsetX == 0){
mx = ev.offsetX;
my = ev.offsexY;
}
curwall = new Wall(mx,my,mx+1,my+1,wallwidth,wallstyle);//创建新墙
inmotion = true;
everything.push(curwall);
drawall();
}

function strecthwall(ev){
if(inmotion){
var mx;
var my;
if(ev.layerX || ev.layerX == 0){
mx = ev.layerX;
my = ev.layerY;
}else if(ev.offsetX || ev.offsetX == 0){
mx = ev.offsetX;
my = ev.offsetY;
}
curwall.fx = mx;
curwall.fy = my;
drawall();
}
}

function finish(ev){
inmotion = false;
walls.push(curwall);
}

function drawall(){
ctx.clearRect(0,0,cwidth,cheight);//擦除画布
var i ;
for(i = 0;i < everything.length;i++){
everything[i].draw();//绘制所以对象
}
}

function getkeyAndMove(event){
var keyCode;
if(event == null){
keyCode = window.event.keyCode;
window.event.preventDefault;//停止默认动作
}else{
keyCode = event.keyCode;
event.preventDefault;//停止默认动作
}
switch(keyCode){
case 37: //左箭头
mypent.moveit(-unit,0); //水平左移
break;
case 38: //上箭头
mypent.moveit(0,-unit); //向上移动
break;
case 39: //右箭头
mypent.moveit(unit,0); //水平右移
break;
case 40: //下箭头
mypent.moveit(0,unit); //向下移动
break;
Default:
window.removeEventListener("keydown",getkeyAndMove,false);//停止监听按键
}
drawall();
}

function intersect(sx,sy,fx,fy,cx,cy,rad){
var dx;
var dy;
var t;
var rt;
dx = fx - sx;
dy = fy - sy;
//取从各点到(cx,cy)距离的平方公式,取导数,解为0
t = 0.0 - ((sx - cx)*dx+(sy-cy)*dy)/((dx * dx)+(dy * dy));
if(t < 0.0){
t = 0.0;
}else if(t > 1.0){
t = 1.0;
}
dx = (sx+t*(fx-sx))-cx;//计算此t值时的差
dy = (sy+t*(fy-sy))-cy;
rt = (dx*dx)+(dy*dy);//计算距离
if(rt < (rad*rad)){
return true;
}else{
return false;
}
}

function savewalls(){
var w = [];
var allw = [];
var sw ;//保存最终的字符串
var onewall ;//保存中间字符串
var i ;
var lsname = document.sf.slname.value;//取玩家指定的名称,用于本地保存
for(i = 0;i <walls.length;i++){
w.push(walls[i].sx);
w.push(walls[i].sy);
w.push(walls[i].fx);
w.push(walls[i].fy);
onewall = w.join("+");
allw.push(onewall);
w = [];
}
sw = allw.join(";");
try{
localStorage.setItem(lsname,sw);
}catch(e){
alter("data not saved,error given "+e);
}
return false;//返回false避免刷新
}

function getwalls(){
var swalls;
var sw;
var i;
var sx;
var sy;
var fx;
var fy;
var curwall;
var lsname = document.gf.glname.value;//抽取玩家指定存储的名字,以备获取
swalls = localStorage.getItem(lsname);
if(swalls != null){
wallstgs = swalls.split(";");
for(i = 0;i < wallstgs.length;i++){
sw = wallstgs[i].split("+");
sx = Number(sw[0]);
sy = Number(sw[1]);
fx = Number(sw[2]);
fy = Number(sw[3]);
curwall = new Wall(sx,sy,fx,fy,wallwidth,wallstyle);//使用提取值创建新墙
walls.push(curwall);
everything.push(curwall);
}
drawall();
}else{
alert("no data retrieved");
}
window.addEventListener("keydown",getkeyAndMove,false);
return false;
}
</script>
</head>

<body onLoad="init();">
<canvas id="canvas" width="900" height="400">
你的浏览器版本不支持html5的canvas标签,请升级到最新版本或者使用支持html5的浏览器
</canvas>
<br />
按下鼠标按钮,拖动和释放来绘制墙,用方向键来进行换行操作<br />
按其他键来保存迷宫<br />
<form name="sf" onSubmit="return savewalls()">
输入名字后,在保存迷宫按钮上点击保存迷宫<br />
名字:<input name="slname" value="maze_name" type="text" />
<input type="submit" value="保存迷宫" />
</form>
<form name="gf" onSubmit="return getwalls()">
通过获取迷宫按钮上获取以前保存的迷宫<br />
名字:<input name="glname" value="maze_name" type="text" />
<input type="submit" value="获取迷宫" />
</form>
</body>
</html>
分享到:
评论

相关推荐

    html5走迷宫游戏

    《HTML5迷宫游戏开发详解》 HTML5作为现代网页开发的重要技术,其强大的功能和丰富的API使得开发者能够创建出各种交互性强、视觉效果丰富的网页应用。本篇将深入探讨一款基于HTML5开发的迷宫游戏,让我们一起揭秘这...

    HTML5 canvas小球走迷宫游戏代码.zip

    这个"HTML5 canvas小球走迷宫游戏代码.zip"就是一个利用Canvas API实现的小游戏示例,旨在展示如何在网页上构建一个简单的迷宫游戏。 游戏的核心是通过键盘控制一个小球在迷宫中寻找出路。玩家可以使用键盘上的左、...

    html5迷宫网页游戏代码

    在这个"html5迷宫网页游戏代码"项目中,开发者利用HTML5的Canvas API构建了一个趣味的在线迷宫游戏。Canvas是一个允许开发者在网页上进行动态图形绘制的元素,通过JavaScript进行控制,可以实现各种复杂的动画和游戏...

    html5迷宫网页游戏代码.zip

    本项目"html5迷宫网页游戏代码.zip"是一个基于HTML5技术构建的迷宫游戏,提供了丰富的用户体验和互动性。 首先,我们来看`index.html`文件。这是网页的主文件,包含了整个页面的结构和内容。在HTML5中,`&lt;header&gt;`...

    html5 canvas珠子走出迷宫小游戏源码

    HTML5 Canvas珠子走出迷宫小游戏是一款利用HTML5的Canvas元素和JavaScript编写的互动娱乐应用。Canvas是HTML5的一个重要特性,它允许开发者在网页上动态绘制2D图形,为创建丰富的、交互式的Web应用程序提供了可能。...

    html5 canvas珠子走出迷宫小游戏源码.zip

    "html5 canvas珠子走出迷宫小游戏源码.zip"是一个利用HTML5 Canvas和JavaScript编写的互动游戏,玩家通过操作键盘上的左键、右键和上箭头键来控制一个小珠子在迷宫中寻找出路。这个游戏展示了Canvas的强大功能,以及...

    html5 canvas走出迷宫游戏源码下载

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,无需依赖任何插件。在这个“html5 canvas走出迷宫游戏”中,我们可以学习到Canvas技术在游戏开发中的应用,以及如何利用它来创建...

    微信小游戏~在线走迷宫-项目源码

    微信小游戏是一种基于微信平台的轻量级游戏应用,它利用HTML5、JavaScript等技术开发,让用户无需下载安装即可在微信内玩。这个“在线走迷宫”项目源码,就是一个典型的微信小游戏实例,旨在提供一个怀旧风格的探索...

    HTML5珠子走出迷宫小游戏代码

    总结来说,"HTML5珠子走出迷宫小游戏代码"涵盖了HTML5 Canvas的基本使用、事件监听、数据结构、动画处理等多个方面的知识点,是学习和实践Web游戏开发的一个很好的案例。通过研究这个游戏的源代码,开发者不仅可以...

    珠子走出迷宫HTML5小游戏.zip

    总的来说,《珠子走出迷宫HTML5小游戏》是一个集HTML5技术、JavaScript编程和游戏设计于一体的项目。它不仅展示了HTML5和JavaScript的强大能力,也为玩家提供了一种寓教于乐的方式,通过实际操作学习到基础的编程...

    three.js迷宫小游戏.zip

    通过以上步骤,我们可以构建一个基本的three.js迷宫游戏。随着技术的深入,可以加入更多的元素,如音效、粒子效果、动态阴影等,提升游戏体验。学习和掌握three.js,不仅能够开发出有趣的迷宫游戏,还能为其他类型的...

    Spring Boot入门级H5页面迷宫小游戏带sql.rar

    本项目中的H5迷宫游戏,利用HTML5的Canvas绘制图形,JavaScript实现游戏逻辑,给用户带来互动体验。Canvas元素是H5中的绘图工具,通过JavaScript可以动态绘制图形,实现游戏界面。游戏逻辑则通过JavaScript编写,...

    jQuery html5迷宫游戏源码下载

    总之,“jQuery html5迷宫游戏”源码是一个宝贵的教育资源,为开发者提供了实践HTML5和jQuery技能的机会,同时也展示了如何利用这些技术构建引人入胜的Web游戏。无论是初学者还是经验丰富的开发者,都能从中受益匪浅...

    HTML5倾斜迷宫小游戏源码.zip

    HTML5倾斜迷宫小游戏源码.zip是一个包含网页游戏开发资源的压缩包,主要涉及HTML5、CSS和jQuery技术。这个游戏可能是一个基于浏览器的迷宫挑战,玩家需要通过控制角色在倾斜的环境中找到出路。让我们详细了解一下这...

    迷宫小游戏客户端联机版

    总结起来,《迷宫小游戏客户端联机版》涵盖了JavaScript开发、游戏逻辑设计、网络通信、多玩家同步等多个方面,是一个综合性的项目,对于提升JavaScript开发者在游戏开发领域的技能具有很高的实践价值。通过学习和...

    jQuery 2D迷宫游戏.zip

    《jQuery 2D迷宫游戏》是一个基于JavaScript库jQuery实现的二维迷宫游戏。这款小游戏设计巧妙,允许玩家通过水平和垂直滚动来探索迷宫,寻找出路。它提供了上、下、左、右四个方向的移动按钮,使玩家能够轻松操控...

    HTML5 canvas激流勇进小游戏代码,迷宫逃生小游戏

    标签"js 游戏"表明这两个小游戏是基于JavaScript开发的。JavaScript是Web开发中的重要脚本语言,它允许在客户端进行交互式编程,使得网页具备更多的动态特性。在游戏开发中,JavaScript处理游戏逻辑、用户输入、计时...

    HTML5的珠子走出迷宫小游戏代码.zip

    HTML5珠子走出迷宫小游戏是一款利用JavaScript和HTML5 Canvas技术开发的互动娱乐项目,它为用户提供了趣味横生的游戏体验。在这个游戏中,玩家需要控制一颗珠子在迷宫中移动,通过键盘上的左键、右键和上箭头键来...

Global site tag (gtag.js) - Google Analytics