玩家数据和活动数据的修改、保存、删除

玩家数据的修改
1、玩家发来的事件处理完完成后,
2、会保存玩家的UID(map《int64, bool》 m_mapUserSave)(表示这个玩家更新了数据),
3、保存玩家数据
3.1然后去从hash_map 《int64, User*》 & mapUsers找到玩家的数据,进行保存
3.2清除第二步中的玩家信息。
4、保存完成后,
添加该玩家的uid到清除容器中map《int64,bool》 m_mapUserRemove,目的是假设清除改玩家的数据

玩家数据的删除
遍历上述第4部中的假设需要清除的玩家UID,
判断真正是否需要删除玩家数据
判断的条件有,
1、所有玩家信息中hash_map《int64, User*》 & mapUsers没有找到该玩家 ,或者改玩家指针为NULL,那么就进行删除
2、找到玩家信息后,发现在线(bool falge)那么不会删除
3、不在线,并且玩家有需要保存的数据,那么就不会删除
4、不在线,并且玩家没有要保存的数据,并且未到删除的时间(玩家的事件处理完毕后,设会记录时间戳,如果这段时间玩家掉线,不会删除玩家数据,以便于玩家网络不好频繁连接游戏时,可以像没有掉线一样重新获得数据,如果删除数据,那么会冲重新加载玩家数据,比较耗时,游戏体验很差)

活动数据的增删该查
我司的数据采用key—value的形式进行保存,
程序启动时,会加载数据,保存到容器当中,
1、当有新增或者删除数据时。
1.1会修改容器中的数据
1.2 同时更新到数据库
数据库的更新机制,采用定时更新,而不是马上更新,这样可以均匀的保存,不至于同一时间需要保存很多数据,反正有信号机制保证服务器在挂掉的时候,进行保存。

2、当有查询数据时,直接从容器中查找,而不是从数据库中查找,这样做的目的是,从容器中查找,一般是map中查找非常迅速,并且容器中的数据和数据库中的数据是一样的。

玩家的保存和删除都是放入到定时中处理的。

下面是一个使用C++编写的示例程序,实现了一个简单的排行榜功能,可以根据用户的输入更新排行榜数据,并将数据存储在文件中。请注意,这只是一个基本示例,你可以根据自己的需求进行修改和扩展。 ```cpp #include <iostream> #include <fstream> #include <vector> #include <algorithm> struct Player { std::string name; int score; }; bool comparePlayers(const Player& p1, const Player& p2) { return p1.score > p2.score; } void addToLeaderboard(const std::string& name, int score, std::vector<Player>& leaderboard) { Player player; player.name = name; player.score = score; leaderboard.push_back(player); std::sort(leaderboard.begin(), leaderboard.end(), comparePlayers); if (leaderboard.size() > 10) { leaderboard.pop_back(); } } void saveLeaderboardToFile(const std::vector<Player>& leaderboard, const std::string& filename) { std::ofstream file(filename); if (file.is_open()) { for (const Player& player : leaderboard) { file << player.name << " " << player.score << std::endl; } file.close(); std::cout << "排行榜数据保存到文件 " << filename << " 中。" << std::endl; } else { std::cout << "无法打开文件 " << filename << " 进行写入操作。" << std::endl; } } void displayLeaderboard(const std::vector<Player>& leaderboard) { std::cout << "排行榜:" << std::endl; for (const Player& player : leaderboard) { std::cout << "昵称:" << player.name << " 积分:" << player.score << std::endl; } } int main() { std::vector<Player> leaderboard; std::string filename = "leaderboard.txt"; // 从文件中读取排行榜数据 std::ifstream file(filename); if (file.is_open()) { std::string name; int score; while (file >> name >> score) { addToLeaderboard(name, score, leaderboard); } file.close(); } while (true) { std::string name; int score; std::cout << "请输入昵称和积分(用空格分隔),输入'q'退出:"; std::cin >> name; if (name == "q") { break; } std::cin >> score; addToLeaderboard(name, score, leaderboard); displayLeaderboard(leaderboard); saveLeaderboardToFile(leaderboard, filename); } return 0; } ``` 这个程序使用了一个 `Player` 结构体来表示玩家的信息,包括昵称和积分。`addToLeaderboard` 函数用于将玩家数据加入到排行榜中,并根据积分排序和删除超出范围的数据。`saveLeaderboardToFile` 函数用于将排行榜数据保存到文件中,`displayLeaderboard` 函数用于显示当前排行榜的内容。 在主函数中,我们首先从文件中读取已有的排行榜数据,然后进入一个循环,让用户输入昵称和积分,将数据加入排行榜,并显示当前排行榜内容,并将数据保存到文件中。用户输入'q'时退出程序。 请注意,你需要在同一目录下创建一个名为 "leaderboard.txt" 的文件来保存排行榜数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值