一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 原生js canvas實現(xiàn)簡單貪吃蛇

原生js canvas實現(xiàn)簡單貪吃蛇

2022-02-15 18:10深夜猿 js教程

這篇文章主要為大家詳細介紹了原生js canvas實現(xiàn)簡單貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

Js原生貪吃蛇:canvas

HTML

?
1
<canvas id="can"></canvas>

CSS

?
1
2
3
4
5
#can{
 background: #000000;
 height: 400px;
 width: 850px;
}

JS

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//公共板塊
 
var blockSize = 10;
//地圖的高寬
var mapW = 300;
var mapH = 150;
//歷史食物var
var historyfood = new Array();
//食物數(shù)組
var img = new Image()
var arrFood = ["ananas.png","hamburg.png","watermelon.png"]
historyfood =[{x: 0,y:0}];
//貪吃蛇默認值
var snake = [{x:3,y:0},{x:2,y:0},{x:1,y:0}]
 
//貪吃蛇方向
var directionX = 1;
var directionY = 0;
//添加一個標記,標記食物是否被吃掉
//默認值:沒有被吃掉
var isFood = false;
//判斷游戲狀態(tài)
//默認游戲繼續(xù)
var gameState = false;
 
//限制貪吃蛇所移動的方向不能反方向操作
var lockleft = true;
var lockright = true;
var lockup = true;
var lockdown = true;
 
//貪吃蛇分數(shù)
var count = 0;
//貪吃蛇速度
var speed = 1000 - (count + 5);
$(function () {
 $("#divContainer").height($("#can").height());
 //1,獲取到畫布對象
 var can = document.getElementById("can");
 //2,獲取到畫圖工具箱
 var tools = can.getContext('2d');
 tools.beginPath();
 //設置食物默認值
 var XY = Randomfood();
 console.log(XY);
 var x1 = Randomfood().x;
 var y1 = Randomfood().y;
 img.src = "/aimless/img/GluttonousSnakeFood/"+ arrFood[Math.floor(Math.random() * arrFood.length)];
 //控制貪吃蛇移動
 document.addEventListener('keydown',function (e){
  switch (e.keyCode) {
   case 38:
    if (lockup){
     directionX = 0;
     directionY = -1;
     lockdown = false;
     lockleft = true;
     lockright = true;
    }
    break;
   case 40:
    if (lockdown){
     directionX = 0;
     directionY = 1;
     lockup = false;
     lockleft = true;
     lockright = true;
    }
    break;
   case 37:
    if (lockleft){
     directionX = - 1;
     directionY = 0;
     lockright = false;
     lockup = true;
     lockdown = true;
    }
    break;
   case 39:
    if (lockright){
     directionX = 1;
     directionY = 0;
     lockleft = false;
     lockup = true;
     lockdown = true;
    }
    break;
  }
 })
 setIntervalSnake(tools,x1,y1);
 //4,找位置
})
 
 
function setIntervalSnake(tools,x1,y1){
 setInterval(function (){
  if (gameState){
   return;
  }
  //1,擦除畫板
  tools.clearRect(0,0,850,420);
  var oldHead = snake[0];
 
  if (oldHead.x < 0 || oldHead.y < 0 || oldHead.x * blockSize >= mapW || oldHead.y * blockSize >= mapH){
   gameState = true;
   alert("游戲結束");
  }else {
   //蛇移動
   if (snake[0].x * blockSize === x1 && snake[0].y * blockSize === y1){
    isFood = true;
   } else {
    snake.pop()
   }
   var newHead = {
    x: oldHead.x + directionX,
    y: oldHead.y + directionY
   }
   snake.unshift(newHead);
  }
  //2,判斷食物是否被吃掉,吃掉刷新,不吃掉不刷新
  if (isFood){
   count = count + 1;
   $("#count").html(count);
   x1 = Randomfood().x;
   y1 = Randomfood().y;
   img.src = "/aimless/img/GluttonousSnakeFood/"+ arrFood[Math.floor(Math.random() * arrFood.length)];
   isFood = false;
  }
  tools.drawImage(img,x1,y1,blockSize,blockSize);
  //蛇身數(shù)組
  var Thesnakebody = new Array();
  //3,畫蛇
  for (var i = 0; i < snake.length; i++){
   if (i == 0){
    tools.fillStyle = "#9933CC";
   } else {
    var newHead1 = {
     x: snake[i].x,
     y: snake[i].y
    }
    Thesnakebody.unshift(newHead1);
    tools.fillStyle = "#33adcc";
   }
   tools.fillRect(snake[i].x * blockSize,snake[i].y * blockSize,blockSize,blockSize);
  }
  // //判斷蛇頭咬到了蛇身
  Thesnakebody.forEach(item=>{
   if(item.x == snake[0].x && item.y == snake[0].y){
    gameState = true;
    setIntervalSnake(tools,x1,y1);
   }
  })
  //4,畫地圖
  var width = Math.round($("#can").width() / blockSize);
  var height = Math.round($("#can").height() / blockSize);
  for (var i = 1; i < width;i++){
   tools.moveTo(0,blockSize * i);
   tools.lineTo($("#can").width(),blockSize * i);
  }
  for (var i = 1; i < height;i++){
   tools.moveTo(blockSize * i,0);
   tools.lineTo(blockSize * i,$("#can").height());
  }
  tools.strokeStyle = "#FFFFFF";
  //5,繪制
  tools.stroke();
 },speed / 3);
}
 
 
//隨機食物不
function Randomfood() {
 var RandomX = Math.floor(Math.random() * mapW / blockSize) * blockSize;
 var RandomY = Math.floor(Math.random() * mapH / blockSize) * blockSize;
 setInterval(function (){
  snake.forEach(item=>{
   console.log(RandomX / blockSize,RandomY / blockSize);
   // console.log(item.x,item.y);
   if(item.x == RandomX / blockSize && item.y == RandomY / blockSize){
    return Randomfood();
   } else {
    return ;
   }
  })
 }, 10 / 3);
 var newRandom = {
  x: RandomX,
  y: RandomY
 }
 return newRandom;
}

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

原文鏈接:https://blog.csdn.net/qq_41043296/article/details/114527235

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色444| 向日葵视频app下载18岁以下勿看 | 无码日韩精品一区二区免费 | 国产精品久久久久网站 | 国产成人毛片 | 视频在线观看入口一二三2021 | 精品在线免费观看视频 | 国产一区日韩二区欧美三区 | 百合漫画咱啪全彩抚慰 | 精品国产国产精2020久久日 | 无码骚夜夜精品 | 欧美四虎影院 | 火影忍者小南裸羞羞漫画 | 国产欧美久久一区二区 | 俄罗斯烧性春三级k8播放 | 四虎4hu永久免费国产精品 | 大乳孕妇一级毛片 | 国产综合成人久久大片91 | 国产成人a∨麻豆精品 | 免费观看俄罗斯特黄特色 | 色一情| 青青青手机在线视频 | 亚洲国产成人精品激情 | 免费观看在线永久免费xx视频 | 日本欧美一二三区色视频 | 寡妇一级毛片 | 特级毛片免费观看视频 | 99久久香蕉国产综合影院 | 男人插女人软件 | 欧美猛男同志同性video | 国产精品夜色视频一级区 | 国产美女下面流出白浆视频 | 我要看黄色毛片 | 操bb| 91精品免费国产高清在线 | 久久视频在线视频观看精品15 | 国产成人精品一区二三区在线观看 | 欧美在线成人免费国产 | 91香蕉视频在线观看 | 国内在线观看 | 亚洲天堂色视频 |