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

📄 game.h

📁 泡泡堂单机版源码 内容: 模拟泡泡堂的一个小作品
💻 H
字号:
#pragma once

#include <stdio.h>
#include <list>
#include "draw.h"
#include "input.h"
#include "sound.h"

using	namespace std;

#define		WAY_UP			1			//	运动的方向
#define		WAY_DOWN		0
#define		WAY_LEFT		3
#define		WAY_RIGHT		2

#define		STATUS_FREE		0			//	玩家的状态
#define		STATUS_MOVE		1
#define		STATUS_DIED		2
#define		STATUS_DELAY	3

#define		CAN_BLOCK		0			//	玩家可执行的动作
#define		CAN_MOVE		1
#define		CAN_PUSH		2
#define		CAN_KICK		3

#define		TYPE_NULL		0			//	玩家的身份标识
#define		TYPE_USER		1
#define		TYPE_USEROTHER	2
#define		TYPE_COMPUTER	3

#define		MaxVertexNum	13*15
#define		PLAYER_NUM		8
#define		INFINITY		1000		//	大于13*15即可

#define		SoundEffectNum	9			//	音效个数

#define		START			0			//	音效的编号
#define		WIN				1
#define		DEUCE			2
#define		LOST			3
#define		LAY				4
#define		DETONATION		5
#define		APPEAR			6
#define		GET				7
#define		DIE				8

#define		GAME_FREE		0
#define		GAME_START		1
#define		GAME_WIN		2
#define		GAME_DEUCE		3
#define		GAME_LOST		4

#define		DISPLAYCOUNTER	300

struct PLAYER
{
	int		x;			//	x坐标(以像素为单位)
	int		y;			//	y坐标(以像素为单位)
	int		way;		//	主角方向
	int		bomb;		//	炸弹数
	bool	kick;		//	能踢泡泡
	bool	cast;		//	投掷、扔泡泡
	bool	pin;		//	救命针
	int		speed;		//	速度(像素/帧,取值范围 1 -- 10)
	int		step;		//	步长
	int		frame;		//	动画贞数
	int		counter;	//	计数器
	int		status;		//	状态
	int		power;		//	泡泡的威力
	int		type;		//	主角类型
	int		presswaykey;//	连续按住方向键计数(因为推箱子或是踢泡泡需要一段时间)
	int		image;		//	图像编号
};

struct ITEM
{
	int	type;			//	物体的类型
	int	status;			//	当前的状态,针对不同的物体,有不同的解释
	int	xoffset;		//	针对箱子表示x偏移,针对爆炸效果表示爆炸效果当前的长度
	int	yoffset;		//	针对箱子表示y偏移
	int	way;			//	移动时的方向(针对箱子)
	int	counter;		//	计数器(针对箱子)
	int	move;			//	是否移动(针对箱子)
	int	tag;			//	附属品
	int	who;			//	此泡泡是谁摆放的
};

struct	MOVEBOMB
{
	int	x;				//	x坐标(以像素为单位)
	int	y;				//	y坐标(以像素为单位)
	int	way;			//	运动方向
	int	mode;			//	0:踢,1:扔
	int	tox;			//	目标点x坐标,如果是踢的话则此参数无意义,扔的话则事先算好目标点当落下时如果发现有东西,则再算一次
	int	toy;			//	目标点y坐标
	int	counter;		//	计数器
	int	offset;			//	扔泡泡的时候y方向上的偏移
	int	power;			//	威力
	bool	addorsub;	//	控制偏移量增加或是减少,true表示增加
	int	who;			//	此泡泡是谁摆放的
};

class CGame
{
public:
	CGame(void);
	~CGame(void);
	bool		Create(HWND	hWnd, HINSTANCE hInstance);
	HRESULT		Run();
	HRESULT		ChangeDisplayMode( BOOL bWindowed );
	HRESULT		RestoreSurfaces();
	void		ResetMapInfor();

	void		DoInput();					//	处理玩家输入
	void		DoMove();					//	处理角色移动
	void		DoKick();					//	处理踢泡泡
	void		DoCast();					//	处理扔泡泡
	void		DoProperty();				//	处理道具
	void		DoKill();					//	判断对方是否已被炸,若是,则经过时可立刻杀死对方

	void		SetBlast(int i,int j);

	bool		FindPropertyForGet(int PlayerIndex);		//	查看道具的位置,若找到则去吃
	bool		FindAdversaryForAttack(int PlayerIndex);	//	查找对手的位置,找到后去攻击
	bool		FindTeammateForRescue(int PlayerIndex);		//	查找需要营救的队友的位置
	bool		FindSafety(int PlayerIndex);				//	查找一个安全的位置,找到后去躲藏
	bool		FindLay(int PlayerIndex);					//	查找一个放置炸弹的位置(能炸对手就炸对手,否则炸物体,以便得到道具)
	bool		FindAddress(int PlayerIndex,int s);			//	查找一个放置

	int			GetDestroyNumber(int PlayerIndex,int x,int y);	//	得到某个玩家在(x,y)处方下炸弹可以摧毁的物体数目
	bool		IsDangerous(int player_x,int player_y);			//	检查当前是否有危险(输入参数为玩家的坐标)
	bool		IsRescue();									//	检查现在是否要救人

	void		SetGraph(int PlayerIndex);					//	设置图
	void		Dijkstra(int G[MaxVertexNum][MaxVertexNum], int D[MaxVertexNum], int P[MaxVertexNum],int s);	//	迪杰斯特拉算法

	HWND		m_hWnd;
	BOOL		m_bWindowed;

	CDraw*		m_pDraw;
	CSurface*	m_pSurface;
	CSurface*	m_pSurfacePlayer;
	CSurface*	m_pSurfaceWord;

	CInput*		m_pInput;

	CSound*		m_pSound;
	CWavMidi*	m_pSoundEffect[SoundEffectNum];
	CMP3*		m_pBackgroundMusic;

	PLAYER		m_Player[PLAYER_NUM];		//	存放所有玩家信息

	bool		m_PlayerLay[PLAYER_NUM];	//	是否放炸弹
	int			m_LayX[PLAYER_NUM];			//	炸弹摆放位置x
	int			m_LayY[PLAYER_NUM];			//	炸弹摆放位置y
	int			m_Delay[PLAYER_NUM];		//	躲避危险的延时时间

	int			m_GameState;
	int			m_GameCounter;

	ITEM		m_ScreenItem[13][15];		//	存放背景信息
	list<MOVEBOMB>	m_bombKick;				//	存放踢出来的泡泡信息
	list<MOVEBOMB>	m_bombCast;				//	存放扔出来的泡泡信息

	int			m_Graph[MaxVertexNum][MaxVertexNum];	//	图的邻接矩阵,此处用二维数组表示
	int			m_Distance[MaxVertexNum];				//	源点到其它各顶点的最短距离
	int			m_Path[MaxVertexNum];					//	源点到其它各顶点的最短路径

	BOOL		m_bHelp;
	DWORD		m_timeNew;
	DWORD		m_timeOld;
	DWORD		m_counter;
	float		m_fps;
	POINT		m_CursorPos;			//	鼠标坐标
	int			test;					//	must delete!
};

⌨️ 快捷键说明

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