校园摸金
2026-06-21 10:41:42
发布于:北京
依旧复制到DEVc++里运行就能玩
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
// 怪物结构体
struct Monster
{
string name;
int hp;
int atk;
};
// 地图点位结构体
struct Point
{
string name;
string clue;
bool hasTreasure;
bool hasMonster;
bool isEscape;
bool hasMerchant;
};
// 商人商品结构体
struct ShopItem
{
string name;
int price;
};
// 全局变量
int playerHp = 30;
int playerAtk = 8;
int coin = 150;
vector<string> bag;
vector<string> storage; // 私人无限仓库
vector<string> floorItems; // 地面多物品容器
int MAX_BAG = 6;
int bagLevel = 1;
const int MAX_BAG_LEVEL = 5;
int mapType = 1;
bool hasChest[5];
// 函数声明
void showMain();
void storageSystem();
void chooseMap();
int getPrice(string item);
void upgradeBag();
void shop();
ShopItem getMerchantGoods(int index);
int getMerchantCount();
void merchantShop();
void useItem(int &hpNow);
string getMonsterDrop();
string getRandomChestItem();
string getRandomFloorItem();
void randomChest();
void playGame();
void openBag();
void dropFromBag();
void pickFloorItem();
void autoPickItem(string item);
void addFloorItem(string name);
// 添加物品到地面
void addFloorItem(string name)
{
floorItems.push_back(name);
}
// 获取随机地面刷新道具
string getRandomFloorItem()
{
int r = rand() % 13;
if (r == 0) return "破旧铜钱";
if (r == 1) return "青铜碎片";
if (r == 2) return "旧玉佩";
if (r == 3) return "墨玉";
if (r == 4) return "古籍残卷";
if (r == 5) return "黄金令";
if (r == 6) return "星辰砂";
if (r == 7) return "灵韵石";
if (r == 8) return "天衍图";
if (r == 9) return "校园秘宝";
if (r == 10) return "血瓶";
if (r == 11) return "隐身符";
return "双倍卡";
}
// 自动拾取(宝箱/怪物掉落,背包有空直接进包,满了丢地面)
void autoPickItem(string item)
{
if (bag.size() < MAX_BAG)
{
bag.push_back(item);
cout << "自动拾取【" << item << "】存入背包\n";
}
else
{
addFloorItem(item);
cout << "背包已满,【" << item << "】掉落在地面\n";
}
}
int getMerchantCount()
{
return 8;
}
ShopItem getMerchantGoods(int index)
{
ShopItem item;
if(index == 0)
{
item.name = "血瓶";
item.price = 20;
}
else if(index == 1)
{
item.name = "隐身符";
item.price = 30;
}
else if(index == 2)
{
item.name = "双倍卡";
item.price = 40;
}
else if(index == 3)
{
item.name = "旧玉佩";
item.price = 30;
}
else if(index == 4)
{
item.name = "墨玉";
item.price = 50;
}
else if(index == 5)
{
item.name = "古籍残卷";
item.price = 80;
}
else if(index == 6)
{
item.name = "星辰砂";
item.price = 120;
}
else
{
item.name = "灵韵石";
item.price = 180;
}
return item;
}
string getRandomChestItem()
{
int r = rand() % 13;
if (r == 0) return "破旧铜钱";
if (r == 1) return "青铜碎片";
if (r == 2) return "旧玉佩";
if (r == 3) return "墨玉";
if (r == 4) return "古籍残卷";
if (r == 5) return "黄金令";
if (r == 6) return "星辰砂";
if (r == 7) return "灵韵石";
if (r == 8) return "天衍图";
if (r == 9) return "校园秘宝";
if (r == 10) return "血瓶";
if (r == 11) return "隐身符";
return "双倍卡";
}
// 仓库系统,仅主菜单可用
void storageSystem()
{
system("cls");
int op;
while(1)
{
cout << "======== 私人无限仓库 ========\n";
cout << "仓库容量:无限(摸金途中无法进入)\n";
if(storage.empty())
{
cout << "仓库内暂无任何物品\n";
}
else
{
int i;
for(i = 0; i < storage.size(); i++)
{
cout << i + 1 << "." << storage[i] << endl;
}
}
cout << "\n操作:\n";
cout << "1.将背包物品存入仓库\n";
cout << "2.将仓库物品取出到背包\n";
cout << "0.返回主菜单\n";
cout << "请输入操作:";
cin >> op;
if(op == 0)
{
break;
}
else if(op == 1)
{
if(bag.empty())
{
cout << "背包为空,无物品可存入!\n";
system("pause");
system("cls");
continue;
}
cout << "背包物品列表:\n";
int i;
for(i = 0; i < bag.size(); i++)
{
cout << i + 1 << "." << bag[i] << " 价值:" << getPrice(bag[i]) << "金币\n";
}
cout << "输入要存入仓库的物品序号:";
int x;
cin >> x;
if(x < 1 || x > bag.size())
{
cout << "序号无效!\n";
system("pause");
system("cls");
continue;
}
storage.push_back(bag[x - 1]);
bag.erase(bag.begin() + x - 1);
cout << "成功将物品存入私人仓库!\n";
system("pause");
system("cls");
}
else if(op == 2)
{
if(storage.empty())
{
cout << "仓库为空,无物品可取!\n";
system("pause");
system("cls");
continue;
}
if(bag.size() >= MAX_BAG)
{
cout << "背包已满,无法取出物品!\n";
system("pause");
system("cls");
continue;
}
cout << "仓库物品列表:\n";
int i;
for(i = 0; i < storage.size(); i++)
{
cout << i + 1 << "." << storage[i] << " 价值:" << getPrice(storage[i]) << "金币\n";
}
cout << "输入要取出物品的序号:";
int x;
cin >> x;
if(x < 1 || x > storage.size())
{
cout << "序号无效!\n";
system("pause");
system("cls");
continue;
}
bag.push_back(storage[x - 1]);
storage.erase(storage.begin() + x - 1);
cout << "成功将物品取出放入背包!\n";
system("pause");
system("cls");
}
else
{
cout << "输入错误!\n";
system("pause");
system("cls");
}
}
}
// 修改:打开背包显示每件物品价值
void openBag()
{
system("cls");
cout << "======== 背包 ========\n";
if (bag.empty())
{
cout << "背包空空如也\n";
}
else
{
int i;
for (i = 0; i < bag.size(); i++)
{
cout << i + 1 << "." << bag[i] << " 售价:" << getPrice(bag[i]) << "金币\n";
}
}
cout << "背包容量:" << bag.size() << "/" << MAX_BAG << endl;
cout << "1.丢弃物品 0.关闭背包\n";
int op;
cin >> op;
if (op == 1)
{
dropFromBag();
}
system("pause");
}
void dropFromBag()
{
if (bag.empty())
{
cout << "背包没有物品可丢弃!\n";
return;
}
cout << "请输入要丢弃物品的序号:";
int x;
cin >> x;
if (x < 1 || x > bag.size())
{
cout << "序号无效!\n";
return;
}
addFloorItem(bag[x - 1]);
bag.erase(bag.begin() + x - 1);
cout << "已将物品丢在地面\n";
}
// 拾取地面:列出所有地面物品,自选序号拾取单个
void pickFloorItem()
{
if (floorItems.empty())
{
cout << "地面没有任何物品\n";
system("pause");
return;
}
system("cls");
cout << "======== 地面物品 ========\n";
int i;
for(i = 0; i < floorItems.size(); i++)
{
cout << i + 1 << "." << floorItems[i] << " 价值:" << getPrice(floorItems[i]) << "金币\n";
}
cout << "\n输入要拾取的物品序号,0取消拾取:";
int x;
cin >> x;
if(x == 0)
{
return;
}
if(x < 1 || x > floorItems.size())
{
cout << "序号无效!\n";
system("pause");
return;
}
if(bag.size() >= MAX_BAG)
{
cout << "背包已满,无法拾取!\n";
system("pause");
return;
}
bag.push_back(floorItems[x - 1]);
floorItems.erase(floorItems.begin() + x - 1);
cout << "成功拾取【" << bag.back() << "】\n";
system("pause");
}
int main()
{
int i;
for(i = 0; i < 5; i++)
{
hasChest[i] = false;
}
srand((unsigned)time(NULL));
while(1)
{
showMain();
int op;
cin >> op;
if(op == 1)
{
floorItems.clear(); // 新一局清空地面
playGame();
}
else if(op == 2)
{
shop();
}
else if(op == 3)
{
chooseMap();
}
else if(op == 4)
{
storageSystem();
}
else if(op == 0)
{
break;
}
else
{
cout << "输入错误!\n";
system("pause");
}
}
return 0;
}
void showMain()
{
system("cls");
cout << "======================================\n";
cout << " 校园摸金 完整版\n";
cout << "======================================\n";
cout << " 1.开始摸金 | 2.摸金商城 | 3.切换地图 | 4.私人仓库 | 0.退出\n";
cout << "======================================\n";
if(mapType == 1)
{
cout << "当前地图:南山学院\n";
}
else
{
cout << "当前地图:怪物学院\n";
}
cout << "HP:" << playerHp << " 金币:" << coin << endl;
cout << "背包:" << bag.size() << "/" << MAX_BAG << " (Lv." << bagLevel << "/" << MAX_BAG_LEVEL << ")\n";
cout << "仓库:无限容量(仅主菜单可使用,摸金途中不可打开)\n";
cout << "======================================\n";
cout << "请选择功能:";
}
void chooseMap()
{
system("cls");
cout << "==== 选择地图 ====\n";
cout << "1 南山学院(简单)\n2 怪物学院(困难)\n";
cout << "输入:";
cin >> mapType;
if(mapType < 1 || mapType > 2)
{
mapType = 1;
}
cout << "切换成功!\n";
system("pause");
}
int getPrice(string item)
{
if(item == "破旧铜钱") return 10;
if(item == "青铜碎片") return 15;
if(item == "旧玉佩") return 30;
if(item == "墨玉") return 50;
if(item == "古籍残卷") return 80;
if(item == "黄金令") return 150;
if(item == "校园秘宝") return 300;
if(item == "星辰砂") return 120;
if(item == "灵韵石") return 180;
if(item == "天衍图") return 250;
if(item == "血瓶") return 20;
if(item == "隐身符") return 30;
if(item == "双倍卡") return 40;
return 0;
}
void upgradeBag()
{
if(bagLevel >= MAX_BAG_LEVEL)
{
system("cls");
cout << "==== 背包升级 ====\n";
cout << "背包已达最高等级!\n";
system("pause");
return;
}
int cost = bagLevel * 150;
system("cls");
cout << "==== 背包升级 ====\n";
cout << "当前等级:Lv." << bagLevel << "/" << MAX_BAG_LEVEL << " 容量:" << MAX_BAG << endl;
cout << "升级费用:" << cost << " 金币\n";
cout << "升级后容量 +3\n";
cout << "1.确认升级 0.取消\n";
int opt;
cin >> opt;
if(opt == 0) return;
if(coin >= cost)
{
coin -= cost;
bagLevel++;
MAX_BAG += 3;
cout << "升级成功!背包容量:" << MAX_BAG << endl;
}
else
{
cout << "金币不足!\n";
}
system("pause");
}
void shop()
{
while(1)
{
system("cls");
cout << "============== 摸金商城 ==============\n";
cout << "1.购买血瓶(+20HP) 20金币\n";
cout << "2.购买隐身符 30金币\n";
cout << "3.购买双倍金币卡 40金币\n";
cout << "4.出售背包物品\n";
cout << "5.升级背包\n";
cout << "0.返回主页\n";
cout << "======================================\n";
cout << "金币:" << coin << " | 背包:" << bag.size() << "/" << MAX_BAG << "\n";
int op;
cin >> op;
if(op == 0) break;
if(op == 1)
{
if(coin >= 20)
{
if(bag.size() < MAX_BAG)
{
bag.push_back("血瓶");
coin -= 20;
cout << "购买成功!\n";
}
else cout << "背包已满!\n";
}
else cout << "金币不足!\n";
system("pause");
}
else if(op == 2)
{
if(coin >= 30)
{
if(bag.size() < MAX_BAG)
{
bag.push_back("隐身符");
coin -= 30;
cout << "购买成功!\n";
}
else cout << "背包已满!\n";
}
else cout << "金币不足!\n";
system("pause");
}
else if(op == 3)
{
if(coin >= 40)
{
if(bag.size() < MAX_BAG)
{
bag.push_back("双倍卡");
coin -= 40;
cout << "购买成功!\n";
}
else cout << "背包已满!\n";
}
else cout << "金币不足!\n";
system("pause");
}
else if(op == 4)
{
if(bag.empty())
{
cout << "无物品可卖!\n";
system("pause");
continue;
}
cout << "\n=== 出售物品 ===\n";
int i;
for(i = 0; i < bag.size(); i++)
{
cout << i + 1 << ". " << bag[i] << " 售价:" << getPrice(bag[i]) << " 金币\n";
}
cout << "0.取消\n请选择:";
int x;
cin >> x;
if(x < 1 || x > bag.size()) continue;
coin += getPrice(bag[x - 1]);
cout << "出售成功!+" << getPrice(bag[x - 1]) << " 金币\n";
bag.erase(bag.begin() + x - 1);
system("pause");
}
else if(op == 5)
{
upgradeBag();
}
}
}
void merchantShop()
{
system("cls");
int total = getMerchantCount();
int pick[3];
int i,j;
for(i = 0; i < 3; i++)
{
int r = rand() % total;
int repeat = 0;
for(j = 0; j < i; j++)
{
if(pick[j] == r) repeat = 1;
}
while(repeat == 1)
{
r = rand() % total;
repeat = 0;
for(j = 0; j < i; j++)
{
if(pick[j] == r) repeat = 1;
}
}
pick[i] = r;
}
ShopItem list[3];
for(i = 0; i < 3; i++)
{
list[i] = getMerchantGoods(pick[i]);
if(rand() % 100 < 20)
{
list[i].price = list[i].price * 8 / 10;
}
}
cout << "======= 神秘商人(80%原价 20%打折)=======\n";
for(i = 0; i < 3; i++)
{
cout << i + 1 << ". " << list[i].name << " 价格:" << list[i].price << " 金币\n";
}
cout << "4.出售背包物品\n0.离开\n";
cout << "金币:" << coin << " | 背包:" << bag.size() << "/" << MAX_BAG << "\n";
int opt;
cin >> opt;
if(opt == 0) return;
if(opt >= 1 && opt <= 3)
{
string name = list[opt - 1].name;
int cost = list[opt - 1].price;
if(coin < cost)
{
cout << "金币不足!\n";
system("pause");
return;
}
if(bag.size() >= MAX_BAG)
{
cout << "背包已满!\n";
system("pause");
return;
}
coin -= cost;
bag.push_back(name);
cout << "购买成功:" << name << endl;
}
else if(opt == 4)
{
if(bag.empty())
{
cout << "无物品可卖!\n";
system("pause");
return;
}
cout << "\n=== 出售物品 ===\n";
int i;
for(i = 0; i < bag.size(); i++)
{
cout << i + 1 << ". " << bag[i] << " 售价:" << getPrice(bag[i]) << " 金币\n";
}
cout << "0.取消\n请选择:";
int x;
cin >> x;
if(x < 1 || x > bag.size()) return;
coin += getPrice(bag[x - 1]);
cout << "出售成功!+" << getPrice(bag[x - 1]) << " 金币\n";
bag.erase(bag.begin() + x - 1);
}
system("pause");
}
void useItem(int &hpNow)
{
system("cls");
if(bag.empty())
{
cout << "无道具可用!\n";
system("pause");
return;
}
cout << "=== 使用道具 ===\n";
int i;
for(i = 0; i < bag.size(); i++)
{
cout << i + 1 << ". " << bag[i] << " 价值:" << getPrice(bag[i]) << "金币\n";
}
cout << "0.取消\n选择:";
int x;
cin >> x;
x--;
if(x < 0 || x >= bag.size()) return;
string it = bag[x];
if(it == "血瓶")
{
hpNow += 20;
cout << "使用血瓶,HP +20!\n";
bag.erase(bag.begin() + x);
}
else
{
cout << "该道具无法在此使用!\n";
}
system("pause");
}
string getMonsterDrop()
{
int r = rand() % 100;
if(r < 25) return "破旧铜钱";
else if(r < 45) return "青铜碎片";
else if(r < 60) return "血瓶";
else if(r < 72) return "旧玉佩";
else if(r < 80) return "墨玉";
else if(r < 87) return "古籍残卷";
else if(r < 92) return "黄金令";
else if(r < 96) return "星辰砂";
else if(r < 99) return "灵韵石";
else return "天衍图";
}
void randomChest()
{
int i;
for(i = 0; i < 5; i++)
{
hasChest[i] = false;
}
int cnt = rand() % 2 + 1;
for(i = 0; i < cnt; i++)
{
int pos = rand() % 5;
hasChest[pos] = true;
}
}
void playGame()
{
system("cls");
vector<Point> map;
Point p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
p1.name = "图书馆玄墓";
p1.clue = "书卷藏妖";
p1.hasTreasure = false;
p1.hasMonster = true;
p1.isEscape = false;
p1.hasMerchant = false;
p2.name = "赤阶操场";
p2.clue = "野怪游荡";
p2.hasTreasure = false;
p2.hasMonster = true;
p2.isEscape = false;
p2.hasMerchant = false;
p3.name = "青庭秘冢";
p3.clue = "埋藏宝藏";
p3.hasTreasure = true;
p3.hasMonster = false;
p3.isEscape = false;
p3.hasMerchant = false;
p4.name = "寒窗教学楼";
p4.clue = "守卫盘踞";
p4.hasTreasure = false;
p4.hasMonster = true;
p4.isEscape = false;
p4.hasMerchant = false;
p5.name = "安全撤离区";
p5.clue = "成功撤离";
p5.hasTreasure = false;
p5.hasMonster = false;
p5.isEscape = true;
p5.hasMerchant = false;
p6.name = "魔化书馆";
p6.clue = "妖气冲天";
p6.hasTreasure = false;
p6.hasMonster = true;
p6.isEscape = false;
p6.hasMerchant = false;
p7.name = "暗黑操场";
p7.clue = "魔物横行";
p7.hasTreasure = false;
p7.hasMonster = true;
p7.isEscape = false;
p7.hasMerchant = false;
p8.name = "诅咒花园";
p8.clue = "终极秘宝";
p8.hasTreasure = true;
p8.hasMonster = false;
p8.isEscape = false;
p8.hasMerchant = false;
p9.name = "幽魂主楼";
p9.clue = "极度危险";
p9.hasTreasure = false;
p9.hasMonster = true;
p9.isEscape = false;
p9.hasMerchant = false;
p10.name = "异界撤离点";
p10.clue = "平安撤离";
p10.hasTreasure = false;
p10.hasMonster = false;
p10.isEscape = true;
p10.hasMerchant = false;
if(mapType == 1)
{
map.push_back(p1);
map.push_back(p2);
map.push_back(p3);
map.push_back(p4);
map.push_back(p5);
}
else
{
map.push_back(p6);
map.push_back(p7);
map.push_back(p8);
map.push_back(p9);
map.push_back(p10);
}
if(rand() % 100 < 40)
{
int pos = rand() % 5;
map[pos].hasMerchant = true;
}
randomChest();
int tempHp = playerHp;
bool getTreasure = false;
bool doubleGold = false;
int i = 0;
while(i < bag.size())
{
if(bag[i] == "双倍卡")
{
doubleGold = true;
bag.erase(bag.begin() + i);
}
else
{
i++;
}
}
while(tempHp > 0)
{
system("cls");
// 每回合25%概率刷新一件随机地面道具
if(rand() % 100 < 25)
{
string newItem = getRandomFloorItem();
addFloorItem(newItem);
cout << "地面刷新出【" << newItem << "】\n";
system("pause");
system("cls");
}
cout << "======== 摸金探索 ========\n";
cout << "当前HP:" << tempHp << "\n";
cout << "操作指令:1-5移动点位 | 6使用道具 | 7打开背包 | 8拾取地面物品 | 0返回主页\n";
// 打印当前地面全部物品
cout << "【地面物品】";
if(floorItems.empty())
{
cout << "无\n";
}
else
{
for(i = 0; i < floorItems.size(); i++)
{
cout << floorItems[i] << " ";
}
cout << "\n";
}
cout << "地图点位:\n";
for(i = 0; i < 5; i++)
{
cout << i + 1 << "." << map[i].name;
if(map[i].isEscape) cout << "【撤离点】";
if(hasChest[i]) cout << "【宝箱】";
if(map[i].hasMerchant) cout << "【商人】";
cout << endl;
}
int sel;
cin >> sel;
if(sel == 0) break;
if(sel == 6)
{
useItem(tempHp);
continue;
}
if(sel == 7)
{
openBag();
continue;
}
if(sel == 8)
{
pickFloorItem();
continue;
}
if(sel < 1 || sel > 5) continue;
Point cur = map[sel - 1];
system("cls");
cout << "抵达:" << cur.name << endl;
if(cur.hasMerchant)
{
cout << "? 遇到神秘商人!\n";
merchantShop();
cur.hasMerchant = false;
}
// 开宝箱自动拾取,背包满丢地面列表
if(hasChest[sel - 1])
{
int g;
if(mapType == 1) g = 20;
else g = 35;
if(doubleGold) g *= 2;
coin += g;
string chestItem = getRandomChestItem();
cout << "? 打开宝箱,+" << g << " 金币\n";
autoPickItem(chestItem);
hasChest[sel - 1] = false;
system("pause");
}
if(cur.isEscape)
{
int g;
if(getTreasure) g = 60;
else g = 20;
if(doubleGold) g *= 2;
coin += g;
cout << "? 安全撤离!+" << g << " 金币\n";
system("pause");
break;
}
if(cur.hasMonster)
{
Monster m;
if(mapType == 1)
{
if(sel == 1)
{
m.name = "书灵";
m.hp = 15;
m.atk = 5;
}
else if(sel == 2)
{
m.name = "风影怪";
m.hp = 18;
m.atk = 6;
}
else
{
m.name = "守卫";
m.hp = 20;
m.atk = 7;
}
}
else
{
if(sel == 1)
{
m.name = "魔化书灵";
m.hp = 25;
m.atk = 8;
}
else if(sel == 2)
{
m.name = "暗黑猎手";
m.hp = 30;
m.atk = 10;
}
else
{
m.name = "幽魂守卫";
m.hp = 35;
m.atk = 12;
}
}
cout << "遭遇怪物:" << m.name << endl;
while(tempHp > 0 && m.hp > 0)
{
system("cls");
cout << "你的HP:" << tempHp << " | 怪物HP:" << m.hp << "\n";
cout << "1.攻击 2.逃跑 3.道具\n选择:";
int act;
cin >> act;
if(act == 2)
{
cout << "你逃跑了!\n";
system("pause");
break;
}
if(act == 3)
{
useItem(tempHp);
continue;
}
m.hp -= playerAtk;
cout << "你造成 " << playerAtk << " 伤害!\n";
if(m.hp <= 0)
{
int g;
if(mapType == 1) g = 15;
else g = 25;
if(doubleGold) g *= 2;
coin += g;
string drop = getMonsterDrop();
cout << "? 击杀怪物!+" << g << " 金币\n";
autoPickItem(drop);
system("pause");
break;
}
tempHp -= m.atk;
cout << m.name << " 反击!你受到 " << m.atk << " 伤害!\n";
system("pause");
}
}
if(cur.hasTreasure)
{
getTreasure = true;
cout << "?? 找到终极宝藏!\n";
system("pause");
}
}
if(tempHp <= 0)
{
system("cls");
cout << "? 你已死亡!背包所有物品清空!\n";
bag.clear();
tempHp = 30;
system("pause");
}
playerHp = tempHp;
}
这里空空如也



















有帮助,赞一个