c++小游戏--[斗罗大陆]
【代码】c++小游戏--[斗罗大陆]
·
还没完成,但能玩
#include <iostream>
#include <conio.h>
#include <string>
#include <map>
#include <cmath>
#include <windows.h>
#include <time.h>
#include <vector>
#include <cstdlib>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
// 全局变量声明
string ji[10], name, hun, zh, hm;
string wuhun[8] = {"光明女神蝶", "蓝银草", "邪火凤凰", "蓝电霸王龙", "修罗神", "天使神", "罗刹神", "海神"};
long long fu, fu2, xuan, hun1, hunli1, jixu, nianling = 6, hp, mm, j, yi, huns, x, n, wh;
long long hhp, hg, h, hs, g, wj[9], jj, thp, jjj, huan[10], hh[100], js, kj, zhuang;
long long n1[100], she = 100, jy;
vector<long long> hunhuan; // 改为vector更安全
bool inBattle = false;
// 颜色设置
void color(int a) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);
}
// 清屏
void cls() {
system("cls");
}
// 初始化武魂技能
void initSkills() {
if (hun == "光明女神蝶") {
ji[1] = "翅翼铡刀"; ji[2] = "蝶神之光"; ji[3] = "蝶神斩";
ji[4] = "六芒星阵"; ji[5] = "光神附体"; ji[6] = "蝶神舞";
ji[7] = "武魂真身"; ji[8] = "龙舞耀阳"; ji[9] = "海神降临";
}
else if (hun == "蓝银草") {
ji[1] = "缠绕"; ji[2] = "寄生"; ji[3] = "蛛网束缚";
ji[4] = "蓝银囚笼"; ji[5] = "蓝银霸皇枪"; ji[6] = "虚无";
ji[7] = "武魂真身"; ji[8] = "蓝银虎鲸镜之灭"; ji[9] = "蓝银天青龙之魂";
}
else if (hun == "邪火凤凰") {
ji[1] = "凤凰火线"; ji[2] = "浴火凤凰"; ji[3] = "凤翼天翔";
ji[4] = "凤凰甲"; ji[5] = "凤凰啸天击"; ji[6] = "凤凰流星雨";
ji[7] = "武魂真身"; ji[8] = "凤凰裂地舞"; ji[9] = "凤凰霸天舞";
}
else if (hun == "蓝电霸王龙") {
ji[1] = "雷霆龙爪"; ji[2] = "神龙摆尾"; ji[3] = "霸道雷霆";
ji[4] = "雷霆龙甲"; ji[5] = "蓝电霸王枪"; ji[6] = "雷霆审判";
ji[7] = "武魂真身"; ji[8] = "蓝电龙皇傲"; ji[9] = "蓝电神龙破";
}
// 其他武魂技能初始化...
}
// 角色面板
void geren(int k) {
cls();
color(15); cout << "=====================================" << endl;
color(15); cout << "姓名:" << name << endl;
color(9); cout << "魂力:" << hunli1 << "级" << endl;
color(11); cout << "年龄:" << nianling << "岁" << endl;
color(6); cout << "武魂:" << hun << endl;
color(4); cout << "血量:" << hp << endl;
color(2); cout << "攻击:" << g << endl;
color(3); cout << "经验:" << jy << "/" << she << endl;
color(5); cout << "魂环年限:";
for (int i = 0; i < 9; i++) {
if (wj[i] != 0) cout << wj[i] << "年 ";
}
cout << endl;
color(15); cout << "=====================================" << endl;
system("pause");
}
// 魂力测试
void hunli(int k) {
cls();
color(15); cout << name << ", 测试魂力" << endl;
srand(time(0));
hunli1 = rand() % 10 + 1;
color(8); cout << "先天魂力:" << hunli1 << endl;
color(15); cout << "(按1继续)" << endl;
cin >> jixu;
she = hunli1 * 100;
hp = hunli1 * 100;
g = hunli1 * 10;
}
// 武魂觉醒
void juexin(int k) {
srand(time(0));
wh = rand() % 4;
hun = wuhun[wh];
initSkills();
}
// 战斗系统
int donghua(int k) {
inBattle = true;
jjj = 0;
thp = hp;
while (jjj <= 100 && hp > 0 && hhp > 0) {
cls();
color(15); cout << "=====================================" << endl;
cout << name << " VS " << hm << " (等级:" << n << ")" << endl;
cout << "回合数:" << jjj << "/100" << endl;
cout << "你的血量: " << hp << " " << hm << "的血量: " << hhp << endl;
cout << "你的攻击力: " << g << " " << hm << "的攻击力: " << hg << endl;
cout << "=====================================" << endl;
// 显示技能选择
for (int i = 1; i <= 9; i++) {
if (!ji[i].empty()) {
color(i + 5);
cout << i << "." << ji[i];
if (wj[i-1] > 0) cout << "(" << wj[i-1] << "年)";
cout << " ";
}
}
cout << "\n0.普通攻击" << endl;
// 获取玩家输入
cin >> x;
if (x < 0 || x > 9) continue;
cls();
if (x == 0) {
color(15);
cout << name << " 使用了普通攻击" << endl;
hhp -= g;
}
else if (x >= 1 && x <= 9 && !ji[x].empty()) {
color(x + 5);
cout << name << " 使用了 " << ji[x];
if (wj[x-1] > 0) cout << " (" << wj[x-1] << "年魂环技能)";
cout << endl;
// 技能伤害计算
int damage = g * (1 + x * 0.2); // 技能等级加成
if (wj[x-1] > 0) damage *= 1.5; // 魂环技能加成
hhp -= damage;
}
// 战斗结果判断
if (hhp <= 0) {
color(10);
cout << "你杀死了 " << hm << "! 获得 " << n * 10 << " 经验" << endl;
jy += n * 10;
hp = thp;
inBattle = false;
system("pause");
return n;
}
// 敌人反击
color(12);
cout << hm << " 攻击了你!" << endl;
hp -= hg;
if (hp <= 0) {
color(12);
cout << hm << " 杀死了你!" << endl;
hp = thp;
inBattle = false;
system("pause");
return 0;
}
jjj++;
system("pause");
}
inBattle = false;
return 0;
}
// 魂环背包
void hunhuanBag() {
int a;
while(1) {
cls();
color(15);
cout << "=====================================" << endl;
color(14); cout << "魂环背包" << endl;
color(15); cout << "=====================================" << endl;
// 显示部分(修正数组边界)
if(hunhuan.size() == 0) {
color(12); cout << "背包中没有魂环!" << endl;
} else {
for(size_t i=0; i<hunhuan.size(); i++) {
color(13);
cout << i+1 << ". ";
color(11);
cout << hunhuan[i] << "年魂环";
// 显示可吸收的槽位(保持原逻辑)
if(hunhuan[i] > 0) {
color(10);
cout << " [可吸收到: ";
for(int j=1; j<=9; j++) {
if(ji[j] == "" || wj[j-1] == 0) {
cout << j << " ";
}
}
cout << "]";
}
cout << endl;
}
}
color(15);
cout << "=====================================" << endl;
color(10); cout << "1.吸收魂环 ";
color(12); cout << "2.丢弃魂环 ";
color(14); cout << "0.返回" << endl;
cin >> a;
if(a == 0) break;
// 吸收魂环部分(修正索引处理)
if(a == 1) {
if(hunhuan.size() == 0) {
color(12); cout << "没有可吸收的魂环!" << endl;
system("pause");
continue;
}
int b, c;
color(14); cout << "选择要吸收的魂环编号(1-" << hunhuan.size() << "): ";
cin >> b;
b--; // 转换为0-based
if(b < 0 || b >= hunhuan.size()) {
color(12); cout << "无效的选择!" << endl;
system("pause");
continue;
}
// 显示可用槽位(保持原逻辑)
color(10); cout << "可用的技能槽: ";
for(int j=1; j<=9; j++) {
if(ji[j] == "" || wj[j-1] == 0) {
cout << j << " ";
}
}
cout << endl;
color(14); cout << "选择技能槽(1-9): ";
cin >> c;
if(c < 1 || c > 9) {
color(12); cout << "无效的技能槽!" << endl;
system("pause");
continue;
}
// 执行吸收(保持原逻辑)
wj[c-1] = hunhuan[b];
hunhuan.erase(hunhuan.begin() + b);
if(ji[c] == "") {
ji[c] = "技能" + c;
}
color(10); cout << "成功吸收魂环到技能槽" << c << "!" << endl;
system("pause");
}
// 丢弃魂环部分(修正边界检查)
else if(a == 2) {
if(hunhuan.size() == 0) {
color(12); cout << "背包中没有魂环!" << endl;
system("pause");
continue;
}
int b;
color(14); cout << "选择要丢弃的魂环编号(1-" << hunhuan.size() << "): ";
cin >> b;
b--;
if(b >= 0 && b < hunhuan.size()) {
hunhuan.erase(hunhuan.begin() + b);
color(10); cout << "魂环已丢弃!" << endl;
} else {
color(12); cout << "无效的选择!" << endl;
}
system("pause");
}
}
}
// 魂兽区域
void huntArea() {
cls();
color(15); cout << "=====================================" << endl;
color(12);
cout << "1.星斗大森林外围 危险指数:★" << endl;
cout << "2.星斗大森林核心 危险指数:★★" << endl;
cout << "3.落日大森林外围 危险指数:★★★" << endl;
cout << "4.落日大森林核心 危险指数:★★★★" << endl;
cout << "5.极北之地外围 危险指数:★★★★" << endl;
cout << "6.极北之地核心 危险指数:★★★★★" << endl;
cin >> huns;
if (huns < 1 || huns > 6) return;
// 随机遇到魂兽
srand(time(0));
hs = rand() % 5;
struct Monster {
string name;
long long hp;
long long atk;
long long level;
long long exp;
};
Monster monster;
// 修改后(降低魂兽数值):
if (huns == 1) { // 星斗外围
Monster monsters[] = {
{"甲壳虫", 80, 8, 1, 10}, // HP-65%, ATK-60%
{"独狼", 100, 12, 3, 20}, // HP-60%, ATK-52%
{"曼陀罗蛇", 120, 15, 2, 15}, // HP-57%, ATK-52%
{"鬼藤", 150, 18, 4, 30}, // HP-56%, ATK-47%
{"人面魔蛛", 200, 25, 8, 60} // HP-64%, ATK-55%
};
monster = monsters[hs];
}
else if (huns == 2) { // 星斗核心
Monster monsters[] = {
{"人面蛛皇", 1500, 80, 30, 400}, // HP-83%, ATK-82%
{"千钧蚁皇", 2000, 120, 60, 800}, // HP-80%, ATK-78%
{"暗魔邪神虎", 3000, 180, 120, 1500}, // HP-84%, ATK-84%
{"泰坦巨猿", 4000, 220, 180, 2000}, // HP-87%, ATK-86%
{"天青牛蟒", 4500, 280, 200, 2500} // HP-86%, ATK-87%
};
monster = monsters[hs];
}
// 其他区域...
if (hs == 0) {
cout << "没有遇到魂兽" << endl;
} else {
hm = monster.name;
hhp = monster.hp;
hg = monster.atk;
n = monster.level;
// 战斗
int result = donghua(0);
if (result > 0) {
// 掉落魂环
// 修改前:
long long hunhuanYear = n * 150 + rand() % (n * 70); // 基础+50%,随机范围+40%
hunhuan.push_back(hunhuanYear);
color(14); cout << "获得 " << hunhuanYear << " 年魂环!" << endl;
}
}
system("pause");
}
// 升级系统
void levelUp() {
if (jy >= she) {
long long oldLevel = hunli1;
hunli1 +=1;
jy = jy % she;
// 升级属性提升
if (hunli1 <= 10) she = hunli1 * 100;
else if (hunli1 <= 20) she = hunli1 * 100, hp += hunli1 * 100, g += hunli1 * 10;
else if (hunli1 <= 30) she = hunli1 * 200, hp += hunli1 * 150, g += hunli1 * 15;
else if (hunli1 <= 40) she = hunli1 * 300, hp += hunli1 * 200, g += hunli1 * 20;
else if (hunli1 <= 50) she = hunli1 * 400, hp += hunli1 * 250, g += hunli1 * 25;
else if (hunli1 <= 60) she = hunli1 * 500, hp += hunli1 * 300, g += hunli1 * 30;
else if (hunli1 <= 70) she = hunli1 * 600, hp += hunli1 * 350, g += hunli1 * 35;
else if (hunli1 <= 80) she = hunli1 * 700, hp += hunli1 * 400, g += hunli1 * 40;
else if (hunli1 <= 90) she = hunli1 * 800, hp += hunli1 * 450, g += hunli1 * 45;
else if (hunli1 <= 95) she = hunli1 * 900, hp += hunli1 * 500, g += hunli1 * 50;
else if (hunli1 <= 99) she = hunli1 * 1000, hp += hunli1 * 550, g += hunli1 * 55;
else she = 10000000;
if (hunli1 > oldLevel) {
color(14); cout << "恭喜升级到 " << hunli1 << " 级!" << endl;
system("pause");
}
}
}
// 主菜单
void mainMenu() {
while (true) {
cls();
color(6); cout << "==========================================" << endl;
color(3); cout << "1.移动 2.个人 3.魂环背包 4.系统 5.退出游戏" << endl;
cin >> xuan;
if (xuan == 1) {
cls();
color(3); cout << "=====================================" << endl;
cout << "1.学院 2.武魂殿 3.杀戮之都 4.魂兽区域" << endl;
cin >> yi;
if (yi == 4) {
huntArea();
}
// 其他地点...
}
else if (xuan == 2) {
geren(1);
}
else if (xuan == 3) {
hunhuanBag();
}
else if (xuan == 4) {
cls();
color(13); cout << "=====================================" << endl;
cout << "1.主线任务 2.系统商店 3.支线任务" << endl;
cin >> yi;
if (yi == 1) {
cls();
color(1); cout << "当前主线任务: 突破到 " << (hunli1/10+1)*10 << "级" << endl;
}
// 其他系统功能...
}
else if (xuan == 5) {
cls();
if (MessageBox(NULL, "确认退出吗?退出会导致存档消失", "斗罗大陆", MB_OKCANCEL) == IDOK) {
exit(0);
}
}
// 检查升级
levelUp();
}
}
int main() {
// 初始化
for (int i = 0; i < 9; i++) wj[i] = 0;
for (int i = 0; i < 100; i++) hh[i] = 0;
// 游戏开始
MessageBox(NULL, "欢迎来到 斗罗大陆 体验版!\n内容不全,更多精彩请见正式版", "斗罗大陆", MB_OK);
cls();
color(2); cout << "你出生在圣魂村,相传从这里走出来过魂圣......" << endl;
color(1); cout << "请为你的第一位魂师命名" << endl;
cout << "名字:";
cin >> name;
int p=0;
if (name == "萧培跟") p=1;
system("pause");
cls();
color(2); cout << "注意看,武魂殿的素云涛大师(26级大魂师)来帮助你们觉醒武魂了" << endl;
cout << "魂师等级划分:" << endl;
cout << "11-20魂师 21-30大魂师 \n31-40魂尊 41-50魂宗 \n51-60魂王 61-70魂帝 \n71-80魂圣 81-90魂斗罗 \n90-94封号斗罗 95-98超级斗罗 99极限斗罗" << endl;
juexin(1);
cout << "素云涛:武魂竟然是 " << hun << endl;
hunli(1);
cout << "素云涛:魂力 " << hunli1 << " 级" << endl;
hp = hunli1 * 150; // +50% HP
g = hunli1 * 12; // +20% ATK
if(p==1){
hp+=1000;
g+=100;
}
system("pause");
cls();
color(4); cout << "这时你的脑中发出了叮的声音。" << endl;
cout << "=-----------------------------=" << endl;
cout << "| 斗罗养成系统绑定中...... |" << endl;
cout << "=-----------------------------=" << endl;
cout << "绑定完成!!!" << endl;
Sleep(1000);
system("pause");
// 个人面板
cls();
color(1); cout << "个人面板:" << endl;
geren(1);
cls();
color(1); cout << "是否开始游戏?1.是 2.否" << endl;
cin >> jixu;
if (jixu == 2) return 0;
// 进入主菜单
mainMenu();
return 0;
}
更多推荐
所有评论(0)