xxxxxxxxxx
214
size = 50
w = 5
grid = []
slen = 1
sdir = 3
headx = size/2
heady = size/2
start = false
mindim = -1
var foodSlider;
food = -1
score = 0
starttime = -1
function setup() {
frameRate(10)
createCanvas(window.innerWidth,window.innerHeight);
mindim = min(height,width)-50
w = mindim/size
foodSlider = createSlider(1,2500,1,1)
foodSlider.size(w*size*0.8,w)
foodSlider.position(width/2 - size*w/2,height/2 + size*w/2-1.5*w)
translate(width/2-size*w/2,height/2-size*w/2-25)
restart()
}
function restart(){
background(255)
start = false
headx = size/2
heady = size/2
slen = 1
score = 0
for (i=0;i<size;i++){
grid[i] = []
for (j=0;j<size;j++){
grid[i][j] = new Tile(i, j)
}
}
grid[headx][heady].age = slen
for(x=0;x<food;x++){
newFood()
}
for (i=0;i<size;i++){
for (j=0;j<size;j++){
grid[i][j].show()
grid[i][j].update()
}
}
textAlign(CENTER,CENTER)
textSize(mindim/15)
fill(255)
stroke(0)
strokeWeight(5)
text("PRESS ENTER TO START", size*w/2,size*w/2)
}
function newFood(){
valid = []
for (i=0;i<size;i++){
for (j=0;j<size;j++){
if(grid[i][j].age === 0 && !grid[i][j].food){
valid.push(grid[i][j])
}
}
}
if(valid.length == 0){
return
}
randomfood = valid[floor(random(valid.length))]
grid[randomfood.x][randomfood.y].food = true
}
function gameover(){
start = false
elapsed = floor((Date.now() - starttime)/1000)
finalscore = floor(score/elapsed)
restart()
console.log(starttime)
textAlign(CENTER,CENTER)
textSize(mindim/15)
fill(255)
stroke(0)
strokeWeight(5)
text("SCORE: " + finalscore, size*w/2,size*w/2+100)
}
function draw() {
translate(width/2-size*w/2,height/2-size*w/2-25)
if(food != foodSlider.value()){
food = foodSlider.value()
restart()
strokeWeight(0)
textAlign(LEFT,CENTER)
textSize(mindim/40);
fill(0)
text(foodSlider.value() + " food",size*w*0.8+5, size*w+w)
}
if(!start){
return
}
background(255)
elapsed = floor((Date.now() - starttime)/1000)
strokeWeight(0)
textAlign(RIGHT,TOP)
textSize(mindim/40);
fill(0)
text(elapsed + "s",size*w,size*w)
textAlign(CENTER,CENTER)
fill(0)
text("SCORE: " + floor(score/elapsed), size*w/2,size*w+30)
strokeWeight(0)
textAlign(LEFT,CENTER)
textSize(mindim/40);
fill(0)
text(foodSlider.value() + " food",size*w*0.8+5, size*w+w)
switch(sdir){
case 0:
if(headx < size-1){
headx++
}
break;
case 1:
if(heady < size-1){
heady++
}
break;
case 2:
if(headx > 0){
headx--
}
break;
case 3:
if(heady > 0){
heady--
}
break;
default:
break;
}
if(grid[headx][heady].food){
slen++
if(slen == size*size){
gameover()
return
}
newFood()
grid[headx][heady].food = false
for (i=0;i<size;i++){
for (j=0;j<size;j++){
if(grid[i][j].age>0){
grid[i][j].age++
}
}
}
score += slen*100
}
if(grid[headx][heady].age > 0){
gameover()
return
}
grid[headx][heady].age = slen
for (i=0;i<size;i++){
for (j=0;j<size;j++){
grid[i][j].show()
grid[i][j].update()
}
}
}
function keyPressed(){
if(keyCode === LEFT_ARROW && sdir != 0){
sdir = 2
}else if(keyCode === RIGHT_ARROW && sdir != 2){
sdir = 0
}else if(keyCode === UP_ARROW && sdir != 1){
sdir = 3
}else if(keyCode === DOWN_ARROW && sdir != 3){
sdir = 1
} else if(keyCode === ENTER){
if(!start){
start = true
starttime = Date.now()
}
}
}