⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 character.h

📁 Visual C++角色扮演游戏程序设计(附带CD源代码)作者: (日)坂本千寻 译者:博硕文化
💻 H
字号:
//
// Charater--角色
//
//	Copyright (c) 2000-2001 Chihiro.SAKAMOTO (HyperWorks)
//
#ifndef	__character_h__
#define	__character_h__

#include "Sprite.h"
#include "coordinate.h"

class CMapSprite: public CSprite {
  public:
	enum	{
		DEPTH_AREA,
		DEPTH_CURSOR,
		DEPTH_CHAR,
		DEPTH_OBJECT,
	} ;

  public:
	CMapSprite();
	CMapSprite(CImage *dib, int x, int y, CSize size, int d);
	CMapSprite(CImage *dib, int x, int y, int d);

	void SetMapPoint(CPoint point);
	CPoint GetMapPoint() const { return map_point; }

  protected:
	CPoint map_point;	// 地图上的位置
} ;

inline CMapSprite::CMapSprite()
{
	map_point.x = map_point.y = 0;
}

inline CMapSprite::CMapSprite(CImage *dib, int x, int y, CSize size, int d)
	:CSprite(dib, IndexToPoint(x, y) + CPoint((MAPGRID_WIDTH - size.cx) / 2, MAPGRID_HEIGHT - size.cy), size, d)
{
	map_point.x = x;
	map_point.y = y;
}

inline CMapSprite::CMapSprite(CImage *dib, int x, int y, int d)
{
	CSize size(dib->Width(), dib->Height());
	Set(dib, IndexToPoint(x, y) + CPoint((MAPGRID_WIDTH - size.cx) / 2, MAPGRID_HEIGHT - size.cy), size, d);
	map_point.x = x;
	map_point.y = y;
}

inline void CMapSprite::SetMapPoint(CPoint point)
{
	map_point = point;
	SetDrawPos(IndexToPoint(point) + CPoint((MAPGRID_WIDTH - size.cx) / 2, MAPGRID_HEIGHT - size.cy));
}

class CCharacter: public CMapSprite {
  public:
	enum	{
		NIMAGES     = 3,
		MOVE_OFS    = 0,
		MOVE_STEP   = 3,
	} ;
	enum	{
		LEFT,
		DOWN,
		RIGHT,
		UP,
	} ;

  public:
	CCharacter(CImage *dib, int x, int y, int d);

	void SetDirection(int dir);	// 设定方向
	void NormalStatus();

	bool operator==(const CCharacter &x);

  public:
	int direction;			// 人物的方向
} ;

inline CCharacter::CCharacter(CImage *dib, int x, int y, int d)
	:CMapSprite(dib, x, y, CSize(dib->Width() / NIMAGES, dib->Height() / 4), d)
{
	direction = UP;
}

inline void CCharacter::SetDirection(int dir)
{
	direction = dir;
	src_pos.y = dir * size.cy;
}

inline void CCharacter::NormalStatus()
{
	src_pos.x = MOVE_OFS * size.cx;
	src_pos.y = direction * size.cy;
}

inline bool CCharacter::operator==(const CCharacter &x)
{
	return (map_point == x.map_point)? true: false;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -