一、设计目标
1.建立一个回合制游戏,角色设定怪物与玩家,并在下方显示它们的生命值;
2.在背景图上贴上攻击标志,鼠标点击该标志时,玩家向怪物发动 攻击,并在左下角输出怪物的状态信息;
3.玩家回合结束后,轮到怪物,根据怪物的HP来决定要选择哪种攻击方式或者逃跑或重伤而死;
4.当某一方HP为0时,贴上游戏结束标志;
二、基本思路
1.初始化过程中,将背景图、怪物及其HP、玩家及其HP、攻击标志贴到mdc,最后在贴到hdc;
2.单击左键,WndProc函数处理该消息,获取光标位置判断是否在攻击标志范围内,有就将attack设为true;
3.接着回到MyPaint函数,玩家开始攻击,用f来表示贴图的次数,将攻击图像贴在怪物身上持续6个画面,然后f更新到第10个画
面时,降低怪物的HP,并把伤害输出到左下角的文本框,并检查怪物的状态;
4.当f更新到第15个画面时,这次是怪物的回合,设定若怪物HP>20,有90%几率发动普通攻击,10%的几率发动魔法攻击,HP
低于20就有5种情况:普攻、魔攻、全力攻、回血、逃跑,各有20%几率;
5.f更新到26个画面时,根据怪物的选择进行贴图,持续5个画面,当f更新到30时,减少玩家的HP并输出其状态到左下角,或者
因血量太低逃跑或死亡;
6.一个回合结束,f重新设为0,等待下一回合,直到over=true,触发游戏结束标志;
三、效果
四、代码如下
#include "stdafx.h"
#include <stdio.h>
//结构体:储存怪物或玩家的状态信息
struct chr
{
int nHp;//目前生命值
int fHp;//最大生命值
int lv;//等级
int w;//加权值
int kind;//怪物的行为代号
};
//声明全局变量
HINSTANCE hInst;
HBITMAP bg,sheep,girl,skill,slash,magic,recover,game;//skill--攻击命令图;slash--普通攻击图;magic--怪物魔法攻击图;recover--怪物恢复魔法图;game--游戏结束图
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
int pNum,f,txtNum;//pNum--玩家跑动图编号;f--每一回合攻击更新的画面数;TxtNum--记录目前所要显示消息的总数
bool attack,over;//attack记录玩家是否点击攻击命令;over一方生命值为0时,设为true
chr player,monster;
char text[5][100];//存储对战时要显示的消息
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc);
void MsgInsert(char*);//****新增要显示的消息到‘text’缓冲区,当显示的消息数目达到显示的上限数目时,删除最先的消息********************************