标签归档 自写C++五

通过清心醉

自写C++五

//下载地址:http://url.cn/KZfZn1

#include <iostream>
#include <string>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <conio.h> //getch()屏幕停留函数需要
#include <time.h> //系统随机
#include <fstream> //数据保存到文件的文件流头文件
#include “windows.h”
using namespace std;
ifstream openin; //文件控制的输入
ofstream openout; //文件控制的输出

//如果帐号只注册了,下次登陆因为没数据,那导入文件的时候
//应该生成一个默认的数
//还有名字应该提前输入
//getch()部分更改为Sleep(2000);Csen(); 2秒刷新
void UPdate() //更新
{
cout<<“*************** 本次更新添加:***************”<<endl;
cout<<“当前版本号: V1.5″<<endl;
cout<<“1、添加游戏运行后,正常退出时数据保存到目录指定文件”<<endl;
cout<<” 支持多个帐号的数据”<<endl;
cout<<“2、帐号注册后,也给予保存,但目前只支持一个帐号”<<endl;
cout<<” 考虑到帐号用数据形式存放在同一个文件中”<<endl;
cout<<“”<<endl;
cout<<” 2013-03-05 “<<endl;
cout<<endl<<endl<<endl;
cout<<“提醒:”<<endl;
cout<<“由于是WIN32的API平台编辑,非MFC图形,所以此游戏用于CMD命令支持。”<<endl<<endl;
cout<<endl;
cout<<” “<<“如果可以,建议不使用GM工具增加攻防血法等来实际操作。”<<endl;
getch();
}
void gongneng()
{
cout<<” 程序目前正常注册,登陆验证;由于没有数据库暂时取消”<<endl;
cout<<” 提供回合制,由玩家先行攻击;”<<endl;
cout<<” 自动清屏,以免产生数据过多显示查看困难;”<<endl;
cout<<” 增加车夫,在每个地图结束PK回合后车夫将提示;”<<endl;
cout<<” 增加HP、MP上限最大值 “<<endl;
cout<<” 等级系统,等级+1,固定加20000,攻防金币额+等级*200、血法额+等级*2000″<<endl;
cout<<“同时升级后当前HP、MP为上限最大值”<<endl;
cout<<” 金币系统,并且支持随机增加 “<<endl;
cout<<” NPC系统,提供能力书的交易”<<endl;
cout<<” 角色死亡后直接回出生地《猪圈》,并不直接退出游戏 “<<endl;
cout<<” 角色死亡后回出生地,HP值为正常的80%”<<endl;
cout<<” 开放5个技能 “<<endl;
cout<<” 添加攻击有机率产生最高2倍的重击、神圣伤害,游戏币随机增加”<<endl;
cout<<” 怪物也添加随机攻击,修改攻击不破防随机产生伤害”<<endl;
cout<<” 修改角色升级后HP和MP变满”<<endl;
cout<<” 修改角色攻不破防的时候,随机打出(1-10000)+固定22000至55000《给予重击》”<<endl;
cout<<“如果怪物破防则随机添加(1-1000)+固定1000《不给予重击等》”<<endl;
cout<<” 角色名字由玩家自行定义”<<endl;
cout<<” GM工具:密码暂设为 0 “<<endl;
cout<<“**************************************************************************”<<endl;
cout<<endl<<“是否给怪物BOSS设置技能,如终级BOSS,也弄个随机,有机会打出固定N的值”<<endl;
getch();

}
void Toremind() //提醒
{
cout<<“提醒:”<<endl<<” “<<endl;
cout<<“字符串尚未做完善,输入多位”<<endl
<<“程序将跳过几步骤。”<<endl
<<“字符串学习中,待更新中….”<<endl
<<“**************************”<<endl
<<“******猪*头*历*险*记******”<<endl
<<“**************************”<<endl
<<” “<<endl;
}

void Csen() //怕屏幕内容太多,添加一清屏函数
{
system(“cls”);
}
class PIG_GAME
{
private:
int Level; int Experience; int tempExperience;//等级 经验 升级所需经验
int MoerExperience; // 每个地图的怪物获取的经验,击败怪物后数值归0;
int CrityAttack; //攻
int CrityDefense; //防
int CrityLife; //当前HP
int CrityMagic; //MP
int BigCrityLife; //最大HP
int BigCrityMagic; //MP
int Moerattack; int Moerdefense;
int Moerlife; int Moermagic;
//以上四整型是怪物攻防HP、MP
int skillattack; //释放技能增加的攻击,在每一个技能栏里给予赋值,技能结束后归0;
int skillmagic; //释放技能消耗的MP,技能结束归0
int Money; int tempmomey;//游戏币
int CrityAttackadj; //随机 根据角色攻击给予赋值,
int Moneyadj; //金币随机增加,取当前地图怪物来附加攻击
int crity_adj; //用于捕抓角色随机的数值,判断是否输出重击
int Crityadj_moerdefense; //角色不破怪物防御的随机伤害
int Crityadj_moerdefense_adj; //角色不破防御输出产生的重击等
int Moeradj_critydefense; //怪物不破角色防御的随机伤害
string name; //玩家自行填写角色名字
int Number; //数字帐号,只能用于找回角色
char str[1000];
//用户输入帐号密码时输入的编号,用于判断拥护输入的编号是多少则打开对应角色文件
private:

char account[16];
char password[16];
char tempaccount[16];
char temppassword[16];
void open_2()
{
int o;//数字帐号
int i=0;
labelopen_2:
cout<<endl<<endl;
cout<<“请输入您的帐号:”; cin>>account;
cout<<“请输入您的密码:”; cin>>password;
cout<<endl<<endl;
openin.open(“Crity/AccountAndPassword/accountAndpassword.dat”);//打开文件,如果没有则创建
openin>>tempaccount>>temppassword>>o; //调出帐号,密码,编号
while (1)
{
if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
{
cout<<“正确”<<endl;
cout<<“任意键开始”<<endl;
sprintf(str,”Crity/Access/ %d.dat”,o);
//成员str就是要打开的文件目录、文件名o(其实就是保存时的Number)
getch(); openin.close();//关闭文档
open_in();//载入用户数据
//如果给地图设置ID,角色在哪个地图退出后重回那地图
mapno0();

}
else
{

if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0); //退出
}
cout<<“您输入错误,请重新输入:”<<endl;
goto labelopen_2;
}
}
}
void open_1()
{
labelopen_1:
cout<<“请输入您注册的帐号”<<endl;
cin>>account;
cout<<“请输入您注册帐号的密码”<<endl;
cin>>password;
cout<<“您的帐号是:”<<account<<endl;
cout<<“您的密码是:”<<password<<endl;
openin.open(“Crity/AccountAndPassword/accountAndpassword.dat”);//打开文件,如果没有则创建
char a[16];char b[16];
int tempnumber=0;
openin>>a>>b>>tempnumber; //取出第一个,未来多帐号就需要一行行判断
//把帐号密码文本里的帐号a,密码b,编号tempnumber取出
if (strcmp(account,a)==0)
{ //判断帐号与取出来的是否有重复
Csen();
cout<<“帐号已经存在,请重新注册”<<endl;
goto labelopen_1;
}
Number=tempnumber+1;
cout<<“您的数字账号是:”<<Number<<endl;
cout<<“请输入您的角色名字:”;cin>>name;
cout<<“您的角色名字为:”<<name<<endl;
Sleep(3000);Csen(); //3秒后刷新
openout.open(“Crity/AccountAndPassword/accountAndpassword.dat”);//帐号保存
openout<<account<<” “<<password<<” “<<Number<<endl;
openout.close();
mapno();//生成默认角色属性
cout<<“系统正在保存您的帐号密码…”<<endl<<endl<<endl;
getch();
Csen();
}

public:
void gameopen()
{
int i;
labelgameopen:
Csen();
cout<<“欢迎使用清心游戏平台”<<endl;
cout<<“1、注册新用户”<<” “<<“2、用已有帐号密码登陆”
<<” “<<“0、退出游戏”<<endl;
cin>>i;
switch(i)
{
case 1:open_1();break;
case 2:open_2();break;
case 3:exit(0);
default:cout<<“输入错误,请重新选择”<<endl;
goto labelgameopen;break;
}

}

void Crity_Moer_Defense() //角色不破怪物防
{
int o;
srand((unsigned)time(NULL));
o=rand()%10;
switch(o)
{
//出现的伤害普遍增加随机伤害1-10000
case 1:Crityadj_moerdefense=rand()%10000;Crityadj_moerdefense_adj=o;break;
//并且把随机的数字Crityadj_moerdefense_adj给crity_adk,判断是否提示多倍伤害
case 4:Crityadj_moerdefense=rand()%10000;Crityadj_moerdefense_adj=o;break;
case 3:Crityadj_moerdefense=rand()%10000;Crityadj_moerdefense_adj=o;break;
case 6:Crityadj_moerdefense=rand()%10000;Crityadj_moerdefense_adj=o;break;
case 5:Crityadj_moerdefense=rand()%10000;Crityadj_moerdefense_adj=o;break;
case 7:Crityadj_moerdefense=rand()%10000+22000;Crityadj_moerdefense_adj=o;break;
case 8:Crityadj_moerdefense=rand()%10000+22000;Crityadj_moerdefense_adj=o;break;
case 9:Crityadj_moerdefense=rand()%10000+22000;Crityadj_moerdefense_adj=o;break;
case 0:Crityadj_moerdefense=rand()%10000+22000;Crityadj_moerdefense_adj=o;break;
case 2:Crityadj_moerdefense=rand()%10000+52000;Crityadj_moerdefense_adj=o;break;
}
}
void Crity_Moer_Defense_toremind() //不破防随机伤害的公告
{
switch(Crityadj_moerdefense_adj)
{
//随机出现的数字已经给了 Crityadj_moerdefense_adj=o;
//Crityadj()成员函数已为其赋值,记得先要调取该函数后才调取这个
case 7:
cout<<“***出现神圣一击***”<<endl;break;
case 8:
cout<<“***出现神圣一击***”<<endl;break;
case 0:
cout<<“***出现重击***”<<endl;break;
case 9:
cout<<“***出现重击***”<<endl;break;
case 2:
cout<<“***出现神圣一击和重击***”<<endl;break;
default: //如果不加,在攻击时调取了此函数,结果非0-2-7时将中指.
break; //在此设置只为跳出该开关函数
}
}
void Moer_Crity_Defense() //怪物不破角色防御
{
int o=1000;
srand((unsigned)time(NULL));
Moeradj_critydefense=rand()%1000+o;
}
void huihe_Toremind() //PK时显示
{
cout<<endl;
cout<<“名字:”<<name<<” “<<“编号”<<Number<<endl;
cout<<“属性:”<<“攻击:”<<CrityAttack<<” 防御:”<<CrityDefense<<endl;
cout<<“等级:”<<Level<<“生命:”<<CrityLife<<“/”<<BigCrityLife<<” 魔法:”
<<CrityMagic<<“/”<<BigCrityMagic<<” 金币”<<Money<<endl;
cout<<“*****************************************”<<endl;
cout<<“怪物属性:”<<“攻击:”<<Moerattack<<” 防御:”<<Moerdefense<<endl;
cout<<” “<<“生命:”<<Moerlife<<” 魔法:”<<Moermagic<<endl;
}
//*********************************************************************
void Crityadj() //角色随机
{
int tempcrityattackadj_one=CrityAttack*0.8; //临时随机攻击
int tempcrityattackadj_two=CrityAttack*0.8;
int tempcrityattackadj_three=CrityAttack*2.2;
int o;
srand((unsigned)time(NULL)); //随机条件
o=rand()%10; //为避免经常出现多倍或者增加过多的伤害,随机为10个
switch(o)
{
//出现的伤害普遍增加随机伤害1-10000
case 1:CrityAttackadj=rand()%10000;crity_adj=o;break;
//并且把随机的数字o给crity_adk,判断是否提示多倍伤害
case 4:CrityAttackadj=rand()%10000;crity_adj=o;break;
case 3:CrityAttackadj=rand()%10000;crity_adj=o;break;
case 6:CrityAttackadj=rand()%10000;crity_adj=o;break;
case 5:CrityAttackadj=rand()%10000;crity_adj=o;break;
case 7:CrityAttackadj=rand()%10000+tempcrityattackadj_one;crity_adj=o;break;
case 8:CrityAttackadj=rand()%10000+tempcrityattackadj_one;crity_adj=o;break;
case 9:CrityAttackadj=rand()%10000+tempcrityattackadj_two;crity_adj=o;break;
case 0:CrityAttackadj=rand()%10000+tempcrityattackadj_two;crity_adj=o;break;
case 2:CrityAttackadj=rand()%10000+tempcrityattackadj_three;crity_adj=o;break;
}
}
void crity_adj_toremind() //随机参数的公告
{
switch(crity_adj)
{
//随机出现的数字已经给了 crity_adj=o;
//Crityadj()成员函数已为其赋值,记得先要调取该函数后才调取这个
case 7:
cout<<“***出现神圣一击***”<<endl;break;
case 8:
cout<<“***出现神圣一击***”<<endl;break;
case 0:
cout<<“***出现重击***”<<endl;break;
case 9:
cout<<“***出现重击***”<<endl;break;
case 2:
cout<<“***出现神圣一击和重击***”<<endl;break;
default: //如果不加,在攻击时调取了此函数,结果非0-2-7时将中指.
break; //在此设置只为跳出该开关函数
}
}
//*********************************************************************
void crity() //人物
{

cout<<“名字:”<<name<<” 编号:”<<Number<<endl;cout<<“等级:”<<Level<<endl;
cout<<“攻击:”<<CrityAttack<<endl;cout<<“防御:”<<CrityDefense<<endl;
cout<<“HP:”<<CrityLife<<“/”<<BigCrityLife<<endl;
cout<<“MP:”<<CrityMagic<<“/”<<BigCrityMagic<<endl;
cout<<“金币:”<<Money<<endl;
cout<<“当前经验”<<Experience<<“/”<<“升级经验”<<tempExperience<<endl;
cout<<endl<<endl;
}
//*********************************************************************
void monster() //由于怪物名称不一样,在调取该函数前,提前输出怪物名称
{
cout<<“**********”<<endl;
cout<<“攻击:”<<Moerattack<<endl;
cout<<“防御:”<<Moerdefense<<endl;
cout<<“HP:”<<Moerlife<<endl;
cout<<“MP:”<<Moermagic<<endl;
cout<<“**********”<<endl;
}
//*********************************************************************
void repeat() //提示进行PK
{
cout<<“**********”<<endl;
cout<<“请输入技能快捷键进行先行攻击”<<endl;
cout<<“1、猪小跑:增加”<<20000*Level<<“攻击,消耗”<<500*Level<<“MP “<<“技能等级 “<<Level<<endl;
cout<<“2、猪大跑:增加”<<50000*Level<<“攻击,消耗”<<1000*Level<<“MP “<<“技能等级 “<<Level<<endl;
cout<<“3、HP恢复”<<50000*Level<<” MP恢复”<<2000*Level<<” 技能等级 “<<Level<<endl;
cout<<“4、防御增加”<<Level*10<<“%”<<” 技能等级 “<<Level<<endl;
cout<<“5、天崩地裂:释放自身攻击*2*等级的伤害,HP-“<<50000*Level<<” MP-“<<5000*Level<<” 技能等级 “<<Level<<endl;
cout<<“9、逃跑(回猪城)”<<endl;
cout<<“0、提醒||帮助”<<endl;
cout<<“**********”<<endl;huihe_Toremind();
SKILL_PK();

}
//*********************************************************************
void LveExp() //升级经验
{

if (Experience>=tempExperience)
{
labelexperience:
Level++;
tempExperience=(tempExperience*2)+(Level*5000);
cout<<“您升级了!您的等级:”<<Level<<endl;
LVcrity();
if (Experience>=tempExperience)
{ //当升级一次以后,如果经验还是比升级所需经验多,再循环一次
//如此一来用GM工具修改攻击一次杀掉大BOSS时可以直接跳高级
goto labelexperience;
}
}
}
//*********************************************************************
void Resurrection() //原地复活
{
char i;
int tempmoney=(Level*2)+888;
cout<<“原地需要费用”<<(Level*2)+888<<“金币”<<endl;
if (Money<(Level*2)+888)
{
cout<<“您的金币不足,按任意键回城”<<endl;
getch();
CrityLife=BigCrityLife*0.8;
CrityMagic=BigCrityMagic*0.8;
mapno0();
}
cout<<“是否需要原地复活?”<<endl<<“y”<<” “<<“n”<<endl;
cin>>i;
switch(i)
{
case ‘y’:
cout<<“已原地复活”<<endl;
Money=Money-((Level*2)+888);
CrityLife=BigCrityLife*0.8;
CrityMagic=BigCrityMagic*0.8;
break;
case ‘n’:
CrityLife=BigCrityLife*0.8;
CrityMagic=BigCrityMagic*0.8;
mapno0();break;
default:
mapno0();break;
}
}
//*********************************************************************
void LVcrity() //属性的提升
{
Money=Money+20000+(Level*200);
CrityAttack=CrityAttack+20000+(Level*200);
CrityDefense=CrityDefense+20000+(Level*200);
BigCrityLife=BigCrityLife+20000+(Level*2000);
BigCrityMagic=BigCrityMagic+20000+(Level*2000);
CrityLife=BigCrityLife; //升级后,角色当前生命=生命上限
CrityMagic=BigCrityMagic;

}

//*********************************************************************
void SKILL_PK() //选择技能开关
{
char i;
int o=0;
labelskpk:
cin>>i;
switch(i)
{
case ‘1’:
Csen();CRITY_SKILL_ONE();
break;
case ‘2’:
Csen();CRITY_SKILL_TWO();
break;
case ‘3’:
Csen();CRITY_SKILL_THREE();
break;
case ‘4’:
Csen();CRITY_SKILL_FOUR();
break;
case ‘5’:
Csen();CRITY_SKILL_FIVE();
break;
case’0′:
Csen();cout<<“提醒||帮助”<<endl;
Toremind();repeat();
case’9′:
Csen();cout<<“逃跑!”<<endl;
mapno0();
default:
if (o++==3)
{
cout<<“释放技能错误三次,游戏将退出”<<endl;
exit(0);
}
cout<<“技能释放错误,请重新输入”<<endl;
goto labelskpk;

}
}
//*********************************************************************
void win() //胜利的时候属性的增加已经还原
{
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
}
void skill() //技能
{
while (1)
{
cout<<“释放技能:”<<endl;
if (Moerdefense>(CrityAttack+skillattack)) //如果怪物防御大于攻击
{
Crity_Moer_Defense_toremind(); //不破防随机伤害的公告
cout<<“给对方造成伤害:”
<<Crityadj_moerdefense<<endl;
Moerlife=Moerlife-Crityadj_moerdefense;
CrityMagic=CrityMagic-skillmagic;
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
win();
LveExp();getch();Csen();
GOTOMAP();
break;
}
huihe_Toremind();getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物对您造成伤害:”
<<Moeradj_critydefense<<endl;
CrityLife=CrityLife-Moeradj_critydefense;
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
huihe_Toremind();getch();Csen();
}
else
{
cout<<“怪物对您造成伤害”<<(Moerattack+Moeradj_critydefense)-CrityDefense<<endl;
CrityLife=CrityLife-((Moerattack+Moeradj_critydefense)-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
huihe_Toremind();getch();Csen();
repeat();
}
}
else
{
cout<<“给对方造成伤害:”<<(CrityAttack+skillattack)-Moerdefense<<endl;
crity_adj_toremind(); //如果随机函数出现了重击等,系统显示;
Moerlife=(Moerlife-((CrityAttack+skillattack)-Moerdefense));
CrityMagic=CrityMagic-skillmagic;
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
win();
LveExp();getch();Csen();
GOTOMAP();
break;
}
else
{
getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物对您造成伤害:”
<<Moeradj_critydefense<<endl;
CrityLife=CrityLife-Moeradj_critydefense;
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
break;
}
huihe_Toremind();getch();Csen();
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<(Moerattack+Moeradj_critydefense)-CrityDefense<<endl;
CrityLife=CrityLife-((Moerattack+Moeradj_critydefense)-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
break;
}
getch();Csen();
repeat();
}
}
}
}
}
//*********************************************************************
void CRITY_SKILL_ONE() //技能1
{
Crityadj(); //先给个随机数初始化
Crity_Moer_Defense();Moer_Crity_Defense();
//不破防的上限伤害函数
skillattack=(20000*Level)+CrityAttackadj;
//在这里攻击的临时技能其实就已经把随机给的值给附加上了
int tempskillattack=20000*Level;
//这个是用来显示技能攻击的
skillmagic=500*Level;

cout<<“猪小跑:增加”<<tempskillattack<<“攻击,消耗”<<skillmagic<<“MP”<<endl<<“技能等级”<<Level<<endl;
if (CrityMagic<skillmagic)
{
cout<<“你的MP值不足”<<endl;
getch();Csen();
repeat();
}
else
{
Csen();
skill();
}

}
//*********************************************************************
void CRITY_SKILL_TWO() //技能2
{
Crityadj(); //先给个随机数初始化
Crity_Moer_Defense();Moer_Crity_Defense();
skillattack=(50000*Level)+CrityAttackadj;
//在这里攻击的临时技能其实就已经把随机给的值给附加上了
int tempskillattack=20000*Level;
//这个是用来显示技能的攻击的
skillmagic=1000*Level;

cout<<“猪大跑:增加”<<tempskillattack<<“攻击,消耗”<<skillmagic<<“MP”<<endl<<“技能等级”<<Level<<endl;
if (CrityMagic<skillmagic)
{
cout<<“你的MP值不足”<<endl;
getch();Csen();
repeat();
}
else
{
Csen();
skill();
}

}
//*********************************************************************
void CRITY_SKILL_THREE() //技能3
{
Moer_Crity_Defense(); //由于角色不参与攻击,所以只添加怪物不破防函数
while(1)
{
cout<<“**********”<<endl;
cout<<“释放技能:”<<endl;
cout<<“HP恢复:”<<50000*Level<<” “<<“MP恢复:”<<2000*Level<<endl;
cout<<“技能等级:”<<Level;
CrityLife=CrityLife+(50000*Level);
if (CrityLife>BigCrityLife)
{
CrityLife=BigCrityLife;
}
CrityMagic=CrityMagic+(2000*Level);
if ( CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
CrityMagic=BigCrityMagic;
}
getch();Csen();
cout<<“怪物对您进行攻击:”;
if(CrityDefense>Moerattack)
{
cout<<“怪物对您造成伤害:”
<<Moeradj_critydefense<<endl;
CrityLife=CrityLife-Moeradj_critydefense;
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<(Moerattack+Moeradj_critydefense)-CrityDefense<<endl;
CrityLife=CrityLife-((Moerattack+Moeradj_critydefense)-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}
}

}
//*********************************************************************
void CRITY_SKILL_FOUR() //技能4
{
Moer_Crity_Defense();//同上技能3
while (1)
{
int tempCrityDefense=CrityDefense*(Level*0.1);
cout<<“防御增加”<<Level*10<<“%”<<endl;
cout<<“当前防御:”<<CrityDefense<<“+”<<tempCrityDefense
<<“=”<<CrityDefense+tempCrityDefense<<endl;
cout<<“怪物对您进行攻击:”;
if ((CrityDefense+tempCrityDefense)>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物对您造成伤害:”
<<Moeradj_critydefense<<endl;
CrityLife=CrityLife-Moeradj_critydefense;
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
getch();Csen();
repeat();
break;
}
cout<<“怪物对您造成伤害”<<(Moerattack+Moeradj_critydefense)-(CrityDefense+tempCrityDefense)<<endl;
CrityLife=CrityLife-((Moerattack+Moeradj_critydefense)-(CrityDefense+tempCrityDefense));
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}

}
//*********************************************************************
void CRITY_SKILL_FIVE() //技能5
{
Crityadj();Crity_Moer_Defense();Moer_Crity_Defense();
skillattack=(CrityAttack*2*Level)+CrityAttackadj;
//在这里攻击的临时技能其实就已经把随机给的值给附加上了
int tempcritylife=50000*Level;
skillmagic=5000*Level;
cout<<“终级技能:天崩地裂”<<endl;
cout<<“释放自身攻击*2*等级的伤害,HP-“<<tempcritylife<<” MP-“<<skillmagic<<endl;

if (CrityLife<tempcritylife || skillmagic>CrityMagic)
{
cout<<“你的HP或MP不足,不能使用此技能”<<endl;
getch();Csen();
repeat();
}
else
{
CrityLife=CrityLife-tempcritylife;
skill();
}
}
//*********************************************************************
void GOTOMAP() //地图传送
{
char i;
int o=0;
labelgotomap:
carmap();//调取车夫对话
cin>>i;
switch(i)
{
case ‘1’:Csen();mapno1();break;
case ‘2’:Csen();mapno2();break;
case ‘3’:Csen();mapno3();break;
case ‘4’:Csen();mapno4();break;
case ‘5’:Csen();mapno5();break;
case ‘6’:Csen();mapno6();break;
case ‘7’:Csen();mapno7();break;
case ‘8’:Csen();mapno8();break;
case ‘9’:Csen();mapno9();break;
case ‘0’:Csen();mapno0();break;
default:
if (o++==5)
{
cout<<“传送错误5次,游戏将关闭”<<endl;
exit(0);
}
cout<<“输入错误,请重新输入:”<<endl;
goto labelgotomap;

}

}
//*********************************************************************
void carmap() //车夫,如果直接放地图传送看起来太多太大了。
{
cout<<“车夫:请问需要转送至地图几?”<<endl;
cout<<“1、地图1 (等级不受限制)。 怪物等级1″<<endl;
cout<<“2、地图2 ( 4级以上可进)。 怪物等级 6″<<endl;
cout<<“3、地图3 ( 6级以上可进)。 怪物等级 8″<<endl;
cout<<“4、地图4 ( 8级以上可进)。 怪物等级10″<<endl;
cout<<“5、地图5 (10级以上可进)。 怪物等级12″<<endl;
cout<<“6、地图6 (12级以上可进)。 怪物等级14″<<endl;
cout<<“7、地图7 (14级以上可进)。 怪物等级16″<<endl;
cout<<“8、地图8 (等级不受限制)。 怪物等级15(BOSS区)”<<endl;
cout<<“9、地图9 (等级不受限制)。 怪物等级30(BOSS区)”<<endl;
cout<<“0、猪圈。(出生地,任意点可进)”<<endl;
}
//*********************************************************************

//*********************************************************************
void npc_0()
{
cout<<“您的金币不足”<<endl;
NPC_DEAL(); //返回NPC购买对话

}
void npc_1()
{
while(1)
{
if (Money<5000)
{
npc_0();
}
cout<<“购买成功,你的攻击+10000″<<endl;
CrityAttack=CrityAttack+10000;
Money=Money-5000;
NPC_DEAL();
break;
}
}
void npc_2()
{
while(1)
{
if (Money<5000)
{
npc_0();
}
cout<<“购买成功,你的防御+10000″<<endl;
CrityDefense=CrityDefense+10000;
Money=Money-5000;
NPC_DEAL();
break;
}
}
void npc_3()
{
while(1)
{
if (Money<5000)
{
npc_0();
}
cout<<“购买成功,你的生命值+10000″<<endl;
CrityLife=CrityLife+10000;
BigCrityLife=BigCrityLife+10000;
Money=Money-5000;
NPC_DEAL();
break;
}
}
void npc_4()
{
while(1)
{
if (Money<5000)
{
npc_0();
}
cout<<“购买成功,你的魔法值+5000″<<endl;
CrityMagic=CrityMagic+5000;
BigCrityMagic=BigCrityMagic+5000;
Money=Money-5000;
NPC_DEAL();
break;
}
}
void npc_5()
{
while(1)
{
if (Money<20000)
{
npc_0();
}
cout<<“购买成功,您的攻防血法各+10000″<<endl;
CrityAttack=CrityAttack+10000;
CrityDefense=CrityDefense+10000;
CrityLife=CrityLife+10000;
BigCrityLife=BigCrityLife+10000;
CrityMagic=CrityMagic+5000;
BigCrityMagic=BigCrityMagic+5000;
Money=Money-20000;
NPC_DEAL();
break;
}
}
void npc_6()
{
while(1)
{
if (Money<1000)
{
npc_0();
}
cout<<“购买成功,您的经验值+1000″<<endl;
Experience=Experience+1000;
Money=Money-1000;
LveExp(); //购买经验书后判断是否升级
NPC_DEAL();
break;
}
}
void npc_7()
{
crity();
NPC_DEAL();
}
public:
void mapno()
{ //地图开始 同时进行默认属性初始化
//此函数游戏里只运行一次
//在这给猪头设置初始属性值,可避免角色死亡后
//回到猪圈内,不给予增加升级的属性
CrityAttack=42000;CrityDefense=30000;
CrityLife=100000;BigCrityLife=100000;
CrityMagic=50000;BigCrityMagic=50000;
int lveexp=1000; //默认1级开始的经验=1000
Money=1000;
tempExperience=lveexp;
Level=1;
open_out();//输出属性

}
void NPC_DEAL() //NPC交易函数
{
char i;int o=0;
cout<<“请问您需要购买什么呢?”<<endl;
cout<<“当前金币 “<<Money<<endl;
cout<<“1、攻击能力卷:攻击+10000,消耗5000金币”<<endl;
cout<<“2、防御能力卷:防御+10000,消耗5000金币”<<endl;
cout<<“3、HP能力卷:生命+10000,消耗5000金币”<<endl;
cout<<“4、MP能力卷:魔法+5000,消耗5000金币”<<endl;
cout<<“5、攻防血法综合卷:攻防血法各+10000,消耗20000金币”<<endl;
cout<<“6、经验卷:经验+1000,消耗1000金币”<<endl;
cout<<“7、查看自身属性”<<endl;
cout<<“0、退出NPC交易系统”<<endl;
labelnpc:
cin>>i;
switch(i)
{
case ‘1’:Csen();npc_1();break;
case ‘2’:Csen();npc_2();break;
case ‘3’:Csen();npc_3();break;
case ‘4’:Csen();npc_4();break;
case ‘5’:Csen();npc_5();break;
case ‘6’:Csen();npc_6();break;
case ‘7’:Csen();npc_7();break;
case ‘0’:Csen();mapno0();break;
default:
if (o++==5)
{
cout<<“你选择错误5次,回到出生点”<<endl;
mapno0();
}
cout<<“输入错误,请重新输入:”<<endl;
goto labelnpc;
}
}
void mapno0()
{
char i;

cout<<“载入地图猪圈成功”<<endl;
cout<<“进入出生地猪圈”<<endl;
cout<<endl<<endl;
labelmapno0:
cout<<“您需要做什么?”<<endl;
cout<<“1、买能力书”<<” “<<“2、挑战怪物”<<” “<<“3、自身属性”<<” “<<“4、游戏功能”<<endl;
cout<<“9、GM工具”<<” “<<“0、退出游戏”<<endl;

cin>>i;
switch(i)
{
case’1′:Csen();NPC_DEAL();break;//NPC函数
case’2′:Csen();GOTOMAP();break;//
case ‘3’:Csen();crity();mapno0();break;
case ‘9’:Csen();gm();break;
case’5′:Csen();gongneng();mapno0();break;
case ‘0’:Csen();open_out();//

default:
cout<<“您输入错误,请重新输入”<<endl;
goto labelmapno0;
}
}
void adj_momey()
{
int o;
//可以判断等级或者怪物攻击来增加rand()%1000+Level
srand((unsigned)time(NULL)); //随机
o=rand()%3;
switch(o)
{
case 1:Moneyadj=rand()%1000+1000+(Level*3);
case 2:Moneyadj=rand()%1000+2000+(Level*3);
case 0:Moneyadj=rand()%1000+1500+(Level*3);
}

}
void mapno1()
{
adj_momey();
tempmomey=500; //金币给500+随机
MoerExperience=800; //经验加成
cout<<“载入地图一成功 “;
cout<<“进入地图一:蚂蚁洞”<<endl;
Moerattack=35000; //怪物攻
Moerdefense=35000;
Moerlife=200000;
Moermagic=35000;
cout<<“进入与蚂蚁PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
// Money=Money+700;
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}

void mapno2()
{
if (Level<4)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=1500;
MoerExperience=40000; //经验加成
cout<<“载入地图二成功 “;
cout<<“进入地图二”<<endl;
Moerattack=55000; //怪物攻
Moerdefense=45000;
Moerlife=300000;
Moermagic=55000;
cout<<“进入与蜗牛PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno3()
{
if (Level<6)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=13500;
MoerExperience=99000; //经验加成
cout<<“载入地图三成功 “;
cout<<“进入地图三”<<endl;
Moerattack=105000; //怪物攻
Moerdefense=65000;
Moerlife=800000;
Moermagic=55000;
cout<<“进入与老鼠PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno4()
{
if (Level<8)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=99900;
MoerExperience=187000; //经验加成
cout<<“载入地图四成功 “;
cout<<“进入地图四”<<endl;
Moerattack=155000; //怪物攻
Moerdefense=85000;
Moerlife=1000000;
Moermagic=55000;
cout<<“进入与花猫PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno5()
{
if (Level<10)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=301243;
MoerExperience=552637; //经验加成
cout<<“载入地图五成功 “;
cout<<“进入地图五”<<endl;
Moerattack=255000; //怪物攻
Moerdefense=105000;
Moerlife=1300000;
Moermagic=55000;
cout<<“进入与小狗PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno6()
{
if (Level<12)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=420398;
MoerExperience=2285700; //经验加成
cout<<“载入地图六成功 “;
cout<<“进入地图六”<<endl;
Moerattack=305000; //怪物攻
Moerdefense=125000;
Moerlife=1500000;
Moermagic=55000;
cout<<“进入与狼PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno7()
{
if (Level<14)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=5000000;
MoerExperience=6666666; //经验加成
cout<<“载入地图七成功 “;
cout<<“进入地图七”<<endl;
Moerattack=355000; //怪物攻
Moerdefense=145000;
Moerlife=1700000;
Moermagic=55000;
cout<<“进入与老虎PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno8()
{
adj_momey();
tempmomey=1000000;
MoerExperience=2222222; //经验加成
cout<<“载入地图八成功 “;
cout<<“进入地图八”<<endl;
Moerattack=200000; //怪物攻
Moerdefense=180000;
Moerlife=5000000;
Moermagic=55000;
cout<<“进入与狮子PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno9()
{
adj_momey();
tempmomey=3000000;
MoerExperience=10000000; //经验加成
cout<<“载入地图九成功 “;
cout<<“进入地图九”<<endl;
Moerattack=1000000; //怪物攻
Moerdefense=500000;
Moerlife=20000000;
Moermagic=55000;
cout<<“进入与’猎人’PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
protected:
int mima;
void mi_ma()
{
mima=0; //将密码修改为保护模式
//此操作是如果在正式程序的时候,防止他人通过其他外接函数修改
/*
如:反汇编者利用一个函数(得知密码在此的变量名为mima的时候)
void xiugaimima()
{
int i;
cin>>i;
mima=i;
}
在进入GM工具前,已经通过类似的函数把密码的值(0)给修改成任意数;
这样被破解的机率就相当高
以上纯属作者个人看法
*/
}
private:
int o; //修改的数值
void xiugai()
{

labelxiugai:
cout<<“请输入您要修改的数值(1-1000000):”<<endl;
cin>>o;
if (o<1||o>1000000)
{
cout<<“您输入错误,请重新输入”<<endl;
goto labelxiugai;
}
}
void gmmima()
{
int i;
int o=3;

labelgmmima:
cout<<“请输入GM模式密码”<<endl;
cin>>i;
if (i!=mima)
{

if (o–==1)
{
cout<<“您输入GM密码错误3次。”<<endl;
mapno0();
}
cout<<“密码错误,请重新输入”<<endl;
cout<<“您还剩”<<o<<“次机会”<<endl;
goto labelgmmima;
}
else
{
cout<<“成功进入GM模式”<<endl;
gm();
}
}
void gongji()
{
xiugai();
CrityAttack=CrityAttack+o;
crity();getch(); //修改属性后,显示角色属性,并且屏幕停止
Csen();gm(); //清屏;返回GM模式选择项
}
void fangyu()
{
xiugai();
CrityDefense=CrityDefense+o;
crity();getch(); //修改属性后,显示角色属性,并且屏幕停止
Csen();gm();
}
void shengming()
{
xiugai();
CrityLife=CrityLife+o;
BigCrityLife=BigCrityLife+o;
crity();getch(); //修改属性后,显示角色属性,并且屏幕停止
Csen();gm();
}
void mofa()
{
xiugai();
CrityMagic=CrityMagic+o;
BigCrityMagic=BigCrityMagic+o;
crity();getch(); //修改属性后,显示角色属性,并且屏幕停止
Csen();gm();
}
void jinbi()
{
xiugai();
Money=Money+o;
crity();getch(); //修改属性后,显示角色属性,并且屏幕停止
Csen();gm();
}
public:
void gm()
{
int i;
label_l:
cout<<“进入GM模式,请选择需要修改的数据”<<endl;
cout<<“1、修改角色攻击力(最多一次增加1000000)”<<endl;
cout<<“2、修改角色防御力(最多一次增加1000000)”<<endl;
cout<<“3、修改角色生命值(最多一次增加1000000)”<<endl;
cout<<“4、修改角色魔法值(最多一次增加1000000)”<<endl;
cout<<“5、修改角色游戏币(最多一次增加1000000)”<<endl;
cout<<“0、退出”<<endl;
//cout<<“为了不弄太变态,以后这个将被修改,修改经验值增加的经验及属性”<<endl;
cin>>i;
switch(i)
{
case 1:
gongji();break;
case 2:
fangyu();break;
case 3:
shengming();break;
case 4:
mofa();break;
case 5:
jinbi();break;
case 0:
mapno0();break;
default:cout<<“输入错误,请重新输入”<<endl;
goto label_l;
}
}
private:

void open_out() //文件写出
{
char str1[1000]; //可以生成1000个角色的数据
//用String 字符串来定义会出错,不知道啥问题
sprintf(str1,”Crity/Access/ %d.dat”,Number);
//将需要输的目录格式化成字符串,也把Number的参数做为文件名
openout.open(str1);//打开文件,如果没有则创建输出
//如果我的Number=1时,其实上一个代码等于就是str=Crity/”Number”.txt
//在这里是设置用户的号码,等游戏保存的时候,下次登陆,验证帐号密码以后
//在从角色数据的Number里抽取角色的编号文件,这样角色的数据就可以分开了。
openout<<name<<endl;//名字
openout<<Number<<endl;//编号
openout<<Level<<endl;//等级
openout<<Money<<endl;//金币
openout<<CrityAttack<<endl;//攻击
openout<<CrityDefense<<endl;//防御
openout<<CrityLife<<endl;//当前生命值
openout<<BigCrityLife<<endl;//生命值上限
openout<<CrityMagic<<endl;//当前魔法值
openout<<BigCrityMagic<<endl;//魔法值上限
openout<<Experience<<endl;//当前经验
openout<<tempExperience<<endl;//升级经验
openout.close(); //保存关闭
cout<<“数据保存完毕”<<endl;Sleep(2000);
cout<<“退出游戏?”<<endl;cout<<“0 退出”<<” “<<“其他键不退出”<<endl;
int yn;
cin>>yn;
switch(yn)
{

case 0:
cout<<“游戏退出”<<endl;
Sleep(1000);
exit(0);
default:
mapno0();break;
}
}
void open_in() //文件读入
{
string tempname;
int tempnumber;int templevel;int tempmoney;int tempattack;int tempdefense;
int templife;int tempbiglife;int tempmagic;int tempbigmagic;
int tempexp;int temptempexp;

cout<<“导入角色数据成功”<<endl;
openin.open(str); //直接导入角色数据 在帐号密码验证后已得知在哪个文件里
openin>>tempname;
openin>>tempnumber;
openin>>templevel;
openin>>tempmoney;
openin>>tempattack;
openin>>tempdefense;
openin>>templife;
openin>>tempbiglife;
openin>>tempmagic;
openin>>tempbigmagic;
openin>>tempexp;
openin>>temptempexp;
string(name=tempname);
Number=tempnumber;
Level=templevel;
Money=tempmoney;
CrityAttack=tempattack;
CrityDefense=tempdefense;
CrityLife=templife;
BigCrityLife=tempbiglife;
CrityMagic=tempmagic;
BigCrityMagic=tempbigmagic;
Experience=tempexp;
tempExperience=temptempexp;

}
};
PIG_GAME pig_game;

int main(void)
{
// UPdate(); cout<<endl;
pig_game.gameopen();
pig_game.mapno0();
}