📄 fightinit.cpp
字号:
// ******************************
// * 战斗系统类函数
// * 创建于 5月29日
// ******************************
// ************************************
// * 战斗系统的初始化函数文件
// * 创建于 8月10日
// ************************************
#include <stdio.h>
#include "..\gamelib\goldpoint2.h"
#include "..\interface\interface2.h"
#include "..\menu\menu_inc.h"
#include "..\main.h"
#include "..\map.h"
#include "..\script.h"
#include "..\menu\title.h"
#include "..\Cursor.h"
#include "Fight.h"
int CFight::m_nEnemyNum = 0; // 敌人类型的数量
CFight::stEnemyList* CFight::m_listEnemy = NULL; // 敌人名称列表
// 读入敌人列表
void CFight::LoadEnemyList(char* file, char* index)
{
//初始化所有敌人列表框
CIniSet Ini(file);
m_nEnemyNum = Ini.GetContinueDataNum(index);
if( m_nEnemyNum > 0 )
{
m_listEnemy = new stEnemyList[m_nEnemyNum];
for(int i=0; i<m_nEnemyNum; i++)
{
char* str = Ini.ReadText("敌人列表", i);
strcpy( m_listEnemy[i].strName, str );
_FREE(str);
}
}
}
CFight::CFight()
{
bRandomFight=true;
CIniSet FightSystemInit("ini\\fight\\FightSystemInit.ini");
//初始化主角和敌人数据
FightRole[0].ready=1; //没有进攻
FightRole[0].status=0; //状态正常
FightRole[0].x=FightSystemInit.ReadInt("战斗初始化","Role1_x"); //站位
FightRole[0].y=FightSystemInit.ReadInt("战斗初始化","Role1_y");
FightRole[0].use=0; //不使用
FightRole[0].stop_temp=1; //动作序列
FightRole[0].surf=FightRole[0].header=NULL; //头像
FightRole[1].ready=1;
FightRole[1].status=0;
FightRole[1].x=FightSystemInit.ReadInt("战斗初始化","Role2_x");
FightRole[1].y=FightSystemInit.ReadInt("战斗初始化","Role2_y");
FightRole[1].use=0;
FightRole[1].stop_temp=2;
FightRole[1].surf=FightRole[1].header=NULL;
FightRole[2].ready=1;
FightRole[2].status=0;
FightRole[2].x=FightSystemInit.ReadInt("战斗初始化","Role3_x");
FightRole[2].y=FightSystemInit.ReadInt("战斗初始化","Role3_y");
FightRole[2].use=0;
FightRole[2].stop_temp=3;
FightRole[2].surf=FightRole[2].header=NULL;
EnemyRole[0].use=0;
EnemyRole[0].ready=1;
EnemyRole[0].status=0;
EnemyRole[0].x=FightSystemInit.ReadInt("战斗初始化","Enemy1_x");
EnemyRole[0].y=FightSystemInit.ReadInt("战斗初始化","Enemy1_y");
EnemyRole[0].stop_temp=1;
EnemyRole[0].surf=NULL;
EnemyRole[1].use=0;
EnemyRole[1].ready=1;
EnemyRole[1].status=0;
EnemyRole[1].x=FightSystemInit.ReadInt("战斗初始化","Enemy2_x");
EnemyRole[1].y=FightSystemInit.ReadInt("战斗初始化","Enemy2_y");
EnemyRole[1].stop_temp=2;
EnemyRole[1].surf=NULL;
EnemyRole[2].use=0;
EnemyRole[2].ready=1;
EnemyRole[2].status=0;
EnemyRole[2].x=FightSystemInit.ReadInt("战斗初始化","Enemy3_x");
EnemyRole[2].y=FightSystemInit.ReadInt("战斗初始化","Enemy3_y");
EnemyRole[2].stop_temp=3;
EnemyRole[2].surf=NULL;
EnemyRole[3].use=0;
EnemyRole[3].ready=1;
EnemyRole[3].status=0;
EnemyRole[3].x=FightSystemInit.ReadInt("战斗初始化","Enemy4_x");
EnemyRole[3].y=FightSystemInit.ReadInt("战斗初始化","Enemy4_y");
EnemyRole[3].stop_temp=1;
EnemyRole[3].surf=NULL;
//初始画指令
Command[0].player=1;
Command[1].player=1;
Command[2].player=1;
Command[0].kill_who=1;
Command[1].kill_who=1;
Command[2].kill_who=1;
command_count=0;
Enemy_Command[0].player=0;
Enemy_Command[1].player=0;
Enemy_Command[2].player=0;
Enemy_Command[3].player=0;
Enemy_Command[0].kill_who=1;
Enemy_Command[1].kill_who=1;
Enemy_Command[2].kill_who=1;
Enemy_Command[3].kill_who=1;
main_count=MAIN; //初始主控制循环
nNonce = 0; //要攻击的对象
Role_Temp = NULL;
m_nAttackCountMove = 0;
m_nAttackCountLife = 0;
m_nLifeupCountMove = 0;
m_nLifeupCountLife = 0;
m_bBoss = false;
m_bHidden = false;
m_nRoundCount = 1;
m_nMagicCount = 1;
}
CFight::~CFight()
{
_DELETE_ARRAY( m_listEnemy );
}
//初始化
void CFight::Init(void)
{
CreateBitmap(status_pic, 0, 0, "pic\\fight\\status.bmp");//人物状态:血……
DDSetColorKey(status_pic,RGB(255,0,255));
//读入光标
cursor_role.LoadAni("ini\\fight\\cursor.ini", "选人光标");
cursor_enemy.LoadAni("ini\\fight\\cursor.ini", "扁人光标");
//初始化按钮
Button[0].LoadIni("ini\\fight\\button.ini", "重复");
Button[1].LoadIni("ini\\fight\\button.ini", "攻击");
Button[2].LoadIni("ini\\fight\\button.ini", "魔法");
Button[3].LoadIni("ini\\fight\\button.ini", "道具");
Button[4].LoadIni("ini\\fight\\button.ini", "逃跑");
font.InitFont(16, "宋体");
//音乐
FMusic.g_pMIDISeg=NULL;
WCHAR* str = WChar("music\\fight.mid");
FMusic.LoadMusic(str);
_DELETE( str );
//音效
Sound_Click.LoadSoundFX(hWnd, "sound\\fight\\click.wav");
Sound_High.LoadSoundFX(hWnd, "sound\\fight\\high.wav");
//道具初始化
m_fightgoods.LoadWindowIni("ini\\fight\\fightgoodslist.ini", "物品列表框");
//魔法初始化
m_fightmagic.LoadWindowIni("ini\\fight\\fightmagiclist.ini", "魔法列表框");
//战斗字体初始化
char *strTemp = GameIni.ReadText("配置文件","字体");
FightFont.LoadFont(strTemp, "战斗字体");
_FREE(strTemp);
}
//战斗结束的清理工作
void CFight::Clear(void)
{
KillTimer(hWnd, 2);
main_count=MAIN;
command_count=0;
enemy_count=0;
temp_swap=0;
kill_count=0;
m_bBoss = false;
m_bHidden = false;
for(int i=0; i<3; i++)
{
FightRole[i].ready=1;
FightRole[i].status=0;
FightRole[i].use=0;
FightRole[i].stop_temp=i+1;
Command[i].player=1;
_RELEASE( FightRole[i].surf );
_RELEASE( FightRole[i].header );
}
for(i=0; i<4; i++)
{
EnemyRole[i].use=0;
EnemyRole[i].ready=1;
EnemyRole[i].status=0;
EnemyRole[i].stop_temp=i+1;
Enemy_Command[i].player=0;
_RELEASE( EnemyRole[i].surf);
}
//释放背景图
for(i=0; i<Number; i++)
{
_RELEASE( background[i] );
}
_RELEASE(background_build[0]);
_DELETE(background_build);
_DELETE( background );
}
// background:本战役的背景图片以及数据的数据文件名
// enemy_1~enemy_4是四个敌人的名字
// 如果enemy1~4的值为NULL则那个位置没有敌人
CFight::Start(char *bg_name,
stRolePropertiy * role_1,
stRolePropertiy * role_2,
stRolePropertiy * role_3,
char *enemy_1,
char *enemy_2,
char *enemy_3,
char *enemy_4)
{
int ret=0;
m_nRoundCount = 1; //回合计数置1
m_nMagicCount = 1;
g_ePlayState=PS_FIGHT; //进入战斗循环标志
//战斗音乐
Music.Pause(); //停止原背景音乐
FMusic.Play(); //开始战斗音乐
// 背景图片的设置与读取
CIniSet FightBackGroundInit(bg_name);
Number = FightBackGroundInit.ReadInt("背景数据","Number");
background = new LPDIRECTDRAWSURFACE[Number];
background_build = new LPDIRECTDRAWSURFACE[1]; // 战斗时的背景遮挡:前面的树木
char* strTemp = FightBackGroundInit.ReadText("背景数据","Background_Name");
CreateBitmap(background[Number-1], 0, 0, strTemp);
_FREE(strTemp);
CreateBitmap(background_build[0], 0, 0, "pic\\fight\\background_build.bmp");
DDSetColorKey(background_build[0],RGB(255,0,255));
// 角色的读取
FightRoleInit.Open("ini\\fight\\FightRoleInit.ini");
for(int i=2; i>=0; i--)
if( i==0 && role_1 || i==1 && role_2 || i==2 && role_3 )
{
FightRole[i].bLive=true;
command_count=i; //初始化成排在最前面的主角
switch( i )
{
case 0: Hero[i]=role_1; break; //保存人物属性
case 1: Hero[i]=role_2; break;
case 2: Hero[i]=role_3; break;
}
FightRole[i].use=1; //使用这个角色
FightRole[i].status=1;
strTemp = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Header");//头像
CreateBitmap(FightRole[i].header,0,0, strTemp);
_FREE(strTemp);
strTemp = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Role_Pic_File");//人物进攻图片
CreateBitmap(FightRole[i].surf,0,0, strTemp);
_FREE(strTemp);
strTemp = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Move_Ini");
Role_Move[i].Open(strTemp);//人物移动数据
_FREE( strTemp );
strTemp = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Tool_Ini");
Role_Tool[i].Open(strTemp);
_FREE(strTemp);
DDSetColorKey(FightRole[i].surf, ColorKey);
//血槽—气槽的长度
FightRole[i].BroodLong=Hero[i]->Hp * 100 / Hero[i]->MaxHp;
FightRole[i].MagicLong=Hero[i]->Mp * 100 / Hero[i]->MaxMp;
//静止的动作序列数据
FightRole[i].Rstop[0].left=FightRoleInit.ReadInt(Hero[i]->Fight_Ini_Name,"1静止的位图_x");
FightRole[i].Rstop[0].top=FightRoleInit.ReadInt(Hero[i]->Fight_Ini_Name,"1静止的位图_y");
FightRole[i].Rstop[0].right=FightRoleInit.ReadInt(Hero[i]->Fight_Ini_Name,"1静止的位图_x1");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -