【游戏开发】简易实现回合制游戏

//Windows窗口头文件
#include <windows.h>

//使用swprintf_s函数所需的头文件
#include <tchar.h>

//使用获取系统时间time()函数需要包含的头文件
#include  <time.h> 

//PlaySound函数所需库文件
#pragma comment(lib,"winmm.lib")	

//TransparentBlt函数所需的库文件
#pragma  comment(lib,"Msimg32.lib")		

//窗口宽度
#define WINDOW_WIDTH	800	

//窗口高度
#define WINDOW_HEIGHT	600						

//窗口标题
#define WINDOW_TITLE		L"【游戏开发】简易实现回合制游戏"

//粒子数量
#define PARTICLE_NUMBER	50			

//角色结构体
struct CHARACTER  
{
	//当前生命值
	int		NowHp;	

	//最大生命值
	int		MaxHp;		

	//当前魔法值
	int		NowMp;	

	//最大魔法值
	int		MaxMp;	

	//角色等级
	int		Level;	

	//角色力量值
	int		Strength;

	//角色智力值
	int		Intelligence; 

	//角色敏捷值
	int		Agility;		
};

//雪花粒子结构体
struct SNOW
{
	//雪花的X坐标 
	int x; 

	//雪花的Y坐标
	int y; 

	//雪花是否存在
	BOOL exist;  
};


//动作枚举体
enum ActionTypes
{
	//普通攻击
	ACTION_TYPE_NORMAL=0,	

	//致命一击
	ACTION_TYPE_CRITICAL=1,	

	//魔法攻击
	ACTION_TYPE_MAGIC=2,	

	//攻击落空
	ACTION_TYPE_MISS=3,	

	//释放恢复魔法
	ACTION_TYPE_RECOVER=4,	
};

//全局环境设备,全局内存设备,全局缓存设备
HDC				g_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      

//上一次绘图时间,当前绘图时间
DWORD		g_tPre=0,g_tNow=0;		

//储存窗口区域坐标
RECT				g_rect;				

//帧数,文字数量
int					g_iFrameNum,g_iTxtNum;  

//存储输出文字
wchar_t			text[8][100];  

//状态标志:角色是否可以攻击,游戏是否结束
BOOL			g_bCanAttack,g_bGameOver;   

//雪花粒子
SNOW			SnowFlowers[PARTICLE_NUMBER];  

//雪花的数量
int					g_SnowNum=0; 

//角色:英雄,BOSS
CHARACTER	Hero,Boss;  

//动作:英雄动作,BOSS动作
ActionTypes	HeroActionType,BossActionType; 

//背景,游戏结束,游戏胜利,雪花
HBITMAP		g_hBackGround,g_hGameOver,g_hVictory,g_hSnow; 

//BOSS角色图,英雄角色图,恢复技能图的位图句柄
HBITMAP		g_hMonsterBitmap,g_hHeroBitmap,g_hRecoverSkill; 

//4个技能按钮
HBITMAP		g_hSkillButton1,g_hSkillButton2,g_hSkillButton3,g_hSkillButton4; 

//3个英雄技能效果
HBITMAP		g_hHeroSkill1,g_hHeroSkill2,g_hHeroSkill3; 

//3个BOSS技能效果
HBITMAP		g_hBossSkill1,g_hBossSkill2,g_hBossSkill3;  

//窗口过程函数
LRESULT CALLBACK	WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );

//初始化资源
BOOL						Game_Init(HWND hwnd);			

//绘图
VOID							Game_Main( HWND hwnd);		

//清理资源
BOOL						Game_ShutDown(HWND hwnd );	

//死亡检查
VOID							Die_Check(int NowHp,bool isHero);   

//文字消息处理
VOID							Message_Insert(wchar_t* str);  

//英雄动作逻辑
VOID							HeroAction_Logic(); 

//英雄动作绘图
VOID							HeroAction_Paint();  

//怪物动作逻辑
VOID							BossAction_Logic(); 

//怪物动作绘图
VOID							BossAction_Paint(); 

//雪花粒子
VOID							Snow_Paint();

//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
	//定义窗口类
	WNDCLASSEX wndClass = { 0 };					

	//结构体的字节数大小
	wndClass.cbSize = sizeof( WNDCLASSEX ) ;	

	//设置窗口的样式
	wndClass.style = CS_HREDRAW | CS_VREDRAW;	

	//设置指向窗口过程函数的指针
	wndClass.lpfnWndProc = WndProc;				

	//窗口类的附加内存,取0就可以了
	wndClass.cbClsExtra		= 0;			

	//窗口的附加内存,依然取0就行了
	wndClass.cbWndExtra		= 0;			

	//指定包含窗口过程的程序的实例句柄
	wndClass.hInstance = hInstance;					

	//图标
	wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  

	//光标
	wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    

	//为hbrBackground成员指定一个白色画刷句柄	
	wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  

	//菜单资源的名字
	wndClass.lpszMenuName = NULL;						

	//窗口类的名字
	wndClass.lpszClassName = L"ForTheDreamOfGameDevelop";	

	//注册窗口类
	if( !RegisterClassEx( &wndClass ) )				
		return -1;		

	//创建窗口
	HWND hwnd = CreateWindow( L"ForTheDreamOfGameDevelop",WINDOW_TITLE,				
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,
		WINDOW_HEIGHT, NULL, NULL, hInstance, NULL );

	//移动窗口到(250,80)处
	MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);	

	//显示窗口
	ShowWindow( hwnd, nShowCmd );    

	//更新窗口
	UpdateWindow(hwnd);						

	//游戏资源的初始化,若初始化失败,弹出一个消息框,并返回FALSE
	if (!Game_Init (hwnd)) 
	{
		//使用MessageBox函数,创建一个消息窗口
		MessageBox(hwnd, L"资源初始化失败", L"消息窗口", 0); 
		return FALSE;
	}

	//循环播放背景音乐 
	PlaySound(L"GameMedia\\徐鲤 - 大理1.wav", NULL, SND_FILENAME 
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值