社区讨论
关于ChatGPT
灌水区参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lrodg74m
- 此快照首次捕获于
- 2024/01/22 11:32 2 年前
- 此快照最后确认于
- 2024/01/22 15:07 2 年前
今天叫ChatGPT写了个游戏,结果不能用notpade运行,有人能告诉我他写了个啥东西吗?为什么运行不了?
CPP#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
// 角色类:存储角色的属性和状态
class Character {
public:
Character(const std::string& name, int maxHealth, int attack) :
mName(name), mMaxHealth(maxHealth), mHealth(maxHealth), mAttack(attack) {}
const std::string& getName() const { return mName; }
int getHealth() const { return mHealth; }
int getMaxHealth() const { return mMaxHealth; }
int getAttack() const { return mAttack; }
void takeDamage(int damage) { mHealth -= damage; }
void heal(int amount) { mHealth = std::min(mHealth + amount, mMaxHealth); }
private:
std::string mName;
int mMaxHealth;
int mHealth;
int mAttack;
};
// 地图类:存储地图数据和当前位置
class Map {
public:
enum TileType {
TILE_EMPTY,
TILE_MONSTER,
TILE_TREASURE
};
Map(int size) : mSize(size), mPlayerPos(0, 0) {
mTiles.resize(size * size);
}
void generate() {
// 随机生成地图
for (int i = 0; i < mTiles.size(); i++) {
if (rand() % 10 == 0) {
mTiles[i] = TILE_MONSTER;
} else if (rand() % 10 == 1) {
mTiles[i] = TILE_TREASURE;
} else {
mTiles[i] = TILE_EMPTY;
}
}
// 将起点和终点设置为 TILE_EMPTY
setTile(0, 0, TILE_EMPTY);
setTile(mSize - 1, mSize - 1, TILE_EMPTY);
}
TileType getTile(int x, int y) const {
return mTiles[y * mSize + x];
}
void setTile(int x, int y, TileType type) {
mTiles[y * mSize + x] = type;
}
std::pair<int, int> getPlayerPos() const {
return mPlayerPos;
}
void movePlayer(int dx, int dy) {
int x = mPlayerPos.first + dx;
int y = mPlayerPos.second + dy;
if (x >= 0 && x < mSize && y >= 0 && y < mSize) {
mPlayerPos = std::make_pair(x, y);
}
}
private:
int mSize;
std::vector<TileType> mTiles;
std::pair<int, int> mPlayerPos;
};
// 游戏类:管理游戏的整个流程
class Game {
public:
Game(const std::string& playerName) :
mPlayer(playerName, 100, 10), mMap(10) {}
void run() {
std::cout << "欢迎来到探险游戏!\n";
std::cout << "你的目标是到达宝藏并回到起点。\n\n";
// 随机生成地图
srand(time(0));
mMap.generate();
// 显示地图和玩家位置
displayMap();
// 循环执行每一步,直到玩家到达终点或死亡
while (true) {
char choice;
// 显示角色属性和菜单
displayStats();
std::cout << "请选择动作(w/a/s/d):";
std::cin >> choice;
std::cout << "\n";
// 移动玩家
int dx = 0;
int dy = 0;
switch (choice) {
case 'w': dy = -1; break;
case 'a': dx = -1; break;
case 's': dy = 1; break;
case 'd': dx = 1; break;
}
mMap.movePlayer(dx, dy);
std::pair<int, int> playerPos = mMap.getPlayerPos();
// 处理当前位置的事件
switch (mMap.getTile(playerPos.first, playerPos.second)) {
case Map::TILE_MONSTER:
fightEnemy();
break;
case Map::TILE_TREASURE:
collectTreasure();
break;
}
// 检查游戏结束条件
if (playerPos == std::make_pair(mMap.getSize() - 1, mMap.getSize() - 1)) {
std::cout << "恭喜你找到了宝藏!\n";
break;
} else if (mPlayer.getHealth() <= 0) {
std::cout << "你死了!游戏结束。\n";
break;
}
// 显示地图和玩家位置
displayMap();
}
}
private:
Character mPlayer;
Map mMap;
void displayMap() const {
std::cout << "地图:\n";
for (int y = 0; y < mMap.getSize(); y++) {
for (int x = 0; x < mMap.getSize(); x++) {
if (std::make_pair(x, y) == mMap.getPlayerPos()) {
std::cout << "P";
} else {
switch (mMap.getTile(x, y)) {
case Map::TILE_EMPTY: std::cout << "."; break;
case Map::TILE_MONSTER: std::cout << "M"; break;
case Map::TILE_TREASURE: std::cout << "T"; break;
}
}
}
std::cout << "\n";
}
std::cout << "\n";
}
void displayStats() const {
std::cout << "角色属性:\n";
std::cout << "姓名:" << mPlayer.getName() << "\n";
std::cout << "生命值:" << mPlayer.getHealth() << "/" << mPlayer.getMaxHealth() << "\n";
std::cout << "攻击力:" << mPlayer.getAttack() << "\n\n";
}
void fightEnemy() {
std::cout << "你遇到了一个怪物!\n";
int enemyHealth = rand() % 20 + 10;
int enemyAttack = rand() % 5 + 5;
while (true) {
std::cout << "你的生命值:" << mPlayer.getHealth() << "/" << mPlayer.getMaxHealth() << "\n";
std::cout << "怪物的生命值:" << enemyHealth << "\n\n";
char choice;
std::cout << "请选择动作(a/h):";
std::cin >> choice;
std::cout << "\n";
if (choice == 'a') {
int damage = mPlayer.getAttack();
std::cout << "你攻击了怪物,造成了 " << damage << " 点伤害。\n";
enemyHealth -= damage;
} else if (choice == 'h') {
int healAmount = rand() % 10 + 5;
mPlayer.heal(healAmount);
std::cout << "你恢复了 " << healAmount << " 点生命值。\n";
}
if (enemyHealth <= 0) {
std::cout << "你打败了怪物!\n";
break;
}
int damage = enemyAttack;
std::cout << "怪物攻击了你,造成了 " << damage << " 点伤害。\n";
mPlayer.takeDamage(damage);
if (mPlayer.getHealth() <= 0) {
std::cout << "你被怪物打败了!\n";
break;
}
}
}
void collectTreasure() {
int treasureAmount = rand() % 30 + 10;
std::cout << "你找到了一个宝箱,里面有 " << treasureAmount << " 个金币!\n";
}
};
int main() {
std::string playerName;
std::cout << "请输入你的姓名:";
std::cin >> playerName;
Game game(playerName);
game.run();
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...