Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*INFO
- Game by Radioactive Inferno
- Map Creation:
- the maps are saved in maps.json
- a map looks like this:
- [
- [1,0,0,0],
- [1,0,1,0],
- [2,0,1,0],
- [1,1,3,0]
- ]
- 0 = free
- 1 = wall
- 2 = player spawn
- 3 = goal
- */
- //Settings
- settings = {
- 'goal':'O', //goal texture
- 'player':'*', //player texture
- 'wall':'#', //wall texture
- 'controlls':{ //Controlls... (w s a d or something else)
- 'up':'w',
- 'down':'s',
- 'left':'a',
- 'right':'d'
- },
- 'customControlls':false //custom controlls or not
- }
- // Settings End
- defaultControlls = {
- 'up':'\u001b[A',
- 'down':'\u001b[B',
- 'left':'\u001b[D',
- 'right':'\u001b[C'
- }
- if(!settings.customControlls){
- settings.controlls=defaultControlls
- }
- fs = require('fs')
- level = JSON.parse(fs.readFileSync('maps.json'))
- var posX,posY,goalX,goalY,borderX,borderY
- function clear(){
- process.stdout.write('\033c')
- }
- stdin = process.stdin
- stdin.setEncoding(settings.arrowKeys?null:'utf8')
- keyUp=settings.controlls.up
- keyDown=settings.controlls.down
- keyRight=settings.controlls.right
- keyLeft=settings.controlls.left
- stdin.setRawMode(true)
- function load(map){ //loading the variables of the map
- for(y=0;y<Object.keys(level[map]).length;y++){
- for(x=0;x<Object.keys(level[map][y]).length;x++){
- if(level[map][y][x]===3){
- goalX=x
- goalY=y
- }
- }
- }
- for(y=0;y<Object.keys(level[map]).length;y++){
- for(x=0;x<Object.keys(level[map][y]).length;x++){
- if(level[map][y][x]===2){
- posX=x
- posY=y
- }
- }
- }
- borderX=Object.keys(level[map][0]).length-1
- borderY=Object.keys(level[map]).length-1
- }
- function draw(map){ //drawing the map
- mapDisplay ='|Map '+(map+1)+'/'+level.length+' |'
- displayBorder = '+'+'-'.repeat(mapDisplay.length-2)+"+"
- console.log(displayBorder)
- console.log(mapDisplay)
- console.log(displayBorder)
- console.log('+'+'-'.repeat(Object.keys(level[map][0]).length)+'+')
- for(y=0;y<Object.keys(level[map]).length;y++){
- temp = '|'
- for(x=0;x<Object.keys(level[map][y]).length;x++){
- if(y===posY && x===posX){
- temp=temp+settings.player
- continue
- } else if(y===goalY && x===goalX) {
- temp=temp+settings.goal
- continue
- } else {
- if(level[map][y][x]===1){
- temp=temp+settings.wall
- continue
- } else {
- temp=temp+' '
- continue
- }
- }
- }
- console.log(temp+'|')
- }
- console.log('+'+'-'.repeat(Object.keys(level[map][0]).length)+'+')
- console.log('+----------+')
- console.log('|Controlls:|')
- if(settings.customControlls){
- console.log('+---+------+----+')
- console.log('| '+keyUp.toUpperCase()+' | up |')
- console.log('| '+keyDown.toUpperCase()+' | down |')
- console.log('| '+keyLeft.toUpperCase()+' | left |')
- console.log('| '+keyRight.toUpperCase()+' | right |')
- console.log('| X | Exit |')
- console.log('+---+-----------+')
- } else {
- console.log('+----------+')
- console.log('|Arrow Keys|')
- console.log('| X = Exit |')
- console.log('+----------+')
- }
- console.log('Your goal is to move the ' +settings.player+' to the '+settings.goal)
- }
- move={}
- //move functionObject
- move.up = function(){
- if(posY==0){return}
- if(level[map][posY-1][posX]===1){return}
- posY--
- }
- move.down = function(){
- if(posY==borderY){return}
- if(level[map][posY+1][posX]===1){return}
- posY++
- }
- move.left = function(){
- if(posX==0){return}
- if(level[map][posY][posX-1]===1){return}
- posX--
- }
- move.right = function(){
- if(posX==borderX){return}
- if(level[map][posY][posX+1]===1){return}
- posX++
- }
- // Game starts here
- clear()
- load(0)
- draw(0)
- map=0
- stdin.on('data',(key)=>{
- switch (key) {
- case keyUp:
- move.up()
- break
- case keyDown:
- move.down()
- break
- case keyLeft:
- move.left()
- break
- case keyRight:
- move.right()
- break
- case 'x':
- process.exit(0)
- break
- default:
- break
- }
- clear()
- draw(map)
- if(posX===goalX && posY===goalY){
- map++
- if(map===level.length){
- clear()
- console.log('wow you beat the game')
- stdin.end()
- return
- }
- clear()
- console.log('Level Cleared')
- stdin.pause()
- setTimeout(()=>{
- load(map)
- clear()
- draw(map)
- stdin.resume()
- },5000)
- }
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement