用户:
翎with珝查看:0 回复:3 评论:0 创建时间:2022-06-03T10:41:21
众所都知,每个编程,都有不同的存档方法。废话不多说,展开你的眼界。
编程猫的云存档

非常简短,我们在看看SCRATCH

相对而言,编程猫的代码比scratch少一些
我们在来看看喵的存档

也非常的少,所以说,按照代码的多少排序(从大到小)就是:scratch>喵>编程猫
插个题外话,我们再看看神奇代码岛的存档(SQL)
let leader; // 当前排行榜的领跑
// 创建排行榜表
async function createTables () {
// 创建表
await db.sql`CREATE TABLE IF NOT EXISTS leaderboard (
name VARCHAR(50) NOT NULL,
record REAL NOT NULL
)`
}
// 向排行榜添加数据
async function insertLeaderboard(name, time) {
try {
await db.sql`INSERT INTO leaderboard VALUES (${name}, ${time})`;
} catch (e) {
console.log(`insert sql error: ${e}`) ;
}
}
// 清空所有数据
async function removeAll() {
await db.sql`DELETE FROM leaderboard`
world.say(`leaderboard 排行榜数据已被清空!`);
}
// 获取排行榜第一名
async function getBestTime() {
const rows = await db.sql`SELECT * FROM leaderboard ORDER BY record ASC LIMIT 1`;
if (rows && !rows.length) {
console.log('no record');
return {name:'吉吉喵', record: '30.0'};
}
world.say(rows[0].name + ' / ' + rows[0].record);
return rows[0];
}
// 获取排行榜Top10
async function getTop10() {
const rows = await db.sql`SELECT * FROM leaderboard ORDER BY record ASC LIMIT 10`;
// 在控制台打印数据
console.log(`result = ${JSON.stringify(rows)}`);
// 将搜索的结果在聊天中显示
for await (const row of rows) {
world.say(row.name + ' | ' + row.record)
}
}
// 获取玩家最高分数
async function getMyBestTime(player) {
const rows = await db.sql`SELECT * FROM leaderboard WHERE name=${player} ORDER BY record ASC LIMIT 1`;
if (row && !row.length) {
console.log('no record');
return null;
}
world.say(rows[0].name + ' / ' + rows[0].record);
return rows[0];
}
//-----------------------------------------------------------------
// 在游戏开始之前,创建数据库
(async function() {
console.clear();
await createTables();
// 向排行榜添加临时测试的数据
await insertLeaderboard('吉吉喵', '22.8');
await insertLeaderboard('吉吉喵的小伙伴', '23.4');
await insertLeaderboard('吉吉喵的好朋友', '23.6');
await insertLeaderboard('吉吉喵的邻居小红', '24');
await insertLeaderboard('吉吉喵的邻居小绿', '25');
await insertLeaderboard('吉吉喵的邻居小蓝', '28');
// 更新最佳成绩
leader = await getBestTime();
// 如果没有排行榜数据,最高纪录保持者为吉吉喵。
world.say(`[最高纪录保持者] ${leader.name?leader.name:'吉吉喵'} : ${leader.record}s`)
}());
// 通过聊天命令来获取最高纪录
world.onChat(async ({entity:user,message})=>{
if(message==='top1'){
const personalBest = await getMyBestTime(user.player.name); // 个人最佳成绩
const str = personalBest ? `你目前最佳成绩是:${personalBest.record}s` : `你还没有挑战记录。`
await user.player.dialog({
type: Box3DialogType.TEXT,
content: `${leader.name?leader.name:'吉吉喵'}目前以${leader.record?leader.record:'30.0'}s的成绩排名第一!\n
${str}`,
})
}else if(message==='top10') {
await getTop10();
}else if(message==='清空排行榜') {
await removeAll();
}
});
看起来蛮多的,实际上还有
console.clear()
/// 创建表
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS playerlogin (
name VARCHAR(50) NOT NULL,
jointime REAL NOT NULL,
leavetime REAL
)`
}
// 第一次进入游戏时,新建玩家数据
async function insertPlayer(name, join, leave = 0) {
try {
await db.sql`INSERT INTO playerlogin VALUES (${name}, ${join}, ${leave})`;
} catch (e) {
console.log(`insert sql error: ${e}`) ;
}
}
// 更新玩家进入游戏时间
async function updatePlayerJoin(name, value) {
try {
await db.sql`UPDATE playerlogin SET jointime = ${value} WHERE name = ${name}`;
} catch (e) {
console.log(`[jointime] update sql error: ${e}`) ;
}
}
// 更新玩家离开游戏时间
async function updatePlayerLeave(name, value) {
try {
await db.sql`UPDATE playerlogin SET leavetime = ${value} WHERE name = ${name}`;
} catch (e) {
console.log(`[leavetime] update sql error: ${e}`) ;
}
}
// 查询数据。如果数据不存在,返回空。
async function getPlayerData(name) {
const rows = await db.sql`SELECT * FROM playerlogin WHERE name=${name}`;
if (rows && !rows.length) {
return null;
}
return rows[0];
}
// 清空所有数据
async function clearLoginRecord () {
await db.sql`DELETE FROM playerlogin`
world.say(`清空所有登陆数据!`);
}
//-------------------------------------------------------
// 玩家进入游戏
world.onPlayerJoin( async ({entity}) => {
const now = new Date().valueOf(); // 获取真实世界的时间戳 timestamp
const playerData = await getPlayerData(entity.player.name); // 获取上次登录记录
// 如果数据不存在,说明时第一次进入游戏
if (playerData === null) {
insertPlayer(entity.player.name, now); // 插入玩家数据
world.say(`${entity.player.name} 第一次进入游戏。`);
} else {
updatePlayerJoin(entity.player.name, now); // 更新玩家进入游戏时间
const leaveTime = (now - playerData.leavetime) / 1000;
entity.player.directMessage(`${entity.player.name} 距离上次登录经过了 ${leaveTime.toFixed(2)} 秒`);
}
});
// 玩家离开游戏
world.onPlayerLeave( async ({entity}) => {
const now = new Date().valueOf();
updatePlayerLeave(entity.player.name, now)
});
这才是神奇代码岛的代码
那么代码次序又要改了:神奇代码岛(SQL)>scratch>喵>编程猫
由此我们发现,无论用哪一种方法制作存档,都是要使用代码的。
好了,本次分享结束。
自动保存:你喵
