国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JS實現(xiàn)的貪吃蛇游戲案例詳解

2024-05-06 15:39:55
字體:
供稿:網(wǎng)友

本文實例講述了JS實現(xiàn)的貪吃蛇游戲。分享給大家供大家參考,具體如下:

github項目地址:https://github.com/LEERTRT/Snake

在<script></script>中,文檔加載完畢后調(diào)用:

$(function () {  var game = new Game("canvas");  game.init();});

其中構(gòu)造函數(shù)Game()接收canvas的id作為參數(shù),實例化對象以后,調(diào)用init()函數(shù),init()函數(shù)里面有三個函數(shù),接下來會一個一個說明。

/** * 初始化函數(shù),生成構(gòu)造函數(shù)實例后調(diào)用此函數(shù) */this.init = function () {  /**   * 初始化畫布和果實   */  this.initData();  /**   * 1.清空畫布;2.畫背景格子;3.畫蛇;4.畫果實   */  this.draw();  /**   * 綁定事件:方向和速度控制   */  this.bindEvents();};

第一個,initData():在initData()函數(shù)里面,聲明畫布,果實,畫布大小,格子數(shù)量,方向,速度,蛇等:

var canvas = document.getElementById(id);if (canvas && canvas.getContext) {  this.ctx = canvas.getContext('2d');}this.foodNode = null;//果實this.size = canvas.width || $(canvas).width();//畫布大小this.columns = 50;//畫布行列數(shù)this.direction = 0;//方向this.speed = 10;//速度this.bodyNodes = [];//蛇體

然后隨機生成蛇的位置:

var rdx = Math.round(Math.random() * (this.columns - 1));var rdy = Math.round(Math.random() * (this.columns - 1));

把隨機生成的rdx, rdy放進記錄蛇體的數(shù)組中:

this.bodyNodes.push({  x: rdx, y: rdy});

到此,initData()完成。

第二個,draw():draw()函數(shù)包含四步:1.清空畫布;2.畫背景;3.畫蛇;4.畫果實:

this.draw = function () {  /**   * 清空畫布   */  this.clear();  /**   * 畫畫布   */  this.drawBG();  /**   * 畫蛇體   */  this.drawBody();  /**   *畫果實   */  this.drawFood();};

1.清空畫布

使用clearRect(0,0,size,size)即可:

this.ctx.clearRect(0, 0, this.size, this.size);

2.畫背景

每個格子大小 = 畫布尺寸/格子數(shù)量,然后一行一行畫就行了,和畫棋盤一樣:

var _this = this;var x = 0, y = 0, size = _this.size / _this.columns;_this.ctx.strokeStyle = "rgba(124,124,124,0.1)";//一行一行畫畫布for (var i = 0; i < _this.columns; i++) {  y = i * size;  for (var j = 0; j < _this.columns; j++) {    x = j * size;    _this.ctx.strokeRect(x, y, size, size);  }}

3.畫蛇

前面在initData()里面,把隨機生成的蛇的位置放進了bodyNodes數(shù)組里面,

這里把bodyNodes里面的元素用each()取出來畫即可。因為后面當蛇吃了果實后,bodyNodes里面的

元素會增加,所以用each取出所有元素繪畫,現(xiàn)在是在初始化階段,bodyNodes里面只有在initData()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 遵义市| 阜新市| 阳泉市| 乌拉特前旗| 岳阳市| 合川市| 靖江市| 余姚市| 哈巴河县| 黑龙江省| 宁国市| 安达市| 河南省| 合山市| 娄底市| 光泽县| 汽车| 大洼县| 珠海市| 宝鸡市| 肇东市| 德安县| 开化县| 吴川市| 洞口县| 涿州市| 闵行区| 怀远县| 灵山县| 射洪县| 平凉市| 措勤县| 伊川县| 梨树县| 沽源县| 济宁市| 衡水市| 泾川县| 安化县| 江华| 辽阳县|