<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#map {
width: 800px;
height: 600px;
background-color: grey;
position: relative;
} </style>
</head>
<body>
<div id="map"></div>
<script src="common.js"></script>
<script>
(function Food(x, y, width, height, color) {
var elements = [];
Food.prototype.init = function (map) {
//调用这个函数是为了防止多次初始化带来多个食物的效果
remove();
var div = document.createElement("div");
map.appendChild(div);
div.style.backgroundColor = this.color;
div.style.width = this.width + "px";
div.style.height = this.height + "px";
div.style.position = "absolute";
this.x = parseInt(Math.random() * (map.offsetWidth / this.width)) * this.width;
this.y = parseInt(Math.random() * (map.offsetHeight / this.height)) * this.height;
div.style.left = this.x + "px";
div.style.top = this.y + "px";
elements.push(div);
} //删除div 函数 思路:利用之前elements数组存储的元素 找到它的父级元素 也就是map 再用map把elements中的小方块删掉
function remove() {
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
ele.parentNode.removeChild(ele);
elements.splice(i, 1);
}
} this.x = x;
this.y = y;
this.width = width || 20;
this.height = height || 20;
this.color = color || "green";
window.Food = Food;
}() );
(function Snake(width, height, direction) {
var elements = [];
this.width = width || 20;
this.height = height || 20;
this.body = [
{x: 3, y: 2, color: "red"},
{x: 2, y: 2, color: "orange"},
{x: 1, y: 2, color: "orange"},
];
//小蛇移动的方向
this.direction = direction || "right"; Snake.prototype.init = function (map) { remove();
for (var i = 0; i < this.body.length; i++) {
var div = document.createElement("div");
map.appendChild(div);
div.style.position = "absolute";
div.style.width = this.width + "px";
div.style.height = this.height + "px";
div.style.left = this.body[i].x * this.width + "px";
div.style.top = this.body[i].y * this.height + "px";
div.style.backgroundColor = this.body[i].color;
elements.push(div);
} function remove() {
var i = elements.length - 1;
for (; i >= 0; i--) {
var ele = elements[i];
ele.parentNode.removeChild(ele);
elements.splice(i, 1);
}
} }
Snake.prototype.move = function (map, food) {
var i = this.body.length - 1;
for (; i > 0; i--) {
this.body[i].x = this.body[i - 1].x;
this.body[i].y = this.body[i - 1].y;
}
var headX = this.body[0].x * this.width;
var headY = this.body[0].y * this.height;
if (headX == food.x && headY == food.y) { var last = this.body[this.body.length - 1]; this.body.push(
{
x: last.x,
y: last.y,
color: last.color
}
); food.init(map); } switch (this.direction) {
case "left":
this.body[0].x -= 1;
break;
case "right":
this.body[0].x += 1;
break;
case "top":
this.body[0].y -= 1;
break;
case "bottom":
this.body[0].y += 1;
break;
}
}
window.Snake = Snake;
}() );
(function () {
var that = null; function Game(map) {
this.food = new Food();
this.snake = new Snake();
this.map = map;
that = this;
Game.prototype.init = function (map) {
this.food.init(this.map);
this.snake.init(this.map);
this.bindkey();
var maxX = that.map.offsetWidth / that.snake.width;
var maxY = that.map.offsetHeight / that.snake.height;
var timeid = setInterval(function () {
if (that.snake.body[0].x >= maxX || that.snake.body[0].x >= maxX < 0) {
alert("结束了哦");
clearInterval(timeid);
}
if (that.snake.body[0].y >= maxY || that.snake.body[0].y < 0) {
alert("结束了哦");
clearInterval(timeid);
}
that.snake.move(that.map, that.food);
that.snake.init(that.map);
}, 150);
}
Game.prototype.bindkey = function () {
document.addEventListener("keydown", function (e) {
switch (e.keyCode) {
case 37:
if (that.snake.direction != "right") {
that.snake.direction = "left";
}
break;
case 38:
if (that.snake.direction != "bottom") {
that.snake.direction = "top";
} break;
case 39:
if (that.snake.direction != "left") {
that.snake.direction = "right";
}
break;
case 40:
if (that.snake.direction != "top") {
that.snake.direction = "bottom";
} break;
} }, false)
} } window.Game = Game;
}() );
var Gm = new Game(my$("map"));
Gm.init(my$("map")); </script>
</body>
</html>

用JS来实现的第一个简单游戏 :贪吃蛇的更多相关文章

  1. d3.js 制作简单的贪吃蛇

    d3.js是一个不错的可视化框架,同时对于操作dom也是十分方便的.今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇.话不多说先上图片. 1. js snaker类 class Sna ...

  2. C#简单实现贪吃蛇程序(LinQ + Entity)

    做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity) 最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类 ...

  3. TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇

    TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973 时间限制(普通 ...

  4. Java一个简单的贪吃蛇

    Java一个简单的贪吃蛇 虽然GUI已经要淘汰了,但是手动写写界面还是有助于理解语法的,像构造函数 ,函数调用,内部类,继承,接口.有助于半初学者强化理解. 直接上代码 游戏主体类: package ...

  5. GUI简单实战——贪吃蛇

    将前面学到的GUI基础知识完成实战,完成一个简单的贪吃蛇项目 项目功能 用键盘上下左右实现贪吃蛇的自动移动 贪吃蛇吃到食物后,长度加一,分数加一 贪吃蛇吃到自己的身体,则游戏结束 按空格键实现游戏的暂 ...

  6. 做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)

    最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类似的情况,白天一直想不通的问题,晚上做梦有时会想到更好的版本,于是 ...

  7. 使用JavaScript实现简单的小游戏-贪吃蛇

    最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...

  8. JavaScript实践-简单的贪吃蛇小游戏

    实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...

  9. js编写简单的贪吃蛇游戏

    css代码 *{ margin:; padding:; } td{ width: 4px; height: 4px; background: #ccc; border: 2px solid #ccc; ...

随机推荐

  1. 利用ArcGIS-Server瓦片制作离线地图包(*.tpk)_详细流程

    1.写在前面 本人是综合了好几个资料才最终制作成功,在这个过程中发现网上好多博客写的步骤不是很详细,因此就把自己的详细制作步骤全部分享出来,可以供需要的小伙伴参考. (1)本文档不讨论tpk文件的详细 ...

  2. JavaScripts中关于数字的精确计算方法

    问题描述: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) ,我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这 ...

  3. openresty + lua 1、openresty 连接 mysql,实现 crud

    最近开发一个项目,公司使用的是 openresty + lua,所以就研究了 openresty + lua.介绍的话,我就不多说了,网上太多了. 写这个博客主要是记录一下,在学习的过程中遇到的一些坑 ...

  4. kubernetes集群搭建(3):master节点安装

    1.master节点上执行: yum -y install kubernetes flannel etcd 2.修改etcd配置为: [root@k8s-master ~]# vi /etc/etcd ...

  5. LeetCode:149_Max Points on a line | 寻找一条直线上最多点的数量 | Hard

    题目:Max Points on a line Given n points on a 2D plane, find the maximum number of points that lie on ...

  6. UIAutomatorViewer增加xpath查看

    原来的UIAutomatorViewer是没有xpath查看路径的,下载如下jar包: https://pan.baidu.com/s/1jpr6m0OOce7CtnDE_lIJ9A 密码:cja0 ...

  7. VMware12 安装 Ubuntu18.04

    安装Ubuntu18.04虚拟机 Ubuntu获取地址: 官网:https://www.ubuntu.com/download/server 清华镜像站:https://mirrors.tuna.ts ...

  8. 理解数据库连接池和ThreadLocal实现的事务控制

    我发现 不少人 误解了这两者. csdn上也有人提出过这种疑问: http://bbs.csdn.net/topics/250061733 经过查阅资料和认真分析,我特说明一下这两者概念上的区别. 我 ...

  9. 213. Orchard学习 二 3、001.IOrchardHost 与Autofac

    继前篇,在Orchard Application_Start() -> HostInitialization() 里,调用 OrchardStarter.CreateHost创建IOrchard ...

  10. Linux编程 2 (遍历目录cd与查看文件和目录ls)

    一.   遍历目录 在 linux系统上,可以使用cd切换目录命令. 分二种路径,一是绝对文件路径,另一种是相对文件路径. 1.  绝对文件路径 在虚拟目录中采用文件路径,以虚拟目录根目录开始,相当于 ...