xxxxxxxxxx
98
// used: https://www.toptal.com/developers/keycode
let grid =
`WWWWWWWWW
W$$.....+##########
W.......W #
W.......W WWWW+WWW
W.......W W..S...W
W.......+#####+....$.W
W.......W W...$S$W
WWWWWWWWW WWWWWWWW`.split('\n').map( (e)=>e.split('') );
let player = [3,4]; // row,col
let score = 0, hp = 100;
let countDown = -1,countDownText='';
function setup() {
createCanvas(400, 400);
//console.log(grid);
}
function draw() {
background(0);
fill(255);
text(`score: ${score}`,320,20);
text(`hp: ${hp}`,320,35);
text('Mini-Rogue - use arrows to move...',20,380);
for (let r=0;r<grid.length;r++){
for (let c=0;c<grid[r].length;c++){
text(grid[r][c],c*15 +20,r*15 + 120);
}
}
text('@',player[1]*15+20,player[0]*15+120);
if (countDown>-1){
countDown--;
text(countDownText,150,300);
}
}
function keyPressed() {
let newPos = [player];
if (keyCode === LEFT_ARROW) {
newPos[1]-=1;
}
if (keyCode === RIGHT_ARROW) {
newPos[1]+=1;
}
if (keyCode === UP_ARROW) {
newPos[0]-=1;
}
if (keyCode === DOWN_ARROW) {
newPos[0]+=1;
}
let [r,c] = newPos;
if (grid[r][c]=='$'){
grid[r][c] = '.';
score += 100;
countDownText = 'Found gold';
countDown += 100;
}
if (grid[r][c]=='S'){
// encounter with a snake
hp -= int(random(1,6+1));
countDownText = 'Ouch!';
countDown += 100;
if (random(1,100)>80){
// the snake was killed
grid[r][c] = '.';
score += 500;
countDownText = 'Killed a snake';
countDown += 100;
}
}
if ( '.+#'.includes( grid[r][c]) ){
// move on walkable tiles
player = newPos;
}
if ( (random(1,100)>99) &&
(grid[5][16]!='S') ){
// spawn a snake
grid[5][16]='S';
}
if ( (random(1,100)>95) &&
(grid[1][1]!='$') ){
// spawn gold
grid[1][1]='$';
}
}