<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<canvas id=dt width="560" height="560"></canvas>
<script>
level1=[ 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0], 
 [0,0,0,0,1,1,1,3,0,3,2,1,0,0,0,0], 
 [0,0,0,0,1,2,0,3,4,1,1,1,0,0,0,0], 
 [0,0,0,0,1,1,1,1,3,1,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]; 
 
dt=document.getElementById('dt')
dt.width="560";
dt.height="560";
w=32,h=32;
ctx = dt.getContext('2d')
var curMan;
var curarry= [];
curarry=level1
//定义小人位置
function point(x,y) 

    this.x=x; 
    this.y=y; 
}
var manPosition = new point(5,5);//初始化小人位置
//定义图片
block=new Image()
block.src="data:image/block.gif"
wall=new Image()
wall.src="data:image/wall.png" 
ball=new Image()
ball.src="data:image/ball.png" 
box=new Image()
box.src="data:image/box.png" 
up=new Image()
up.src="data:image/up.png" 
left=new Image()
left.src="data:image/left.png"
right=new Image()
right.src="data:image/right.png"
down=new Image()
down.src="data:image/down.png"
function init()
{
 curMan=down;
 initMap();
 initMap(curarry); 
}
//画地图
function initMap() { 
 for (m=0;m<level1.length;m++) 
    { 
        for (n=0;n<16;n++) 
        {  pic = block;
        ctx.drawImage(pic,w*m-(pic.width-w)/2,h*n-(pic.height-h),pic.width,pic.height);
          switch (level1[m][n]) 
            { 
            case 1:
                pic = wall; 
                break; 
            case 2:
                pic = ball; 
                break; 
            case 3:
                pic = box; 
                break; 
            case 4:
                pic = curMan; 
                manPosition.x=m 
                manPosition.y=n;
                break; 
            } 
            ctx.drawImage(pic,w*m-(pic.width-w)/2,h*n-(pic.height-h),pic.width,pic.height); 
        } 
    }
}
//绑定键盘:上下左右+AWDS
document.onkeydown=function(ev) 

    var p1;
    var p2;
 var keyCode = ev.keyCode;
    switch(keyCode) 
    { 
    case 37: 
      curMan=left; 
      p1=new point(manPosition.x-1,manPosition.y); 
      p2=new point(manPosition.x-2,manPosition.y);
       break; 
     case 65: 
      curMan=left; 
      p1=new point(manPosition.x-1,manPosition.y); 
      p2=new point(manPosition.x-2,manPosition.y);
       break; 
     case 38: 
       curMan=up;  
       p1=new point(manPosition.x,manPosition.y-1); 
       p2=new point(manPosition.x,manPosition.y-2);
       break; 
     case 87: 
       curMan=up;  
       p1=new point(manPosition.x,manPosition.y-1); 
       p2=new point(manPosition.x,manPosition.y-2);
       break; 
     case 39: 
       curMan=right;  
       p1=new point(manPosition.x+1,manPosition.y); 
       p2=new point(manPosition.x+2,manPosition.y);
        break; 
     case 68: 
       curMan=right;  
       p1=new point(manPosition.x+1,manPosition.y); 
       p2=new point(manPosition.x+2,manPosition.y);
        break; 
     case 40: 
       curMan=down;  
       p1=new point(manPosition.x,manPosition.y+1); 
       p2=new point(manPosition.x,manPosition.y+2);
       break; 
     case 83: 
       curMan=down;  
       p1=new point(manPosition.x,manPosition.y+1); 
       p2=new point(manPosition.x,manPosition.y+2);
       break;    
    }
   
    if(curarry[p1.x][p1.y]==1)return;//如果p1位置是墙,则不能移动
    if(curarry[p1.x][p1.y]==3)//如果p1位置是箱子,则需要考虑p2位置
    {
     if(curarry[p2.x][p2.y]==1 || curarry[p2.x][p2.y]==3)return;//如果p2位置是箱子或墙,则不能移动
     else{
      curarry[p1.x][p1.y]=4; 
            curarry[p2.x][p2.y]=3;
            if(curarry[manPosition.x][manPosition.y]==2)  //如果小人所处的位置是球
                curarry[manPosition.x][manPosition.y]=2;  //则把小人所处的位置显示为球
                else 
                curarry[manPosition.x][manPosition.y]=0;  //否则则把小人所处的位置显示为草地
                initMap(); 
                initMap(curarry);
     }
    }
    else
    {
     curarry[p1.x][p1.y]=4; //否则p1显示为小人
      if(curarry[manPosition.x][manPosition.y]==2) 
     curarry[manPosition.x][manPosition.y]=2; 
      else 
     curarry[manPosition.x][manPosition.y]=0; 
      initMap(); 
      initMap(curarry); 
    }
}
init()
</script>
</body>
</html>
 

作者:kerwin-chyl

文章链接:https:////www.cnblogs.com/kerwin-chyl

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

JS推箱子游戏的更多相关文章

  1. 用HTML5+原生js实现的推箱子游戏

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. three.js 制作一个三维的推箱子游戏

    今天郭先生发现大家更喜欢看我发的three.js小作品,今天我就发一个3d版本推箱子的游戏,其实webGL有很多框架,three.js并不合适做游戏引擎,但是可以尝试一些小游戏.在线案例请点击博客原文 ...

  3. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  4. JavaScript 推箱子游戏

    推箱子游戏的 逻辑非常简单,但是如果不动手的话,还是不太清楚.我在这里讲一下自己的思路. 制作推箱子,首先要有自己的设计素材.如下我也是网上找的素材 第二步,理清游戏的规则. 游戏规则: 1.小人将箱 ...

  5. C# 推箱子游戏&对战游戏

    推箱子游戏提纲,只有向右向上的操作,向左向下同理,后期需完善. namespace 推箱子 { class Program { static void Main(string[] args) { // ...

  6. 【CCpp程序设计2017】推箱子游戏

    我的还……支持撤销!用链表实现! 题目:推箱子小游戏(基于console) 功能要求: 将p09迷宫游戏改造为“推箱子”游戏: 在地图中增加箱子.箱子目标位置等图形: 当玩家将所有箱子归位,则显示玩家 ...

  7. 用C写一个简单的推箱子游戏(二)

    下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...

  8. 用C写一个简单的推箱子游戏(一)

    我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...

  9. C语言实现推箱子游戏完整代码

    C语言实现推箱子游戏完整代码 前言 自己做的,可能有些代码不够工整,或者有些小问题,但游戏的基本操作是可以实现的 代码效果 代码一共分为8个部分,4个控制上下左右移动,2个判断输赢,1个统计归为的个数 ...

随机推荐

  1. Scrapy的基本使用

    爬取:http://quotes.toscrape.com 单页面 # -*- coding: utf-8 -*- import scrapy class QuoteSpider(scrapy.Spi ...

  2. 分布式唯一ID的生成方案

    分布式ID的特性 全局唯一 不能出现重复的ID,这是最基本的要求. 递增 有利于关系数据库索引性能. 高可用 既然是服务于分布式系统,为多个服务提供ID服务,访问压力一定很大,所以需要保证高可用. 信 ...

  3. [ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法

    本文主要讲解使用多线程模块QThread解决PyQt界面程序唉执行耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题.用户使用工具过程中出现这些问题时会误以为程序出错,从而把程序关闭.这样 ...

  4. Halo-个人独立博客系统

    项目地址:https://github.com/halo-dev/halo 安装指导:https://halo.run/guide/   简介: Halo 是一款现代化的个人独立博客系统,给习惯写博客 ...

  5. influxdb+Grafana+jmeter监控搭建

    安装InfluxDB InfluxDB的简介 InfluxDB 是用Go语言编写的一个开源分布式时序.事件和指标数据库,无需外部依赖. 类似的数据库有Elasticsearch.Graphite等.. ...

  6. TCP/IP、TCP、UDP、Socket知识汇总

    带你了解TCP/IP,UDP,Socket之间关系 https://blog.csdn.net/chaoshenzhaoxichao/article/details/79785318 主要知识点: T ...

  7. Django orm常用字段和字段参数

    1.Object Relational Mapping(ORM) 1.1ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...

  8. go--->beego框架安装

    beego 安装 1.新建gopath 工程目录 2.在新建的工程目录中执行go get github.com/astaxie/beego 命令 3.再执行go get github.com/beeg ...

  9. 当vps服务器被墙,如果用xshell连接

    当然你的被墙了,肯定是访问不了,你得去找一个新的可用的节点去访问,在xshell里面设置代理就能连接上.上图. 然后是两个不同的结点 鼠标放在小火箭上面就能显示

  10. Git详解之特殊配置与钩子应用

    前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...