分类归档 C++

通过清心醉

C++ vector数组

vector数组可以用来存储int,char,和class的实体(比如string就是一个class,当然也可以自定义class)

//#define _CRT_SECURE_NO_WARNINGS 
//定义_CRT_SECURE_NO_WARNINGS 主要考虑strcpy_s /和 strcpy等部分string字符串操作异常,如果考虑向下兼容则使用,否则不建议使用。

#include <iostream>
#include <exception> //异常
#include <thread> //多线程类库
#include <Windows.h> //多线程如果while挂起执行的时候Sleep需要,注意Unix和Windows的参数格式不一样
#include <string> //字符串需要
#include <vector> //vector数组类,类似string
using namespace std;


class Demo {
private:
    __int64 demoid; //注意 int如果超过32的最大长度,需要使用 __int64     
public:
    int setId(__int64 id) {
        this->demoid = id;
        return this->demoid;
    }
    int getId() {
        return this->demoid;
    }
};

int main()
{   
    try {
        //Int Type
        vector<int>obj;//创建一个向量存储容器 int
        for (int i = 0; i < 10; i++) // push_back(elem)在数组最后添加数据 
        {
            obj.push_back(i);
            cout << obj[i] << ",";
        }

        for (int i = 0; i < 5; i++)//去掉数组最后一个数据 
        {
            obj.pop_back(); //删除矢量末尾处的元素
        }

        cout << "\n" << endl;

        for (int i = 0; i < obj.size(); i++)//size()容器中实际数据个数 
        {
            cout << obj[i] << ",";
        }
        cout << "\n";

        //Char StringClass Type
        vector<char> StringObj; //定义char类型数组类
        string str = "Visual Studio"; //需要push的数据为string类库的字符串格式
        for (int i = 0; i < str.length(); i++) {
            StringObj.push_back(str[i]);
        }
        for (int i = 0; i < StringObj.size(); i++) {
            cout << StringObj[i];
        }
        cout << "\n";

        //Char Type
        vector<char> CharObj; //定义char类型数组类
        char char_str[32] = "Visual Studio 2022"; //需要push的数据为char字符串格式
        int str_length_ = strlen(char_str);// (sizeof(char_str) / sizeof(char_str[0])); //这样获取长度是不严谨的,因为定义的时候为char[32],实际使用并且32个,这样后面就会以空占用
        for (int i = 0; i < str_length_; i++) {
            cout << "i=" <<i << "&str=" << char_str[i] << "\n";
        }
        for (int i = 0; i < str_length_; i++) {
            CharObj.push_back(char_str[i]);
        }
        for (int i = 0; i < CharObj.size(); i++) {
            cout << CharObj[i];
        }
        cout << "\n";


        vector<Demo> demo; //数组类,注意这里的<Demo>为类名  demo为vector的实体

        for (int i = 0; i < 10; i++) {
            Demo democlass;
            //democlass.setId(100+1); //初始化,这里主要实现不同的demo类的id都不同,也可以在之后的循环体内进行设置初始值
            demo.push_back(democlass); //将类PUSH到vector数组里

        }
        for (int i = 0; i < demo.size(); i++) { //push_back之后,可以使用.size()方法来获取下标数量
            demo[i].setId(100+i); //循环的时候,进行SET动作
        }
        for (int i = 0; i < demo.size(); i++) { //push_back之后,可以使用.size()方法来获取下标数量
            cout << demo[i].getId() << "\n";
        }

        return true;
    }
    catch (exception e) {
        cout << "Exception \n";
        return false;
    }
}

通过清心醉

C++字符串和字符串数组

//#define _CRT_SECURE_NO_WARNINGS 
//定义_CRT_SECURE_NO_WARNINGS 主要考虑strcpy_s /和 strcpy等部分string字符串操作异常,如果考虑向下兼容则使用,否则不建议使用。
#include <iostream>
#include <exception> //异常
#include <string> //字符串需要
using namespace std;




//------【变量类型】------>
int tempdemo_value = true;
int cc = 100;
void tempdemo() {
    static int ax = 100; //静态变量
    auto bx = 100;
    register int cx = 1000; //寄存器变量,直接在CPU内进行运算
    extern int tempdemo_value; //在函数体内引用,就可以直接引用,不过如果是外部的全局变量,直接应用也是可以的。比如一下的变量cc,同样可以对cc变量进行重新赋值
    sizeof(bx); //查看变量占用的字节
    std::cout << "cc=" << cc << "\n";
}

//------【变量类型】------>

//一维数组
void CoutArray() {
    __int64 a[10];
    //int a[10]; //定义一个数组,10个元素 
    for (int i = 0; i <= 9; i++) {
        cout << i << "\n";
    }
    //前面的for循环有长度,在实际开发过程中,如果不确定的情况下
    //a[11] = true;
    int length = sizeof(a) / sizeof(a[0]); //确定一定要有0开始的下标
    for (int i = 0; i < length; i++) { //这里注意,比如有10个,这里的length的实际获取是10,所以不能用i<=length,不然0自增的话,就是i<=10,就会列出0-10共计11个
        a[i] = (100 + i);
        cout << a[i] << "\n";
    }
    cout << "\n";
    //数组初始化
    int int32[10] = { 0,1,2,3,4,5,6,7,8,9 };
    for (int i = 0; i < 10; i++) {
        cout << "int32next=" << int32[i] << "\n";
    }
    cout << "\n";
    //定义未知长度数组
    int int32_[] = { 9,8,7,6,5,4,3,2,1,0 };
    for (int i = 0; i < 10; i++) {
        cout << "int32_next=" << int32_[i] << "\n";
    }
    cout << "\n";
}


//多维数组
void AllArray() {
    __int64 arr[1][2][3]; //定义3维数组
    int length_1 = sizeof(arr) / sizeof(arr[0]); //通过字节占用获取1维数组的数量
    int length_2 = sizeof(arr[0]) / sizeof(arr[0][0]); //通过字节占用获取2维数组的数量
    int length_3 = sizeof(arr[0][0]) / sizeof(arr[0][0][0]); //通过字节占用获取3维数组的数量
    //cout << length_1 << length_2 << length_3;

    for (int i = 0; i < length_1; i++) {
        for (int o = 0; o < length_2; o++) {
            for (int p = 0; p < length_3; p++) {
                arr[i][o][p] = (100 + p); //对3维下标进行赋值(100+当前的下标),其他更复杂的就暂时不写了,同理
            }
        }
    }
    for (int i = 0; i < length_1; i++) {
        for (int o = 0; o < length_2; o++) {
            for (int p = 0; p < length_3; p++) {
                cout << "3维数组下标" << p << "值=" << arr[i][o][p] << "\n";
            }
        }
    }

}



void CharType() {

    const char* str = "Visual Studio"; //字符变量,当然也可以使用String库或者char str[]
    cout << str << "\n"; //输出字符变量
    cout << "----------------------------------------------------------------------------\n";
    //字符串拼接,要设置下长度,比如str[32],str[64],但是不可设置str[],虽然一样可以执行,但是会抛出异常
    char str1[32] = "你好";
    char str2[32] = "中国";
    int str1_str2_strlen = int(strlen(str1)) + int(strlen(str2)) + 1;
    //具体参考strcat_s的方法原型 -- 注意:strcat_s第二个参数的计算,该参数是拼接后的字符串大小,并非原字符串大小或者目标字符串大小
    //VS11+建议使用strcat_s替换strcat,但是如果应用如果要考虑兼容XP等老系统,需要重新定义_CRT_SECURE_NO_WARNINGS
    strcat_s(str1, str1_str2_strlen, str2); //拼接之后,str1  = str1.str2 , str2则不变
    cout << "字符串拼接:" << str1 << "\n";
    cout << "----------------------------------------------------------------------------\n";

    //字符串复制1
    char str3[32], str4[32] = "清心醉";
    //VS11+建议使用strcpy_s替换strcpy,但是如果应用如果要考虑兼容XP等老系统,需要重新定义_CRT_SECURE_NO_WARNINGS
    strcpy_s(str3, str4);
    cout << "字符串复制1:" << str3 << "\n";
    //字符串复制2
    char str5[32];
    char str6[32] = "Visual Studio";
    strcpy_s(str5, strlen(str6) + 1, str6); //第二个参数为str6+1 使用strlen返回的长度不会包含末尾空字符
    cout << "字符串复制2" << str5 << "\n";

    //复制个别字符串
    char str7[32];
    char str8[32] = "Visual Studio Hello";
    strncpy_s(str7, str8, 13); //复制str8的前面13个字符串
    cout << "字符串提取:" << str7 << "\n";
    cout << "----------------------------------------------------------------------------\n";
    //字符串对比
    char str9[16] = "This";
    char str10[16] = "This";
    int str9_str10_return_status = strcmp(str9, str10); //  == 0 标识匹配
    cout << "字符串对比返回状态:" << str9_str10_return_status << "\n";


    //字符串常量类型
    const char* c[] = { "AA","BB","CC","DD","EE" }; //初始化字符数组,不建议定义为const char* c[5]
    int char_length_ = sizeof(c) / sizeof(c[0]); //获取字符数组长度
    for (int i = 0; i < char_length_; i++) {
        cout << c[i] << "\n";
    }


}

template <typename STR> //函数模板声明 //注意这里定义的I为未知的类型,也就是可以是int,float,doublue等类型,I为自定义名称
//定义函数模板,带2个参数
int TempCheckStr(STR str1, STR str2) { //定义模板方法,来检测字符串是否匹配
    int status = 0;
    int str1_ascii = -1;
    int str2_ascii = -2;
    if (sizeof(str1) == sizeof(str2)) {
        for (int k = 0; k < sizeof(str1); k++) {
            //cout << "STR1:" << str1[k] << "-ASCII=" << int(str1[k]) << "--";
            //cout << "STR2:" << str2[k] << "-ASCII=" << int(str2[k]) << "\n";
            str1_ascii = int(str1[k]);
            str2_ascii = int(str2[k]);
            if (str1_ascii != str2_ascii) {
                return 1;
            }
        }
    }
    return 0;
}
void StringType() {
    //字符串变量
    string str = "这是一个字符串变量";
    cout << str << "\n";
    cout << "----------------------------------------------------------------------------\n";
    //字符串拼接,和char类型不同,直接使用+ 即可。
    string str1 = "(字符串的变量拼接)";
    cout << str + str1 << "\n";
    cout << "str 的地址:" << &str << "\n";
    cout << "str1的地址:" << &str1 << "\n";
    cout << "----------------------------------------------------------------------------\n";
    //字符串复制,则直接赋值即可,即str = str1; 因为string是类库使用。
    //但是可以复制部分的长度
    string str3 = "Visual Studio 2022";
    char str4[16];
    str3.copy(str4, 13, 0); //复制str3到str4,复制长度13,开始位置0开始。
    str4[13] = '\0'; //Visual Studio实际占位13,但是因为0开始,所以其实=12,定义[13]给与\0是进行结束,否则可能出现其他异常乱码
    //如果str4[13]改成str4[12],则复制的内容为Visual Studi,因为第12个字符为o
    cout << str4 << "\n";
    cout << "----------------------------------------------------------------------------\n";
    string str5 = "Visual Studio";
    string str6 = "Visual Studio";
    if (str5 == str6) {
        cout << str5 << " == " << str6 << "\n";
    }
    else {
        cout << str5 << " != " << str6 << "\n";
    }

    //string to char
    //不过不严谨,最好使用VS的String类方法检查
    int str5_str6_status = str5.compare(str6);
    switch (str5_str6_status) {
    case 1:cout << "字符串【" << str5 << "】和字符串【" << str6 << "】对比的返回结果为:" << str5_str6_status << "\n"; break;
    case 0:cout << "字符串【" << str5 << "】和字符串【" << str6 << "】对比的返回结果为:" << str5_str6_status << "\n"; break;
    case -1:cout << "字符串【" << str5 << "】和字符串【" << str6 << "】对比的返回结果为:" << str5_str6_status << "\n"; break;
    default:cout << "字符串【" << str5 << "】和字符串【" << str6 << "】对比的返回结果为:" << str5_str6_status << "\n"; break;
    }
    //减产是否对等,最快的是查看ascii码,因为要使用char的方式,所以
    char str5ascii[14];
    char str6ascii[14];
    int i = 0;
    for (i = 0; i < str5.length(); i++) {
        str5ascii[i] = str5[i];
    }
    str5ascii[i] = '\0'; //一定要有结束符
    i = 0;
    for (i = 0; i < str6.length(); i++) {
        str6ascii[i] = str6[i];
    }
    str6ascii[i] = '\0'; //一定要有结束符
    cout << "string转char:\n";
    cout << "str5 : " << str5ascii << "--占用字节:" << sizeof(str5ascii) << "\n";
    cout << "str6 : " << str6ascii << "--占用字节:" << sizeof(str6ascii) << "\n";
    //const char* str_5_as[16] = str5ascii;
    //const char* str_6_as[16] = str6ascii;;
    //循环输出字符串的对应ASCII码
    cout << "输出str5和str6的对应ASCII:\n";
    int status = TempCheckStr(str5ascii, str6ascii); //利用模板方法,来检验对应的所有元素的ASICC码是否匹配,=0标识匹配
    cout << "status = " << status << "\n";
    //这里也可以用string的类型进行同样的方式校验

    cout << "----------------------------------------------------------------------------\n";
    //如果字符串不是单个,不要使用int来获取ASCII吗
    //int str5_ascii = int(str5ascii);
    //int str6_ascii = int(str6ascii);
    //cout << "str5Ascii:[" << str5_ascii << "] str6Ascii:[" << str6_ascii << "]\n"; //查看ascii码
    //
    //char转string
    char str7[] = "你好";
    string str8 = str7;
    cout << "char转string:" << str7 << "-" << str8 << "\n";
    cout << "----------------------------------------------------------------------------\n";
    //字符串数组
    string str_arr[] = { "AA","BB","CC","DD","EE" };
    cout << "变量数组str_arr占用字节:" << sizeof(str_arr) << "\n";
    cout << "每个元素占用字节" << sizeof(str_arr[0]) << "\n";

    //string类型,校验字符的ASCII是否匹配

}


int main()
{
    try {
        cout << "String类型操作:" << "\n";
        StringType(); //String封装的使用
        cout << "char类型操作:" << "\n";
        CharType();//char类型
        cout << "多维数组操作:" << "\n";
        AllArray(); //多维数组的数组
        cout << "1维数组操作:" << "\n";
        CoutArray(); //1维数组的输出
        return true;  //
    }
    catch (exception e) {
        cout << "Exception \n";
    }

}

这里只是使用char[]和String的方式,还有vector的方式后续更新了。

不得不说,还是写C++有味道

通过清心醉

重温C++

做为自己的入门语言,10多年了,学了C++基础之后就专做web开发,一直都在整PHP和VUE。最近的空闲,重新回味下C++。

来一个简单的代码

//#define _CRT_SECURE_NO_WARNINGS 
//定义_CRT_SECURE_NO_WARNINGS 主要考虑strcpy_s /和 strcpy等部分string字符串操作异常,如果考虑向下兼容则使用,否则不建议使用。
#include <iostream>
#include <thread> //多线程
#include <exception> //异常
#include <string> //字符串需要
using namespace std;

//-----------------------------------------------类型函数重载开始------------------------------------------->
//重载函数int
int max(int x, int y) {
    if (x > y) {
        return x;
    }
    else {
        return y;
    }
}
//重载函数float
float max(float x, float y) {
    if (x > y) {
        return x;
    }
    else {
        return y;
    }
}

//重载函数调用(类型调用)
void IntFloatMain() {
    int a = 100, b = 200;
    std::cout << "int max = " << max(a, b) << "\n";
    float x = 11.11f, y = 22.22f; //float类型,带个f
    std::cout << "double max = " << max(x, y) << "\n";
}
//-----------------------------------------------类型函数重载结束--------------------------------------------->
// 

//-----------------------------------------------不同参数重载开始-------------------------------------->
//3个参数取最大值
int LengthMax(int x, int y, int z) {
    if (x > y) {
        if (x > z) {
            return x;
        }
        else {
            return z;
        }
    }
    else {
        if (y > z) {
            return y;
        }
        else {
            return z;
        }
    }
}
//2个参数取最大值
int LengthMax(int x, int y) {
    if (x > y) {
        return x;
    }
    else {
        return y;
    }
}

//重载函数调用(参数数量)
void ArgeLengthMain() {
    int a = 100, b = 200, c = 300;
    std::cout << "max = " << LengthMax(a, b) << "\n";
    std::cout << "max = " << LengthMax(a, b, c) << "\n";
}
//-----------------------------------------------不同参数重载结束------------------------------------>

//-----------------------------------------------函数模板开始------------------------------>
template <typename I> //函数模板声明 //注意这里定义的I为未知的类型,也就是可以是int,float,doublue等类型,I为自定义名称
//定义函数模板,带2个参数
I Tempmax(I x, I y) {
    if (x > y) {
        return x;
    }
    else {
        return y;
    }
}

void TempLateMax() {
    int a = 100, b = 200;
    std::cout << "Template int max = " << Tempmax(a, b) << "\n";
    double x = 11.11, y = 22.22;
    std::cout << "Template double max = " << Tempmax(x, y) << "\n";
}

//-----------------------------------------------函数模板结束------------------------------>


//------【变量类型】------>
int tempdemo_value = true;
int cc = 100;
void tempdemo() {
    static int ax = 100; //静态变量
    auto bx = 100;
    register int cx = 1000; //寄存器变量,直接在CPU内进行运算
    extern int tempdemo_value; //在函数体内引用,就可以直接引用,不过如果是外部的全局变量,直接应用也是可以的。比如一下的变量cc,同样可以对cc变量进行重新赋值
    sizeof(bx); //查看变量占用的字节
    std::cout << "cc=" << cc << "\n";
}


int main()
{
    try {
        IntFloatMain(); //调用不同类型的重载函数
        ArgeLengthMain(); //调用同类型,不同的参数数量的重载函数
        TempLateMax();//调用函数模板
        return true;
    }
    catch (exception e) {
        cout << "Exception \n";
    }

}


通过清心醉

Maplesgory Global : This account has been blocked for hacking or unauthorized use of third-party programs.

You officially call me hacking and bot behavior.

But the game master said that I used a third-party macro, and I couldn’t accept the result.
This is the link published on the official website:
https://forums.maplestory.nexon.net/discussion/32452/ban-data-from-05-26-2022-06-01-2022

https://maplestory.nexon.net/micro-site/74738

EU Region – Hacking/Botting

AdeleQXZ, AngelicQXZ, ArkQXZ, AssassinQXZ, AvengerQXZ, BanditQXZ, BattleMageQX, BingleiQXZ, BlasterQXZ, BrawlerQXZ, CadenaQXZ, CannoneerQXZ, ClericQXZ, CrossbowmanQ, EvanQXZ, GunslingerQX, HayatoQXZ, HelixAOA, HoyoungQXZ, HunterQXZ, huoduQXZ, IIIiumQXZ, JettQXZ, KainQXZ, KaiserQXZ, KannaQXZ, KinesisQXZ, laraQXZ, LuminousQXZ, MachanicQXZ, MercedesQXZ, NightWalkerQ, PathfinderQX, PhantomQXZ, Q0X0Z, QingXinZui, rarnQXZ, ShadeQXZ, SlayerQXZ, ThunderQXZ, WildHunterQX, WindArcherQX, XenonQX

These characters are all mine, more than 40 characters in one account.
Is it because the name in my account has QXZ or QX, making you think I am a robot account? Then the reason for the title is the third-party macro settings?

I appealed a few times and I didn’t have any Hacking/Botting on, but the system just kept saying I used Hacking/Botting

The official did not provide a clear definition of what Hacking/Botting is.
I manually upgraded the large character name “QingXinZui”, and you all inexplicably gave a permanent ban.

I started to come back to play this game on February 1, 2022. It cost nearly 15,000 US dollars. The character QingXinZui is already level 251, and it is almost ready to solo Lucid. Originally, I was planning to play Black Mage at level 255 this month.

From CMS to GMS, I don’t understand what the so-called third-party macro settings are here.
I just don’t understand, what do the above reviewers mean? Spend so much money to play, there are reincarnations and BOD rings, and permanent bans are permanent bans. As for the use of other third parties for this kind of consumption? If it is hacking, it means that there is a problem with my own computer. It will be suspended for 3 days and remind the player that the computer may be poisoned and cause a permanent ban.

In general, GMS has no human rights than CMS and TMS, and the permanent ban is all up to you. Players do not have any right to appeal at all. To put it bluntly, there is a recharge ahead, as long as the recharge is suspended, a permanent ban will be given immediately.

Should the game operator consider the feelings of a real user who spent more than $15,000 and was permanently banned?
First: whether to consider comprehensively, new users, even if the computer is really installed with software (including VPN) that will be identified as hacking or third-party tools, at least a notice should be given to tell everyone what software should not be opened at the same time as the game, Avoid permanent bans, you didn’t do that, just straight permanent bans.
Second: I have appealed many times. I am sometimes busy, and the child will play with my computer. I don’t know whether the operation of the child will also lead to the ban. However, as operators, you have not seriously considered the feelings of players like us who have children at home, which means that no one who plays this game can have children? If you have children, do you have to place a number when you are not at the computer?
Third: I also sincerely express that if the child opens the software by mistake (because there are other game applications on my computer), even if it is detected by the system, there may be suspicion of opening a robot, which is not what our players are willing to do. Yes, you can set a fine threshold, and then use it as supervision. If the real user is not using the robot, the amount of the fine can be transferred to NX. Otherwise, if the computer is remotely controlled by others and manipulated by others, how many players will be driven away by you? In the current network environment, a computer that accidentally installed someone else’s Trojan horse virus is remotely controlled by someone else, and they remotely control it to see that the player is not next to the computer and then install a robot, deliberately making the player banned. So, in this case, the responsibility for the problem is still on the player? In this case, is it because in order to play Adventure Island, there can be nothing in the computer, and players must also learn network security knowledge to avoid the virus in the computer being banned by hackers, otherwise players will not play?

Not only do you hate robots, we, as consumer players, hate robots even more (otherwise, it would be boring if the equipment that cost so much money could not be sold at auction). But the GMS management staff are not players at all.

I can only say that I advise all Maplestory players to be careful with their money, and don’t be careless, and in the end there will be nothing left.

通过清心醉

Not All About The Money-Timati

Not All About The Money-Timati

 

通过清心醉

C++小试题一

一个两人麻将游戏,有赢局、输局、胜算率。

一般都是赢了赢局+1,输了熟局+1,胜算率=赢局/(总局数)

现在修改为游戏开始输局+1,游戏结束后赢和输的各+1。

#include “iostream.h”
int main()
{
float win,lost; //赢,输
float sl; //胜率
cout<<“请输入赢局:”;
cin>>win;
cout<<“请输入输局”;
cin>>lost;
cout<<endl<<endl;
cout<<“当前赢局:”<<win<<endl;
cout<<“当前输局:”<<lost<<endl;
sl=(win/(win+lost))*100;
cout<<“当前胜率:”<<sl<<endl;sl=0;
/*
重新对lost数据进行计算
(templost-win)因为win+1时,lost+1;
至于/2,是因为lost+1又开始的时候lost又自动+1
*/
lost=(lost-win)/2;
cout<<endl<<endl;
cout<<“等于以前赢局:”<<win<<endl;
cout<<“等于以前输局:”<<lost<<endl;
sl=(win/(win+lost))*100;
cout<<“等于以前胜率:”<<sl<<endl;
}

 

通过清心醉

指针代码

#include <iostream>
using namespace std;
int main( )
{
int a,b; //定义整型变量a,b
int *a_,*b_; //定义指针变量*a_,*b_
a=100;b=10; //对a,b赋值
a_=&a; //把变量a的地址赋给a_
b_=&b; //把变量a的地址赋给b_
cout<<a<<” “<<b<<endl;//输出a和b的值
cout<<*a_<<” “<<*b_<<endl; //输出*a_和*b_的值
return 0;
}

通过清心醉

C++头文件、源文件

一、C++编译模式

通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。

C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。比如,在文件a.cpp中定义 了一个全局函数“void a() {}”,而在文件b.cpp中需要调用这个函数。即使这样,文件a.cpp和文件b.cpp并不需要相互知道对方的存在,而是可以分别地对它们进行编译, 编译成目标文件之后再链接,整个程序就可以运行了。

这是怎么实现的呢?从写程序的角度来讲,很简单。在文件b.cpp中,在调用 “void a()”函数之前,先声明一下这个函数“void a();”,就可以了。这是因为编译器在编译b.cpp的时候会生成一个符号表(symbol table),像“void a()”这样的看不到定义的符号,就会被存放在这个表中。再进行链接的时候,编译器就会在别的目标文件中去寻找这个符号的定义。一旦找到了,程序也就可以 顺利地生成了。

注意这里提到了两个概念,一个是“定义”,一个是“声明”。简单地说,“定义”就是把一个符号完完整整地描述出来:它是变 量还是函数,返回什么类型,需要什么参数等等。而“声明”则只是声明这个符号的存在,即告诉编译器,这个符号是在其他文件中定义的,我这里先用着,你链接 的时候再到别的地方去找找看它到底是什么吧。定义的时候要按C++语法完整地定义一个符号(变量或者函数),而声明的时候就只需要写出这个符号的原型了。 需要注意的是,一个符号,在整个程序中可以被声明多次,但却要且仅要被定义一次。试想,如果一个符号出现了两种不同的定义,编译器该听谁的?

这 种机制给C++程序员们带来了很多好处,同时也引出了一种编写程序的方法。考虑一下,如果有一个很常用的函数“void f() {}”,在整个程序中的许多.cpp文件中都会被调用,那么,我们就只需要在一个文件中定义这个函数,而在其他的文件中声明这个函数就可以了。一个函数还 好对付,声明起来也就一句话。但是,如果函数多了,比如是一大堆的数学函数,有好几百个,那怎么办?能保证每个程序员都可以完完全全地把所有函数的形式都 准确地记下来并写出来吗?

二、什么是头文件

很显然,答案是不可能。但是有一个很简单地办法,可以帮助程序员们省去记住那么多函数原型的麻烦:我们可以把那几百个函数的声明语句全都先写好,放在一个文件里,等到程序员需要它们的时候,就把这些东西全部copy进他的源代码中。

这 个方法固然可行,但还是太麻烦,而且还显得很笨拙。于是,头文件便可以发挥它的作用了。所谓的头文件,其实它的内容跟.cpp文件中的内容是一样的,都是 C++的源代码。但头文件不用被编译。我们把所有的函数声明全部放进一个头文件中,当某一个.cpp源文件需要它们时,它们就可以通过一个宏命令 “#include”包含进这个.cpp文件中,从而把它们的内容合并到.cpp文件中去。当.cpp文件被编译时,这些被包含进去的.h文件的作用便发 挥了。

举一个例子吧,假设所有的数学函数只有两个:f1和f2,那么我们把它们的定义放在math.cpp里:

/* math.cpp */

double f1()

{

//do something here….

return;

}

double f2(double a)

{

//do something here…

return a * a;

}

/* end of math.cpp */

并把“这些”函数的声明放在一个头文件math.h中:

/* math.h */

double f1();

double f2(double);

/* end of math.h */

在另一个文件main.cpp中,我要调用这两个函数,那么就只需要把头文件包含进来:

/* main.cpp */

#include “math.h”

main()

{

int number1 = f1();

int number2 = f2(number1);

}

/* end of main.cpp */

这 样,便是一个完整的程序了。需要注意的是,.h文件不用写在编译器的命令之后,但它必须要在编译器找得到的地方(比如跟main.cpp在一个目录下)。 main.cpp和math.cpp都可以分别通过编译,生成main.o和math.o,然后再把这两个目标文件进行链接,程序就可以运行了。

三、#include

#include 是一个来自C语言的宏命令,它在编译器进行编译之前,即在预编译的时候就会起作用。#include的作用是把它后面所写的那个文件的内容,完完整整地、 一字不改地包含到当前的文件中来。值得一提的是,它本身是没有其它任何作用与副功能的,它的作用就是把每一个它出现的地方,替换成它后面所写的那个文件的 内容。简单的文本替换,别无其他。因此,main.cpp文件中的第一句(#include “math.h”),在编译之前就会被替换成math.h文件的内容。即在编译过程将要开始的时候,main.cpp的内容已经发生了改变:

/* ~main.cpp */

double f1();

double f2(double);

main()

{

int number1 = f1();

int number2 = f2(number1);

}

/* end of ~main.cpp */

不多不少,刚刚好。同理可知,如果我们除了main.cpp以外,还有其他的很多.cpp文件也用到了f1和f2函数的话,那么它们也通通只需要在使用这两个函数前写上一句#include “math.h”就行了。

四、头文件中应该写什么

通 过上面的讨论,我们可以了解到,头文件的作用就是被其他的.cpp包含进去的。它们本身并不参与编译,但实际上,它们的内容却在多个.cpp文件中得到了 编译。通过“定义只能有一次”的规则,我们很容易可以得出,头文件中应该只放变量和函数的声明,而不能放它们的定义。因为一个头文件的内容实际上是会被引 入到多个不同的.cpp文件中的,并且它们都会被编译。放声明当然没事,如果放了定义,那么也就相当于在多个文件中出现了对于一个符号(变量或函数)的定 义,纵然这些定义都是相同的,但对于编译器来说,这样做不合法。

所以,应该记住的一点就是,.h头文件中,只能存在变量或者函数的声明, 而不要放定义。即,只能在头文件中写形如:extern int a;和void f();的句子。这些才是声明。如果写上int a;或者void f() {}这样的句子,那么一旦这个头文件被两个或两个以上的.cpp文件包含的话,编译器会立马报错。(关于extern,前面有讨论过,这里不再讨论定义跟 声明的区别了。)

但是,这个规则是有三个例外的。

一,头文件中可以写const对象的定义。因为全局的const对象默 认是没有extern的声明的,所以它只在当前文件中有效。把这样的对象写进头文件中,即使它被包含到其他多个.cpp文件中,这个对象也都只在包含它的 那个文件中有效,对其他文件来说是不可见的,所以便不会导致多重定义。同时,因为这些.cpp文件中的该对象都是从一个头文件中包含进去的,这样也就保证 了这些.cpp文件中的这个const对象的值是相同的,可谓一举两得。同理,static对象的定义也可以放进头文件。

二,头文件中可 以写内联函数(inline)的定义。因为inline函数是需要编译器在遇到它的地方根据它的定义把它内联展开的,而并非是普通函数那样可以先声明再链 接的(内联函数不会链接),所以编译器就需要在编译时看到内联函数的完整定义才行。如果内联函数像普通函数一样只能定义一次的话,这事儿就难办了。因为在 一个文件中还好,我可以把内联函数的定义写在最开始,这样可以保证后面使用的时候都可以见到定义;但是,如果我在其他的文件中还使用到了这个函数那怎么办 呢?这几乎没什么太好的解决办法,因此C++规定,内联函数可以在程序中定义多次,只要内联函数在一个.cpp文件中只出现一次,并且在所有的.cpp文 件中,这个内联函数的定义是一样的,就能通过编译。那么显然,把内联函数的定义放进一个头文件中是非常明智的做法。

三,头文件中可以写类 (class)的定义。因为在程序中创建一个类的对象时,编译器只有在这个类的定义完全可见的情况下,才能知道这个类的对象应该如何布局,所以,关于类的 定义的要求,跟内联函数是基本一样的。所以把类的定义放进头文件,在使用到这个类的.cpp文件中去包含这个头文件,是一个很好的做法。在这里,值得一提 的是,类的定义中包含着数据成员和函数成员。数据成员是要等到具体的对象被创建时才会被定义(分配空间),但函数成员却是需要在一开始就被定义的,这也就 是我们通常所说的类的实现。一般,我们的做法是,把类的定义放在头文件中,而把函数成员的实现代码放在一个.cpp文件中。这是可以的,也是很好的办法。 不过,还有另一种办法。那就是直接把函数成员的实现代码也写进类定义里面。在C++的类中,如果函数成员在类的定义体中被定义,那么编译器会视这个函数为 内联的。因此,把函数成员的定义写进类定义体,一起放进头文件中,是合法的。注意一下,如果把函数成员的定义写在类定义的头文件中,而没有写进类定义中, 这是不合法的,因为这个函数成员此时就不是内联的了。一旦头文件被两个或两个以上的.cpp文件包含,这个函数成员就被重定义了。

五、头文件中的保护措施

考 虑一下,如果头文件中只包含声明语句的话,它被同一个.cpp文件包含再多次都没问题——因为声明语句的出现是不受限制的。然而,上面讨论到的头文件中的 三个例外也是头文件很常用的一个用处。那么,一旦一个头文件中出现了上面三个例外中的任何一个,它再被一个.cpp包含多次的话,问题就大了。因为这三个 例外中的语法元素虽然“可以定义在多个源文件中”,但是“在一个源文件中只能出现一次”。设想一下,如果a.h中含有类A的定义,b.h中含有类B的定 义,由于类B的定义依赖了类A,所以b.h中也#include了a.h。现在有一个源文件,它同时用到了类A和类B,于是程序员在这个源文件中既把 a.h包含进来了,也把b.h包含进来了。这时,问题就来了:类A的定义在这个源文件中出现了两次!于是整个程序就不能通过编译了。你也许会认为这是程序 员的失误——他应该知道b.h包含了a.h——但事实上他不应该知道。

使用”#define”配合条件编译可以很好地解决这个问题。在一 个头文件中,通过#define定义一个名字,并且通过条件编译#ifndef…#endif使得编译器可以根据这个名字是否被定义,再决定要不要继 续编译该头文中后续的内容。这个方法虽然简单,但是写头文件时一定记得写进去。

 

转自:http://qimo601.iteye.com/blog/1520104

通过清心醉

C++友元类及函数

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
friend 类型 函数名(形式参数);

友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。
当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:
friend class 类名;
其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。

例如,以下语句说明类B是类A的友元类:
class A
{

public:
friend class B;

};
经过以上说明后,类B的所有成员函数都是类A的友元函数,能存取类A的私有成员和保护成员。

 

 

使用友元类时需要注意以下三点:

一:友元关系不能被继承。
二:友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
三:友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明 

通过清心醉

自写C++六

由于该版本增加背景音乐文件,文件过大,代码不放,直接放文件。

下载编译即可运行。

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

通过清心醉

自写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();
}

通过清心醉

自写C++四

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

#include “iostream.h”
#include “string.h”
#include “stdlib.h”
#include “ctype.h”
#include “stdio.h”
#include “conio.h” //getch()屏幕停留函数需要
#include “time.h” //系统随机

void UPdate() //更新
{
cout<<“*************** 本次更新添加:***************”<<endl;
cout<<“当前版本号: V1.4″<<endl;
cout<<“1、修改角色升级后HP和MP变满”<<endl;
cout<<“2、修改角色攻不破防的时候,随机打出(1-10000)+固定22000至55000《给予重击》”<<endl;
cout<<” 如果怪物破防则随机添加(1-1000)+固定1000《不给予重击等》”<<endl;
cout<<“3、角色名字由玩家自行定义”<<endl;
cout<<“”<<endl;
cout<<” 2013-03-04 “<<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<<” GM工具:密码暂设为 0 “<<endl;
cout<<“**************************************************************************”<<endl;
cout<<endl<<“是否给怪物BOSS设置技能,如终级BOSS,也弄个随机,有机会打出固定N的值”<<endl;
getch();

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

void Csen() //怕屏幕内容太多,添加一清屏函数
{
system(“cls”);
}

 

 

class AREA_ //区选择类
{
private:
void generation() //生成角色
{
cout<<“**********”<<endl;
cout<<“生成角色…”<<endl;
cout<<“名字:’name’ “<<endl;
cout<<“等级:0″<<endl;
cout<<“攻击:”<<“0″<<endl;
cout<<“防御:”<<“0″<<endl;
cout<<“HP:”<<“0″<<endl;
cout<<“MP:”<<“0″<<endl;
cout<<“成功拜清心为师”<<endl;
cout<<“**********”<<endl;
}
public:
void numarea() //区号
{
char x;
int i=0;
labelTWO: //标签2,由于怕标签过多,后面加个数字做表示清晰点
cout<<“请选择:”<<endl;
cout<<“1、风之大陆”<<endl;cout<<“2、光之大陆”<<endl;
cout<<“3、水之大陆”<<endl;cout<<“0、退出游戏”<<endl;
cout<<endl;
cin>>x;
if (!isdigit(x))
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
else
{
switch(x)
{
case’1′:
Csen();
cout<<“连接风之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’2′:
Csen();
cout<<“连接光之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’3′:
Csen();
cout<<“连接水之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’0′:
cout<<“成功退出游戏,”<<endl
<<“请按任意键退出!”<<endl;
cout<<endl<<endl;
exit(0);
break;
default:
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
}
}
};

class REGISTER_ :public AREA_
{
private:
char account[16];
char password[16];
public:
void open()
{
cout<<“请输入您注册的帐号”<<endl;
cin>>account;
cout<<“请输入您注册帐号的密码”<<endl;
cin>>password;
Csen();
char tempaccount[16];
char temppassword[16];
int i=0;
labelONE:
cout<<endl<<endl;
cout<<“请输入您的帐号:”; cin>>tempaccount;
cout<<“请输入您的密码:”; cin>>temppassword;
if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
{
cout<<“正确”<<endl;
cout<<endl;
numarea();
Toremind();
}
else
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
//退出
}
cout<<“您输入错误,请重新输入:”<<endl;
goto labelONE;
}
}
};

class CELEBRITY_ //人物
{
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; //怪物不破角色防御的随机伤害
char name[32]; //玩家自行填写角色名字
void Crity_name()
{
cout<<“请输入您的角色名字:”;cin>>name;
cout<<“您的角色名字为:”<<name<<endl;

}
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<<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<<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<<“怪物对您进行攻击:”;
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
if(CrityDefense>Moerattack)
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
win();
LveExp();getch();Csen();
GOTOMAP();
//属性归0,用于下次挑战重新赋值
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-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<<“怪物攻击低于您的防御,怪物受到伤害:”
<<(CrityDefense+tempCrityDefense)-Moerattack<<endl;
Moerlife=Moerlife-((CrityDefense+tempCrityDefense)-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
win();
//怪物属性归0,用于下次挑战重新赋值
LveExp();getch();Csen();
GOTOMAP();
break;
}
getch();Csen();
repeat();
break;
}
cout<<“怪物对您造成伤害”<<Moerattack-(CrityDefense+tempCrityDefense)<<endl;
CrityLife=CrityLife-(Moerattack-(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;
Csen();
cout<<“数值初始化成功”<<endl;
cout<<“按任意键盘开始”<<endl;
getch();Csen();
Crity_name();//在这添加玩家需要用的角色名
mapno0();
}
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、自身属性”<<” “<<“0、GM工具”<<endl;
cout<<“5、游戏功能”<<endl;

cin>>i;
switch(i)
{
case’1′:Csen();NPC_DEAL();break;//NPC函数
case’2′:Csen();GOTOMAP();break;//
case ‘3’:Csen();crity();mapno0();break;
case ‘0’:Csen();gm();break;
case’5′:Csen();gongneng();mapno0();break;
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;
int game;
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;
}
}
};
REGISTER_ rester; //注册的对象名为rester;
AREA_ area;
CELEBRITY_ celebrity;

int main()
{

UPdate(); cout<<endl;
// rester.open();
celebrity.mapno();

}

通过清心醉

自写C++三

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

#include “iostream.h”
#include “string.h”
#include “stdlib.h”
#include “ctype.h”
#include “stdio.h”
#include “conio.h” //getch()屏幕停留函数需要
#include “time.h” //系统随机

/*
1:输入输出头文件
2:if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
strcmp函数是比较两个字符串(数组)的大小,所以需要加string.h 头文件
3:调用stdlib.h的头文件,exit函数使用
4: ctype.h头文件,AREA_类里判断输入选择大区的是否为数字
5: stdio.h 头文件,AREA_类里把输入的字符串转成数字
*/
void UPdate() //更新
{
cout<<“*************** 本次更新添加:***************”<<endl;
cout<<“当前版本号: V1.3″<<endl;
cout<<“1、如果通过GM工具修改攻击高了,直接挑战BOSS,等级只能加1,然后经验会暂停”<<endl;
cout<<” 已经修改为通过角色经验判断循环来直接把等级提高”<<endl;

cout<<” 2013-03-03 “<<endl;
cout<<endl<<endl<<endl;

cout<<“提醒:”<<endl;
cout<<“由于是WIN32的API平台编辑,非MFC图形,所以此游戏用于CMD命令支持。”<<endl<<endl;
cout<<“由于设置了帐号密码注册登陆服务,暂时关闭(等懂的帐号密码保存的时候(如使用数据库))”
<<“再给予支持,同时到时将添加装备系统”<<endl;
cout<<endl;
cout<<“备注:”<<“游戏币随机增加于1.2版本已经修改添加,只是更新未给予修改”<<endl;
cout<<” “<<“如果可以,建议不使用GM工具增加攻防血法等来实际操作。”<<endl;
getch();
}
void gongneng()
{
cout<<“程序目前正常注册,登陆验证;”<<endl;
cout<<“提供回合制,由玩家先行攻击;”<<endl;
cout<<“自动清屏,以免产生数据过多显示查看困难;”<<endl;
cout<<“增加车夫,在每个地图结束PK回合后车夫将提示;”<<endl;
cout<<“增加HP、MP上限最大值 “<<endl;
cout<<“增加攻击不破防减少攻击者HP”<<endl;
cout<<“添加等级系统,等级+1,固定加20000,攻防金币额+等级*200、血法额+等级*2000″<<endl;
cout<<“添加金币系统”<<endl;
cout<<“增加NPC系统,提供能力书的交易”<<endl;
cout<<“角色死亡后直接回出生地《猪圈》,并不直接退出游戏 “<<endl;
cout<<“角色死亡后回出生地,HP值为正常的80%”<<endl;
cout<<“开放5个技能 “<<endl;
cout<<“添加攻击有机率产生最高2倍的重击、神圣伤害,游戏币随机增加”<<endl;
cout<<“GM工具:密码暂设为 0 “<<endl;
cout<<“**************************************************************************”<<endl;
cout<<endl<<“是否给怪物BOSS设置技能,如终级BOSS,也弄个随机,有机会打出固定N的值”<<endl;
getch();

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

void Csen() //怕屏幕内容太多,添加一清屏函数
{
system(“cls”);
}

 

 

class AREA_ //区选择类
{
private:
void generation() //生成角色
{
cout<<“**********”<<endl;
cout<<“生成角色…”<<endl;
cout<<“名字:猪头”<<endl;
cout<<“等级:0″<<endl;
cout<<“攻击:”<<“0″<<endl;
cout<<“防御:”<<“0″<<endl;
cout<<“HP:”<<“0″<<endl;
cout<<“MP:”<<“0″<<endl;
cout<<“成功拜清心为师”<<endl;
cout<<“**********”<<endl;
}
public:
void numarea() //区号
{
char x;
int i=0;
labelTWO: //标签2,由于怕标签过多,后面加个数字做表示清晰点
cout<<“请选择:”<<endl;
cout<<“1、风之大陆”<<endl;cout<<“2、光之大陆”<<endl;
cout<<“3、水之大陆”<<endl;cout<<“0、退出游戏”<<endl;
cout<<endl;
cin>>x;
if (!isdigit(x))
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
else
{
switch(x)
{
case’1′:
Csen();
cout<<“连接风之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’2′:
Csen();
cout<<“连接光之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’3′:
Csen();
cout<<“连接水之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’0′:
cout<<“成功退出游戏,”<<endl
<<“请按任意键退出!”<<endl;
cout<<endl<<endl;
exit(0);
break;
default:
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
}
}
};

class REGISTER_ :public AREA_
{
private:
char account[16];
char password[16];
public:
void open()
{
cout<<“请输入您注册的帐号”<<endl;
cin>>account;
cout<<“请输入您注册帐号的密码”<<endl;
cin>>password;
Csen();
char tempaccount[16];
char temppassword[16];
int i=0;
labelONE:
cout<<endl<<endl;
cout<<“请输入您的帐号:”; cin>>tempaccount;
cout<<“请输入您的密码:”; cin>>temppassword;
if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
{
cout<<“正确”<<endl;
cout<<endl;
numarea();
Toremind();
}
else
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
//退出
}
cout<<“您输入错误,请重新输入:”<<endl;
goto labelONE;
}
}
};

class CELEBRITY_ //人物
{
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 templevel; //防御技能的等级最高给10级
void huihe_Toremind() //PK时显示
{
cout<<endl<<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.4; //临时随机攻击
int tempcrityattackadj_two=CrityAttack*0.8;
int tempcrityattackadj_three=CrityAttack*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<<“名字:猪头”<<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”<<endl<<“技能等级”<<Level<<endl;
cout<<“2、猪大跑:增加”<<50000*Level<<“攻击,消耗”<<1000*Level<<“MP”<<endl<<“技能等级”<<Level<<endl;
cout<<“3、HP恢复”<<50000*Level<<” MP恢复”<<2000*Level<<endl<<“技能等级”<<Level<<endl;
cout<<“4、防御增加”<<Level*10<<“%”<<endl<<“技能等级”<<Level<<endl;
cout<<“5、天崩地裂:释放自身攻击*2*等级的伤害,HP-“<<50000*Level<<” MP-“<<5000*Level<<endl<<“技能等级”<<Level<<endl;
huihe_Toremind();
cout<<“9、逃跑(回猪城)”<<endl;
cout<<“0、提醒||帮助”<<endl;
cout<<“**********”<<endl;
SKILL_PK();

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

if (Experience>=tempExperience)
{
labelexperience:
Level++;
tempExperience=tempExperience*1.7;
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;
}
}
//*********************************************************************
void LVcrity() //属性的提升
{
Money=Money+20000+(Level*200);
CrityAttack=CrityAttack+20000+(Level*200);
CrityDefense=CrityDefense+20000+(Level*200);
CrityLife=CrityLife+20000+(Level*2000);
BigCrityLife=BigCrityLife+20000+(Level*2000);
CrityMagic=CrityMagic+20000+(Level*2000);
BigCrityMagic=BigCrityMagic+20000+(Level*2000);
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
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 ‘6’:
// Csen();cout<<“查看自身状态”<<endl;
// crity();repeat();
// break;
//case ‘7’:
// Csen();cout<<“查看怪物状态”<<endl;
// monster();repeat();
// 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 skill() //技能
{
while (1)
{
cout<<“释放技能:”<<endl;
if (Moerdefense>(CrityAttack+skillattack)) //如果怪物防御大于攻击
{
cout<<“怪物防御高过您的攻击,你受到伤害:”
<<Moerdefense-(CrityAttack+skillattack)<<endl;
CrityLife=CrityLife-(Moerdefense-(CrityAttack+skillattack));
CrityMagic=CrityMagic-skillmagic;
huihe_Toremind();getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<CrityDefense-Moerattack<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
//怪物属性归0,用于下次挑战重新赋值
LveExp();getch();Csen();
GOTOMAP();
break;
}
huihe_Toremind();getch();Csen();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-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;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
LveExp();getch();Csen();
GOTOMAP();
break;
}
else
{
getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
LveExp();getch();Csen();
GOTOMAP();
break;
}
huihe_Toremind();getch();Csen();
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
break;
}
getch();Csen();
repeat();
}
}
}
}
}
//*********************************************************************
void CRITY_SKILL_ONE() //技能1
{
Crityadj(); //先给个随机数初始化
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(); //先给个随机数初始化
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
{
while(1)
{
cout<<“**********”<<endl;
cout<<“释放技能:”<<endl;
cout<<“HP恢复:”<<50000*Level<<” “<<“MP恢复:”<<2000*Level<<endl;
cout<<“技能等级:”<<Level;
CrityLife=CrityLife+(50000*Level);
CrityMagic=CrityMagic+(2000*Level);
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
CrityLife=BigCrityLife; CrityMagic=BigCrityMagic;
}
getch();Csen();
cout<<“怪物对您进行攻击:”;
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
if(CrityDefense>Moerattack)
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
LveExp();getch();Csen();
GOTOMAP();
//属性归0,用于下次挑战重新赋值
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}
}

}
//*********************************************************************
void CRITY_SKILL_FOUR() //技能4
{
while (1)
{
int tempCrityDefense=CrityDefense*(Level*0.1);
cout<<“防御增加”<<Level*10<<“%”<<endl;
cout<<“当前防御:”<<CrityDefense<<“+”<<tempCrityDefense
<<“=”<<CrityDefense+tempCrityDefense<<endl;
cout<<“怪物对您进行攻击:”;
if ((CrityDefense+tempCrityDefense)>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<(CrityDefense+tempCrityDefense)-Moerattack<<endl;
Moerlife=Moerlife-((CrityDefense+tempCrityDefense)-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
Experience=Experience+MoerExperience;
MoerExperience=0;tempmomey=0;
//怪物属性归0,用于下次挑战重新赋值
LveExp();getch();Csen();
GOTOMAP();
break;
}
getch();Csen();
repeat();
break;
}
cout<<“怪物对您造成伤害”<<Moerattack-(CrityDefense+tempCrityDefense)<<endl;
CrityLife=CrityLife-(Moerattack-(CrityDefense+tempCrityDefense));
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}

}
//*********************************************************************
void CRITY_SKILL_FIVE() //技能5
{
Crityadj();
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;
cout<<“数值初始化成功”<<endl;
cout<<“是否开始游戏”<<“y”<<” “<<“n”<<endl;
char i;
cin>>i;
switch(i)
{
case’y’:
Csen();
mapno0();
break;
case ‘n’:
Csen();
cout<<“游戏关闭”<<endl;
break;
default:
Csen();
cout<<“按任意键游戏退出”<<endl;
exit(0);
}
}
void NPC_DEAL() //NPC交易函数
{
char i;int o=0;
cout<<“请问您需要购买什么呢?”<<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、自身属性”<<” “<<“0、GM工具”<<endl;
cout<<“5、游戏功能”<<endl;

cin>>i;
switch(i)
{
case’1′:Csen();NPC_DEAL();break;//NPC函数
case’2′:Csen();GOTOMAP();break;//
case ‘3’:Csen();crity();mapno0();break;
case ‘0’:Csen();gm();break;
case’5′:Csen();gongneng();mapno0();break;
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<<“载入地图一成功”<<endl;
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<<“载入地图二成功”<<endl;
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<<“载入地图三成功”<<endl;
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<<“载入地图四成功”<<endl;
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<<“载入地图五成功”<<endl;
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<<“载入地图六成功”<<endl;
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<<“载入地图七成功”<<endl;
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<<“载入地图八成功”<<endl;
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<<“载入地图九成功”<<endl;
cout<<“进入地图九”<<endl;
Moerattack=1000000; //怪物攻
Moerdefense=500000;
Moerlife=20000000;
Moermagic=55000;
cout<<“进入与’猎人’PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
private:
int mima;
int o;int i;
void xiugai()
{
labelxiugai:
cout<<“请输入您要修改的数值(1-1000000):”<<endl;
cin>>o;
if (o<1||o>1000000)
{
cout<<“您输入错误,请重新输入”<<endl;
goto labelxiugai;
}
}
void gmmima()
{
int mima=0;
int i;
int o=3;
int game;
labelgmmima:
cout<<“请输入GM模式密码”<<endl;
cin>>i;
if (i!=mima)
{
if (o–==1)
{
cout<<“您输入GM密码错误3次,游戏将关闭。”<<endl;
exit(0);
}
cout<<“密码错误,请重新输入”<<endl;
cout<<“您还剩”<<o<<“次机会”<<endl;
cout<<“如要返回游戏,请按1″<<endl;
cin>>game;
if (game==mima)
{
mapno0();
}
goto labelgmmima;
}
}
void gongji()
{
xiugai();
CrityAttack=CrityAttack+o;
mapno0();
}
void fangyu()
{
xiugai();
CrityDefense=CrityDefense+o;
mapno0();
}
void shengming()
{
xiugai();
CrityLife=CrityLife+o;
BigCrityLife=BigCrityLife+o;
mapno0();
}
void mofa()
{
xiugai();
CrityMagic=CrityMagic+o;
BigCrityMagic=BigCrityMagic+o;
mapno0();
}
void jinbi()
{
xiugai();
Money=Money+o;
mapno0();
}
public:
void gm()
{
gmmima();
cout<<“进入GM模式,请选择需要修改的数据”<<endl;
cout<<“1、修改角色攻击力(最多一次增加1000000)”<<endl;
cout<<“2、修改角色防御力(最多一次增加1000000)”<<endl;
cout<<“3、修改角色生命值(最多一次增加1000000)”<<endl;
cout<<“4、修改角色魔法值(最多一次增加1000000)”<<endl;
cout<<“5、修改角色游戏币(最多一次增加1000000)”<<endl;
cout<<“为了不弄太变态,以后这个将被修改,修改经验值增加的经验及属性”<<endl;
label_l:
cin>>i;
switch(i)
{
case 1:
gongji();break;
case 2:
fangyu();break;
case 3:
shengming();break;
case 4:
mofa();break;
case 5:
jinbi();break;
default:cout<<“输入错误,请重新输入”<<endl;
goto label_l;
}
}
};

REGISTER_ rester; //注册的对象名为rester;
AREA_ area;
CELEBRITY_ celebrity;

int main()
{

UPdate(); cout<<endl;
// rester.open();
celebrity.mapno();

}

通过清心醉

自写C++二

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

#include “iostream.h”
#include “string.h”
#include “stdlib.h”
#include “ctype.h”
#include “stdio.h”
#include “conio.h” //getch()屏幕停留函数需要
#include “time.h” //系统随机

/*
1:输入输出头文件
2:if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
strcmp函数是比较两个字符串(数组)的大小,所以需要加string.h 头文件
3:调用stdlib.h的头文件,exit函数使用
4: ctype.h头文件,AREA_类里判断输入选择大区的是否为数字
5: stdio.h 头文件,AREA_类里把输入的字符串转成数字
*/
void UPdate() //更新
{
cout<<“*************** 本次更新添加:***************”<<endl;
cout<<“1、第5个技能:天崩地裂 “<<endl;
cout<<“2、GM工具:密码暂设为 0 “<<endl;
cout<<“2、添加攻击有机率产生最高2倍的重击、神圣伤害,游戏币随机增加”<<endl;
cout<<“由于随机游戏币设置需要按怪物等级来设置,下次更新将进行修改”<<endl;
cout<<“2013-03-02″<<endl;
cout<<endl<<endl<<endl;
//由于游戏和金币公式相对添加随机数,所以最后修改
cout<<“提醒:”<<endl;
cout<<“由于是WIN32的API平台编辑,非MFC图形,所以此游戏用于CMD命令支持。”<<endl;
cout<<endl;
getch();
}
void gongneng()
{
cout<<“程序目前正常注册,登陆验证;”<<endl;
cout<<“提供回合制,由玩家先行攻击;”<<endl;
cout<<“自动清屏,以免产生数据过多显示查看困难;”<<endl;
cout<<“增加车夫,在每个地图结束PK回合后车夫将提示;”<<endl;
cout<<“增加HP、MP上限最大值 “<<endl;
cout<<“增加攻击不破防减少攻击者HP”<<endl;
cout<<“添加等级系统,等级+1,固定加20000,攻防金币额+等级*200、血法额+等级*2000″<<endl;
cout<<“添加金币系统”<<endl;
cout<<“增加NPC系统,提供能力书的交易”<<endl;
cout<<“角色死亡后直接回出生地《猪圈》,并不直接退出游戏 “<<endl;
cout<<“角色死亡后回出生地,HP值为正常的80%”<<endl;
cout<<“增加技能4,防御增加当前防御的20%”<<endl;
getch();

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

void Csen() //怕屏幕内容太多,添加一清屏函数
{
system(“cls”);
}

 

 

class AREA_ //区选择类
{
private:
void generation() //生成角色
{
cout<<“**********”<<endl;
cout<<“生成角色…”<<endl;
cout<<“名字:猪头”<<endl;
cout<<“等级:0″<<endl;
cout<<“攻击:”<<“0″<<endl;
cout<<“防御:”<<“0″<<endl;
cout<<“HP:”<<“0″<<endl;
cout<<“MP:”<<“0″<<endl;
cout<<“成功拜清心为师”<<endl;
cout<<“**********”<<endl;
}
public:
void numarea() //区号
{
char x;
int i=0;
labelTWO: //标签2,由于怕标签过多,后面加个数字做表示清晰点
cout<<“请选择:”<<endl;
cout<<“1、风之大陆”<<endl;cout<<“2、光之大陆”<<endl;
cout<<“3、水之大陆”<<endl;cout<<“0、退出游戏”<<endl;
cout<<endl;
cin>>x;
if (!isdigit(x))
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
else
{
switch(x)
{
case’1′:
Csen();
cout<<“连接风之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’2′:
Csen();
cout<<“连接光之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’3′:
Csen();
cout<<“连接水之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’0′:
cout<<“成功退出游戏,”<<endl
<<“请按任意键退出!”<<endl;
cout<<endl<<endl;
exit(0);
break;
default:
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
}
}
};

class REGISTER_ :public AREA_
{
private:
char account[16];
char password[16];
public:
void open()
{
cout<<“请输入您注册的帐号”<<endl;
cin>>account;
cout<<“请输入您注册帐号的密码”<<endl;
cin>>password;
Csen();
char tempaccount[16];
char temppassword[16];
int i=0;
labelONE:
cout<<endl<<endl;
cout<<“请输入您的帐号:”; cin>>tempaccount;
cout<<“请输入您的密码:”; cin>>temppassword;
if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
{
cout<<“正确”<<endl;
cout<<endl;
numarea();
Toremind();
}
else
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
//退出
}
cout<<“您输入错误,请重新输入:”<<endl;
goto labelONE;
}
}
};

class CELEBRITY_ //人物
{
private:
int Level; int Experience; int tempExperience;//等级 经验 升级所需经验
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 templevel; //防御技能的等级最高给10级
void huihe_Toremind() //PK时显示
{
cout<<endl<<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.4; //临时随机攻击
int tempcrityattackadj_two=CrityAttack*0.8;
int tempcrityattackadj_three=CrityAttack*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<<“名字:猪头”<<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”<<endl<<“技能等级”<<Level<<endl;
cout<<“2、猪大跑:增加”<<50000*Level<<“攻击,消耗”<<1000*Level<<“MP”<<endl<<“技能等级”<<Level<<endl;
cout<<“3、HP恢复”<<50000*Level<<” MP恢复”<<2000*Level<<endl<<“技能等级”<<Level<<endl;
cout<<“4、防御增加”<<Level*10<<“%”<<endl<<“技能等级”<<Level<<endl;
cout<<“5、天崩地裂:释放自身攻击*2*等级的伤害,HP-“<<50000*Level<<” MP-“<<5000*Level<<endl<<“技能等级”<<Level<<endl;
huihe_Toremind();
cout<<“9、逃跑(回猪城)”<<endl;
cout<<“0、提醒||帮助”<<endl;
cout<<“**********”<<endl;
SKILL_PK();

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

if (Experience>=tempExperience)
{
Level++;
tempExperience=tempExperience*2;
cout<<“您升级了!您的等级:”<<Level<<endl;
LVcrity();
}
}
//*********************************************************************
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;
}
}
//*********************************************************************
void LVcrity() //属性的提升
{
Money=Money+20000+(Level*200);
CrityAttack=CrityAttack+20000+(Level*200);
CrityDefense=CrityDefense+20000+(Level*200);
CrityLife=CrityLife+20000+(Level*2000);
BigCrityLife=BigCrityLife+20000+(Level*2000);
CrityMagic=CrityMagic+20000+(Level*2000);
BigCrityMagic=BigCrityMagic+20000+(Level*2000);
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
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 ‘6’:
// Csen();cout<<“查看自身状态”<<endl;
// crity();repeat();
// break;
//case ‘7’:
// Csen();cout<<“查看怪物状态”<<endl;
// monster();repeat();
// 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 skill() //技能
{
while (1)
{
cout<<“释放技能:”<<endl;
if (Moerdefense>(CrityAttack+skillattack)) //如果怪物防御大于攻击
{
cout<<“怪物防御高过您的攻击,你受到伤害:”
<<Moerdefense-(CrityAttack+skillattack)<<endl;
CrityLife=CrityLife-(Moerdefense-(CrityAttack+skillattack));
CrityMagic=CrityMagic-skillmagic;
huihe_Toremind();getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<CrityDefense-Moerattack<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
tempmomey=0;
//怪物属性归0,用于下次挑战重新赋值
getch();Csen();
GOTOMAP();
break;
}
huihe_Toremind();getch();Csen();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-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;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
tempmomey=0;
getch();Csen();
GOTOMAP();
break;
}
else
{
getch();Csen();
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
tempmomey=0;
getch();Csen();
GOTOMAP();
break;
}
huihe_Toremind();getch();Csen();
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
break;
}
getch();Csen();
repeat();
}
}
}
}
}
//*********************************************************************
void CRITY_SKILL_ONE() //技能1
{
Crityadj(); //先给个随机数初始化
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(); //先给个随机数初始化
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
{
while(1)
{
cout<<“**********”<<endl;
cout<<“释放技能:”<<endl;
cout<<“HP恢复:”<<50000*Level<<” “<<“MP恢复:”<<2000*Level<<endl;
cout<<“技能等级:”<<Level;
CrityLife=CrityLife+(50000*Level);
CrityMagic=CrityMagic+(2000*Level);
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
CrityLife=BigCrityLife; CrityMagic=BigCrityMagic;
}
getch();Csen();
cout<<“怪物对您进行攻击:”;
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
if(CrityDefense>Moerattack)
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
tempmomey=0;
getch();Csen();
GOTOMAP();
//属性归0,用于下次挑战重新赋值
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}
}

}
//*********************************************************************
void CRITY_SKILL_FOUR() //技能4
{
while (1)
{
int tempCrityDefense=CrityDefense*(Level*0.1);
cout<<“防御增加”<<Level*10<<“%”<<endl;
cout<<“当前防御:”<<CrityDefense<<“+”<<tempCrityDefense
<<“=”<<CrityDefense+tempCrityDefense<<endl;
cout<<“怪物对您进行攻击:”;
if ((CrityDefense+tempCrityDefense)>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<(CrityDefense+tempCrityDefense)-Moerattack<<endl;
Moerlife=Moerlife-((CrityDefense+tempCrityDefense)-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
Money=Money+tempmomey+Moneyadj;
tempmomey=0;
//怪物属性归0,用于下次挑战重新赋值
getch();Csen();
GOTOMAP();
break;
}
getch();Csen();
repeat();
break;
}
cout<<“怪物对您造成伤害”<<Moerattack-(CrityDefense+tempCrityDefense)<<endl;
CrityLife=CrityLife-(Moerattack-(CrityDefense+tempCrityDefense));
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();repeat();
}
getch();Csen();
repeat();
}

}
//*********************************************************************
void CRITY_SKILL_FIVE() //技能5
{
Crityadj();
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 (3级以上可进)。 怪物等级5″<<endl;
cout<<“3、地图3 (8级以上可进)。 怪物等级10″<<endl;
cout<<“4、地图4 (13级以上可进)。 怪物等级15″<<endl;
cout<<“5、地图5 (18级以上可进)。 怪物等级20″<<endl;
cout<<“6、地图6 (23级以上可进)。 怪物等级25″<<endl;
cout<<“7、地图7 (28级以上可进)。 怪物等级30″<<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;
cout<<“数值初始化成功”<<endl;
cout<<“是否开始游戏”<<“y”<<” “<<“n”<<endl;
char i;
cin>>i;
switch(i)
{
case’y’:
Csen();
mapno0();
break;
case ‘n’:
Csen();
cout<<“游戏关闭”<<endl;
break;
default:
Csen();
cout<<“按任意键游戏退出”<<endl;
exit(0);
}
}
void NPC_DEAL() //NPC交易函数
{
char i;int o=0;
cout<<“请问您需要购买什么呢?”<<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、自身属性”<<” “<<“0、GM工具”<<endl;
cout<<“5、游戏功能”<<endl;

cin>>i;
switch(i)
{
case’1′:Csen();NPC_DEAL();break;//NPC函数
case’2′:Csen();GOTOMAP();break;//
case ‘3’:Csen();crity();mapno0();break;
case ‘0’:Csen();gm();break;
case’5′:Csen();gongneng();mapno0();break;
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+随机
cout<<“载入地图一成功”<<endl;
cout<<“进入地图一:蚂蚁洞”<<endl;
Moerattack=35000; //怪物攻
Moerdefense=35000;
Moerlife=200000;
Moermagic=35000;
cout<<“进入与蚂蚁PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+800; //经验加成
// Money=Money+700;
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}

void mapno2()
{
if (Level<3)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=1500;
cout<<“载入地图二成功”<<endl;
cout<<“进入地图二”<<endl;
Moerattack=55000; //怪物攻
Moerdefense=45000;
Moerlife=300000;
Moermagic=55000;
cout<<“进入与蜗牛PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+40000; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno3()
{
if (Level<8)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=13500;
cout<<“载入地图三成功”<<endl;
cout<<“进入地图三”<<endl;
Moerattack=105000; //怪物攻
Moerdefense=65000;
Moerlife=800000;
Moermagic=55000;
cout<<“进入与老鼠PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+99000; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno4()
{
if (Level<13)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=99900;
cout<<“载入地图四成功”<<endl;
cout<<“进入地图四”<<endl;
Moerattack=155000; //怪物攻
Moerdefense=85000;
Moerlife=1000000;
Moermagic=55000;
cout<<“进入与花猫PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+187000; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno5()
{
if (Level<18)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=301243;
cout<<“载入地图五成功”<<endl;
cout<<“进入地图五”<<endl;
Moerattack=255000; //怪物攻
Moerdefense=105000;
Moerlife=1300000;
Moermagic=55000;
cout<<“进入与小狗PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+552637; //经验加成

LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno6()
{
if (Level<23)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=420398;
cout<<“载入地图六成功”<<endl;
cout<<“进入地图六”<<endl;
Moerattack=305000; //怪物攻
Moerdefense=125000;
Moerlife=1500000;
Moermagic=55000;
cout<<“进入与狼PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+2283746; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno7()
{
if (Level<28)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
adj_momey();
tempmomey=5000000;
cout<<“载入地图七成功”<<endl;
cout<<“进入地图七”<<endl;
Moerattack=355000; //怪物攻
Moerdefense=145000;
Moerlife=1700000;
Moermagic=55000;
cout<<“进入与老虎PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+6547382; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno8()
{
adj_momey();
tempmomey=1000000;
cout<<“载入地图八成功”<<endl;
cout<<“进入地图八”<<endl;
Moerattack=200000; //怪物攻
Moerdefense=180000;
Moerlife=5000000;
Moermagic=55000;
cout<<“进入与狮子PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+2000000; //经验加成

LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno9()
{
adj_momey();
tempmomey=3000000;
cout<<“载入地图九成功”<<endl;
cout<<“进入地图九”<<endl;
Moerattack=1000000; //怪物攻
Moerdefense=500000;
Moerlife=20000000;
Moermagic=55000;
cout<<“进入与’猎人’PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+10000000; //经验加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
private:
int mima;
int o;int i;
void xiugai()
{
labelxiugai:
cout<<“请输入您要修改的数值(1-1000000):”<<endl;
cin>>o;
if (o<1||o>1000000)
{
cout<<“您输入错误,请重新输入”<<endl;
goto labelxiugai;
}
}
void gmmima()
{
int mima=0;
int i;
int o=3;
int game;
labelgmmima:
cout<<“请输入GM模式密码”<<endl;
cin>>i;
if (i!=mima)
{
if (o–==1)
{
cout<<“您输入GM密码错误3次,游戏将关闭。”<<endl;
exit(0);
}
cout<<“密码错误,请重新输入”<<endl;
cout<<“您还剩”<<o<<“次机会”<<endl;
cout<<“如要返回游戏,请按1″<<endl;
cin>>game;
if (game==mima)
{
mapno0();
}
goto labelgmmima;
}
}
void gongji()
{
xiugai();
CrityAttack=CrityAttack+o;
mapno0();
}
void fangyu()
{
xiugai();
CrityDefense=CrityDefense+o;
mapno0();
}
void shengming()
{
xiugai();
CrityLife=CrityLife+o;
BigCrityLife=BigCrityLife+o;
mapno0();
}
void mofa()
{
xiugai();
CrityMagic=CrityMagic+o;
BigCrityMagic=BigCrityMagic+o;
mapno0();
}
void jinbi()
{
xiugai();
Money=Money+o;
mapno0();
}
public:
void gm()
{
gmmima();
cout<<“进入GM模式,请选择需要修改的数据”<<endl;
cout<<“1、修改角色攻击力(最多一次增加1000000)”<<endl;
cout<<“2、修改角色防御力(最多一次增加1000000)”<<endl;
cout<<“3、修改角色生命值(最多一次增加1000000)”<<endl;
cout<<“4、修改角色魔法值(最多一次增加1000000)”<<endl;
cout<<“5、修改角色游戏币(最多一次增加1000000)”<<endl;
cout<<“为了不弄太变态,以后这个将被修改,修改经验值增加的经验及属性”<<endl;
label_l:
cin>>i;
switch(i)
{
case 1:
gongji();break;
case 2:
fangyu();break;
case 3:
shengming();break;
case 4:
mofa();break;
case 5:
jinbi();break;
default:cout<<“输入错误,请重新输入”<<endl;
goto label_l;
}
}
};

REGISTER_ rester; //注册的对象名为rester;
AREA_ area;
CELEBRITY_ celebrity;

int main()
{

UPdate(); cout<<endl;
rester.open();
celebrity.mapno();

}

通过清心醉

自写C++一

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

#include “iostream.h”
#include “string.h”
#include “stdlib.h”
#include “ctype.h”
#include “stdio.h”
#include “conio.h” //getch()屏幕停留函数需要

/*
1:输入输出头文件
2:if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
strcmp函数是比较两个字符串(数组)的大小,所以需要加string.h 头文件
3:调用stdlib.h的头文件,exit函数使用
4: ctype.h头文件,AREA_类里判断输入选择大区的是否为数字
5: stdio.h 头文件,AREA_类里把输入的字符串转成数字
*/
void UPdate() //更新
{
cout<<“程序目前正常注册,登陆验证;”<<endl;
cout<<“提供回合制,由玩家先行攻击;”<<endl;
cout<<“暂时开放3个技能以及1个地图(用于测试)”<<endl;
cout<<“自动清屏,以免产生数据过多显示查看困难;”<<endl;
cout<<“增加车夫,在每个地图结束PK回合后车夫将提示;”<<endl;
cout<<“增加HP、MP上限最大值 “<<endl;
cout<<“增加攻击不破防减少攻击者HP”<<endl;
cout<<“添加等级系统,等级+1,固定加20000,攻防金币额+等级*200、血法额+等级*2000″<<endl;
cout<<“添加金币系统”<<endl;
cout<<“增加NPC系统,提供能力书的交易”<<endl;
cout<<“角色死亡后直接回出生地《猪圈》,并不直接退出游戏 “<<endl;
cout<<“角色死亡后回出生地,HP值为正常的80%”<<endl;
cout<<“增加技能4,防御增加当前防御的20%”<<endl;
cout<<“*************** 本次更新添加:***************”<<endl;
cout<<“1、终级技能 “<<endl;
cout<<“2、GM工具:密码暂设为 0 “<<endl;
cout<<“3、开放原地复活消耗固定金币”<<endl;
cout<<“4、MP值不足时,释放技能失败,要求玩家重新选择状态 “<<endl;
cout<<“5、新增加逃跑功能”<<endl;
cout<<“2013-02-28″<<endl;

cout<<“*************** 需更新:***************”<<endl;
cout<<“1、更多问题,及BUG发现将第一时间做提醒”<<endl;
cout<<“2、添加攻击有机率产生2-3倍伤害,游戏币随机增加100-500″<<endl;
cout<<“3、由于每次都是角色先出击,地图/怪物增加后,新增加速度函数 “<<endl;

//由于游戏和金币公式相对添加随机数,所以最后修改
cout<<“提示:由于是WIN32的API平台编辑,非MFC图形,所以此游戏用于CMD命令支持。”<<endl;
cout<<endl;
}

 

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

void Csen() //怕屏幕内容太多,添加一清屏函数
{
system(“cls”);
}

 

 

class AREA_ //区选择类
{
private:
void generation() //生成角色
{
cout<<“**********”<<endl;
cout<<“生成角色…”<<endl;
cout<<“名字:猪头”<<endl;
cout<<“等级:0″<<endl;
cout<<“攻击:”<<“0″<<endl;
cout<<“防御:”<<“0″<<endl;
cout<<“HP:”<<“0″<<endl;
cout<<“MP:”<<“0″<<endl;
cout<<“成功拜清心为师”<<endl;
cout<<“**********”<<endl;
}
public:
void numarea() //区号
{
char x;
int i=0;
labelTWO: //标签2,由于怕标签过多,后面加个数字做表示清晰点
cout<<“请选择:”<<endl;
cout<<“1、风之大陆”<<endl;cout<<“2、光之大陆”<<endl;
cout<<“3、水之大陆”<<endl;cout<<“0、退出游戏”<<endl;
cout<<endl;
cin>>x;
if (!isdigit(x))
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
else
{
switch(x)
{
case’1′:
Csen();
cout<<“连接风之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’2′:
Csen();
cout<<“连接光之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’3′:
Csen();
cout<<“连接水之大陆成功!”<<endl;
cout<<endl<<endl;
generation();
break;
case’0′:
cout<<“成功退出游戏,”<<endl
<<“请按任意键退出!”<<endl;
cout<<endl<<endl;
exit(0);
break;
default:
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
}
cout<<“您的输入有误,请重新输入”<<endl;
goto labelTWO;
}
}
}
};

class REGISTER_ :public AREA_
{
private:
char account[16];
char password[16];
public:
void open()
{
cout<<“请输入您注册的帐号”<<endl;
cin>>account;
cout<<“请输入您注册帐号的密码”<<endl;
cin>>password;
Csen();
char tempaccount[16];
char temppassword[16];
int i=0;
labelONE:
cout<<endl<<endl;
cout<<“请输入您的帐号:”; cin>>tempaccount;
cout<<“请输入您的密码:”; cin>>temppassword;
if (strcmp(account,tempaccount)==0 && strcmp(password,temppassword)==0)
{
cout<<“正确”<<endl;
cout<<endl;
numarea();
Toremind();
}
else
{
if (i++==2)
{
cout<<“您输入错误3次,请稍后在试!”<<endl;
exit(0);
//退出
}
cout<<“您输入错误,请重新输入:”<<endl;
goto labelONE;
}
}
};

class CELEBRITY_ //人物
{
private:
int Level; int Experience; int tempExperience;//等级 经验 升级所需经验
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; //游戏币
//*********************************************************************
void crity() //人物
{
cout<<“名字:猪头”<<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”<<endl<<“技能等级”<<Level<<endl;
cout<<“2、猪大跑:增加”<<50000*Level<<“攻击,消耗”<<1000*Level<<“MP”<<endl<<“技能等级”<<Level<<endl;
cout<<“3、HP恢复50000,MP恢复2000″<<endl;
cout<<“4、防御增加20%”<<endl;
cout<<“5、天崩地裂:释放自身攻击*2*等级的伤害,HP-“<<50000*Level<<” MP-“<<5000*Level<<endl<<“技能等级”<<Level<<endl;
cout<<“6、当前人物属性”<<endl;
cout<<“7、当前地图怪物属性”<<endl;
cout<<“9、逃跑(回猪城)”<<endl;
cout<<“0、提醒||帮助”<<endl;
cout<<“**********”<<endl;
SKILL_PK();
}
//*********************************************************************
void LveExp() //升级经验
{

if (Experience>=tempExperience)
{
Level++;
tempExperience=tempExperience*2;
cout<<“您升级了!您的等级:”<<Level<<endl;
LVcrity();
}
}
//*********************************************************************
void Resurrection() //原地复活
{
char i;
int tempmoney=(Level*2)+888;
cout<<“原地需要费用”<<(Level*2)+888<<“金币”<<endl;
if (Money<(Level*2)+888)
{
cout<<“您的金币不足,按任意键回城”<<endl;
getch();
mapno0();
}
cout<<“是否需要原地复活?”<<endl<<“y”<<” “<<“n”<<endl;
cin>>i;
switch(i)
{
case ‘y’:
Money=Money-((Level*2)+888);
CrityLife=BigCrityLife*0.8;
CrityMagic=BigCrityMagic*0.8;
break;
case ‘n’:
mapno0();
}
}
//*********************************************************************
void LVcrity() //属性的提升
{
Money=Money+20000+(Level*200);
CrityAttack=CrityAttack+20000+(Level*200);
CrityDefense=CrityDefense+20000+(Level*200);
CrityLife=CrityLife+20000+(Level*2000);
BigCrityLife=BigCrityLife+20000+(Level*2000);
CrityMagic=CrityMagic+20000+(Level*2000);
BigCrityMagic=BigCrityMagic+20000+(Level*2000);
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
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 ‘6’:
Csen();cout<<“查看自身状态”<<endl;
crity();repeat();
break;
case ‘7’:
Csen();cout<<“查看怪物状态”<<endl;
monster();repeat();
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 skill() //技能
{
while (1)
{
cout<<“释放技能:”<<endl;
if (Moerdefense>CrityAttack) //如果怪物防御大于攻击
{
cout<<“怪物防御高过您的攻击,你受到伤害:”
<<Moerdefense-(CrityAttack+skillattack)<<endl;
CrityLife=CrityLife-(Moerdefense-(CrityAttack+skillattack));
CrityMagic=CrityMagic-skillmagic;
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<CrityDefense-Moerattack<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
//怪物属性归0,用于下次挑战重新赋值
break;
}
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();
}
repeat();
}
}
else
{
cout<<“给对方造成伤害:”<<(CrityAttack+skillattack)-Moerdefense<<endl;
Moerlife=(Moerlife-((CrityAttack+skillattack)-Moerdefense));
CrityMagic=CrityMagic-skillmagic;
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
break;
}
cout<<“怪物对您进行攻击:”<<endl;
if (CrityDefense>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否园地复活?”<<endl;
Resurrection();
}
repeat();
}
}
}
}
//*********************************************************************
void CRITY_SKILL_ONE() //技能1
{
skillattack=20000*Level;skillmagic=500*Level;
cout<<“猪小跑:增加”<<skillattack<<“攻击,消耗”<<skillmagic<<“MP”<<endl<<“技能等级”<<Level<<endl;
if (CrityMagic<skillmagic)
{
cout<<“你的MP值不足”<<endl;
repeat();
}
skill();
}
//*********************************************************************
void CRITY_SKILL_TWO() //技能2
{
skillattack=50000*Level;skillmagic=1000*Level;
cout<<“猪大跑:增加”<<skillattack<<“攻击,消耗”<<skillmagic<<“MP”<<endl<<“技能等级”<<Level<<endl;
if (CrityMagic<skillmagic)
{
cout<<“你的MP值不足”<<endl;
repeat();
}
skill();
}
//*********************************************************************
void CRITY_SKILL_THREE() //技能3
{
while(1)
{
cout<<“**********”<<endl;
cout<<“释放技能:”<<endl;
cout<<“HP恢复:50000″<<” “<<“MP恢复:2000″<<endl;
CrityLife=CrityLife+50000;
CrityMagic=CrityMagic+2000;
if (CrityLife>BigCrityLife && CrityMagic>BigCrityMagic)
{ //如果恢复的大于最大值,则把结果恢复成一样。
CrityLife=BigCrityLife; CrityMagic=BigCrityMagic;
}
cout<<“怪物对您进行攻击:”;
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
if(CrityDefense>Moerattack)
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<Moerattack-CrityDefense<<endl;
Moerlife=Moerlife-(CrityDefense-Moerattack);
if (Moerlife<=0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
//属性归0,用于下次挑战重新赋值
break;
}
repeat();
}
else
{
cout<<“怪物对您造成伤害”<<Moerattack-CrityDefense<<endl;
CrityLife=CrityLife-(Moerattack-CrityDefense);
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();
}
repeat();
}
}

}
//*********************************************************************
void CRITY_SKILL_FOUR() //技能4
{
while (1)
{
int tempCrityDefense=CrityDefense*0.2;
cout<<“防御增加20%”<<endl;
cout<<“怪物对您进行攻击:”;
if ((CrityDefense+tempCrityDefense)>Moerattack) //如果防御大于怪物攻击
{
cout<<“怪物攻击低于您的防御,怪物受到伤害:”
<<(CrityDefense+tempCrityDefense)-Moerattack<<endl;
Moerlife=Moerlife-((CrityDefense+tempCrityDefense)-Moerattack);
if (Moerlife<0)
{
cout<<“**********”<<endl;
cout<<“恭喜您胜利了!”<<endl;
cout<<“**********”<<endl;
Moerlife=0;Moerattack=0;
Moerdefense=0;Moermagic=0;
skillattack=0;skillmagic=0;
//怪物属性归0,用于下次挑战重新赋值
break;
}
repeat();
break;
}
cout<<“怪物对您造成伤害”<<Moerattack-(CrityDefense+tempCrityDefense)<<endl;
CrityLife=CrityLife-(Moerattack-(CrityDefense+tempCrityDefense));
if (CrityLife<=0)
{
cout<<“你被怪物重伤昏迷”<<endl;
cout<<“挑战失败!”<<endl;
cout<<“是否原地复活?”<<endl;
Resurrection();
}
repeat();
}

}
//*********************************************************************
void CRITY_SKILL_FIVE() //技能5
{
skillattack=CrityAttack*2*Level;skillmagic=5000*Level;CrityLife=CrityLife-(50000*Level);
cout<<“终级技能:天崩地裂”<<endl;
cout<<“释放自身攻击*2*等级的伤害,HP-“<<50000*Level<<” MP-“<<5000*Level<<endl;
if (CrityLife<50000*Level||CrityMagic<5000*Level)
{
cout<<“你的HP或MP不足,不能使用此技能”<<endl;
repeat();
}
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 (3级以上可进)。 怪物等级5″<<endl;
cout<<“3、地图3 (8级以上可进)。 怪物等级10″<<endl;
cout<<“4、地图4 (13级以上可进)。 怪物等级15″<<endl;
cout<<“5、地图5 (18级以上可进)。 怪物等级20″<<endl;
cout<<“6、地图6 (23级以上可进)。 怪物等级25″<<endl;
cout<<“7、地图7 (28级以上可进)。 怪物等级30″<<endl;
cout<<“8、地图8 (15级内挑战等级+1)。 怪物等级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;
cout<<“数值初始化成功”<<endl;
cout<<“是否开始游戏”<<“y”<<” “<<“n”<<endl;
char i;
cin>>i;
switch(i)
{
case’y’:
Csen();
mapno0();
break;
case ‘n’:
Csen();
cout<<“游戏关闭”<<endl;
break;
default:
Csen();
cout<<“按任意键游戏退出”<<endl;
exit(0);
}
}
void NPC_DEAL() //NPC交易函数
{
char i;int o=0;
cout<<“请问您需要购买什么呢?”<<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()
{
cout<<“载入地图猪圈成功”<<endl;
cout<<“进入出生地猪圈”<<endl;
cout<<endl<<endl;
cout<<“您需要做什么?”<<endl;
cout<<“1、买能力书”<<” “<<“2、挑战怪物”<<” “<<“3、自身属性”<<” “<<“0、GM工具”<<endl;
char i;
cin>>i;
switch(i)
{
case’1′:Csen();NPC_DEAL();break;//NPC函数
case’2′:Csen();GOTOMAP();break;//
case ‘3’:Csen();crity();mapno0();break;
case ‘0’:Csen();gm();break;
}
}
void mapno1()
{
cout<<“载入地图一成功”<<endl;
cout<<“进入地图一:蚂蚁洞”<<endl;
Moerattack=35000; //怪物攻
Moerdefense=35000;
Moerlife=200000;
Moermagic=35000;
cout<<“进入与蚂蚁PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+800; //经验加成
Money=Money+400; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}

void mapno2()
{
if (Level<3)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图二成功”<<endl;
cout<<“进入地图二”<<endl;
Moerattack=55000; //怪物攻
Moerdefense=45000;
Moerlife=300000;
Moermagic=55000;
cout<<“进入与蜗牛PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+40000; //经验加成
Money=Money+800; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno3()
{
if (Level<8)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图三成功”<<endl;
cout<<“进入地图三”<<endl;
Moerattack=105000; //怪物攻
Moerdefense=65000;
Moerlife=800000;
Moermagic=55000;
cout<<“进入与老鼠PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+99000; //经验加成
Money=Money+10700; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno4()
{
if (Level<13)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图四成功”<<endl;
cout<<“进入地图四”<<endl;
Moerattack=155000; //怪物攻
Moerdefense=85000;
Moerlife=1000000;
Moermagic=55000;
cout<<“进入与花猫PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+187000; //经验加成
Money=Money+70700; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno5()
{
if (Level<18)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图五成功”<<endl;
cout<<“进入地图五”<<endl;
Moerattack=255000; //怪物攻
Moerdefense=105000;
Moerlife=1300000;
Moermagic=55000;
cout<<“进入与小狗PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+552637; //经验加成
Money=Money+133300; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno6()
{
if (Level<23)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图六成功”<<endl;
cout<<“进入地图六”<<endl;
Moerattack=305000; //怪物攻
Moerdefense=125000;
Moerlife=1500000;
Moermagic=55000;
cout<<“进入与狼PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+2283746; //经验加成
Money=Money+280000; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno7()
{
if (Level<28)
{
cout<<“您的等级不能进入此地图,请重新选择”<<endl;
GOTOMAP();
}
cout<<“载入地图七成功”<<endl;
cout<<“进入地图七”<<endl;
Moerattack=355000; //怪物攻
Moerdefense=145000;
Moerlife=1700000;
Moermagic=55000;
cout<<“进入与老虎PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+6547382; //经验加成
Money=Money+460000; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno8()
{
cout<<“载入地图八成功”<<endl;
cout<<“进入地图八”<<endl;
Moerattack=200000; //怪物攻
Moerdefense=180000;
Moerlife=5000000;
Moermagic=55000;
cout<<“进入与狮子PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+2000000; //经验加成
Money=Money+500000; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
void mapno9()
{
cout<<“载入地图九成功”<<endl;
cout<<“进入地图九”<<endl;
Moerattack=1000000; //怪物攻
Moerdefense=500000;
Moerlife=20000000;
Moermagic=55000;
cout<<“进入与’猎人’PK回合:”<<endl;
repeat(); //调取PK开始,如果胜利,继续执行
Experience=Experience+10000000; //经验加成
Money=Money+2000000; //金币加成
LveExp();//判断加成的经验提升等级
crity();//重新显示人物属性
GOTOMAP();//重新弹出车夫
}
private:
int mima;
int o;int i;
void xiugai()
{
labelxiugai:
cout<<“请输入您要修改的数值(1-1000000):”<<endl;
cin>>o;
if (o<1||o>1000000)
{
cout<<“您输入错误,请重新输入”<<endl;
goto labelxiugai;
}
}
void gmmima()
{
int mima=0;
int i;
int o=3;
int game;
labelgmmima:
cout<<“请输入GM模式密码”<<endl;
cin>>i;
if (i!=mima)
{
if (o–==1)
{
cout<<“您输入GM密码错误3次,游戏将关闭。”<<endl;
exit(0);
}
cout<<“密码错误,请重新输入”<<endl;
cout<<“您还剩”<<o<<“次机会”<<endl;
cout<<“如要返回游戏,请按1″<<endl;
cin>>game;
if (game==mima)
{
mapno0();
}
goto labelgmmima;
}
}
void gongji()
{
xiugai();
CrityAttack=CrityAttack+o;
mapno0();
}
void fangyu()
{
xiugai();
CrityDefense=CrityDefense+o;
mapno0();
}
void shengming()
{
xiugai();
CrityLife=CrityLife+o;
BigCrityLife=BigCrityLife+o;
mapno0();
}
void mofa()
{
xiugai();
CrityMagic=CrityMagic+o;
BigCrityMagic=BigCrityMagic+o;
mapno0();
}
void jinbi()
{
xiugai();
Money=Money+o;
mapno0();
}
public:
void gm()
{
gmmima();
cout<<“进入GM模式,请选择需要修改的数据”<<endl;
cout<<“1、修改角色攻击力(最多一次增加1000000)”<<endl;
cout<<“2、修改角色防御力(最多一次增加1000000)”<<endl;
cout<<“3、修改角色生命值(最多一次增加1000000)”<<endl;
cout<<“4、修改角色魔法值(最多一次增加1000000)”<<endl;
cout<<“5、修改角色游戏币(最多一次增加1000000)”<<endl;
cout<<“为了不弄太变态,以后这个将被修改,修改经验值增加的经验及属性”<<endl;
label_l:
cin>>i;
switch(i)
{
case 1:
gongji();break;
case 2:
fangyu();break;
case 3:
shengming();break;
case 4:
mofa();break;
case 5:
jinbi();break;
default:cout<<“输入错误,请重新输入”<<endl;
goto label_l;
}
}
};

REGISTER_ rester; //注册的对象名为rester;
AREA_ area;
CELEBRITY_ celebrity;

int main()
{

UPdate(); cout<<endl;
rester.open();
celebrity.mapno();

}

通过清心醉

一个简单的C++语句

#include <iostream.h>

int main()

{

cout<<“Hello”<<endl;

}