无束缚版贪吃蛇(就问你爽不爽)

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

canvas {

box-shadow: 0 0 10px greenyellow;

}

</style>

</head>

<body>

<canvas id="canvas" width="600" height="600"></canvas>

<script type="text/javascript">

var oC = document.getElementById("canvas");

var ctx = oC.getContext("2d");

// 蛇的对象

var snake = {

x: -40,

y: 0,

w: 40,

h: 40,

color: "deeppink",

// speed:

top: false,

bottom: false,

left: false,

right: true,

bodys:[],

bool:true

}

snake.draw = function() {

ctx.fillStyle = snake.color;

ctx.fillRect(this.x, this.y, this.w, this.h);

}

snake.move = function() {

if(this.left) {

this.x -= this.w;

}

if(this.right) {

this.x += this.w;

}

if(this.top) {

this.y -= this.h;

}

if(this.bottom) {

this.y += this.h;

}

snake.draw();

snake.drawBody();

snake.savePosition();

}

snake.savePosition = function(){

this.bodys.push({

x:this.x,

y:this.y,

w:this.w,

h:this.h

});

if (this.bodys.length > 3 && this.bool) {

// shift()  删除数组第一个元素

this.bodys.shift();

}else{

this.bool = true;

}

}

snake.drawBody = function(){

for (var i = 0; i < this.bodys.length; i++) {

ctx.beginPath();

ctx.fillStyle = "deepskyblue";

ctx.fillRect(this.bodys[i].x,this.bodys[i].y,this.bodys[i].w,this.bodys[i].h);

ctx.fill();

}

}

// food

function rand(min,max){

return Math.floor(Math.random() * (max - min +1) + min);

}

var food = {

x:0,

y:0,

w:40,

h:40,

color:"orange"

}

food.draw = function(){

ctx.beginPath();

ctx.fillStyle = this.color;

ctx.fillRect(this.x,this.y,this.w,this.h);

}

food.setPosition = function(){

while (true){

var x = rand(0,(oC.width - food.w) / food.w) * food.w;

var y = rand(0,(oC.width - food.h) / food.h) * food.h;

// 遍历身体上的点,如果当前随机生成的点与蛇重合就跳出for循环,则当前的i不等于snake.bodys.length,进行下一次while循环

for (var i = 0; i < snake.bodys.length; i++) {

if (x == snake.bodys[i].x && y == snake.bodys[i].y) {

break;

}

}

// 进入这个if的话,说明之前的遍历没有找到重合的点,跳出while循环

if (i == snake.bodys.length) {

// 给food赋值

this.x = x;

this.y = y;

break;

}

}

}

food.setPosition();

food.draw();

function checkP(obj1,obj2){

if (Math.abs((obj1.x + obj1.w * 0.5) - (obj2.x + obj2.w * 0.5)) < Math.abs((obj1.w+obj2.w)*0.5) && Math.abs((obj1.y + obj1.h * 0.5) - (obj2.y + obj2.h * 0.5)) < Math.abs((obj1.h+obj2.h)*0.5)) {

return true;

}else{

return false;

}

}

setInterval(function() {

ctx.clearRect(0, 0, oC.width, oC.height);

food.draw();

snake.move();

if (checkP(food,snake)) {

food.setPosition();

food.draw();

snake.bool = false;

}

}, 200);

document.onkeydown = function(ev) {

var ev = ev || window.event;

switch(ev.keyCode) {

case 37:

if(!snake.right) {

snake.left = true;

snake.right = false;

snake.top = false;

snake.bottom = false;

}

break;

case 39:

if(!snake.left) {

snake.left = false;

snake.right = true;

snake.top = false;

snake.bottom = false;

}

break;

case 38:

if(!snake.bottom) {

snake.left = false;

snake.right = false;

snake.top = true;

snake.bottom = false;

}

break;

case 40:

if(!snake.top) {

snake.left = false;

snake.right = false;

snake.top = false;

snake.bottom = true;

}

break;

}

}

</script>

</body>

</html>

时间: 2024-10-22 07:05:15

无束缚版贪吃蛇(就问你爽不爽)的相关文章

Qt版贪吃蛇游戏

Qt版贪吃蛇游戏 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 最近在学习Qt,用了一个多月的时间掌握了Qt中最基本的知识,也完成了<Qt版音乐播放器>.<Qt版贪吃蛇游戏>.<Qt版双人俄罗斯方块>以及<Qt版科学计算器>等,之前在VC下写过这些程序,所以在Qt下只是改变了显示等语句,我写过<C++版贪吃蛇游戏>.<VC版贪吃蛇游戏>,当时将与显示等无关的东西封装起来,在Qt下直接用,只

Java版贪吃蛇小游戏的实现

使用的IDE eclipse JDK版本 1.6 辅助类 Coordinate.java package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other

OC版贪吃蛇

昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些,有想看js版的可以看我上一篇随笔 程序中没用到任何素材,效果图如下: github源码地址:https://github.com/masterChunlinHan/snake_OC 下面开始,跟js版一样,为了方便学习,所有代码都写在一个controller中,所以头文件中什么也不用写 #impor

Java版贪吃蛇(比较完善的版本)

很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有Bug了,因为全被我修改没了.哈哈. 下面是项目各包及类的层次关系: 游戏的主要运行界面截图如下: 下面是部分代码,详细源码见此链接:http://pan.baidu.com/s/1bnubnzh //Snake类: package com.huowolf.entities; import java.awt.Color; import java.awt.Gr

Javascript基础示例:用JS写简易版贪吃蛇(面向对象)

废话不多说,代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>贪吃蛇</title> 6 <script> 7 var map; //地图类对象 8 var snake; //蛇类对象 9 var food; //食物类对象 10 var timer; //定时器对象 11 var sum=0; //分

c语言版贪吃蛇小游戏

编译环境:windows 7 64位 编译工具:codeblocks 13.12 备注:未使用graphics.h 声明:个人原创,未经允许,禁止转载!!! 数据结构:双向链表 1.程序未使用graphis.h中的 函数,所以采用先清屏,再打印的方式显示图形,大约每秒刷新一次: 2.除蛇头元素外,其它元素的状态(行进方向)均重复前一元素: 3.蛇的图形元素为笑脸,可在源码中更改symbol参数选用不同元素. 游戏截图1                                      

java版贪吃蛇

界面:大红色方块----蛇头,绿色----身体,粉色----食物 package com.snake; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import j

java 简单贪吃蛇

说了是简单版贪吃蛇... 就3个类+方向枚举变量(本来想写贪吃蛇斜着走的..想象我的蛇是矩形 斜着难看就没写) 上下左右键控制移动 空格暂停 SnackClient类 package com.xynu.snaker; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListene

Devc++贪吃蛇

使用Devc++写的一个简单版贪吃蛇程序,不过,在未配置之前,是不包含图形库的,所以需要自己配置新的环境 -------------------------------------------------------------------分割线---------------------------------------------------------------------------------- #include<stdio.h>#include<graphics.h>