介绍
有三个选项
1. 战斗
2. 保存游戏进度
3. 退出游戏
当用户选择1时就会对"魔王"造成damage点伤害。
当用户选择2时会保存游戏进度,生成一个叫"savegame.txt"的txt的文件,存储了"勇士"和"魔王"的血量等
当用户选择3时就会直接退出
实现
可以分别分成:头文件,定义角色类,构造函数,战斗函数,升级函数,保存游戏进度, 加载游戏进度,保存后重新进入时的加载游戏进度,操作。
头文件
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <ctime>
定义角色类
class Character {
public:
string name;
int level;
int exp;
int hp;
int maxHp;
int attack;
int defense;
构造函数
Character(string n, int l, int e, int h, int a, int d) {
name = n;
level = l;
exp = e;
hp = h;
maxHp = h;
attack = a;
defense = d;
}
战斗函数
void fight(Character& enemy) {
int damage = attack - enemy.defense;
if (damage < 0) {
damage = 0;
}
enemy.hp -= damage;
cout << name << "攻击了" << enemy.name << ",造成了" << damage << "点伤害。" << endl;
if (enemy.hp <= 0) {
cout << enemy.name << "被击败了!" << endl;
int gainExp = rand() % 10 + 1;
cout << name << "获得了" << gainExp << "点经验值。" << endl;
exp += gainExp;
if (exp >= level * 10) {
levelUp();
}
enemy.hp = enemy.maxHp;
}
}
升级函数
void levelUp() {
level++;
exp = 0;
maxHp += rand() % 5 + 1;
attack += rand() % 3 + 1;
defense += rand() % 3 + 1;
cout << name << "升级了!" << endl;
cout << "等级:" << level << endl;
cout << "生命值:" << maxHp << endl;
cout << "攻击力:" << attack << endl;
cout << "防御力:" << defense << endl;
}
};
保存游戏进度
void saveGame(Character& player) {
ofstream outfile("savegame.txt");
if (outfile.is_open()) {
outfile << player.name << endl;
outfile << player.level << endl;
outfile << player.exp << endl;
outfile << player.hp << endl;
outfile << player.maxHp << endl;
outfile << player.attack << endl;
outfile << player.defense << endl;
outfile.close();
cout << "游戏进度已保存。" << endl;
}
else {
cout << "无法保存游戏进度。" << endl;
}
}
加载游戏进度
bool loadGame(Character& player) {
ifstream infile("savegame.txt");
if (infile.is_open()) {
string name;
int level, exp, hp, maxHp, attack, defense;
infile >> name >> level >> exp >> hp >> maxHp >> attack >> defense;
player = Character(name, level, exp, hp, attack, defense);
infile.close();
cout << "游戏进度已加载。" << endl;
return true;
}
else {
cout << "无法加载游戏进度。" << endl;
return false;
}
}
int main() {
srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
Character player("勇士", 1, 0, 10, 3, 2); // 创建角色
Character enemy("魔王", 1, 0, 10, 2, 1); // 创建敌人
cout << "欢迎来到挂机游戏!" << endl;
保存后重新进入时的加载游戏进度
if (loadGame(player)) {
cout << "继续游戏?(y/n)" << endl;
char choice;
cin >> choice;
if (choice == 'n') {
player = Character("勇士", 1, 0, 10, 3, 2);
cout << "游戏进度已重置。" << endl;
}
}
操作
while (true) {
cout << "当前状态:" << endl;
cout << "等级:" << player.level << endl;
cout << "经验值:" << player.exp << endl;
cout << "生命值:" << player.hp << "/" << player.maxHp << endl;
cout << "攻击力:" << player.attack << endl;
cout << "防御力:" << player.defense << endl;
cout << "请选择操作:" << endl;
cout << "1. 战斗" << endl;
cout << "2. 保存游戏进度" << endl;
cout << "3. 退出游戏" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
player.fight(enemy);
break;
case 2:
saveGame(player);
break;
case 3:
return 0;
default:
cout << "无效的选择。" << endl;
break;
}
}
return 0;
}
完整代码
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
// 定义角色类
class Character {
public:
string name;
int level;
int exp;
int hp;
int maxHp;
int attack;
int defense;
// 构造函数
Character(string n, int l, int e, int h, int a, int d) {
name = n;
level = l;
exp = e;
hp = h;
maxHp = h;
attack = a;
defense = d;
}
// 战斗函数
void fight(Character& enemy) {
int damage = attack - enemy.defense;
if (damage < 0) {
damage = 0;
}
enemy.hp -= damage;
cout << name << "攻击了" << enemy.name << ",造成了" << damage << "点伤害。" << endl;
if (enemy.hp <= 0) {
cout << enemy.name << "被击败了!" << endl;
int gainExp = rand() % 10 + 1;
cout << name << "获得了" << gainExp << "点经验值。" << endl;
exp += gainExp;
if (exp >= level * 10) {
levelUp();
}
enemy.hp = enemy.maxHp;
}
}
// 升级函数
void levelUp() {
level++;
exp = 0;
maxHp += rand() % 5 + 1;
attack += rand() % 3 + 1;
defense += rand() % 3 + 1;
cout << name << "升级了!" << endl;
cout << "等级:" << level << endl;
cout << "生命值:" << maxHp << endl;
cout << "攻击力:" << attack << endl;
cout << "防御力:" << defense << endl;
}
};
// 保存游戏进度
void saveGame(Character& player) {
ofstream outfile("savegame.txt");
if (outfile.is_open()) {
outfile << player.name << endl;
outfile << player.level << endl;
outfile << player.exp << endl;
outfile << player.hp << endl;
outfile << player.maxHp << endl;
outfile << player.attack << endl;
outfile << player.defense << endl;
outfile.close();
cout << "游戏进度已保存。" << endl;
}
else {
cout << "无法保存游戏进度。" << endl;
}
}
// 加载游戏进度
bool loadGame(Character& player) {
ifstream infile("savegame.txt");
if (infile.is_open()) {
string name;
int level, exp, hp, maxHp, attack, defense;
infile >> name >> level >> exp >> hp >> maxHp >> attack >> defense;
player = Character(name, level, exp, hp, attack, defense);
infile.close();
cout << "游戏进度已加载。" << endl;
return true;
}
else {
cout << "无法加载游戏进度。" << endl;
return false;
}
}
int main() {
srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
Character player("勇士", 1, 0, 10, 3, 2); // 创建角色
Character enemy("魔王", 1, 0, 10, 2, 1); // 创建敌人
cout << "欢迎来到挂机游戏!" << endl;
// 加载游戏进度
if (loadGame(player)) {
cout << "继续游戏?(y/n)" << endl;
char choice;
cin >> choice;
if (choice == 'n') {
player = Character("勇士", 1, 0, 10, 3, 2);
cout << "游戏进度已重置。" << endl;
}
}
while (true) {
cout << "当前状态:" << endl;
cout << "等级:" << player.level << endl;
cout << "经验值:" << player.exp << endl;
cout << "生命值:" << player.hp << "/" << player.maxHp << endl;
cout << "攻击力:" << player.attack << endl;
cout << "防御力:" << player.defense << endl;
cout << "请选择操作:" << endl;
cout << "1. 战斗" << endl;
cout << "2. 保存游戏进度" << endl;
cout << "3. 退出游戏" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
player.fight(enemy);
break;
case 2:
saveGame(player);
break;
case 3:
return 0;
default:
cout << "无效的选择。" << endl;
break;
}
}
return 0;
}
文件下载
百度网盘:https://pan.baidu.com/s/1rUbr6NuXd79Mdv6_MGJKbQ
提取码:nzx9