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

📄 winmain.h

📁 用DirectX编写RPG游戏-Programming.Role.Playing.Games.with.DirectX
💻 H
字号:
#ifndef _WINMAIN_H_
#define _WINMAIN_H_

///////////////////////////////////////////////////////////////////
// Player data
///////////////////////////////////////////////////////////////////
// Maximum # of players allowed to be connected at once
#define MAX_PLAYERS           8

// Player states
#define STATE_IDLE            1 
#define STATE_MOVE            2
#define STATE_SWING           3
#define STATE_HURT            4

typedef struct sPlayer {
  BOOL  Connected;        // TRUE if player connected

  char  Name[256];        // Name of player
  DPNID dpnidPlayer;      // DirectPlay Player ID #

  long  State;            // Last known state (STATE_*)
  long  Time;             // Time of last state update
  long  Latency;          // Half of round trip latency in ms

  float XPos, YPos, ZPos; // Player coordinates
  float Direction;        // Angle facing
  float Speed;            // Movement speed

  // Constructor
  sPlayer() { Connected = FALSE; Latency = 0; }
} sPlayer;

///////////////////////////////////////////////////////////////////
// Network message data
///////////////////////////////////////////////////////////////////
// # of messages to process per frame
#define MESSAGES_PER_FRAME   64

// # of message to allocate for message queue
#define NUM_MESSAGES       1024

// Types of messages
#define MSG_CREATE_PLAYER     1
#define MSG_PLAYER_INFO       2
#define MSG_DESTROY_PLAYER    3
#define MSG_STATE_CHANGE      4
#define MSG_ASSIGNID        256

// The message header structure used in all messages
typedef struct {
  long  Type;             // Type of message (MSG_*)
  long  Size;             // Size of data to send
  DPNID PlayerID;         // Player performing action
} sMessageHeader;

// The message queue message structure
typedef struct {
  sMessageHeader Header;  // Message header

  char Data[512];         // Message data
} sMessage;

// Request a player DPNID from server message
typedef struct {
  sMessageHeader Header;  // Message header
} sAssignPlayerIDMessage;

// Create a player message
typedef struct {
  sMessageHeader Header;  // Message header

  float XPos, YPos, ZPos; // Create player coordinates
  float Direction;        // Direction of player
} sCreatePlayerMessage;

// Request player information message
typedef struct {
  sMessageHeader Header;  // Message header

  DPNID PlayerID;         // Which player to request
} sRequestPlayerInfoMessage;

// Destroy a player message
typedef struct {
  sMessageHeader Header;  // Message header
} sDestroyPlayerMessage;

// Change in state message
typedef struct {
  sMessageHeader Header;  // Message header

  long  State;            // State message (STATE_*)
  float XPos, YPos, ZPos; // Player coordinates
  float Direction;        // Player facing direction
  float Speed;            // Walking speed of player

  long  Latency;          // Latency value of connection
} sStateChangeMessage;

///////////////////////////////////////////////////////////////////
// Server class definition
///////////////////////////////////////////////////////////////////
class cServer : public cNetworkServer
{
  private:
    BOOL CreatePlayer(DPNMSG_CREATE_PLAYER *Msg);
    BOOL DestroyPlayer(DPNMSG_DESTROY_PLAYER *Msg);
    BOOL Receive(DPNMSG_RECEIVE *Msg);
};

///////////////////////////////////////////////////////////////////
// Application class definition
///////////////////////////////////////////////////////////////////
class cApp : public cApplication
{
  private:
    HWND             m_Controls[3];  // The app window handles

    CRITICAL_SECTION m_UpdateCS;     // Critical sections
    CRITICAL_SECTION m_MessageCS;

    GUID            *m_guidAdapter;  // Adapter used to connect
    cNetworkAdapter  m_Adapters;     // List of adapters
    cServer          m_Server;       // Derived server class

    cGraphics        m_Graphics;     // Graphics Core interface
    cMesh            m_LevelMesh;    // Mesh of world

    long             m_NumPlayers;   // # players connected
    sPlayer         *m_Players;      // Player data

    sMessage        *m_Messages;     // Message queue
    long             m_MsgHead;      // Head of message list
    long             m_MsgTail;      // Tail of message list
    
    BOOL SelectAdapter();            // Select network adapter
    void SetupApplicationWindow();   // Set application window
    BOOL InitializeGame();           // Initialize game
    BOOL HostGame();                 // Begin hosting game

    void ListPlayers();              // List connected players

    void ProcessQueuedMessages();    // Process waiting messages
    void UpdatePlayers();            // Move all players
    void UpdateNetwork();            // Send updates to players
    void UpdateLatency();            // Update latency values

    // Send a network message to client(s)
    BOOL SendNetworkMessage(void *Msg, long SendFlags = 0,    \
                            int To = -1);

    //  Functions to process queued network messages
    BOOL QueueMessage(void *Msg);  
    BOOL PlayerID(sMessage *Msg, DPNID To);
    BOOL PlayerInfo(sMessage *Msg, DPNID To);
    BOOL AddPlayer(sMessage *Msg);
    BOOL RemovePlayer(sMessage *Msg);
    BOOL PlayerStateChange(sMessage *Msg);

    // Check if player collides with level mesh
    BOOL CheckIntersect(cMesh *Mesh,                          \
                 float XStart, float YStart, float ZStart,    \
                 float XEnd,   float YEnd,   float ZEnd);

  public:
    // Overloaded class functions
    cApp();

    BOOL Init();
    BOOL Shutdown();
    BOOL Frame();
    FAR PASCAL MsgProc(HWND hWnd, UINT uMsg,                  \
                       WPARAM wParam, LPARAM lParam);

    void SetAdapter(GUID *Adapter); // Select adapter GUID

    // Functions to siphon network messages to application
    BOOL CreatePlayer(DPNMSG_CREATE_PLAYER *Msg);
    BOOL DestroyPlayer(DPNMSG_DESTROY_PLAYER *Msg);
    BOOL Receive(DPNMSG_RECEIVE *Msg);
};

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev,          \
                   LPSTR szCmdLine, int nCmdShow);
BOOL CALLBACK ConfigDialogProc(HWND hWnd, UINT uMsg,          \
                               WPARAM wParam, LPARAM lParam);

#endif

⌨️ 快捷键说明

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