diff --git a/Servers/Players/123456.json b/Servers/Players/123456.json new file mode 100644 index 0000000..18e07d5 --- /dev/null +++ b/Servers/Players/123456.json @@ -0,0 +1,330 @@ +{ + "experience": 0, + "farm_lots": [ + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + } + ], + "farm_name": "唐译", + "level": 0, + "money": 1000, + "user_name": "123456", + "user_password": "123456" +} \ No newline at end of file diff --git a/Servers/Players/1234567.json b/Servers/Players/1234567.json new file mode 100644 index 0000000..54d10f3 --- /dev/null +++ b/Servers/Players/1234567.json @@ -0,0 +1,330 @@ +{ + "experience": 0, + "farm_lots": [ + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + } + ], + "farm_name": "1234567", + "level": 0, + "money": 1000, + "user_name": "1234567", + "user_password": "1234567" +} \ No newline at end of file diff --git a/Servers/Players/3205788256.json b/Servers/Players/3205788256.json new file mode 100644 index 0000000..c70217f --- /dev/null +++ b/Servers/Players/3205788256.json @@ -0,0 +1,330 @@ +{ + "experience": 1626, + "farm_lots": [ + { + "crop_type": "人参", + "grow_time": 6600, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 6600 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 4800 + }, + { + "crop_type": "松露", + "grow_time": 7200, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 7200 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 1200 + }, + { + "crop_type": "西瓜", + "grow_time": 2400, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 2400 + }, + { + "crop_type": "葡萄", + "grow_time": 1200, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 1200 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "西瓜", + "grow_time": 2400, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 2400 + }, + { + "crop_type": "西瓜", + "grow_time": 1906, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 2400 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "甜菜", + "grow_time": 1903, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 2160 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "金橘", + "grow_time": 1900, + "is_dead": true, + "is_diged": true, + "is_planted": true, + "max_grow_time": 4800 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 4800 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 4800 + } + ], + "farm_name": "", + "level": 24, + "money": 35261, + "user_name": "3205788256", + "user_password": "tyh@19900420" +} \ No newline at end of file diff --git a/Servers/player.js b/Servers/player.js new file mode 100644 index 0000000..ce97d69 --- /dev/null +++ b/Servers/player.js @@ -0,0 +1,83 @@ +const fs = require('fs'); +const path = require('path'); +const express = require('express'); +const app = express(); +const port = 3000; + +// 使用 express.json() 中间件来解析 JSON 请求体 +app.use(express.json()); + +// 处理用户登录请求 +app.post('/login', (req, res) => { + const { user_name, user_password } = req.body; + const filePath = path.join(__dirname, `Players/${user_name}.json`); + + fs.readFile(filePath, 'utf8', (err, data) => { + if (err) { + console.error('读取文件时出错:', err); + console.error("用户:", user_name, '读取文件:', userData.user_name, ".json", "失败!", "原因:用户不存在"); + return res.status(404).json({ message: '用户不存在' }); + } + + try { + const userData = JSON.parse(data); + + if (userData.user_password === user_password) { + console.error("用户:", user_name, '读取文件:', userData.user_name, ".json", "成功!"); + return res.json({ message: '登录成功', data: userData }); + + } else { + console.error("用户:", user_name, '读取文件:', userData.user_name, ".json", "失败!","原因:密码错误"); + return res.status(401).json({ message: '密码错误' }); + } + } catch (parseError) { + console.error('解析 JSON 时出错:', parseError); + return res.status(500).json({ message: '服务器错误', error: parseError }); + } + }); +}); + +// 处理保存数据请求 +app.post('/save', (req, res) => { + const receivedData = req.body; + const filePath = path.join(__dirname, `Players/${receivedData.user_name}.json`); + + + // 将数据写入文件 + fs.writeFile(filePath, JSON.stringify(receivedData, null, 2), (err) => { + if (err) { + console.error('保存数据时出错:', err); + return res.status(500).json({ message: '数据保存失败', error: err }); + } + console.log(`数据已保存到 ${receivedData.user_name}.json`); + console.log("用户:", receivedData.user_name, '保存数据到:', receivedData.user_name, ".json", "成功!"); + return res.json({ message: '数据保存成功', data: receivedData }); + }); +}); + + +// 处理新用户注册请求 +app.post('/register', (req, res) => { + const newUserData = req.body; + const filePath = path.join(__dirname, `Players/${newUserData.user_name}.json`); + + // 检查用户名是否已经存在 + if (fs.existsSync(filePath)) { + console.error("新用户:", newUserData.user_name, '注册数据到:', newUserData.user_name, ".json", "失败!", "原因:用户名已存在"); + return res.status(400).json({ message: '用户名已存在' }); + } + + // 将新用户数据写入文件 + fs.writeFile(filePath, JSON.stringify(newUserData, null, 2), (err) => { + if (err) { + console.error("新用户:", newUserData.user_name, '注册数据到:', newUserData.user_name, ".json", "失败!", "原因:",err); + return res.status(500).json({ message: '数据保存失败', error: err }); + } + console.log("新用户:", newUserData.user_name, '注册数据到:', newUserData.user_name, ".json", "成功!"); + return res.json({ message: '注册成功', data: newUserData }); + }); +}); + +app.listen(port, () => { + console.log(`萌芽后端服务器正在运行在: http://localhost:${port}`); +}); diff --git a/Servers/saves/received_data.json b/Servers/saves/received_data.json new file mode 100644 index 0000000..71d01a5 --- /dev/null +++ b/Servers/saves/received_data.json @@ -0,0 +1,330 @@ +{ + "experience": 4193, + "farm_lots": [ + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 5 + } + ], + "farm_name": "3205788256的农场", + "level": 8, + "money": 1493, + "user_name": "3205788256", + "user_password": "tyh@19900420" +} \ No newline at end of file diff --git a/Servers/server.js b/Servers/server.js new file mode 100644 index 0000000..cc03f76 --- /dev/null +++ b/Servers/server.js @@ -0,0 +1,137 @@ +const express = require('express'); +const fs = require('fs'); +const path = require('path'); +const bodyParser = require('body-parser'); +const cors = require('cors'); + +// 创建 Express 应用 +const app = express(); +const PORT = 3000; + +// 配置中间件 +app.use(cors()); // 允许跨域资源共享 +app.use(bodyParser.json()); // 解析 JSON 请求体 + +// 服务器存储目录,模拟远程存储位置 +const SERVER_STORAGE_PATH = path.join(__dirname, 'game_saves'); + +// 确保存储目录存在 +if (!fs.existsSync(SERVER_STORAGE_PATH)) { + fs.mkdirSync(SERVER_STORAGE_PATH); +} + +/** + * 保存游戏数据到服务器 + * @route POST /save_game + * @param {Object} req.body - 游戏保存数据 + * @returns {Object} 保存结果 + */ +app.post('/save_game', (req, res) => { + try { + // 从请求体中获取用户名和完整的游戏数据 + const { user_name, ...gameData } = req.body; + + // 检查用户名是否存在 + if (!user_name) { + return res.status(400).json({ + success: false, + message: '用户名不能为空' + }); + } + + // 构建保存文件路径 + const filePath = path.join(SERVER_STORAGE_PATH, `${user_name}.json`); + + // 将游戏数据转换为 JSON 字符串 + const saveData = JSON.stringify(req.body, null, 2); + + // 写入文件 + fs.writeFileSync(filePath, saveData, 'utf8'); + + res.json({ + success: true, + message: '游戏数据保存成功' + }); + } catch (error) { + console.error('保存游戏数据时发生错误:', error); + res.status(500).json({ + success: false, + message: '服务器保存数据失败', + error: error.message + }); + } +}); + +/** + * 从服务器加载游戏数据 + * @route POST /load_game + * @param {string} req.body.user_name - 用户名 + * @param {string} req.body.user_password - 用户密码 + * @returns {Object} 游戏数据或错误信息 + */ +app.post('/load_game', (req, res) => { + try { + const { user_name, user_password } = req.body; + + // 检查用户名和密码是否存在 + if (!user_name || !user_password) { + return res.status(400).json({ + success: false, + message: '用户名和密码不能为空' + }); + } + + // 构建文件路径 + const filePath = path.join(SERVER_STORAGE_PATH, `${user_name}.json`); + + // 检查文件是否存在 + if (!fs.existsSync(filePath)) { + return res.status(404).json({ + success: false, + message: '未找到用户数据' + }); + } + + // 读取文件内容 + const fileContent = fs.readFileSync(filePath, 'utf8'); + const userData = JSON.parse(fileContent); + + // 验证密码 + if (userData.user_password !== user_password) { + return res.status(401).json({ + success: false, + message: '密码错误' + }); + } + + res.json({ + success: true, + message: '游戏数据加载成功', + data: userData + }); + } catch (error) { + console.error('加载游戏数据时发生错误:', error); + res.status(500).json({ + success: false, + message: '服务器加载数据失败', + error: error.message + }); + } +}); + +/** + * 服务器健康检查路由 + * @route GET /health + * @returns {Object} 服务器状态 + */ +app.get('/health', (req, res) => { + res.json({ + status: 'healthy', + message: 'Godot农场游戏服务器正在运行' + }); +}); + +// 启动服务器 +app.listen(PORT, () => { + console.log(`农场游戏后端服务已启动,监听端口:${PORT}`); +}); \ No newline at end of file diff --git a/Servers/测试/json.js b/Servers/测试/json.js new file mode 100644 index 0000000..66e954e --- /dev/null +++ b/Servers/测试/json.js @@ -0,0 +1,21 @@ +const fs = require('fs'); +const path = require('path'); + +// 构建 JSON 文件的路径 +const filePath = path.join(__dirname, 'Players', 'player.json'); + +// 读取 JSON 文件 +fs.readFile(filePath, 'utf8', (err, data) => { + if (err) { + console.error('读取文件时出错:', err); + return; + } + + try { + // 解析 JSON 数据 + const playerData = JSON.parse(data); + console.log('玩家数据:', playerData); + } catch (parseErr) { + console.error('解析 JSON 数据时出错:', parseErr); + } +}); diff --git a/Servers/测试/json2.js b/Servers/测试/json2.js new file mode 100644 index 0000000..eeba934 --- /dev/null +++ b/Servers/测试/json2.js @@ -0,0 +1,52 @@ +const fs = require('fs'); +const path = require('path'); + +// 构建 JSON 文件的路径 +const filePath = path.join(__dirname, 'Players', '3205788256.json'); + +// 读取 JSON 文件 +fs.readFile(filePath, 'utf8', (err, data) => { + if (err) { + console.error('读取文件时出错:', err); + return; + } + + try { + // 解析 JSON 数据 + const playerData = JSON.parse(data); + //console.log('玩家数据:', playerData); + + // 对解析后的数据进行分析 + analyzePlayerData(playerData); + + } catch (parseErr) { + console.error('解析 JSON 数据时出错:', parseErr); + } +}); + +// 分析玩家数据的函数 +function analyzePlayerData(playerData) { + // 打印玩家的基本信息 + console.log(`用户名: ${playerData.user_name}`); + console.log(`用户密码: ${playerData.user_password}`); + console.log(`农场名称: ${playerData.farm_name}`); + console.log(`金钱: ${playerData.money}`); + console.log(`经验值: ${playerData.experience}`); + console.log(`等级: ${playerData.level}`); + + // 统计农场地块的状态 + const totalLots = playerData.farm_lots.length; + const diggedLots = playerData.farm_lots.filter(lot => lot.is_diged).length; + const plantedLots = playerData.farm_lots.filter(lot => lot.is_planted).length; + const deadLots = playerData.farm_lots.filter(lot => lot.is_dead).length; + + console.log(`总地块数: ${totalLots}`); + console.log(`已挖掘地块数: ${diggedLots}`); + console.log(`已种植地块数: ${plantedLots}`); + console.log(`已枯死地块数: ${deadLots}`); + + // 检查每个地块的生长状态 + playerData.farm_lots.forEach((lot, index) => { + console.log(`地块 ${index + 1}: 已挖掘 - ${lot.is_diged}, 已种植 - ${lot.is_planted}, 已枯死 - ${lot.is_dead}, 作物类型 - ${lot.crop_type}, 生长时间 - ${lot.grow_time}/${lot.max_grow_time}`); + }); +} diff --git a/Servers/测试/login.js b/Servers/测试/login.js new file mode 100644 index 0000000..f227e72 --- /dev/null +++ b/Servers/测试/login.js @@ -0,0 +1,19 @@ +const fs = require('fs'); +const path = require('path'); +const express = require('express'); +const app = express(); +const port = 3000; + +app.get('/', (req, res) => { + res.json({ message: 'GET 请求已收到!' }); + console.log('GET 请求已收到!'); +}); + +app.post('/', (req, res) => { + res.json({ message: 'POST 请求已收到!', data: req.body }); + console.log('POST 请求已收到!'); +}); + +app.listen(port, () => { + console.log(`萌芽后端服务器正在运行在: http://localhost:${port}`); +}); \ No newline at end of file