击败大魔王游戏
2026-08-19 19:12:39
发布于:浙江
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
const int N = 10000;
long long n=N,cs=15,hp,mxhp,pw,d,s,px,py,m=1,num=1,cnt;
// sum 是玩家经验等级 num 是怪物等级
// hp 玩家血量 pw 攻击力 d 防御 s 速度
// cnt 击杀怪物数量
double sum = 1.0;
int x = n/2,y = n/2;
// mp 地图
char mp[N+5][N+5];
bool flag = 1;
int ff=1;
int r(int i,int j){
return rand()%(j-i+1)+i;
}void up(int g_s){
int g = rand()%55+1;
int f = rand()%4+1;
cout << "已开始抽取加成,按任意键抽取"<<endl;
getch();
if(g<=1)g = 10;
else if(g<=3)g = 9;
else if(g<=6)g = 8;
else if(g<=10)g = 7;
else if(g<=15)g = 6;
else if(g<=21)g = 5;
else if(g<=28)g = 4;
else if(g<=36)g = 3;
else if(g<=45)g = 2;
else g = 1;
int SUM = sum;
if(f==1)cout << "生命增加"<<SUM*2*g<<endl;
else if(f==2)cout << "攻击力增加"<<ceil(SUM*g*0.6)<<endl;
else if(f==3)cout << "防御增加"<<ceil(SUM*g*0.8)<<endl;
else cout << "移速增加"<<SUM*g<<endl;
if(f==1)mxhp += sum*2*g,hp += sum*2*g;
else if(f==2)pw += ceil(num*g*0.6);
else if(f==3)d += ceil(num*g*0.8);
else s += num*g;
if(g_s)mxhp += 2*pow(sum,1.5),hp+=2*pow(sum,1.5),pw += ceil(pow(sum,1.5)/1.8),d += pow(sum,1.5)/1.6,s += pow(sum,1.5)/1.4;
getch();
return;
}void win(char co,int hh){
cout << "你赢了"<<endl;
cout << "汲取了敌人的血量:"<<hh<<"*40%="<<(int)(hh*0.4)<<endl;
hp += hh * 0.4;
if(hp>mxhp)hp = mxhp;
int _ = sum;
if(co=='C')sum+=1.0/pow(sum,1.25)*num*0.5;
if(co=='B')sum+=1.0/pow(sum,1.25)*num*1;
if(co=='A')sum+=1.0/pow(sum,1.25)*num*5;
if(co=='S')sum+=1.0/pow(sum,1.25)*num*10;
if(co=='X')sum+=1.0/pow(sum,1.25)*num*20;
cnt++;
getch();
if(int(sum)>_){
cout << "恭喜你从"<<_<<"级升到了"<<int(sum)<<"级"<<endl;
cout << "你可以抽取"<<int(sum)-_<<"次奖励"<<endl;
for(int i=1;i<=int(sum)-_;i++)up(1);
}return;
}void init(){
int cx=rand()%n+1,cy = rand()%n+1;
x = y = n/2;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=n+1;j++){
if(i<1 or i>n or j<1 or j>n){
mp[i][j] = '#';
continue;
}if(i==cx and j==cy){
mp[i][j] == '0';
continue;
}
if(i==n/2 and j==n/2){
mp[i][j] = '@';
continue;
}
int num = rand()%128+1;
if(num>=64)mp[i][j] = '.';
else if(num>=32)mp[i][j] = 'C';
else if(num>=16)mp[i][j] = 'B';
else if(num>=8)mp[i][j] = 'A';
else if(num>=4)mp[i][j] = '$';
else if(num>=2)mp[i][j] = 'S';
else mp[i][j] = 'X';
}
}
}void draw(){
system("cls");
for(int i=x-cs/2;i<=x+cs/2;i++){
for(int j=y-cs/2;j<=y+cs/2;j++){
if(i<0 or j<0 or i>N+1 or j>N+1)cout << " ";
else cout << mp[i][j] <<" ";
}cout << endl;
}cout << endl;
num = (abs(x-n/2)+abs(y-n/2))/6+1;
cout << "血量:"<<hp<<"/"<<mxhp<<endl;
cout << "攻击力:"<<pw<<endl;
cout << "防御力:"<<d<<endl;
cout << "速度:"<<s<<endl;
cout << "当前等级:"<<(int)sum<<endl;
cout << "怪物等级:"<<num<<endl;
if(cnt>=100 and ff==1){
cout << "达成成就:怪物猎手"<<endl;
ff=2;
}if(cnt>=1000 and ff == 2){
cout << "达成成就:创世神"<<endl;
}
}bool move(int dx,int dy){
mp[x][y] = '.';
x += dx;y += dy;
char co = mp[x][y];
mp[x][y] = '@';
num = (abs(x-n/2)+abs(y-n/2))/6+1;
if(num<=0)num = 1;
if(co=='O')return 2;
if(co=='#'){
mp[x][y] = '#';
x-=dx;y-=dy;
return 1;
}
draw();
long long gh,gp,gd,gs;
// C<B<A<S<X
if(co=='.')return 1;
else if(co=='C'){
gh = 1LL*num*num*r(5,8);
gp = 1LL*num*num*r(2,5);
gd = 1LL*num*num*r(1,3);
gs = 1LL*num*num*r(3,5);
}else if(co=='B'){
gh = 1LL*num*num*r(8,20);
gp = 1LL*num*num*r(8,12);
gd = 1LL*num*num*r(4,8);
gs = 1LL*num*num*r(6,12);
}else if(co=='A'){
gh = 1LL*num*num*r(30,50);
gp = 1LL*num*num*r(10,20);
gd = 1LL*num*num*r(15,25);
gs = 1LL*num*num*r(20,40);
}else if(co=='S'){
gh = 1LL*num*num*r(50,100);
gp = 1LL*num*num*r(20,40);
gd = 1LL*num*num*r(30,50);
gs = 1LL*num*num*r(40,80);
}else if(co=='X'){
gh = 1LL*num*num*r(100,200);
gp = 1LL*num*num*r(40,60);
gd = 1LL*num*num*r(50,70);
gs = 1LL*num*num*r(60,100);
}else if(co=='$'){
up(0);
return 1;
}
cout << endl;
cout << "对方是"<<co<<"级怪"<<endl;
cout << "对方实力:"<<endl;
cout << "血量:"<<gh<<endl;
cout << "攻击力:"<<gp<<endl;
cout << "防御力:"<<gd<<endl;
cout << "速度:"<<gs<<endl;
cout << endl;
cout << "我方实力:"<<endl;
cout << "血量:"<<hp<<"/"<<mxhp<<endl;
cout << "攻击力:"<<pw<<endl;
cout << "防御力:"<<d<<endl;
cout << "速度:"<<s<<endl<<endl;
Sleep(1000);
int hh = gh,ds=0,ms=100;
bool flag3 = 1;
int ggs = 0;
if(gs>s){
cout << "敌方移速更高"<<endl;
ggs++;
if(m==2 and rand()%100>60){
cout << "盾兵被动触发"<<endl;
cout << "免疫这次伤害"<<endl;
cout << "造成"<<ceil((d>=gp?1:gp-d)*0.3)<<"的真实伤害"<<endl;
gh -= ceil((d>=gp?1:gp-d)*0.3);
cout << "他还剩"<<gh<<"点血"<<endl;
if(gh<=0){
win(co,hh);
draw();
return 1;
}
}else{
cout << "他对你造成了"<<(d>=gp?1:gp-d)<<"点伤害"<<endl;
hp -= (d>=gp?1:gp-d);
cout << "你还剩"<<hp<<"点血"<<endl;
}if(m==3){
cout << "回复了"<<ceil(0.1*mxhp)<<"点生命值"<<endl;
hp += ceil(0.1*mxhp);
hp = min (hp,mxhp);
}
Sleep(ms);
cout << endl;
if(hp<=0){
cout << "你输了";
flag = 0;
getch();
return 0;
}
}else cout << "我方移速更高"<<endl;
while(true){
if(gs>50)ms=0;
ggs++;
Sleep(ms);
int pp = 0;
if(m==4 and rand()%30 and !ds){
ds = 2;
cout << "生物学家被动触发"<<endl;
cout << "你对他造成了"<<(gd>=pw?1:pw-gd)<<"+"<<int(pw*0.4)<<"点伤害"<<endl;
pp = pw*0.4;
}else if(ds){
cout << "你对他造成了"<<(gd>=pw?1:pw-gd)<<"+"<<int(pw*0.4)<<"点伤害"<<endl;
pp = pw*0.4;
ds--;
}else if(m==1 and rand()%100>40){
pp = pw;
cout << "战士被动触发"<<endl;
cout << "你对他造成了"<<(gd>=pw?1:pw-gd);
cout <<"+"<<pp<<"点伤害"<<endl;
}else{
cout << "你对他造成了"<<(gd>=pw?1:pw-gd)<<"点伤害"<<endl;
}gh -= (gd>=pw?1:pw-gd)+pp;
cout << "他还剩"<<gh<<"点血"<<endl;
cout << endl;
if(gh<=0){
win(co,hh);
draw();
return 1;
}ggs++;
Sleep(ms);
if(m==2 and rand()%100>60){
cout << "盾兵被动触发"<<endl;
cout << "免疫这次伤害"<<endl;
cout << "造成"<<ceil((d>=gp?1:gp-d)*0.3)<<"的真实伤害"<<endl;
gh -= ceil((d>=gp?1:gp-d)*0.3);
cout << "他还剩"<<gh<<"点血"<<endl;
if(gh<=0){
win(co,hh);
draw();
return 1;
}
}else{
cout << "他对你造成了"<<(d>=gp?1:gp-d)<<"点伤害"<<endl;
hp -= (d>=gp?1:gp-d);
cout << "你还剩"<<hp<<"点血"<<endl;
}if(m==3){
cout << "回复了"<<ceil(0.1*mxhp)<<"点生命值"<<endl;
hp += ceil(0.1*mxhp);
hp = min (hp,mxhp);
} cout << endl;
if(hp<=0){
cout << "你输了";
getch();
flag = 0;
return 0;
}
}
}
int main(){
srand(time(0));
cout << "请选择你的角色"<<endl;
cout << "A.战士 我方每次攻击60%打出双倍伤害"<<endl;
cout << "B.盾兵 被攻击时有40%概率免伤并反弹30%的向上取整真实伤害"<<endl;
cout << "C.治疗兵 被攻击时恢复最大生命值的10%的血量"<<endl;
cout << "D.生物学家 攻击时有30%使用毒药连续三回合在攻击之后造成攻击力40%的真实伤害"<<endl;
char js;cin >> js;
if(js=='A' or js=='a'){
m = 1;
hp = mxhp = 10;
pw = 5;
d=3;
s=4;
}if(js=='B' or js=='b'){
m = 2;
hp = mxhp=6;
pw = 4;
d=6;
s=3;
}if(js=='C' or js=='c'){
m=3;
hp = mxhp=12;
pw = 4;
d=3;
s=5;
}if(js=='D' or js=='d'){
m=4;
hp = mxhp=5;
pw = 6;
d=2;
s=3;
}if(js=='O'){
m=5;
hp = mxhp = 0x3f3f3f3f;
pw = 0x3f3f3f3f;
d = 0x3f3f3f3f;
s = 0x3f3f3f3f;
}
cout << "开局奖励"<<endl;
up(0);
cout << "正在加载地图中......"<<endl;
while(flag){
init();
draw();
while(1+1==2){
char index = getch();
px = py = 0;
if(index == 'w'||index == 'W')px = -1;
if(index == 'a'||index == 'A')py = -1;
if(index == 's'||index == 'S')px = 1;
if(index == 'd'||index == 'D')py = 1;
if(!move(px,py))break;
}
}system("cls");
cout << "你死了(*_*)"<<endl;
cout << "你一共击败了"<<cnt<<"个怪"<<endl;
}
开局会先抽取一次奖励
后每升一级抽取一次奖励
wasd移动必须小写
抽完奖励后需随便按一键才能继续游戏
战斗机制如下
移速高的一方优先攻击
伤害等于攻击减对方防御
四个角色都有被动详细请自行打开游戏
怪物参数等于怪物等级怪物等级随机参数
怪物等级游戏内会显示
具体请看move函数
游戏内图标为下
我 @
路 .
怪物CBASX
奖励箱 $
传送门 ?专为肝帝打造 地图大小为1000*1000 地图中会有一个传送门 当你把所有该打完后可以进入此传送门重新刷新地图
# 边界墙
怪物等级 X > S > A > B > C
已更新至6.1版本
更新了治疗兵效果
增加了最大血量
修复了吸血虚标问题
修复了开宝箱提升本应升级才给的基础数值(当你带怪升级时,会提升每级相应的基础数值和通过抽奖得到的随机数值)
修复了最大生命值改变,当前生命值没有相应提升的问题
参与制作:「欢愉」花火
最佳MVP:

全部评论 16
我要进参与者名单!!!
2024-12-28 来自 广东
5ddd
2025-12-21 来自 广东
1
我去这么强
2024-12-22 来自 广东
3就是两个小盆友无聊( ̄、 ̄),灵光一现,开腾讯会议玩出来的小游戏(欸嘿)
2024-12-28 来自 广东
4
移速这个名字是不是不太合理,改成速度会不会更合适

23小时前 来自 浙江
2啥时候能更新魔王啊
可以在地图随机好后随机找一个点,改成 K (King) 魔王,
然后在周围放上一圈 X 一圈 S 一圈 A 一圈 B 一圈 C (这行可以不做)23小时前 来自 浙江
2魔王也可以固定刷点
10小时前 来自 浙江
0
我有个建议,升级应该更慢些,每级升级所需的经验至少也要是上一级的 1.25 倍吧
还有血量机制,战后吸血本就不合理,数值还有 0.4 ,建议将吸血机制削弱后做成吸血鬼角色的效果,然后增加升级带来的属性提升23小时前 来自 浙江
2升级经验参考:
if(co=='C')sum+=1.0/pow(sum,1.25)*num*0.5; if(co=='B')sum+=1.0/pow(sum,1.25)*num*1; if(co=='A')sum+=1.0/pow(sum,1.25)*num*5; if(co=='S')sum+=1.0/pow(sum,1.25)*num*10; if(co=='X')sum+=1.0/pow(sum,1.25)*num*20;23小时前 来自 浙江
1关于血量机制,现在的血量分为实时血量和最大血量,如果没有吸血玩家的实时血量只会一直掉
升级增加的是最大生命值,而实时生命值只会增加,最大生命前后差的那一部分11小时前 来自 浙江
1那能不能改为路标式
增加 ?的刷新量,与 ?交互后可以刷新地图并回满血10小时前 来自 浙江
1
为啥不用
||来达到移动不区分大小写昨天 来自 浙江
2可以
10小时前 来自 浙江
1
666我成魔王了.-.
2025-10-08 来自 上海
2不是哥们你这什么防御算法
低等级打高等级几乎无法破防
可以改成(int)max(1.0*gp*d/(d+k),1.0)
(k为常数,可以是pow(10,(int)(sum-num))),其中参数我懒得调了5小时前 来自 浙江
1但是如果你攻击力还没他防御力多,无法破防不是很正常的吗
4小时前 来自 浙江
1两个同等级的互打起码也要能破防吧
但你这防御权重没攻击高
玩个治疗兵随便磨2小时前 来自 浙江
1有点道理
1小时前 来自 浙江
1
我更新了
E.吸血鬼 攻击时回复等同于此次攻击50%的血量(至少为1),于击杀敌人后获得其5%的血量上限和1点攻击
删除击杀回血机制,以 ?作为路标,互动后刷新地图,位置不变,回满血
平衡了当前版本中怪物等级相关的四维
现以已上传团文件6小时前 来自 浙江
1兄弟我下载不了,能用https://paste.nugine.xyz/这个网站吗?私发我就行
58分钟前 来自 浙江
0https://paste.nugine.xyz/pf2fq66i
23分钟前 来自 浙江
0

我是不是太强了点2026-02-09 来自 北京
1666
2026-01-25 来自 北京
1“S B”?
5天前 来自 辽宁
1?
4天前 来自 河北
1“S B”?
4天前 来自 河北
1
能不能再加一些更强的怪物

2025-10-08 来自 浙江
1可以自己改数值
2025-10-08 来自 广东
1
2025-08-01 来自 浙江
16662025-05-22 来自 广东
0太强辣
2024-12-28 来自 广东
0














































有帮助,赞一个