[verified] Snake 0.8: circular arena and larger 32px tiles
This commit is contained in:
@@ -5,19 +5,19 @@ let seed=83971
|
||||
const rand=()=>{seed=(Math.imul(seed,1664525)+1013904223)>>>0;return seed/4294967296}
|
||||
const dirs=[{x:1,y:0},{x:0,y:1},{x:-1,y:0},{x:0,y:-1}]
|
||||
let moves=0, seams=0
|
||||
for(const mode of ['classic','wrap']) for(let game=0;game<1000;game++) {
|
||||
for(const board of [16,snake.ARENA]) for(const mode of ['classic','wrap']) for(let game=0;game<1000;game++) {
|
||||
let cells=snake.initialSnake(),dir=dirs[0]
|
||||
for(let tick=0;tick<100;tick++) {
|
||||
dir=snake.turn(dir,dirs[Math.floor(rand()*4)])
|
||||
const h=cells[0]
|
||||
const food=rand()<0.3?{x:(h.x+dir.x+16)%16,y:(h.y+dir.y+16)%16}:{x:0,y:0}
|
||||
const r=snake.step(cells,dir,food,16,mode)
|
||||
const food=rand()<0.3?snake.step([h],dir,null,board,'wrap').snake[0]:null
|
||||
const r=snake.step(cells,dir,food,board,mode)
|
||||
if(!r.alive)break
|
||||
if(Math.abs(r.snake[0].x-h.x)>1||Math.abs(r.snake[0].y-h.y)>1)seams++
|
||||
cells=r.snake
|
||||
assert.equal(new Set(cells.map(c=>c.x+','+c.y)).size,cells.length)
|
||||
for(const c of cells)assert.ok(c.x>=0&&c.x<16&&c.y>=0&&c.y<16)
|
||||
for(const name of snake.renderPieces(cells,dir,16))assert.ok(fs.existsSync(require('node:path').join(__dirname,'../src/common/tex',name+'.png')),name)
|
||||
for(const c of cells)assert.ok(board===16 ? c.x>=0&&c.x<16&&c.y>=0&&c.y<16 : snake.ARENA.rows[c.y].includes(c.x))
|
||||
for(const name of snake.renderPieces(cells,dir,board))assert.ok(fs.existsSync(require('node:path').join(__dirname,'../src/common/tex',name+'.png')),name)
|
||||
moves++
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user