This commit is contained in:
赵鑫 2022-08-18 09:14:04 +08:00
parent 0066cba512
commit 0e47630eeb
6 changed files with 2585 additions and 3 deletions

View File

@ -1,3 +1 @@
# xiaomaodiaoyu
小猫钓鱼
# 小猫钓鱼

2437
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

25
package.json Normal file
View File

@ -0,0 +1,25 @@
{
"name": "xiaomaodiaoyu",
"version": "0.1.0",
"description": "小猫钓鱼",
"main": "server.js",
"scripts": {
"dev": "nodemon server",
"start": "node server",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "ssh://git@nas:2222/zhaoxin/xiaomaodiaoyu.git"
},
"keywords": [],
"author": "Zhao Xin <7176466@qq.com>",
"license": "MIT",
"dependencies": {
"express": "^4.18.1",
"socketio": "^1.0.0"
},
"devDependencies": {
"nodemon": "^2.0.19"
}
}

0
public/game.js Normal file
View File

51
public/index.html Normal file
View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" ,content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="data:" type="image/x-icon">
<!-- <link rel="stylesheet" href="style.css"> -->
<title>小猫钓鱼</title>
<style>
.ready {
color: red;
}
</style>
</head>
<body>
<h1>小猫钓鱼</h1>
<h2>在线人数:<var id="onlineNumber">0</var></h2>
<h2>玩家人数:<var id="playersNumber">0</var></h2>
<button id="buttonReady">我准备好了</button>
<div id="players"></div>
<div id="cards"></div>
<script src="/socket.io/socket.io.js"></script>
<script>
const player = io()
player.on('onlineNumber', (number) => {
onlineNumber.innerText = number
})
player.on('playersNumber', (number) => {
playersNumber.innerText = number
buttonReady.classList.remove('ready')
})
player.on('ready', (ready) => {
if(ready) buttonReady.classList.add('ready')
else buttonReady.classList.remove('ready')
})
player.on('status', (status)=>{
console.table(status)
})
buttonReady.addEventListener('click', (e) => player.emit('ready'))
</script>
</body>
</html>

71
server.js Normal file
View File

@ -0,0 +1,71 @@
const express = require('express')
const game = express()
game.use(express.static('public'))
const host = process.env.HOST || '0.0.0.0'
const port = process.env.PORT || 3000
const server = game.listen(port, host, () => console.log(`小猫钓鱼游戏服务运行在 http://${host}:${port}/`))
const io = require('socket.io')(server)
const clients = []
const players = []
const cards = []
let current = 0
let started = false
function isGameStarted() {
if (players.length < 2) return false
for (let player of players) {
if (!player.ready) return false
}
return true
}
io.on('connection', (client) => {
client.ready = false
client.cards = []
clients.push(client)
io.emit('onlineNumber', clients.length)
io.emit('playersNumber', players.length)
client.on('ready', () => {
if (!isGameStarted()) {
client.ready = !client.ready
if (client.ready) {
players.push(client)
} else {
const index = players.indexOf(client)
players.splice(index, 1)
}
io.emit('playersNumber', players.length)
client.emit('ready', client.ready)
if (isGameStarted()) gameStart()
}
})
client.on('disconnect', () => {
const index = clients.indexOf(client)
clients.splice(index, 1)
io.emit('onlineNumber', clients.length)
})
})
function gameStart() {
console.log('游戏开始')
// cards = []
cards.length = 0
current = 0
// 洗牌 -> players.cards 每家18张
// players[0].cards = [1, 2, 3]
// players[1].cards = [1, 2, 3, 4]
// players[2].cards = [1, 2, 3, 4, 5]
// ...
emitStatus()
}
function emitStatus() {
const cardsNumbers = []
for (let p of players) {
cardsNumbers.push(p.cards.length)
}
io.emit('status', { players: cardsNumbers, cards, current })
}