蛇游戏与自身相撞

时间:2016-02-10 18:49:24

标签: javascript processing processing.js

我用processign.js做了一个蛇游戏,我试图与自己发生冲突。问题在于它无法正常工作。

. ~/.bashrc # Make the changes apply to the current session

问题出在var screen = 0; var bg = color(60,150,60); var snake; var apple; var bonus; var nBonus = 0; var gameOver = false; var appleSize = 10; var applePosX = round(random(10,width-appleSize)/10)*10; var applePosY = round(random(10,height-appleSize)/10)*10; var keys = []; void keyPressed() { keys[keyCode] = true; }; void keyReleased() { keys[keyCode] = false; }; frameRate(10); // collision with itself // ----------------------------------------------------------------------- // ------------------------------- THE SNAKE ----------------------------- var Snake = function(x, y) { this.x = x; this.y = y; this.len = 1; this.size = 10; this.snakePosX = 0; this.snakePosY = 0; this.points = 0; this.positions = []; this.moving = false; this.apples = 0; for(var i=0; i<this.len; i++) { var posX = this.x-i*10; var posY = this.y; this.positions[i] = {x:posX, y:posY}; } }; Snake.prototype.draw = function() { fill(0); stroke(255,255,255); for(var i=0; i<this.positions.length; i++) { rect(this.positions[i].x, this.positions[i].y, this.size, this.size); } }; Snake.prototype.move = function() { if(gameOver === false) { if(keys[UP]) { this.snakePosY = -this.size; this.snakePosX = 0; this.moving = true; } if(keys[DOWN]) { this.snakePosY = this.size; this.snakePosX = 0; this.moving = true; } if(keys[LEFT]) { this.snakePosX = -this.size; this.snakePosY = 0; this.moving = true; } if(keys[RIGHT]) { this.snakePosX = this.size; this.snakePosY = 0; this.moving = true; } } if(this.moving == true) { if(snake.positions.length == 1) { this.positions[0].x += this.snakePosX; this.positions[0].y += this.snakePosY; } else { for(var i=1; i<this.positions.length; i++) { this.positions[i-1].x = this.positions[i].x; this.positions[i-1].y = this.positions[i].y; this.positions[i].x += this.snakePosX; this.positions[i].y += this.snakePosY; } } } }; Snake.prototype.checkColl = function() { // collision with itself if(this.positions.length>1) { for(var i=0; i<this.positions.length; i++) { if(this.positions[0].x > 350) { text('holly crap', 100, 100); } } } // collision with walls if(this.positions[0].x > width-this.size || this.positions[0].x < 0 || this.positions[0].y > height-this.size || this.positions[0].y < 0) { gameOver = true; gameIsOver(); } // collision with apples for(var i=0; i<this.positions.length; i++) { if(this.positions[i].x >= apple.x && this.positions[i].x+10 <= apple.x+10 && this.positions[i].y >= apple.y && this.positions[i].y+10 <= apple.y+10) { apple.draw(); this.apples ++; this.points += 10; this.positions.unshift({x:apple.x, y:apple.y}); apple.x = round(random(10,width-appleSize)/10)*10; apple.y = round(random(10,height-appleSize)/10)*10; if(this.apples > 1 && this.apples % 5 == 0) { nBonus = 1; } } } // collision with bonus if(this.positions[0].x >= bonus.x && this.positions[0].x+10 <= bonus.x+10 && this.positions[0].y >= bonus.y && this.positions[0].y+10 <= bonus.y+10) { if(this.moving) { bonus.x = round(random(10,width-appleSize)/10)*10; bonus.y = round(random(10,height-appleSize)/10)*10; nBonus = 0; this.points += 10; } } }; // ------------------------ THE APPLES ----------------------------------- var Apple = function(x, y) { this.x = x; this.y = y; }; Apple.prototype.draw = function() { fill(255,0,0); noStroke(); rect(this.x, this.y, appleSize, appleSize); }; // ------------------------ THE BONUS ----------------------------------- var Bonus = function(x, y) { this.x = x; this.y = y; } Bonus.prototype.draw = function() { fill(150,0,0); stroke(255,255,255) rect(this.x, this.y, appleSize, appleSize); }; // ----------------------------------------------------------------------- snake = new Snake(width/2, height/2); apple = new Apple(applePosX, applePosY); bonus = new Bonus(width/2, height/2); // ----------------------------------------------------------------------- void gameIsOver() { fill(0); textAlign(CENTER); text("Game Over\nPress 'S' to play again", width/2, height/2); textAlign(LEFT); if(keys[83]) { screen = 2; gameOver = false; } } void playGame() { if(screen === 0) { if(mouseX >= width/2-50 && mouseY <= width/2+50 && mouseY >= height/2-15 && mouseY <= height/2+15) { if(mousePressed) { screen = 1; } } } } void makeScreen() { if(screen === 0) { textAlign(CENTER); textSize(30); text('SNAKE GAME', width/2, 100); stroke(255,255,255); noFill(); rectMode(CENTER); rect(width/2, height/2, 100, 30); textSize(15); text('Play', width/2, height/2+5); textSize(11); text('By Eskimopest', width/2, height-20); textAlign(LEFT); rectMode(LEFT); playGame(); } if(screen === 1) { snake.draw(); snake.move(); snake.checkColl(); apple.draw(); if(nBonus === 1) { bonus.draw(); } fill(0); text('POINTS : '+ snake.points, 10, 20); text('APPLES : '+ snake.apples, 10, 40); } if(screen === 2) { snake.points = 0; snake.apples = 0; snake.x = width/2; snake.y = height/2; snake.len = 1; snake.positions = [{x:snake.x, y:snake.y}]; snake.snakePosX = 0; snake.snakePosY = 0; applePosX = round(random(10,width-appleSize)/10)*10; applePosY = round(random(10,height-appleSize)/10)*10; screen = 1; } } // ----------------------------------------------------------------------- void draw() { background(bg); makeScreen(); for(var i=0; i<snake.positions.length; i++) { text(i + 'x:'+snake.positions[i].x + ' y:'+snake.positions[i].y, 600, 20+i*10); } } ,我正在努力使这项工作但没有结果。当我尝试制作

snake.prototype.checkColl
没有任何反应。如果有人能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

应该是:

if(this.positions[0].x == this.positions[i].x)

使用单个=正在进行分配。您想要进行比较,因此您需要加倍==