欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

HTML5怎么實(shí)現(xiàn)貪吃蛇游戲-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“HTML5怎么實(shí)現(xiàn)貪吃蛇游戲”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“HTML5怎么實(shí)現(xiàn)貪吃蛇游戲”吧!

專注于為中小企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)三河免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

HTML5怎么實(shí)現(xiàn)貪吃蛇游戲 
游戲操作說明

通過方向鍵控制貪吃蛇上下左右移動。貪吃蛇吃到食物之后會變長一個(gè)長度。

游戲具體實(shí)現(xiàn)

游戲難點(diǎn)是怎么模擬貪吃蛇的移動。如果只是一個(gè)方塊的話顯然很簡單。但是當(dāng)蛇的長度變長之后要怎么樣控制

每個(gè)方塊的移動呢?

如果觀察蛇的移動,可以發(fā)現(xiàn),從蛇的頭部到尾部,每個(gè)方塊在下一時(shí)刻的位置就是它的前一個(gè)方塊在當(dāng)前時(shí)刻

的位置。因此我們需要做的只是控制貪吃蛇的頭部的運(yùn)動。其他部分的位置都可以依次類推。

另外一個(gè)值得注意的問題是

貪吃蛇吃下食物之后,新增加的方塊應(yīng)該放在哪個(gè)位置。

答案就是在下一時(shí)刻,新增加的方塊應(yīng)該出現(xiàn)在當(dāng)前時(shí)刻的尾部位置。

因此,在吃下食物之后應(yīng)該在更新蛇的每個(gè)位置之前,增加一個(gè)方塊,并且將其位置設(shè)定在當(dāng)前時(shí)刻的尾部位置。

然后在當(dāng)前時(shí)刻更新出了新增方塊之外的所有方塊的位置

index.html
HTML5怎么實(shí)現(xiàn)貪吃蛇游戲 
snake.js



代碼如下:


var canvas;
var ctx;
var timer;
//measures
var x_cnt = 15;
var y_cnt = 15;
var unit = 48;
var box_x = 0;
var box_y = 0;
var box_width = 15 * unit;
var box_height = 15 * unit;
var bound_left = box_x;
var bound_right = box_x + box_width;
var bound_up = box_y;
var bound_down = box_y + box_height;
//images
var image_sprite;
//objects
var snake;
var food;
var food_x;
var food_y;
//functions
function Role(sx, sy, sw, sh, direction, status, speed, image, flag)
{
this.x = sx;
this.y = sy;
this.w = sw;
this.h = sh;
this.direction = direction;
this.status = status;
this.speed = speed;
this.image = image;
this.flag = flag;
}
function transfer(keyCode)
{
switch (keyCode)
{
case 37:
return 1;
case 38:
return 3;
case 39:
return 2;
case 40:
return 0;
}
}
function addFood()
{
//food_x=box_x+Math.floor(Math.random()*(box_width-unit));
//food_y=box_y+Math.floor(Math.random()*(box_height-unit));
food_x = unit * Math.floor(Math.random() * x_cnt);
food_y = unit * Math.floor(Math.random() * y_cnt);
food = new Role(food_x, food_y, unit, unit, 0, 0, 0, image_sprite, true);
}
function play(event)
{
var keyCode;
if (event == null)
{
keyCode = window.event.keyCode;
window.event.preventDefault();
}
else
{
keyCode = event.keyCode;
event.preventDefault();
}
var cur_direction = transfer(keyCode);
snake[0].direction = cur_direction;
}
function update()
{
//add a new part to the snake before move the snake
if (snake[0].x == food.x && snake[0].y == food.y)
{
var length = snake.length;
var tail_x = snake[length - 1].x;
var tail_y = snake[length - 1].y;
var tail = new Role(tail_x, tail_y, unit, unit, snake[length - 1].direction, 0, 0, image_sprite, true);
snake.push(tail);
addFood();
}
//modify attributes
//move the head
switch (snake[0].direction)
{
case 0: //down
snake[0].y += unit;
if (snake[0].y > bound_down - unit)
snake[0].y = bound_down - unit;
break;
case 1: //left
snake[0].x -= unit;
if (snake[0].x < bound_left)
snake[0].x = bound_left;
break;
case 2: //right
snake[0].x += unit;
if (snake[0].x > bound_right - unit)
snake[0].x = bound_right - unit;
break;
case 3: //up
snake[0].y -= unit;
if (snake[0].y < bound_up)
snake[0].y = bound_up;
break;
}
//move other part of the snake
for (var i = snake.length - 1; i >= 0; i--)
{
if (i > 0)
//snake[i].direction=snake[i-1].direction;
{
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
}
}
function drawScene()
{
ctx.clearRect(box_x, box_y, box_width, box_height);
ctx.strokeStyle = "rgb(0,0,0";
ctx.strokeRect(box_x, box_y, box_width, box_height);
//detection collisions
//draw images
for (var i = 0; i < snake.length; i++)
{
ctx.drawImage(image_sprite, snake[i].x, snake[i].y);
}
ctx.drawImage(image_sprite, food.x, food.y);
}
function init()
{
canvas = document.getElementById("scene");
ctx = canvas.getContext('2d');
//images
image_sprite = new Image();
image_sprite.src = "images/sprite.png";
image_sprite.onLoad = function ()
{}
//ojects
snake = new Array();
var head = new Role(0 * unit, 0 * unit, unit, unit, 5, 0, 1, image_sprite, true);
snake.push(head);
window.addEventListener('keydown', play, false);
addFood();
setInterval(update, 300); //note
setInterval(drawScene, 30);
}


到此,相信大家對“HTML5怎么實(shí)現(xiàn)貪吃蛇游戲”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享文章:HTML5怎么實(shí)現(xiàn)貪吃蛇游戲-創(chuàng)新互聯(lián)
文章路徑:http://aaarwkj.com/article34/dgoose.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、標(biāo)簽優(yōu)化營銷型網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司外貿(mào)建站、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
成熟性性生活免费视频| 国产精品一区二区婷婷| 一本色道久久亚洲综合精品蜜桃| 人妻一本久道久久综合鬼色| 天天免费日日夜夜夜夜| 黄色片黄色片美女黄色片亚洲黄色片 | 99热精品综合在线观看| 黑人巨大精品欧美一区免| 亚洲av天堂免费在线观看| 一区二区三区中文在线播放| 久久中文字幕人妻熟av| 国产国语网站在线观看| 日韩av高清不卡一区二区三区| 国产一区二区三区精品女同| 丝袜啪啪啪麻豆白虎内射| 国产在线麻豆在拍91精品| 精品中文人妻中文字幕| 亚洲精品不卡一区二区| 偷拍偷窥女厕一区二区视频| 国产欧美日韩亚洲综合在线| 日韩在线不卡免费视频一区| 亚洲成av在线免费不卡| 中文字幕在线日韩精品| 中文字幕色视频在线观看| 久久五十路六十路熟妇中出| 人妻乱人伦中文字幕在线| 欧美精品国产精品久久| 亚洲高清中文字幕专区| 97免费人妻在线视频| 日本不卡免费一区二区视频| 香蕉夜夜草草久久亚洲香蕉| 久久夜色噜噜噜av一区| 秋霞三级在线免费观看| 日本高清免费中文字幕| 久热在线这里只有精品| 成年人网站一级黄色免费| 五月天丁香婷婷狠狠狠| 欧美曰韩国内精品中文| 激情久久五月激情婷婷| 亚洲特级黄色做啪啪啪| 超碰在线免费视频97|