Advertisement
SWAG98

Labyrinth Game in Node.js

Jul 28th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*INFO
  2.     Game by Radioactive Inferno
  3.     Map Creation:
  4.     the maps are saved in maps.json
  5.     a map looks like this:
  6.    
  7.                 [
  8.                     [1,0,0,0],
  9.                     [1,0,1,0],
  10.                     [2,0,1,0],
  11.                     [1,1,3,0]
  12.                 ]
  13.                
  14.                 0 = free
  15.                 1 = wall
  16.                 2 = player spawn
  17.                 3 = goal   
  18. */
  19. //Settings
  20. settings = {
  21.     'goal':'O',                     //goal texture
  22.     'player':'*',                       //player texture
  23.     'wall':'#',                     //wall texture
  24.     'controlls':{                       //Controlls... (w s a d or something else)
  25.         'up':'w',
  26.         'down':'s',
  27.         'left':'a',
  28.         'right':'d'
  29.     },
  30.     'customControlls':false     //custom controlls or not
  31. }
  32. // Settings End
  33.  
  34. defaultControlls = {
  35.     'up':'\u001b[A',
  36.     'down':'\u001b[B',
  37.     'left':'\u001b[D',
  38.     'right':'\u001b[C'
  39. }
  40. if(!settings.customControlls){
  41.     settings.controlls=defaultControlls
  42. }
  43. fs = require('fs')
  44. level = JSON.parse(fs.readFileSync('maps.json'))
  45. var posX,posY,goalX,goalY,borderX,borderY
  46.  
  47. function clear(){
  48.     process.stdout.write('\033c')
  49. }
  50.  
  51. stdin = process.stdin
  52. stdin.setEncoding(settings.arrowKeys?null:'utf8')
  53. keyUp=settings.controlls.up
  54. keyDown=settings.controlls.down
  55. keyRight=settings.controlls.right
  56. keyLeft=settings.controlls.left
  57. stdin.setRawMode(true)
  58.  
  59. function load(map){     //loading the variables of the map
  60.     for(y=0;y<Object.keys(level[map]).length;y++){
  61.         for(x=0;x<Object.keys(level[map][y]).length;x++){
  62.             if(level[map][y][x]===3){
  63.                 goalX=x
  64.                 goalY=y
  65.             }
  66.         }
  67.     }
  68.     for(y=0;y<Object.keys(level[map]).length;y++){
  69.         for(x=0;x<Object.keys(level[map][y]).length;x++){
  70.             if(level[map][y][x]===2){
  71.                 posX=x
  72.                 posY=y
  73.             }
  74.         }
  75.     }
  76.     borderX=Object.keys(level[map][0]).length-1
  77.     borderY=Object.keys(level[map]).length-1
  78. }
  79.  
  80. function draw(map){     //drawing the map
  81.     mapDisplay ='|Map '+(map+1)+'/'+level.length+' |'
  82.     displayBorder = '+'+'-'.repeat(mapDisplay.length-2)+"+"
  83.     console.log(displayBorder)
  84.     console.log(mapDisplay)
  85.     console.log(displayBorder)
  86.     console.log('+'+'-'.repeat(Object.keys(level[map][0]).length)+'+')
  87.     for(y=0;y<Object.keys(level[map]).length;y++){
  88.         temp = '|'
  89.         for(x=0;x<Object.keys(level[map][y]).length;x++){
  90.             if(y===posY && x===posX){
  91.                 temp=temp+settings.player
  92.                 continue
  93.             } else if(y===goalY && x===goalX) {
  94.                 temp=temp+settings.goal
  95.                 continue
  96.             } else {
  97.                 if(level[map][y][x]===1){
  98.                     temp=temp+settings.wall
  99.                     continue
  100.                 } else {
  101.                     temp=temp+' '
  102.                     continue
  103.                 }
  104.             }
  105.         }
  106.         console.log(temp+'|')
  107.     }
  108.     console.log('+'+'-'.repeat(Object.keys(level[map][0]).length)+'+')
  109.     console.log('+----------+')
  110.     console.log('|Controlls:|')
  111.     if(settings.customControlls){
  112.         console.log('+---+------+----+')
  113.         console.log('| '+keyUp.toUpperCase()+' | up |')
  114.         console.log('| '+keyDown.toUpperCase()+' | down |')
  115.         console.log('| '+keyLeft.toUpperCase()+' | left |')
  116.         console.log('| '+keyRight.toUpperCase()+' | right   |')
  117.         console.log('| X | Exit |')
  118.         console.log('+---+-----------+')
  119.     } else {
  120.         console.log('+----------+')
  121.         console.log('|Arrow Keys|')
  122.         console.log('| X = Exit |')
  123.         console.log('+----------+')
  124.     }
  125.     console.log('Your goal is to move the ' +settings.player+' to the '+settings.goal)
  126. }
  127.  
  128. move={}
  129. //move functionObject
  130. move.up = function(){
  131.     if(posY==0){return}
  132.     if(level[map][posY-1][posX]===1){return}
  133.     posY--
  134. }
  135. move.down = function(){
  136.     if(posY==borderY){return}
  137.     if(level[map][posY+1][posX]===1){return}
  138.     posY++
  139. }
  140. move.left = function(){
  141.     if(posX==0){return}
  142.     if(level[map][posY][posX-1]===1){return}
  143.     posX--
  144. }
  145. move.right = function(){
  146.     if(posX==borderX){return}
  147.     if(level[map][posY][posX+1]===1){return}
  148.     posX++
  149. }
  150.  
  151. // Game starts here
  152. clear()
  153. load(0)
  154. draw(0)
  155. map=0
  156. stdin.on('data',(key)=>{
  157.     switch (key) {
  158.         case keyUp:
  159.         move.up()
  160.         break
  161.         case keyDown:
  162.         move.down()
  163.         break
  164.         case keyLeft:
  165.         move.left()
  166.         break
  167.         case keyRight:
  168.         move.right()
  169.         break
  170.         case 'x':
  171.         process.exit(0)
  172.         break
  173.         default:
  174.         break
  175.     }
  176.     clear()
  177.     draw(map)
  178.     if(posX===goalX && posY===goalY){
  179.         map++
  180.         if(map===level.length){
  181.             clear()
  182.             console.log('wow you beat the game')
  183.             stdin.end()
  184.             return
  185.         }
  186.         clear()
  187.         console.log('Level Cleared')
  188.         stdin.pause()
  189.         setTimeout(()=>{
  190.             load(map)
  191.             clear()
  192.             draw(map)
  193.             stdin.resume()
  194.         },5000)
  195.     }
  196. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement