欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js實現(xiàn)貪吃蛇小游戲(加墻)

 更新時間:2020年07月31日 17:03:45   作者:二百五的春天  
這篇文章主要為大家詳細介紹了js實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js實現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.貪吃蛇的規(guī)則

作為一款經(jīng)典游戲,很多人玩他其實就是一種懷念。但是他不應該那么單一,應該有更多新的元素出現(xiàn)。然后我是個新手,希望我以后繼續(xù)學習的途中能夠再次回頭重寫一遍貪吃蛇。他的規(guī)則是;a.超出邊界會死  b.碰到自身會死  c.吃食物會變長。

值得注意的是:1.在函數(shù)里所調(diào)用的函數(shù)的順序很重要。2.<script src="mygame2.js"></script>必須在<canvas>的下面。

2.實現(xiàn)圖:

3.HTML的代碼:

<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <meta http-equiv="x-ua-compatible" content="ie=edge">
 <meta name="description" content="">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>貪吃蛇第二版</title>
 <link rel="stylesheet" href="mygame2.css" rel="external nofollow" type="text/css">
</head>
 
<body >
<div class="container">
 <div class="center">
  <h1>snake</h1>
  <canvas id="myCanvas"></canvas>
  <script src="mygame2.js"></script>
 </div>
</div>
</body>
</html>

4.CSS的代碼(mygame2.css):

*{
 padding: 0;
 margin: 0;
}
.container
{
 text-align:center;
}
.center
{
 margin-left:auto;
 margin-right:auto;
 width:70%;
}
#myCanvas
{
 border-style:solid;
 border-color:#A9A9A9;
 background-color: #E0FFFF;
}

5.js的代碼(mygame2.js)

/**
 * Created by Administrator on 2017/6/30.
 */
//畫布
var cvs=document.getElementById("myCanvas");
var cxt=cvs.getContext("2d");
cvs.height=600;
cvs.width=800;
 
var Snakesize=20;
var cvsCridx=cvs.width/Snakesize;//格子化
var cvsCridy=cvs.height/Snakesize;
var length=0;
var wall_length=0;
var Snakebady=[];
var dre =2;
var food = {};
var direFlag = 0;//程序存在的bug,按上左會刷新界面,用標記解決
var speed=0;
var wall=[];
//初始化
function init()
{
 Snakebady=[];
 length=0;
 dre =2;
 for(var i= 0;i<3;i++)
 {
  CreateSnakeNode(parseInt(cvsCridx/2)+i,parseInt(cvsCridy/2));
 }
 drawSnake();
 putfood();
}
//放蛇身
function CreateSnakeNode(x,y)
{
 Snakebady.push({x:x , y:y, color:length===0 ? "#000000" : "#778899" });
 length ++;
}
//繪制蛇身(連續(xù)的蛇點)
function drawSnake()
{
 cxt.clearRect(0, 0, cvs.width, cvs.height);
 for( i=0; i<Snakebady.length; i++)
 {
  drawRect(Snakebady[i]);
 }
 drawRect(food);
 wall_location();
}
//繪制單個蛇點
function drawRect(Snakenode)
{
 cxt.beginPath();
 Snakesize = 20;
 cxt.fillStyle = Snakenode.color;
 cxt.fillRect(Snakenode.x * Snakesize, Snakenode.y * Snakesize, Snakesize, Snakesize);//蛇的形狀為方形
 //cxt.arc(Snakenode.x * Snakesize,Snakenode.y * Snakesize,12,0,Math.PI*2,true);//蛇的形狀為圓形
 cxt.strokeStyle="#484848";
 cxt.lineWidth = 4;
 cxt.stroke();
 cxt.closePath();
 cxt.fill();
}
//繪制墻
function drawwall (x,y)
{
 wall.push({x:x, y:y, color:"#FFFF00"});
 wall_length++;
 cxt.beginPath();
 cxt.fillRect(Snakesize *x,Snakesize *y,Snakesize,Snakesize);
 cxt.fillStyle = wall.color;
 cxt.strokeStyle="#484848";
 cxt.lineWidth = 2;
 cxt.stroke();
 cxt.closePath();
 cxt.fill();
}
//墻的位置
function wall_location()
{
 var i,j;
 for( i= 2,j= 5;i<15;i++)
 {drawwall(i,j);}
 for( i=25,j=5;i<38;i++)
 {drawwall(i,j);}
 for( j= 6,i=14;j<15;j++)
 {drawwall(i,j);}
 for( j= 6,i=25;j<15;j++)
 {drawwall(i,j);}
 for( i= 9,j=17;j<26;j++)
 {drawwall(i,j);}
 for(i=29,j=17;j<26;j++)
 {drawwall(i,j);}
 for(i=10,j=25;i<29;i++)
 {drawwall(i,j);}
}
//放置食物,不超過畫布,不放在蛇身上,不能放在墻上
function putfood()
{
 var flog=1;
 while(1)
 {
  flog=1;
  var foodx = parseInt(Math.random()*cvsCridx);
  var foody = parseInt(Math.random()*cvsCridy);
  for(var i = 0; i < Snakebady.length; i ++)
  {if(Snakebady[i].x === foodx && Snakebady[i].y === foody) flog = 0;}
  for(var j=0; j<wall_length ; j++)
  {
   if(wall[j].x === foodx && wall[j].y === foody)
    flog = 0;
  }
  if(flog) break;
 }
 food = {x: foodx, y: foody, color: '#B00000'};
}
//先用alert讀出位置的ASCLL的值,然后再重新賦值進行定義
document.onkeydown = function(e){
 if(direFlag) return;
 e.preventDefault();//清除頁面的滑動帶來的上下鍵的操作
 if(e.keyCode===38|| e.keyCode===87) setDirection(1);//上
 if(e.keyCode===40|| e.keyCode===83) setDirection(-1);//下
 if(e.keyCode===37|| e.keyCode===65) setDirection(2);//左
 if(e.keyCode===39|| e.keyCode===68) setDirection(-2);//右
 if(e.keyCode ===32) speed=100;//****
}
//蛇的移動
function SnakeMove()
{
 var newSnakebady={x:Snakebady[0].x,y:Snakebady[0].y,color:Snakebady[0].color};//改變后蛇頭的坐標,不能直接賦值
 if(dre === 1)newSnakebady.y -=1;//蛇頭根據(jù)鍵盤事件上下左右移動
 if(dre === -1) newSnakebady.y +=1;
 if(dre === 2) newSnakebady.x -=1;
 if(dre === -2) newSnakebady.x +=1;
 for(var i=Snakebady.length-1;i>0;i--)//蛇身的更替,用后一個位置等于前一個位置的坐標
 {
  Snakebady[i].x=Snakebady[i-1].x;
  Snakebady[i].y=Snakebady[i-1].y;
  if(Snakebady[i].x===newSnakebady.x&&Snakebady[i].y===newSnakebady.y)//判斷撞自己
   return goend();
 }
 Snakebady[0]=newSnakebady;
 direFlag = 0;
 boundary(Snakebady[0]);
 isgetfood(Snakebady[0]);
 strike_wall();
}
//得到食物后的蛇身在最后面加上一個蛇點
function isgetfood(nood)
{
 if(nood.x===food.x&&nood.y===food.y)
 {
  putfood();
  Snakebady.push({x:Snakebady[Snakebady.length-1].x, y:Snakebady[Snakebady.length-1].y,color:"#778899"});//增加蛇身
 }
}
//判斷墻
function strike_wall()
{
 for(var i=0;i<wall_length;i++)
 {
  for(var j=0;j<length;j++)
  {
   if(Snakebady[j].x === wall[i].x && Snakebady[j].y === wall[i].y)
    return goend();
  }
 }
}
//判斷邊界
function boundary(node)
{
 if(node.x < 0 || node.x > cvsCridx - 1 || node.y < 0 || node.y > cvsCridy - 1) goend();
}
//進行鍵位判斷
function setDirection(dir){
 direFlag = 1;
 if(Math.abs(dir)===Math.abs(dre)) return;//往上不能往下
 dre=dir;
}
//*******
function goend()
{
 init();
}
init();
speed=200-speed;//****
setInterval(function(){
 SnakeMove();drawSnake();},150);//定時器,讓蛇移動起來,可以設(shè)置他的速度。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序自定義底部、頂部、中間、左邊及右邊彈窗

    微信小程序自定義底部、頂部、中間、左邊及右邊彈窗

    這篇文章主要給大家介紹了關(guān)于微信小程序自定義底部、頂部、中間、左邊及右邊彈窗的相關(guān)資料,彈窗是小程序中非常重要的一種互動方式,比如用戶注冊時錯誤提示、優(yōu)惠券領(lǐng)取提示、簽到成功提示等等,需要的朋友可以參考下
    2023-11-11
  • 基于Echarts實現(xiàn)餅圖效果

    基于Echarts實現(xiàn)餅圖效果

    這篇文章主要為大家詳細介紹了基于Echarts實現(xiàn)餅圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 前端進階之教你利用javascript存儲函數(shù)

    前端進階之教你利用javascript存儲函數(shù)

    這篇文章主要給大家介紹了關(guān)于利用javascript存儲函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用js具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11
  • JS實現(xiàn)十分鐘倒計時代碼實例

    JS實現(xiàn)十分鐘倒計時代碼實例

    在本篇文章里我們給大家分享了關(guān)于JS實現(xiàn)十分鐘倒計時的相關(guān)實例代碼,有需要的朋友們可以學習下。
    2018-10-10
  • JS利用時間戳倒計時的實現(xiàn)示例

    JS利用時間戳倒計時的實現(xiàn)示例

    這篇文章主要介紹了JS利用時間戳倒計時的實現(xiàn)示例,本文將提供代碼示例和詳細的步驟,幫助你實現(xiàn)一個簡單而實用的時間戳倒計時,感興趣的可以了解一下
    2023-12-12
  • js隨機密碼產(chǎn)生函數(shù)

    js隨機密碼產(chǎn)生函數(shù)

    在網(wǎng)上找了好多隨機產(chǎn)生的密碼的代碼,沒一個好用的,所以就隨便寫了一個
    2010-08-08
  • 基于jQuery的圖片不完全按比例自動縮小

    基于jQuery的圖片不完全按比例自動縮小

    有時我們會有這樣的需求:讓圖片顯示在固定大小的區(qū)域。如果不考慮 IE6 完全可以使用 css 的 max-width 限制寬度自動按比例縮小顯示,但是這樣有個問題,就是如果按比例縮小后,圖片高度不夠,那么就很難看了
    2014-07-07
  • 你可能不知道的JavaScript的new Function()方法

    你可能不知道的JavaScript的new Function()方法

    JavaScript的精神領(lǐng)袖Douglas Crockford曾說過JavaScript是程序員唯一不需要學習就能直接使用的語言. 在編程中確實是如此
    2014-04-04
  • js獲取ajax返回值代碼

    js獲取ajax返回值代碼

    這篇文章主要介紹了js如何獲取ajax的返回值,需要的朋友可以參考下
    2014-04-04
  • JavaScript高級程序設(shè)計 XML、Ajax 學習筆記

    JavaScript高級程序設(shè)計 XML、Ajax 學習筆記

    JavaScript高級程序設(shè)計 XML、Ajax 學習筆記,需要的朋友可以參考下。
    2011-09-09

最新評論