第一次编写游戏,想请教下思路

时间:2021-09-22 13:25:28
各位千万不要以为我写的有多高超,其实很弱值的,就是那种在原始DOS界面下的回合制,主要是想用面向对象的方法编一下,面向过程的程序我可以写的出来,现在学了C++,主要想换种思路去写,最近把C++看到对象的常引用,那些什么继承,多太,虚函数,还没有看到,游戏是这样的:回合制,有4个人物,人物有不同技能,我把游戏

简化的说一下,就按2个角色,技能部分要怎么写?我的想法是把技能作为类的一个成员函数来写,但这样的话,成员函数(技能)必须对其他

对象中的数据成员进行操作,如1号的雷电术攻击2号,使他的HP减少50,这个貌似我还没有学到呀。还有2个职业需要定义几个类呢?如果定义

成1个类,他们技能(成员函数)部分是不同的啊,我给大家看下我写的程序,短短几行居然有90个错误,我无语了,,请高手帮我写个简单点

的(按2个角色,每个角色1个技能来写)
例如,1战士  烈火 攻击力120
     2法师  雷电 攻击力50
下面是我写的
#include<iostream>
#include<math.h>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
void main()
{
class person_kz
{
public:
person_kz(int,int,int,float,float,string)
int hp,gja,gjb;
float fy,db;
string name;
kbxf();
pdz();
jght();
tz();
lhjf();
};
class person_sj
{
public:
person_sj(int,int,int,float,float,string)
int hp,gja,gjb;
float fy,db;
string name;
jrfj();
sf();
pjjj();
sy();
htgh();
};
class person_md
{
public:
person_md(int,int,int,float,float,string)
int hp,gja,gjb;
float fy,db;
string name;
klzd();
bd();
nxlh();
bxf();
jrgh();
};
class person_mj
{
public:
person_mj(int,int,int,float,float,string)
int hp,gja,gjb;
float fy,db;
string name;
ymhz();
sszjs();
tsxf();
zlb();
sd();
};
person_kz∷person_kz(int hpx,int gjax,int gjbx,float fyx,float dbx,string namex)
{
hp=hpx;
gja=gjax;
gjb=gjbx;
fy=fyx;
db=dbx;
name=namex;
}
person_sj∷person_sj(int hpx,int gjax,int gjbx,float fyx,float dbx,string namex)
{
hp=hpx;
gja=gjax;
gjb=gjbx;
fy=fyx;
db=dbx;
name=namex;
}
person_md∷person_md(int hpx,int gjax,int gjbx,float fyx,float dbx,string namex)
{
hp=hpx;
gja=gjax;
gjb=gjbx;
fy=fyx;
db=dbx;
name=namex;
}
person_mj∷person_mj(int hpx,int gjax,int gjbx,float fyx,float dbx,string namex)
{
hp=hpx;
gja=gjax;
gjb=gjbx;
fy=fyx;
db=dbx;
name=namex;
}
person_kz∷kbxf()
{
  int gj,att1,att2,att3;
    gj=27+srand(49);
    att1=gj*0.7;
att2=gj*0.9;
att3=gj*1.2;
person[i].hp=person[i].hp-att1*(1-person[i].fy/10)-att2*(1-person[i].fy/10)-att3*(1-person[i].fy/10);
    person[i].fy=person[i].fy-3;
}
person_kz∷pdz()
{
int rand;
rand=srand(100);
if (rand<=45)
person[i].fy=0
}
person_kz∷jght()
{

int i,j;
void explore();
cout<<"welcome to the game!"<<endl;
for (i=0;i<=10000;i++)
{
}
clrscr();
for (i=0;i<=1;i++)
{
cout<<"选择第"<<i<<"个职业"<<endl;
cout<<"1.狂站"<<"2.双剑"<<"3.魔导"<<"4.魔剑"<<endl;
    switch(getchar())
{
   case'1':person_kz person[i]=(862,27,76,0,0.01,狂站);break;
   case'2':person_sj person[i]=(753,44,57,0,0.02,双剑);break;
       case'3':person_md person[i]=(235,0,0,0,0.01,魔导);break;
       case'4':person_mj person[i]=(550,0,0,0,0.02,魔剑);break;
       default;
}
cout<<"选择第"<<i+1<<"个职业成功!"<<endl;
    for (j=0;j<=4000;j++)
{
}
clrscr();
}

}
void explorer()
{
scanf("%10c,%10c",person
程序写到这里实在写不下去了啊!!连个思路也没有了
请有经验的朋友说说,,

5 个解决方案

#1


怎么没人回我啊?

#2


我刚学,但是看到你这程序,也太哪个了,函数命名太繁杂,程序可读性太差了,
我估计人家高手肯定是一看就烦躁了,还有你的类定义为何放在main函数里面,这样就搞的更加离谱了,虽然方法没错,不符合C++的原则吧,不过我不明白你到底是在用C还是用C++编写的,两种语言的头文件都包含进来了^我编译了下,102个错误,4个警告,仔细慢慢编吧

#3


那个技能函数的命名是我按技能首字母命名的,象狂暴旋风 KBXF(),这样难道不对吗?hfyumen我程序可读性为什么查啊?

#4


可以定义一个“生命体类”Person(基类),然后战士和法师都Person类继承;class warrior:public person;class rabbi:public person;

在生命体类里,包含生命值,法力值,以及其他物理属性等等,这些是战士和法师共有的,当然还包含一些函数方法,比如当生命值小于0时会触发死亡执行体,该执行体负责调用死亡后的动作,比如打印一条死亡信息等等; 在warrior和rabbi类里,包含各自的技能攻击,杀伤力等等。每个技能都可以用一个函数执行,可以定义一个enum eAttact{技能1,即能2。。。},然后通过Perform(eAttact at)各自调用。

其实很简单的,写好这3个类体基本上满足要求了,然后通过printf表现界面。

#5


我现在还没学到继承,难道分别定义战士类,法师类不可以吗?这样做是麻烦了点?还是根本行不通?“比如当生命值小于0时会触发死亡执行体,该执行体负责调用死亡后的动作,比如打印一条死亡信息”你着点我还没有想到,我是想用PRINTF输出界面的时候,加一条判断语句用来判断HP是否小于0,,定义一个enum eAttact{技能1,即能2。。。},你是说把技能做成函数放在warrior和rabbi类中吗?那怎么在技能函数中对别的对象成员进行操作?
attack()
{
warrior.hp=warrior.hp-100;
cout<<攻击为100<<endl;
}
是不是这样?

#1


怎么没人回我啊?

#2


我刚学,但是看到你这程序,也太哪个了,函数命名太繁杂,程序可读性太差了,
我估计人家高手肯定是一看就烦躁了,还有你的类定义为何放在main函数里面,这样就搞的更加离谱了,虽然方法没错,不符合C++的原则吧,不过我不明白你到底是在用C还是用C++编写的,两种语言的头文件都包含进来了^我编译了下,102个错误,4个警告,仔细慢慢编吧

#3


那个技能函数的命名是我按技能首字母命名的,象狂暴旋风 KBXF(),这样难道不对吗?hfyumen我程序可读性为什么查啊?

#4


可以定义一个“生命体类”Person(基类),然后战士和法师都Person类继承;class warrior:public person;class rabbi:public person;

在生命体类里,包含生命值,法力值,以及其他物理属性等等,这些是战士和法师共有的,当然还包含一些函数方法,比如当生命值小于0时会触发死亡执行体,该执行体负责调用死亡后的动作,比如打印一条死亡信息等等; 在warrior和rabbi类里,包含各自的技能攻击,杀伤力等等。每个技能都可以用一个函数执行,可以定义一个enum eAttact{技能1,即能2。。。},然后通过Perform(eAttact at)各自调用。

其实很简单的,写好这3个类体基本上满足要求了,然后通过printf表现界面。

#5


我现在还没学到继承,难道分别定义战士类,法师类不可以吗?这样做是麻烦了点?还是根本行不通?“比如当生命值小于0时会触发死亡执行体,该执行体负责调用死亡后的动作,比如打印一条死亡信息”你着点我还没有想到,我是想用PRINTF输出界面的时候,加一条判断语句用来判断HP是否小于0,,定义一个enum eAttact{技能1,即能2。。。},你是说把技能做成函数放在warrior和rabbi类中吗?那怎么在技能函数中对别的对象成员进行操作?
attack()
{
warrior.hp=warrior.hp-100;
cout<<攻击为100<<endl;
}
是不是这样?