设为首页 加入收藏

TOP

(Visual C++)游戏开发笔记十六 讲解一个完整的回合制游戏demo (七)
2014-11-23 19:48:53 】 浏览:1041
Tags:Visual 游戏 开发 笔记 十六 讲解 一个 完整 回合 demo
tOut背景透明


MyPaint(hdc);

return TRUE;
}

//****自定义绘图函数*********************************
// 1.画面贴图与对战消息显示
// 2.怪物行为判断及各项数据处理与计算
void MyPaint(HDC hdc)
{
char str[100];
int i,damage;

//贴上背景图
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,640,510,bufdc,0,0,SRCCOPY);

//显示对战消息



for(i=0;i TextOut(mdc,0,360+i*18,text[i],strlen(text[i]));

//贴上怪物图
if(monster.nHp>0)
{
SelectObject(bufdc,sheep);
BitBlt(mdc,70,180,133,110,bufdc,0,110,SRCAND);
BitBlt(mdc,70,180,133,110,bufdc,0,0,SRCPAINT);
sprintf(str,"%d / %d",monster.nHp,monster.fHp);
TextOut(mdc,100,320,str,strlen(str));
}

//贴上玩家图
if(player.nHp>0)
{
SelectObject(bufdc,girl);
BitBlt(mdc,500,200,60,74,bufdc,pNum*60,74,SRCAND);
BitBlt(mdc,500,200,60,74,bufdc,pNum*60,0,SRCPAINT);
sprintf(str,"%d / %d",player.nHp,player.fHp);
TextOut(mdc,510,320,str,strlen(str));
}

if(over) //贴上游戏结束图画
{
SelectObject(bufdc,game);
BitBlt(mdc,200,200,289,37,bufdc,0,37,SRCAND);
BitBlt(mdc,200,200,289,37,bufdc,0,0,SRCPAINT);
}
else if(!attack) //贴上攻击命令图画
{
SelectObject(bufdc,skill);
BitBlt(mdc,500,350,50,50,bufdc,0,0,SRCCOPY);
SelectObject(bufdc,skillult);
BitBlt(mdc,430,350,50,50,bufdc,0,0,SRCCOPY);
//BitBlt(mdc,500,350,74,30,bufdc,0,30,SRCAND);
//BitBlt(mdc,500,350,74,30,bufdc,0,0,SRCPAINT);
}
else
{
f++;

//第5~10个画面时显示玩家攻击图标
if(f>=5 && f<=10)
{
SelectObject(bufdc,slash);

BitBlt(mdc,100,160,98,162,bufdc,98,0,SRCAND);
BitBlt(mdc,100,160,98,162,bufdc,0,0,SRCPAINT);

//第10个画面时计算怪物受伤害程度并加入显示消息
if(f == 10)
{

if (4==rand()%5) // 20%几率触发幻影刺客的大招,恩赐解脱,4倍暴击伤害
{
damage = 4*(rand()%10 + player.lv*player.w);
monster.nHp -= (int)damage;

sprintf(str,"恩赐解脱触发,这下牛逼了,4倍暴击...对怪物照成了%d点伤害",damage);
}
else
{
damage = rand()%10 + player.lv*player.w;
monster.nHp -= (int)damage;

sprintf(str,"玩家使用了无敌斩,伤害一般般...对怪物照成了%d点伤害",damage);
}



MsgInsert(str);

CheckDie(monster.nHp,false);
}
}

srand(tPre);

//第15个画面时判断怪物进行哪项动作
if(f == 15)
{
if(monster.nHp > 20) //生命值大于20
{
if(rand()%5 != 1) //进行利爪攻击概率4/5
monster.kind = 0;
else //进行闪电链攻击概率1/5
monster.kind = 1;
}
else //生命值小于20
{
switch(rand()%5)
{
case 0: //利爪攻击
monster.kind = 0;
break;
case 1: //释放闪电链
monster.kind = 1;
break;
case 2: //致命一击
monster.kind = 2;
break;
case 3: //使用梅肯斯姆回复
monster.kind = 3;
break;
case 4: //逃跑
monster.kind = 4;
break;
}
}
}

//第26~30个画面时显示玩家攻击图标
if(f>=26 && f<=30)
{
switch(monster.kind)
{
case 0: //利爪攻击
SelectObject(bufdc,slash);
BitBlt(mdc,480,150,98,162,bufdc,98,0,SRCAND);
BitBlt(mdc,480,150,98,162,bufdc,0,0,SRCPAINT);

//第30个画面时计算玩家受伤害程度并加入显示消息
if(f == 30)
{
damage = rand()%10 + monster.lv*monster.w;
player.nHp -= (int)damage;

sprintf(str,"怪物利爪攻击...对玩家照成 %d 点伤害",damage);
MsgInsert(str);

CheckDie(player.nHp,true);
}
break;
case 1: //释放闪电链
SelectObject(bufdc,magic);
BitBlt(mdc,480,190

首页 上一页 4 5 6 7 8 9 下一页 尾页 7/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇vc里实现不规则窗体 下一篇richedit研究04 ? 高效时钟

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目