@deveckad/snakegame
Version:
The snake game.
100 lines (87 loc) • 2.19 kB
JavaScript
// const express = require('express')
// const socketio = require('socket.io')
// const open = require('open')
// const http = require('http')
// const path = require('path')
// const inquirer = require('inquirer')
// const fs = require('fs')
// const app = express()
// const server = http.createServer(app)
// const io = socketio(server)
// const port = process.env.PORT || 8000
import express from 'express'
import { Server } from 'socket.io'
import open from 'open'
import { createServer } from 'http'
import { join, dirname } from 'path'
import inquirer from 'inquirer'
import fs from 'fs'
import os from 'os'
import { fileURLToPath } from 'url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const app = express()
const server = createServer(app)
// const io = socketio(server)
const io = new Server(server)
const port = process.env.PORT || 8000
const dev = false
const homedir = os.homedir()
const snakedir = join(homedir, '.snakegame')
const scorefile = join(snakedir, 'hiscore.txt')
await askToOpenURL()
async function askToOpenURL() {
if (dev) {
return handleOpenURL(false)
}
const answers = await inquirer.prompt({
name: 'open_url',
type: 'list',
message: 'Do you want to open the app in web browser?',
choices: ['Yes', 'No']
})
return handleOpenURL(answers.open_url == 'Yes')
}
async function handleOpenURL(openURL) {
app.use(express.static(join(__dirname, 'public')))
server.listen(port, () => {
if (openURL) {
open(`http://localhost:${port}`)
}
console.log(`Listening on port ${port}`)
})
}
io.on('connection', (socket) => {
if (!fs.existsSync(snakedir)) {
fs.mkdirSync(
snakedir //, err => {
// if (err) {
// err.printStackTrace();
// }
// })
// }
)
}
if (!fs.existsSync(scorefile)) {
fs.writeFileSync(
scorefile,
JSON.stringify({
score: -1,
name: ''
})
)
}
socket.on('gethiscore', () => {
socket.emit('rethiscore', JSON.parse(fs.readFileSync(scorefile)))
})
socket.on('newhiscore', (data) => {
var { score, name } = JSON.parse(data)
fs.writeFileSync(
scorefile,
JSON.stringify({
score,
name
})
)
})
})