/********************************************************
* 《圣剑英雄传--英雄救美》测试版 *
* 中文RPG游戏源程序 *
* *
* softboy *
* 1999.6 *
* *
* http://goldpoint.126.com *
* mailto:wj77@163.net *
* *
* 本文件由 softboy 创建于 1999/3/25 *
* 最后修改于 1999年6月11日 *
* *
* 声明: *
* 在不用于商业目的的前提下,你可以任意复制并 *
* 传播该程序,如果愿意还可以自由更改,但由此产生 *
* 后果,我不负担任何责任。 *
* 如果要将该程序用于商业目的,请事先与我联系, *
* 否则,后果自负! *
********************************************************/
//声明包含文件
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mmsystem.h>
#include <time.h>
#include <direct.h>
#include <ddraw.h>
#include <dsound.h>
#include "ddutil.h"
#include "resource.h"
#define ScreenX 640 //屏幕宽
#define ScreenY 480 //屏幕高
#define ScreenColor 8 //颜色深度
#define MAPS 8 //游戏中总共的地图数目
#define NPCS 15 //游戏中总共的NPC数目(种类)
#define TREASURE 0xf000 //地图中的宝物偏移
#define BLAK 0xa000 //地图中的障碍偏移值 即:障碍编号=BLAK+???
#define SPACE 0x5000 //地图中的切换场景的偏移值(英雄踏上后切换到下一个场景)
#define BUY 1 //买
#define SALE 2 //卖
//================================全局变量声明==================================
LPDIRECTSOUNDBUFFER SoundAo[10]; //挨打声音
LPDIRECTSOUNDBUFFER SoundDead[10]; //死亡声音
LPDIRECTSOUNDBUFFER SoundAttack[10]; //攻击声音
#include "dsound.cpp"
LPDIRECTDRAW lpDD; //DirectDraw对象
LPDIRECTDRAWSURFACE lpDDSPrimary; // 主页面
LPDIRECTDRAWSURFACE lpDDSBack; // 缓冲页面
LPDIRECTDRAWSURFACE lpDDSBackGround;// 背景页面
LPDIRECTDRAWSURFACE lpDDSSpirit; // 精灵页面
LPDIRECTDRAWSURFACE lpDDSNpc[NPCS]; // 电脑人物页面
LPDIRECTDRAWSURFACE lpDDSMap1; // 地图页面1
LPDIRECTDRAWSURFACE lpDDSMap2; // 地图页面2
LPDIRECTDRAWSURFACE lpDDSDialog; // 对话框页面
LPDIRECTDRAWSURFACE lpDDSStateBar; // 状态页页面
LPDIRECTDRAWSURFACE lpDDSFightBar; // 打斗页页面
LPDIRECTDRAWSURFACE lpDDSBomb; // 爆炸页面
LPDIRECTDRAWSURFACE lpDDSMainMenu; // 主菜单页面
LPDIRECTDRAWSURFACE lpDDSGoods; // 物品页面
LPDIRECTDRAWPALETTE lpDDPal; //主调色板
char *Talk; //游戏中的所有对话数据
HWND hWnd; //主窗口句柄
BOOL bActive = TRUE; //应用程序是否活跃
int Scene=0; //所处场景标志
int SX=0,SY=0; //所处场景的左上坐标
int old_SX=0, old_SY=0;
int DX=0,DY=0; //生成场景时的左上坐标
int old_DX=0, old_DY=0;
RECT rect; //Blt用的矩形
int Flag_OutCity=0; //出城的标志
int Flag_GotoPalace=0; //进魔宫的标志
//*********角色属性结构**********
typedef struct{
int ID; //角色唯一编号
int Pic; //角色图片编号
int Enemy; //角色是否是敌人
int TalkNum; //对话编号
BOOL Active; //角色是否活动
BOOL Show; //角色是否可见
char Name[32]; //角色名称
int Width,Hight; //角色大小
int x,y; //当前坐标
int old_x,old_y; //旧的坐标
int Way; //方向
int Stats; //状态
int Level; //等级
int Exp; //经验
int Lift; //生命
int MaxLift; //生命最大值
int Attack; //攻击
int Defend; //防御
int Speed; //速度
unsigned char Goods[17]; //物品(最多可带16件)
int Money; //金钱
LPDIRECTDRAWSURFACE Surface; //角色的图片
}Role;
Role Hero; //小飞刀的对象
//*********地图结构**********
typedef struct{
char Name[32]; //名字
int Width; //宽
int Hight; //高
char Ground; //地面材料
char res[7]; //保留
unsigned short *Data; //数据
int Npc_Nums; //NPC数量
Role *NPC; //NPC链表
}Map_Struct;
Map_Struct Map[MAPS];
//********物品结构*********
typedef struct{
int ID; //编号
char Name[32]; //名字
char About[100]; //功能
int Money; //价值
int Exp,Lift,Attack,Defend; //作用
}Good_Struct;
Good_Struct Goods[20];
//函数声明
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
HWND InitWindow( HINSTANCE hInstance, int nCmdShow );
void GameTitle();
BOOL InitDDraw( void );
void FreeDDraw( void );
BOOL Blt(LPDIRECTDRAWSURFACE SS,int x,int y,LPDIRECTDRAWSURFACE DS,RECT rcRect,BOOL Flog);
void Flip(void);
HRESULT restoreAll( void );
BOOL initFail(char *str);
void MainMove();
void NpcMove();
void MainLoop();
void MessageLoop( int Msg );
BOOL LoadMaps();
BOOL LoadNpcData(int map);
int ReadLine(char *,int &,char *,int Seek=11);
void MakeBackGround();
void DrawNpc();
BOOL CreateBitmap(LPDIRECTDRAWSURFACE &lpTemp,int x,int y,char *BitmapFile, DWORD MemoryFlag=0);
RECT GetRect(int,int,int,int);
int random(int nMax);
BOOL SaveGame();
BOOL LoadGame();
int SaleDialog(Role Boss, int Flag=BUY);
int Fight(Role Enemy, int FightScene, int Escape=50);
#include "palette.cpp"
#include "textout.cpp"
#include "other.cpp"
#include "drawit.cpp"
#include "init.cpp"
#include "sale.cpp"
#include "fight.cpp"
#include "header.cpp"
#include "loadsave.cpp"
//****************************************************
//生成背景
void MakeBackGround()
{
unsigned short n;
for(int i=SY; i<SY+16 ; i++)
for(int j=SX; j<SX+21 ; j++)
{
//画地面
RECT rect={ 0, Map[ Scene ].Ground *32, 32, Map[ Scene ].Ground * 32 +32};
Blt(lpDDSBackGround, DX+(j-SX)*32, DY+(i-SY)*32, lpDDSMap1, rect, FALSE);
//画物体
n=Map[ Scene ].Data[ i * Map[ Scene ].Width + j ];
if( n>0 && n<SPACE || n>=BLAK )
{
if( n>=BLAK ) n-=BLAK; //障碍
if( n>=TREASURE-BLAK ) n=301; //宝物
rect=GetRect( n%20*32, n/20 * 32, n%20*32 + 32, n/20 * 32 + 32);
Blt(lpDDSBackGround, DX+(j-SX)*32, DY+(i-SY)*32, lpDDSMap2, rect, TRUE);
}
}
DrawNpc(); //画NPC
}
//****************************************************
//生成该图Npc
void DrawNpc()
{
for(int i=0; i<Map[Scene].Npc_Nums; i++)
if( Map[Scene].NPC[i].Show == 1 ) //如果NPC可见
{
rect=GetRect( Map[Scene].NPC[i].Stats* Map[Scene].NPC[i].Width, Map[Scene].NPC[i].Way*Map[Scene].NPC[i].Hight, Map[Scene].NPC[i].Stats*Map[Scene].NPC[i].Width+Map[Scene].NPC[i].Width, Map[Scene].NPC[i].Way* Map[Scene].NPC[i].Hight+Map[Scene].NPC[i].Hight);
Blt(lpDDSBackGround, Map[Scene].NPC[i].x-(SX*32)+DX, Map[Scene].NPC[i].y-(Map[Scene].NPC[i].Hight)-(SY*32)+DY, Map[Scene].NPC[i].Surface, rect, TRUE);
}
}
//****************************************************
//主角行走函数
void MainMove()
{
//边界障碍物检测
int n0 = ((Hero.y-20-DY)/32 + SY) * Map[ Scene ].Width + ((Hero.x+12-DX)/32 + SX);
int n1 = ((Hero.y-20-DY)/32 + SY) * Map[ Scene ].Width + ((Hero.x+20-DX)/32 + SX);
int n2 = ((Hero.y-12-DY)/32 + SY) * Map[ Scene ].Width + ((Hero.x+12-DX)/32 + SX);
int n3 = ((Hero.y-12-DY)/32 + SY) * Map[ Scene ].Width + ((Hero.x+20-DX)/32 + SX);
if( Map[ Scene ].Data[n0] >= BLAK || Map[ Scene ].Data[n1] >= BLAK || Map[ Scene ].Data[n2] >= BLAK || Map[ Scene ].Data[n3] >= BLAK )
{
Hero.x=Hero.old_x;
Hero.y=Hero.old_y;
SX = old_SX; SY = old_SY;
DX = old_DX; DY = old_DY;
}
//NPC碰撞检测
for(int i=0; i<Map[Scene].Npc_Nums; i++)
{
if( Map[Scene].NPC[i].Show==1 &&\
abs(Hero.x+SX*32-DX - Map[ Scene ].NPC[i].x)<=24 &&\
abs(Hero.y+SY*32-DY - Map[Scene].NPC[i].y)<=24 )
{
Hero.x=Hero.old_x;
Hero.y=Hero.old_y;
SX = old_SX; SY = old_SY;
DX = old_DX; DY = old_DY;
}
}
MakeBackGround();
RECT rect1={0,0,ScreenX,ScreenY};
Blt(lpDDSBack, 0, 0, lpDDSBackGround, rect1, FALSE);
//在新位置画英雄
RECT rect2={Hero.Stats*Hero.Width, Hero.Way*Hero.Hight, Hero.Stats*Hero.Width+Hero.Width, Hero.Way*Hero.Hight+Hero.Hight};
Blt(lpDDSBack, Hero.x, Hero.y - Hero.Hight, lpDDSSpirit, rect2, TRUE);
/*
//重画可遮盖英雄的物体
int n = ((Hero.y-17-DY)/32 + SY) * Map[ Scene ].Width + ((Hero.x+16-DX)/32 + SX);
if( Map[ Scene ].Data[n+Map[ Scene
没有合适的资源?快使用搜索试试~ 我知道了~
圣剑英雄传.zip
共25个文件
cpp:13个
h:2个
ico:2个
需积分: 5 0 下载量 102 浏览量
2024-09-21
12:13:48
上传
评论
收藏 114KB ZIP 举报
温馨提示
C++三维程序
资源推荐
资源详情
资源评论
收起资源包目录
圣剑英雄传.zip (25个子文件)
圣剑英雄传
www.cnzz.cn
sword.ico 2KB
palette.cpp 2KB
RPG.opt 48KB
DDUTIL.H 1KB
resource.h 456B
init.cpp 4KB
dsound.cpp 3KB
RPG.dsw 529B
RPG.ncb 265KB
RPG.dsp 4KB
Script1.aps 32KB
drawit.cpp 4KB
header.cpp 4KB
DDUTIL.CPP 8KB
sale.cpp 5KB
RPG.PLG 2KB
RPG.cpp 24KB
other.cpp 1KB
loadsave.cpp 5KB
fight.cpp 7KB
Script1.rc 2KB
menu.cpp 321B
textout.cpp 18KB
icon1.ico 766B
使用说明.CHM 49KB
共 25 条
- 1
资源评论
fanxbl957
- 粉丝: 1216
- 资源: 1135
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功