//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
【游戏开发】简易实现回合制游戏
最新推荐文章于 2024-06-24 09:49:05 发布
本文介绍了如何简易实现一款回合制游戏,从游戏逻辑到交互设计,涵盖了游戏规则设定、角色行动顺序、状态管理等方面,适合初级游戏开发者入门学习。
摘要由CSDN通过智能技术生成