RPG游戏

这次代码完全使用c++的特点写的游戏,什么封装,多态,继承等等。遇到过问题,也遇到过快乐。一开始写的时候挺辛苦的。完全没有头绪。而且封装的权限问题把人的头都弄大了。不过当完成后心里无比激动,也是蛮拼了(PS:感谢与我合作的小伙伴,给了我非常多的灵感)

感觉做的最成功的就是地图类了,因为它完美的将所有东西都联系在一起,变成一个整体。

源文件:

#include <windows.h>
#include <conio.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <ctime>
using namespace std;
void color(int a)//颜色函数
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void gotoxy(int x, int y)
{
    CONSOLE_SCREEN_BUFFER_INFO cs;
    HANDLE hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsoleOut, &cs);
    cs.dwCursorPosition.X = y;
    cs.dwCursorPosition.Y = x;
    SetConsoleCursorPosition(hConsoleOut,
        cs.dwCursorPosition);
}
#include "mon.h"
#include "怪物.h"
#include "wuqi.h"
#include "Role.h"
#include "Map.h"
class Game
{
protected:
	char name[20];
	int visitCount;
public:
	Game(char a[])
	{
		visitCount = 0;
		strcpy(name,a);
	}
	char* GetName()
	{
		return name;
	}
	int GetVisitCount()
	{
		return visitCount;
	}
	void addvisitCount();
	void ShowName();
	virtual void start() = 0;
	/*friend bool cmp();*/
};
void Game::ShowName()
{
	cout << name << endl;
}
class GGame1:public Game
{
private:
	Map mmaapp;
public:
	void beigan();
	void start();
	GGame1();
};
GGame1::GGame1():Game("RPG游戏")
{}
void GGame1::beigan()
{
	color(8);
	char a[1][239]={
		{"    公元xx年,位于拉布斯大陆的两个大国因争夺资源引发冲突,战争一触即发!        而你   ----------  作为一名精英的雇佣兵,当然不会放过这个发财的机会,          于是,为荣誉和欲望,你来到了战争中心,走进了那战争之潮当中......."
		}
	};
	for(int i=0;i<239;i++)
	 {
		 cout<<a[0][i];
		 Sleep(50);
	 }
	cout<<endl<<endl;
	color(12);
	char s[1][33]={{"战争         卐         之潮    "}};
	cout<<"                        ";
	for(int i=0;i<33;i++)
	 {
		 cout<<s[0][i];
		 Sleep(90);
	 }
	color(9);
	cout<<endl<<endl<<endl<<endl;
	cout<<"                                          作者: Dennis.锋"<<endl<<"                                                 Alex.杰";
	color(15);
	cout<<endl<<endl<<endl<<endl<<"                                 START --请按回车键继续";
	char k;
	k=getch();
	if(k==13)
	{
		system("cls");
		gotoxy(0,0);
	}
}
void GGame1::start()
{
	visitCount++;
	beigan();//开始界面
	mmaapp.getpeople()->renwujianli();
	int End=1;//判断是否结束游戏且切换地图
	int srand((unsigned)time(NULL));
		int f=rand()%5;
		while(End)
		{
			switch(End)
			{
			case 1:
				End=mmaapp.map1();break;
			case 2:
				End=mmaapp.map2();break;
			case 3:
				End=mmaapp.map3();break;
			case 4:
				End=mmaapp.map4();break;
			case 5:
				End=mmaapp.map5();break;
			}
		}
}
class GGame2:public Game
{
public:
	virtual void start();
	GGame2():Game("游戏2")
	{
	}
};
void GGame2::start()
{
	visitCount++;
	cout << "\t\t欢迎进入游戏2" << endl;
}
class GGame3:public Game
{
public:
	virtual void start();
	GGame3():Game("游戏3")
	{
	}
};
void GGame3::start()
{
	visitCount++;
	cout << "\t\t欢迎进入游戏3" << endl;
}
void menu(Game** gaems) // 显示游戏列表
{
	for (int i = 0; i < 3; i++)
	{
		printf("%d:  ",i+1);gaems[i]->ShowName();
	}
}
void Sort(Game** p)
{
	Game* temp;
	for(int i=0;i<2;++i)
	{
		for(int j=i+1;j<3;++j)
		{
			if(p[i]->GetVisitCount()<p[j]->GetVisitCount())
			{
				temp = p[i];
				p[i] = p[j];
				p[j] = temp;
			}
		}
	}
}
int main()
{
	Game* games[3];//一开始忘记了指针数组就是二维数组,一直没思路
	games[0] = new GGame1;//为什么可以用基类指针数组来new一个派生类??
	games[1] = new GGame2;
	games[2] = new GGame3;
	do
	{
		cout << "请输入你想玩的游戏?(1-3)" << endl;
		Sort(games); // 将游戏列表按访问量排序
		//如何实现类指针数组的排序??

		menu(games);
		/*for(int i=0;i<3;++i)
		cout << games[i]->GetVisitCount() << endl;*/
		int choice;
		cin >> choice;
		// 用户输入选择
		if (choice >= 1 && choice <= 3)
		{
			int i = choice;
			system("cls");
			(*games[i-1]).start();
		}
		else
		{
			break; // 退出系统
		}
	} while (true);
}

一系列头文件:

Rloe角色:

class Role:public Monster
{
protected:
	int Money;//金钱
	int Ex;//经验
	int Lvup;//升级所需经验
	int Life;//生命总量
	char name[10]; //玩家名字
	int attckup;//攻击成长值
	int denfenup;//防守成长值
	int lifeup;//生命成长值
	int workrole;//职业代表数1-战士 2-刺客 3-盾卫
	int numA;//武器攻击代号
	int numB;//防具代号
	int numL;//饰品代号(增加生命值)
	char work[3][10];//职业
	char a;//职业代号
	int gwnamenum;//怪兽名编号,一开始用了Gwu的类新建个as变量,结果根本构造时都没赋值,所以WA了
	int x,y;//视图坐标
	int gwAT,gwFY;//储存怪物攻击力&防御力
	Gwu* gw;
	int flag;
	int k,kk;//类里的Hp储存起来变量
	int wuqicount[10];
	int wuqiA,wuqiB;
	int num;
	Equip eq[11];
public:
	void up(int t);//升级系统
	Role();//构造
	void deleteGwu();//删除动态申请空间
	char* GetName();//角色名调用
	char* Getwork();//角色职业调用
	int GetEX();
	int GetMoney();//第一个获取钱,后面还有个获取钱的就不改了
	int getmoney1();//令外一个获取钱
	void addmoney(int a);
	void usemoney(int a);
	int getusemoney(int a);
	void showRole();
	void getnum();
	void setnum(int a);
	void attckadd(int a);
	int getnumA();
	int getnumB();
	void Wuqicount(int a,int b);
	int _wuqicount(int a);
	void daoju();//道具
	void CombatC();//战斗地图(一开始是放在地图类里的,但是写着就发现它更适合和战斗函数一起)
	void ul();//人物数据写入,且新建怪物
	int chiose();//打斗界面选择
	void oneattck();//单次战斗
	void Comjiemian();//自动战斗
	int Combat(int t);//战斗函数,且控制结束条件
	int COMBAT();//整合上面功能的函数
	void renwujianli();//人物创建
};
void Role::renwujianli()
{
	printf("请输入玩家姓名\n");
		scanf("%s",name);
		printf("请输入你选择的职业\n");
		printf("1-战士 2-刺客 3-盾卫\n");
		while(a=_getch())
		{
			if(a=='1')
			{
				attckup=5;
				denfenup=4;
				lifeup=5;
				workrole=0;
			}
			if(a=='2')
			{

				attckup=7;
				denfenup=3;
				lifeup=3;
				workrole=1;
			}
			if(a=='3')
			{
				attckup=3;
				denfenup=7;
				lifeup=7;
				workrole=2;
			}
			if(a=='1'||a=='2'||a=='3')break;
		}
		system("cls");
}
inline void Role::deleteGwu()
{
	if(gw!=NULL)
	{
	  delete gw;
	  gw = NULL;
	}
}
inline void Role::CombatC()
{
	system("cls");
	char a[5][10]={{"攻击"},{"魔法"},{"道具"},{"自动"},{"逃跑"}};
	for(int i=0;i<5;++i)
	{
		printf("██████\n");
		printf("█   %s █\n",a[i]);
	}
	printf("██████\n");
	ifstream inf("map.txt");
	gotoxy(17,0);
	char c;
	while(inf.get(c))
	{
		cout.put(c);
	}
}
inline void Role::daoju()//道具
{
	int x=4,y=2;
	system("cls");
	gotoxy(0,5);
	cout<<"------------------------------"<<endl;
	cout<<"物品栏"<<endl;
	cout<<"    <>名字"<<'\t'<<"数量"<<endl;
	for(int i=7;i<10;i++)
	{
		cout<<"      ";
		eq[i].getname(i);
		cout<<"       "<<wuqicount[i]<<endl;
	}
	cout<<"    <>退出";
	char k=' ';
	gotoxy(x,y);
	printf("→");
	do
	{
		k=_getch();
		if(k=='s'&&x<6)
		{
			gotoxy(x,y);
			printf("  ");
			x++;
			gotoxy(x,y);
			printf("→");
		}
		if(k=='w'&&x>3)
		{
			gotoxy(x,y);
			printf("  ");
			x--;
			gotoxy(x,y);
			printf("→");
		}
	}while(k!=13);
	if(x==3&&wuqicount[7]>0)
	{
		wuqicount[7]--;
		if(life+10>Life)
		{
			life=Life;
		}
		else
		{
			life+=10;
		}
	}
	if(x==4&&wuqicount[8]>0)
	{
		wuqicount[8]--;
		if(life+20>Life)
		{
			life=Life;
		}
		else
		{
			life+=20;
		}
	}
	if(x==5&&wuqicount[9]>0)
	{
		wuqicount[9]--;
		if(life+30>Life)
		{
			life=Life;
		}
		else
		{
			life+=30;
		}
	}
	gotoxy(0,0);
	CombatC();
	gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
	gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
	gotoxy(18,40);gw->show(gwnamenum);
	gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);
	if(gwAT>denfen)
	{
		life=life-gwAT+denfen;
		gotoxy(x,y);
		printf("怪兽对你伤害%d\n",gwAT-denfen);
		x+=2;
	}
	else
	{
		gotoxy(x,y);
		printf("怪兽对你伤害0\n");
		x+=2;
	}
	gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
	gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
	gotoxy(18,40);gw->show(gwnamenum);
	gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);
}
inline void Role::ul()//选择列表
{
	gwnamenum = rand()%10 ;
	gw = new Gwu(gwnamenum);
	k = gw->getlife();
	kk = gw->getllife();
	gwAT=gw->getattck();
	gwFY=gw->getdenfen();
	int x=0,y=0;
	gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work[workrole]);
	gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d",life,Life,attck,denfen);
	gotoxy(18, 40); gw->show(gwnamenum);
	gotoxy(19, 40); printf("HP:%d/%d      攻击力:%d  防御力:%d  ", k, kk, gwAT, gwFY);
}
inline int Role::chiose()//选择界面
{
	int x=1,y=2,f=1,t;
	char k=' ';
	gotoxy(x,y);
	printf("→");

	while(k!=13)//回车为13
	{
		k=_getch();
		f=0;t=0;
		if(k=='w'||k=='W')
		{
			if(x>1)
			{
			  x+=-2;
			  t=-2;
			  f=1;
			}
		}
		else if(k=='s'||k=='S')
		{
			if(x<=7)
			{
				f=1;
			  x+=2;
			  t=2;
			}
		}
		if(f)
		{
		  gotoxy(x-t,y);
		  printf(" ");
		}
		if(f)
		{
		 gotoxy(x,y);
		 printf("→");
		 f=1;
		}
	}
	return x;
}
inline void Role::oneattck()//一次战斗
{
	gotoxy(18,40);gw->show(gwnamenum);
	gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
		if(life<=0)
		{
			gotoxy(x,y);
			printf("You low!");
			system("cls");
		}
		if(x==16)
		{
			for(int i=0;i<=16;++i)
			{
				gotoxy(i,13);
				printf("                                                     ");
			}
			x=0,y=13;
		}
		if(k>0)
		{
			if(attck>gwFY)
			{
				k=k-attck+gwFY;
				gotoxy(x,y);
				printf("你对怪兽伤害%d\n",attck-gwFY);
			    x+=2;
			}
			else
			{
					gotoxy(x,y);
				  printf("你对怪兽伤害0\n");
			      x+=2;
			}
			if(gwAT>denfen)
			{
				life=life-gwAT+denfen;
				gotoxy(x,y);
				printf("怪兽对你伤害%d\n",gwAT-denfen);
				  x+=2;
			}
			else
			{
				gotoxy(x,y);
				 printf("怪兽对你伤害0\n");
			      x+=2;
			}
		}
		else
		{
				for (int i = 0; i < 16; ++i)
			{
				printf("                                                                      ");
			}
				x=0,y=13;
			system("cls");
		}
		gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work[workrole]);
	    gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",life,Life,attck,denfen);
		gotoxy(18,40);gw->show(gwnamenum);
		gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
		::Sleep(500);
}
inline void Role::Comjiemian()//自动战斗界面
{
	 gotoxy(18,40);gw->show(gwnamenum);
	gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d  ",k,kk,gwAT,gwFY);
	while(1)
	{
		if(life<=0)
		{
			gotoxy(x,y);
			printf("You low!");
			::Sleep(2000);
			system("cls");
			break;
		}
		if(x==16)
		{
			for(int i=0;i<=16;++i)
			{
				gotoxy(i,13);
				printf("                                                     ");
			}
			x=0,y=13;
		}

		if(k>0)
		{
			if(attck>gwFY)
			{
				k=k-attck+gwFY;
				gotoxy(x,y);
				printf("你对怪兽伤害%d\n",attck-gwFY);
			    x+=2;
			}
			else
			{
					gotoxy(x,y);
				  printf("你对怪兽伤害0\n");
			      x+=2;
			}
			if(gwAT>denfen)
			{
				life=life-gwAT+denfen;
				gotoxy(x,y);
				printf("怪兽对你伤害%d\n",gwAT-denfen);
				  x+=2;
			}
			else
			{
				gotoxy(x,y);
				 printf("怪兽对你伤害0\n");
			      x+=2;
			}
			::Sleep(1000);
		}
		else
		{
			gotoxy(0,0);
			for (int i = 1; i < 16;++i)
			{
				printf("                                                                      ");
			}
			system("cls");
			break;
		}
		gotoxy(18,2);printf("姓名:%s    Lv:%d      职业:%s",name,Lv,work);
	    gotoxy(19,2);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",life,Life,attck,denfen);
		gotoxy(18,40);gw->show(gwnamenum);
		gotoxy(19,40);printf("HP:%d/%d      攻击力:%d  防御力:%d   ",k,kk,gwAT,gwFY);

	}
}
inline int Role::Combat(int t)//进入战斗函数
{
	switch(t)
	{
	    case 1:oneattck();break;
		case 3:break;
		case 5:daoju(); break;
		case 7:Comjiemian();break;
		case 9:break;
	}
	if(k<=0){
		system("cls");
		gotoxy(0, 13);
		printf("Win!");
		Ex+=getEX;Money+=getmoney;
		printf("获得%d经验,获得%d金钱.",getEX,getmoney);
		::Sleep(2500);
		if(Ex>=Lvup)
	    {
			system("cls");
			up(Lv);
		   ::Sleep(2000);
		   system("cls");
	    }
		return 1;}

	if(life<=0)
	{
		system("cls");
		gotoxy(0, 13);
		printf("You lose!");
		return 0;
	}
	return 0;
}
inline int Role::COMBAT()//战斗函数
{
	 int t;
	 ul();
	while(t=chiose())
	{
		 if(Combat(t))
		 {
			 deleteGwu();
			 break;
		 }
		 if(t==7||getlife()<=0){deleteGwu(); break;}
	   if(t==9)
	   {
		     for(int i=0;i<=16;++i)
			{
				gotoxy(i,13);
				printf("                                                     ");
			 }
		   if(rand()%50>20)
		   {
			   deleteGwu();
				gotoxy(0,13);
			   printf("逃跑成功!");
			   x=0;
			   ::Sleep(1000);
			   system("cls");
			   gotoxy(9,2);printf(" ");
			   return 0;
		   }
		   else
		   {
			   gotoxy(9,2);printf(" ");
			   gotoxy(0,13);
			   printf("逃跑失败!");
			   if (gwAT>denfen)
			   {
				   life = life - gwAT + denfen;
				   gotoxy(x, y);
				   printf("怪兽对你伤害%d\n", gwAT - denfen);
				   x += 2;
			   }
			   else
			   {
				   gotoxy(x, y);
				   printf("怪兽对你伤害0\n");
				   x += 2;
			   }
			   ::Sleep(1000);
		   }
	   }
	}
	return 0;
}
Role::Role()//构造
{
	gw = NULL;
	for (int i=0;i<10;++i)
	{
		wuqicount[i]=0;
	}
	wuqiA=-1;wuqiB=-1;
	x=0,y=13;
	Life = life;
	strcpy(work[0],"战士");
	strcpy(work[1],"刺客");
	strcpy(work[2],"盾卫");
	Lvup=10*Lv;
	Money=10000;
	Ex=0;
	numA=-1;
	numB=-1;
	num=-1;
	wuqiA=-1;
	wuqiB=-1;
};
inline void Role::up(int t)//升级系统
{
		Lv++;
		Lvup=10*Lv;
		attck+=t;
		denfen+=t;
		life+=t*10;
		Life = life;
		for (int i = 0; i <= 16; ++i)
		{
			gotoxy(i, 13);
			printf("                                                     ");
		}
		gotoxy(0,13);
		printf("升级!\n");
		printf("Lv->%d   attck->%d  denfen->%d  life->%d\n", Lv, attck, denfen, life);
}

inline int Role::GetEX()//角色经验
{
	return Ex;
}
inline int Role::GetMoney()//角色金钱
{
	return Money;
}
inline void Role::showRole()
{
	if(numA!=-1)
	{
		attck=attck+eq[numA].getaddA(numA);
	}
	if(numB!=-1)
	{
		denfen=denfen+eq[numB].getaddB(numB);
	}
	if(wuqiA!=-1)
	{
		attck=attck-eq[wuqiA].getaddA(wuqiA);
	}
	if(wuqiB!=-1)
	{
		denfen=denfen-eq[wuqiB].getaddB(wuqiB);
	}
	cout<<"------------------------------"<<endl;
	cout<<"    <>角色名:"<<name<<" <>等级: " << Lv << endl;
	cout<<"    <>职业:"<<work[workrole]<<endl;
	cout<<"    <>生命:"<<life<<endl;
	cout<<"    <>攻击力:"<<attck<<endl;
	cout<<"    <>防守力:"<<denfen<<endl;
	cout<<"    <>经验:"<<Ex<<" / "<<Lvup<<endl;
	cout<<"    <>武器:";
	if(numA!=-1)
	{
		eq[numA].getname(numA);
		wuqiA=numA;
	}
	cout<<endl;
	cout<<"    <>防具:";
	if(numB!=-1)
	{
		eq[numB].getname(numB);
		wuqiB=numB;
	}
	cout<<endl;
	cout<<"------------------------------"<<endl;
	cout<<"物品栏"<<endl;
	cout<<"    <>名字"<<'\t'<<"数量"<<endl;
	for(int i=0;i<10;i++)
	{
		cout<<"      ";
		eq[i].getname(i);
		cout<<"       "<<wuqicount[i]<<endl;
	}
	int x=22,y=2;
	int x1,y1;
	cout<<"    <>退出";
	x=12,y=2;
	gotoxy(x,y);
	cout<<"→";
	char k=' ';
	char h;
	while(k!='\n')
	{
		k=_getch();
		if(k=='s'||k=='S')
		{
			if(x<22)
			{
				gotoxy(x,y);
				cout<<' ';
				x++;
				gotoxy(x,y);
				cout<<"→";
			}
		}
		if(k=='w'||k=='W')
		{
			if(x>12)
			{
				gotoxy(x,y);
				cout<<' ';
				x--;
				gotoxy(x,y);
				cout<<"→";
			}
		}
		if(k==13)
		{
			if(x<22)
			{
				h=' ';
				x1=23;
				y1=5;
				gotoxy(x1,y1);
				cout<<"装备/使用";
				y1=20;
				gotoxy(x1,y1);
				cout<<"放弃";
				y1=2;
				gotoxy(x1,y1);
				cout<<"→";
				while(h!=13)
				{
					h=_getch();
					if(h=='a'||h=='A'||h=='d'||h=='D')
					{
						if(y1==2)
						{
							gotoxy(x1,2);
							cout<<' ';
							y1=17;
						}
						else if(y1==17)
						{
							gotoxy(x1,17);
							cout<<' ';
							y1=2;
						}
					}
					gotoxy(x1,y1);
					cout<<"→";
				}
				if(y1==2)//选择装备num=x-12
				{
					gotoxy(x1,2);
					cout<<"         已装备            ";
					if(x-12<=3)//选择装备武器
					{
						if(wuqicount[x-12]>0)
						{
							attck=attck-eq[wuqiA].getaddA(wuqiA);
							wuqiA=x-12;
							attck=attck+eq[wuqiA].getaddA(wuqiA);
							gotoxy(7,11);
							eq[wuqiA].getname(wuqiA);
							gotoxy(4,13);
							cout<<attck;
							gotoxy(x1,2);
							cout<<"         已装备            ";
						}
						else
						{
							gotoxy(x1,2);
							cout<<"     数量不足,无法装备            ";
						}

					}
					if(x-12<=6&&x-12>3)//选择装备防具
					{
						if(wuqicount[x-12]>0)
						{
							denfen=denfen-eq[wuqiB].getaddB(wuqiB);
							wuqiB=x-12;
							denfen=denfen+eq[wuqiB].getaddB(wuqiB);
							gotoxy(8,11);
							eq[wuqiB].getname(wuqiB);
							gotoxy(5,13);
							cout<<denfen;
							gotoxy(x1,2);
							cout<<"         已装备            ";
						}
						else
						{
							gotoxy(x1,2);
							cout<<"     数量不足,无法装备            ";
						}
					}
					if(x-12>6&&x-12<=9)//选择使用药品
					{
						if(wuqicount[x-12]>0)
						{
							life=life+eq[x-12].getaddL(x-12);
							gotoxy(3,11);
							cout<<life;
							gotoxy(x1,2);
							cout<<"         已使用            ";
							eq[x-12].countsale(x-12);
							wuqicount[x-12]--;
							gotoxy(x,18);
							cout<<wuqicount[x-12];
						}
						else
						{
							gotoxy(x1,2);
							cout<<"     数量不足,无法使用            ";
						}
					}
					Sleep(800);
					gotoxy(x1,2);
					cout<<"                      ";
					gotoxy(x,y);
					cout<<"→";
				}
				if(y1==17)//选择放弃
				{
					gotoxy(x1,2);
					cout<<"                        ";
					gotoxy(x,y);
					cout<<"→";
				}
			}
			if(x==22)
			{
				system("cls");
				break;
			}
		}
	}
} 

inline void Role::addmoney(int a)
{
	Money=Money+a;
}
inline void Role::usemoney(int a)
{
	Money=Money-a;
}
inline int Role::getusemoney(int a)
{
	int k;
	k=Money-a;
	return k;
}
inline int Role::getmoney1()
{
	return Money;
}
inline void Role::getnum()
{
	if(num<=3)
	{
		numA=num;
	}
	else if(num<=6)
	{
		numB=num;
	}
}
inline void Role::setnum(int a)
{
	num=a;
}
inline void Role::Wuqicount(int a,int b)
{
	wuqicount[a]+=b;
}
inline int Role::_wuqicount(int a)
{
	return wuqicount[a];
}

人物继承的基类:

class Monster
{
protected:
	int Lv;//等级
	int attck;//攻击
	int denfen;//防守
	int life;//生命
	int llife;//最大生命
	int getEX;//杀怪所得经验
	int getmoney;//杀怪所得金钱
public:
	Monster();//构造
	int getattck();
	int getdenfen();
	int getlife();
	int getllife();
	int getLv();
	void setlife(int t);
};
Monster::Monster()//构造
{
	getEX = 5;
	getmoney = 10;
	Lv=1;
	attck=5;
	denfen=5;
	life=10;
	llife = life;
};
inline int Monster::getllife()
{
	return llife;
}
inline void Monster::setlife(int t)
{
    life-=t;
}
inline int Monster::getattck()
{
	return attck;
}
inline int Monster::getdenfen()
{
	return denfen;
}
inline int Monster::getlife()
{
	return life;
}
inline int Monster::getLv()
{
	 return Lv;
}

武器类:

struct Equipment
{
	int addA;//武器攻击属性增加
	int addB;//防守属性++
	int addL;//生命++
	int count;//用有数量
	char name[10];//武器名
	int num;//武器代号
	int money;//武器买进价格
	int sale;//武器卖出价格
	Equipment();
};
Equipment::Equipment()
{
	addA=0;
	addB=0;
	addL=0;
	count=0;
}
class Equip
{
protected:
	Equipment eq[10];
public:
	 Equip();
	 void show(int a);
	 int getmoney1(int i);
	 void getname(int i);
	 int getnum(int i);
	 void countbuy(int i);//买一,count++
	 void countsale(int i);//卖一,count--
	 void showcount(int i);
	 int getcount(int i);
	 int getaddA(int i);
	 int getaddB(int i);
	 int getaddL(int i);
};
Equip::Equip()
{
	char eq0[10]={"小刀 "};
	char eq1[10]={"手枪 "};
	char eq2[10]={"步枪 "};
	char eq3[10]={"狙击 "};
	char eq4[10]={"步衣 "};
	char eq5[10]={"铁衣 "};
	char eq6[10]={"装甲 "};
	char eq7[10]={"活石 "};
	char eq8[10]={"活石+"};
	char eq9[10]={"生石 "};
	strcpy(eq[0].name,eq0);
	strcpy(eq[1].name,eq1);
	strcpy(eq[2].name,eq2);
	strcpy(eq[3].name,eq3);
	strcpy(eq[4].name,eq4);
	strcpy(eq[5].name,eq5);
	strcpy(eq[6].name,eq6);
	strcpy(eq[7].name,eq7);
	strcpy(eq[8].name,eq8);
	strcpy(eq[9].name,eq9);
	eq[0].addA=10;
	eq[1].addA=20;
	eq[2].addA=30;
	eq[3].addA=40;
	eq[4].addB=10;
	eq[5].addB=20;
	eq[6].addB=30;
	eq[7].addL=10;
	eq[8].addL=20;
	eq[9].addL=30;
	eq[0].money=100;
	eq[1].money=150;
	eq[2].money=250;
	eq[3].money=400;
	eq[4].money=100;
	eq[5].money=200;
	eq[6].money=400;
	eq[7].money=100;
	eq[8].money=200;
	eq[9].money=300;
	for(int i=0;i<10;i++)
	{
		eq[i].num=i;
	}
}
inline void Equip::show(int a)
{
	cout<<eq[a].name<<"  "<<eq[a].addA<<"    "<<eq[a].addB<<"    "<<eq[a].addL<<"   "<<eq[a].money<<"    "<<eq[a].count;
}
inline int Equip::getmoney1(int i)
{
	return eq[i].money;
}
inline int  Equip::getnum(int i)
{
	return eq[i].num;
}
inline void Equip::getname(int i)
{
	cout<<eq[i].name;
}
inline void Equip::countbuy(int i)
{
	eq[i].count++;
}
inline void Equip::countsale(int i)
{
	eq[i].count--;
}
inline void Equip::showcount(int i)
{
	cout<<eq[i].count;
}
inline int Equip::getcount(int i)
{
	return eq[i].count;
}
inline int Equip::getaddA(int i)
{
	return eq[i].addA;
}
inline int Equip::getaddB(int i)
{
	return eq[i].addB;
}
inline int Equip::getaddL(int i)
{
	return eq[i].addL;
}

怪物类:

class Gwu:public Monster
{
private:
	char num[10][15];
public:
	int Getnumlife();
	int Getnumattck();
	int Getnumdenfen();
	void show(int as);
Gwu(int a)
	{
	 strcpy(num[0],"步兵");
	 strcpy(num[1],"剑兵");
	 strcpy(num[2],"弓兵");
	 strcpy(num[3],"枪兵");
	 strcpy(num[4],"轻骑兵");
	 strcpy(num[5],"重步兵");
	 strcpy(num[6],"长弓兵");
	 strcpy(num[7],"重骑兵");
	 strcpy(num[8],"分队长");
	 strcpy(num[9],"嗜血铁卫");
	 life = 10+a;
	 attck = 2+a%5;
	 denfen = 2+a%5;
	 llife = life;
	}
};
void Gwu::show(int as)
{
	printf("%s",num[as]);
}
inline int Gwu::Getnumlife()
{
	return life;
}
inline int Gwu::Getnumattck()
{
	return attck;
}
inline int Gwu::Getnumdenfen()
{
	return denfen;
}

地图类:

class Map
{
private:
	char str[50][5];
	int x,y,xx,yy;//第一步,旧的一步
	int zx,zy;//数组内的坐标
	Role* people;
	char strr;
public:
	Map();
	~Map();
	int map1();
	void yidong(int& a,int& b);
	int map2();
	int map3();
	int map4();
	int map5();
	void ztjm(int (*st)[20]);//人物状态界面
	void shua(int (*st)[20]);//刷地图
	void Tableabout(int a,int b);//交谈
	void shop();
	 Role* getpeople();
	 void Jieshao();
};
void Map::Jieshao()
{
	gotoxy(5,40);
	cout<<"按esc键查看状态";
	gotoxy(6,40);
	cout<<"由于时间关系,暂无剧情,请待更新。"<<endl;
}
inline Role* Map::getpeople()
{
	return people;
}
inline Map::~Map()
{
	delete people;
}
void Map::shop()
{
	Equip eq[11];
	printf("                         买什么?\n");
	printf("----------------------------------------------------------\n");
	printf("                       |武器名  攻+  防+  命+  价格  拥有|\n");
	for(int i=0;i<10;i++)
	{
		printf("                       | ");
		eq[i].show(i);
		printf("  |\n");
	}
	printf("                       < ");
	cout<<"退出";
	printf(" >\n");
	printf("----------------------------------------------------------\n");
	int x=3,y=20;
	int x1,y1;
	x1=15;
	y1=20;
	gotoxy(x1,y1);
	printf("拥有金钱:%d     ",people->getmoney1());
	gotoxy(x,y);
	printf("→");
	char k=' ';
	char h;
	while(k!='\n')
	{
		k=_getch();
		if(k=='s'||k=='S')
		{
			if(x<13)
			{
				gotoxy(x,y);
				printf(" ");
				x++;
				gotoxy(x,y);
				printf("→");
			}
		}
		if(k=='w'||k=='W')
		{
			if(x>3)
			{
				gotoxy(x,y);
				printf(" ");
				x--;
				gotoxy(x,y);
				printf("→");
			}
		}
		if(k==13)
		{
			if(x<13)
			{
				h=' ';
				x1=15;
				y1=20;
				gotoxy(x1,y1);
				printf("拥有金钱:%d    ",people->getmoney1());
				x1=16;
				y1=20;
				gotoxy(x1,y1);
				printf("是否购买\n");
				x1=17;
				y1=20;
				gotoxy(x1,y1);
				printf("购买");
				x1=17;
				y1=30;
				gotoxy(x1,y1);
				printf("放弃");
				x1=17;
				y1=41;
				gotoxy(x1,y1);
				printf("卖出");
				x1=17;
				y1=17;
				gotoxy(x1,y1);
				printf("→");
				while(h!=13)
				{
					h=_getch();
					if(h=='a'||h=='A')
					{
						if(y1>20)
						{
							gotoxy(x1,y1);
							printf(" ");
							y1=y1-11;
						}
					}
					if(h=='d'||h=='D')
					{
						if(y1<=33)
						{
							gotoxy(x1,y1);
							printf(" ");
							y1=y1+11;
						}
					}
					gotoxy(x1,y1);
					printf("→");
				}
				if(y1==17)//选择yes
				{
					if(people->getusemoney(eq[x-3].getmoney1(x-3))>=0)
					{
						people->usemoney(eq[x-3].getmoney1(x-3));//减钱
						people->setnum(eq[x-3].getnum(x-3));//将人物num=武器num
						people->getnum();//讲人物num赋值给人物武器numA或人物防具numB
						eq[x-3].countbuy(x-3);
						gotoxy(x,54);
						eq[x-3].showcount(x-3);
						people->Wuqicount(x-3,eq[x-3].getcount(x-3));
						gotoxy(16,20);
						printf("                                 ");
						gotoxy(17,17);
						printf("购买成功,已自动装备              ");
						Sleep(800);
						x1=15;
						y1=20;
						gotoxy(x1,y1);
						printf("拥有金钱:%d    ",people->getmoney1());
						gotoxy(17,17);
						printf("                                 ");
						gotoxy(x,y);
					}
					else
					{
						gotoxy(16,20);
						printf("金钱不足,无法购买                ");
						gotoxy(17,17);
						printf("                                 ");
						Sleep(800);
						gotoxy(16,20);
						printf("                       ");
						gotoxy(x,y);
					}
				}
				if(y1==28)//选择no
				{
					gotoxy(16,20);
					printf("              ");
					gotoxy(17,20);
					printf("                                    ");
					gotoxy(x,y);
				}
				if(y1==39)
				{
					if(people->_wuqicount(x-3)>0)
					{
						people->setnum(eq[x-3].getnum(x-3));//将人物num=武器num
						people->getnum();
						people->Wuqicount(x-3,-1);
						eq[x-3].countsale(x-3);
						gotoxy(x,54);
						eq[x-3].showcount(x-3);
						gotoxy(16,20);
						printf("       已卖出               ");
						gotoxy(17,17);
						printf("                                  ");
						Sleep(800);
						gotoxy(16,20);
						printf("                          ");
						gotoxy(x,y);
						people->addmoney(eq[x-3].getmoney1(x-3));
						x1=15;
						y1=20;
						gotoxy(x1,y1);
						printf("拥有金钱:%d    ",people->getmoney1());
					}
					else
					{
						gotoxy(16,20);
						printf("数量不足,无法卖出                ");
						gotoxy(17,17);
						printf("                                  ");
						Sleep(800);
						gotoxy(16,20);
						printf("                          ");
						gotoxy(x,y);
					}
				}
			}
			if(x==13)
			{
				system("cls");
				break;
			}

		}
	}
}
inline void Map::Tableabout(int a,int b)//交谈
{
	if(a==1&&b==18)
	{
		printf("村长:\n");
		printf("      勇士你好!");
	}
	else if (a==10&&b==18)
	{
		printf("村民:\n");
		printf("      勇士你好!");
	}
}
inline void Map::shua(int (*st)[20])//刷地图
{
	  system("cls");
	  	Jieshao();
	  	gotoxy(0,0);
			  for(int i=0;i<22;++i)
			  {
				  for(int j=0;j<20;++j)
				  {
					  printf("%s",str[st[i][j]]);
				  }
				  printf("\n");
			  }
			  gotoxy(x,y);
			  printf("%s",str[12]);
}
inline void Map::ztjm(int (*st)[20])//人物状态界面
{
	   system("cls");
			  people->showRole();
			   system("cls");
			   	gotoxy(0,0);
			for(int i=0;i<22;++i)
			{
				for(int j=0;j<20;++j)
				{
					printf("%s",str[st[i][j]]);
				}
				printf("\n");
			}
			gotoxy(x,y);
			printf("%s",str[12]);
}
Map::Map()
{
	people = new Role;
	zx=3,zy=5;
	x=3,y=10;
	xx=x,yy=y;
	char a[50][5]={{"  "}/*0*/,{"█"}/*1*/,{"⊙"}/*2*/,{"★"}/*3*/,{"◆"}/*4*/
	,{"▓"}/*5*/,{"●"}/*6*/,{"①"}/*7*/,{"②"}/*8*/,{"③"}/*9*/,{"④"}/*10*/
	,{"¤"}/*11*/,{"∏"}/*12*/,{"主"}/*13*/,{"角"}/*14*/,{"家"}/*15*/,{"房"}/*16*/
	,{"武"}/*17*/,{"器"}/*18*/,{"店"}/*19*/,{"道"}/*20*/,{"具"}/*21*/,{"村"}/*22*/
	,{"长"}/*23*/,{"民"}/*24*/,{"城"}/*25*/,{"东"}/*26*/,{"南"}/*27*/,{"西"}/*28*/
	,{"北"}/*29*/,{"门"}/*30*/,{"山"}/*31*/,{"神"}/*32*/,{"庙"}/*33*/,{"荒"}/*34*/
	,{"郊"}/*35*/,{"野"}/*36*/,{"猪"}/*37*/,{"林"}/*38*/};//39个
	for(int i=0;i<39;++i)//更改上面数组记得修改赋值数
	{
		strcpy(str[i],a[i]);
	}
}
inline void Map::yidong(int& a,int& b)
{
	int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
	int fx;
	do
	{strr = _getch();}
	while(strr!='s'&&strr!='d'&&strr!='w'&&strr!='a'&&strr!=27);
	switch(strr)
	{
	   case 's':fx=0;break;
	   case 'd':fx=1;break;
	   case 'w':fx=2;break;
	   case 'a':fx=3;break;
	}
	if(strr!=27)
	{
	  a=xy[fx][0];
      b=xy[fx][1];
	}
}
inline int Map::map1()
{
	int a,b;
	int st[22][20]={
		1,1,1,1,1,1,1,1,1,1,29,30,1,1,1,1,1,1,1,1,
		1,13,25,0,0,0,0,0,0,0,0,0,0,0,1,22,0,0,3,1,
		1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,23,0,0,0,1,
		1,13,14,15,0,0,1,0,0,0,0,0,0,0,1,15,0,0,0,1,
		1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,
		1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,24,16,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
		28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
		30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,
		1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,
		1,17,0,0,0,0,0,1,0,0,0,1,20,0,0,0,0,0,0,1,
		1,18,0,0,0,0,0,1,0,0,0,1,21,0,0,0,0,0,0,1,
		1,19,0,0,0,11,0,1,0,0,0,1,19,0,0,11,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,
		1,1,1,1,1,1,1,1,27,30,1,1,1,1,1,1,1,1,1,1
	};//22行20列
	shua(st);
	while(1)
	{
		  yidong(a,b);
		  if(strr==27)
		  {
			 ztjm(st);
			  continue;
		  }
		  if(st[zx+a][zy+b]==3)
		  {
			   system("cls");
			 Tableabout(zx+a,zy+b);
			  ::Sleep(2500);
			   shua(st);
			  continue;
		  }
		  if (zx+a==17&&(zy+b==5||zy+b==15))
		  {
			  system("cls");
			  shop();
			   shua(st);
		  }
		  if((zy+b==10||zy+b==11)&&(zx+a==0))
		  {
			  zx=19;x=zx;
			  return 2;//北门
		  }
		  else if((zy+b==8||zy+b==9)&&(zx+a==20))
		  {
			  zx=1;x=zx;
			  return 3;//南门
		  }
		  else if((zx+a==12||zx+a==13)&&(zy+b==19))
		  {
			  zy=1;y=2*zy;
			  return 4;//东门
		  }
		  else if((zx+a==12||zx+a==13)&&(zy+b==0))
		  {
			  zy=18;y=2*zy;
			  return 5;//西门
		  }
		  if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<10)
		  {
			  zx+=a,zy+=b;
			  xx=x;yy=y;
			  x=zx;y=zy*2;
		    gotoxy(xx,yy);
		    printf("  ");
	        gotoxy(x,y);
		    printf("%s",str[12]);
		  }
	}
}
inline int Map::map2()//北门
{
	int a,b;
	int st[22][20]={
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
		1,34,20,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,4,1,
		1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,
		1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,
		1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
		1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,
		1,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,1,1,1,
		1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,
		1,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,
		1,0,0,1,1,0,0,0,1,0,0,0,1,4,0,0,0,1,0,1,
		1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,
		1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
		1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,
		1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,13,25,1,1,1,1,1,1,1,1
	};//22行20列
	shua(st);
	while(1)
	{
		  yidong(a,b);
		   if(strr==27)
		  {
			 ztjm(st);
			  continue;
		  }
		  srand((unsigned)time(NULL));
		 if(rand()%50<15)
		  {
			  people->CombatC();
			 people->COMBAT();
			shua(st);
		  }
		  if((zy+b==10||zy+b==11)&&(zx+a==20))
		  {
			  zx=1;x=zx;
			  return 1;//主城
		  }
		  if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<10)
		  {
			  zx+=a,zy+=b;
			  xx=x;yy=y;
			  x=zx;y=zy*2;
		    gotoxy(xx,yy);
		    printf("  ");
	        gotoxy(x,y);
		    printf("%s",str[12]);
		  }
	}
}
inline int Map::map3()//南门
{
	int a,b;
	int st[22][20]={
		1,1,1,1,1,1,1,1,13,25,1,1,1,1,1,1,1,1,1,1,
		1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,
		1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,
		1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,
		1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
		1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
		1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,
		1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
		1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,31,32,33,0,0,0,0,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	};//22行20列
	shua(st);
	while(1)
	{
		  yidong(a,b);
		   if(strr==27)
		  {
			 ztjm(st);
			  continue;
		  }
		  srand((unsigned)time(NULL));
		 if(rand()%50<15)
		  {

			  people->CombatC();
			 people->COMBAT();
			 shua(st);
		  }
		  if((zy+b==8||zy+b==9)&&(zx+a==0))
		  {
			  zx=19;x=zx;
			  return 1;//主城
		  }
		  if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
		  {
			  zx+=a,zy+=b;
			  xx=x;yy=y;
			  x=zx;y=zy*2;
		    gotoxy(xx,yy);
		    printf("  ");
	        gotoxy(x,y);
		    printf("%s",str[12]);
		  }
	}
}
inline int Map::map4()//东门
{
	int a,b;
	int st[22][20]={
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
		1,34,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
		1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,
		1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,1,
		1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
		1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
		1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	};//22行20列
		shua(st);
	while(1)
	{
		  yidong(a,b);
		   if(strr==27)
		  {
			 ztjm(st);
			  continue;
		  }
		  srand((unsigned)time(NULL));
		 if(rand()%50<15)
		  {
			  people->CombatC();
			 people->COMBAT();
			shua(st);
		  }
		  if((zx+a==12||zx+a==13)&&(zy+b==0))
		  {
			  zy=18;y=2*zy;
			  return 1;//主城
		  }
		  if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
		  {
			  zx+=a,zy+=b;
			  xx=x;yy=y;
			  x=zx;y=zy*2;
		    gotoxy(xx,yy);
		    printf("  ");
	        gotoxy(x,y);
		    printf("%s",str[12]);
		  }
	}
}
inline int Map::map5()//西门
{
	int a,b;
	int st[22][20]={
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
		1,36,37,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,
		1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,
		1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,
		1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,
		1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,25,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	};//22行20列
	shua(st);
	while(1)
	{
		  yidong(a,b);
		   if(strr==27)
		  {
			 ztjm(st);
			  continue;
		  }
		   srand((unsigned)time(NULL));
		 if(rand()%50<15)
		  {
			 people->CombatC();
			 people->COMBAT();
			shua(st);
		  }
		  if((zx+a==12||zx+a==13)&&(zy+b==19))
		  {
			   zy=1;y=2*zy;
			  return 1;//主城
		  }
		  if(zx+a>0&&zx+a<21&&zy+b>0&&zy+b<19&&st[zx+a][zy+b]!=1&&st[zx+a][zy+b]<12)
		  {
			  zx+=a,zy+=b;
			  xx=x;yy=y;
			  x=zx;y=zy*2;
		    gotoxy(xx,yy);
		    printf("  ");
	        gotoxy(x,y);
		    printf("%s",str[12]);
		  }
	}
}

文件读取:

███████████████████████████████████████
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █
█                                  █                                      █
███████████████████████████████████████

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 11:36:27

RPG游戏的相关文章

简易2D横版RPG游戏制作

Unity学习笔记1 简易2D横版RPG游戏制作 http://m.blog.csdn.net/article/details?id=24601905

国产单机RPG游戏的情怀

最近在玩儿仙剑奇侠传5,这个游戏从小时候玩儿到现在,也算是见证了一代人的成长,小时候没少玩盗版,现在自己工作了,有了固定的收入,也能体会到游戏开发者的不容易,尤其是单机游戏这个圈子,现在国内几乎没有人愿意做单机游戏,只有情怀,没有钱的事一般聪明的程序员们是不会做的,何况是一群俗不可耐的家伙. 话回到游戏中,这个游戏我玩儿到2/3的时候和韩总发表了一顿感慨,这游戏做的也太差了,游戏性差了之前太多,没什么可玩儿性,BOSS就是无限加血加蓝补怒耗着基本都能过.这番感慨发表的当天,剧情走到了一段叫“青木

Cocos2D-ObjC:在RPG游戏中混合Swift代码

我之前写过一个RPG游戏<<熊猫之魂 SoulOfPanda>> 编译器使用的是SpriteBuilder,很好很强大!全部代码都由Objc完成,现在想尝试一下在其中混入Swift代码. 我的目的很简单,用Swift写一个GCMan9类,派生自Objc中的GameCharacter类,最后在Objc中使用GCMan9这个类. GameCharacter类是游戏人物的基类,我从中派生了十几个子类分别表示游戏主角,各种NPC,各种敌人等等. 下面是GCMan1类的头文件: #impor

RPG游戏案例源码

再发一份我的另外一个作品吧,源码OzgGameRPG,本游戏主要用于技术的研究和积累,目前只部署了ios平台.游戏第一次启动的时候会把数据库复制到可写文件夹,若数据库结构因为一些改动发生了变化,需要把旧的数据库删除. 编译时需要将本游戏的目录复制到cocos2d-x-2.2.3/projects/. 游戏中所用的一部分图片来自 http://www.66rpg.com/type.php?t=17 另一部分图片来自http://usui.moo.jp/rpg_tukuru.html 声音文件来自 

如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景

开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么一个类. 本系列文章目录: 如何制作一款HTML5 RPG游戏引擎--第一篇,地图类的实现 http://blog.csdn.net/yorhomwang/article/details/8892305 如何制作一款HTML5 RPG游戏引擎--第二篇,烟雨+飞雪效果 http://blog.csd

HTML5开源RPG游戏引擎lufylegendRPG 1.0.0发布

经历了几个月的改进,终于发布1.0.0版了.虽然引擎依然存在漏洞,但是比起上次更新还是要好多了.在这里不得不感谢各位网友的大力支持. 首先为引擎做一个开场白吧,也好让大家了解一下它: lufylegendRPG是基于lufylegend的HTML5游戏引擎.使用它时,需要引入lufylegend.js. 包含了LTileMap,LCharacter,LTalk,LEffect等多个实用的类. 由于是基于lufylegend,所以你需要了解一下lufylegend的用法,这样才能更合理,更快捷地运

如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话

今天我们来实现情景对话.这是一个重要的功能,没有它,游戏将变得索然无味.所以我们不得不来完成它. 但是要知道,使用对话可不是一件简单的事,因为它内部的东西很多,比如说人物头像,人物名称,对话内容... 因此我们只能通过数组+JSON来将对话信息装起来,然后根据信息作出不同的显示.接下来我便要向大家展示实现方法. 先看本系列文章目录: 如何制作一款HTML5 RPG游戏引擎--第一篇,地图类的实现 http://blog.csdn.net/yorhomwang/article/details/88

RPG游戏设计(转自Gameres)

目录: 第一章 概述 第二章 场景 第三章 角色 第四章 道具 第五章 事件 第六章 对白 第七章 语音和音效 第八章 音乐 第九章 界面 第十章 规则 第十一章 命名 第一章:概述 RPG游戏即角色扮演游戏(Role Personate Game),玩家需要扮演游戏中的一位或者多位角色,在虚拟的世界中进行冒险.首先,让我们先来认识RPG游戏,从表现形式和玩法上,它可以分为以下几种: RPG:普通RPG游戏,有专门的战斗画面.战斗画面用不同的视角来表现: 采用斜45度视角,如台湾<仙剑奇侠传>

如何制作一款HTML5 RPG游戏引擎——第五篇,人物&amp;人物特效

上一次,我们实现了对话类,今天就来做一个游戏中必不可少的--人物类. 当然,你完全是可以自己写一个人物类,但是为了方便起见,还是决定把人物类封装到这个引擎里. 为了使这个类更有意义,我还给人物类加了几个特效,在以下讲解中会提到. 以下是本系列文章的目录: 如何制作一款HTML5 RPG游戏引擎--第一篇,地图类的实现 http://blog.csdn.net/yorhomwang/article/details/8892305 如何制作一款HTML5 RPG游戏引擎--第二篇,烟雨+飞雪效果 h

如何制作一款HTML5 RPG游戏引擎——第一篇,地图类的实现

一,话说天下大事 前不久看到lufy的博客上,有一位朋友想要一个RPG游戏引擎,出于兴趣准备动手做一做.由于我研究lufylegend有一段时间了,对它有一定的依赖性,因此就准备将这个引擎基于lufylegend.暂时命名为lufylegendRPG.毕竟基于lufylegend,如果名称中不加上lufylegend这几个字的话,有点说不通啊...最近发布了0.1.0版,但是不理想,连一惯都是鼓励和赞赏我的lufy老先生都是出于真心的表示不满意.想了解0.1.0版的朋友可以看看这里(其实最好别看