消灭星星游戏程序设计【连载八】——爆炸散开效果的小星星

消灭星星游戏程序设计【连载八】——爆炸散开效果的小星星

大家每次都可以在页面中下载本节内容的实现代码,一步一步从简单开始,逐步完成游戏的各种功能,如果大家有任何问题也欢迎留言交流。

游戏整体效果展示:

在这里插入图片描述

1、本节要达到的效果:上一节我们在游戏按键中加入了动画效果,本节我们将添加会移动的小星星,在空中像烟花一样产生爆炸效果,小星星还可以自由落体式的掉下来。

在这里插入图片描述

2、添加物体的移动属性

这里我们需要给所有的物体都加上移动的属性,所以需要给Object类添加上位置、速度和加速的属性。我们可以让Object类派生出来的所有类移动,比如可以让按键移动,可以让窗口移动,可以让得分数字移动,也可以让通关图片移动,总之所有的派生类都可以移动。

第一、位置

我们用Area的ax和bx表示物体的位置信息,前边已经添加过来,我们直接拿来使用就可以了,当前物体的位置信息就为点(Area.ax,Area.ay)的位置。

在这里插入图片描述

第二、速度和加速度

接下来我们需要给Object类添加上速度变量和加速度变量,速度又包括x轴速度和y轴速度,加速度也分为x轴加速度和y轴加速度。

class Object  
{
   

	......
	
public:

	//速度分量

	float		SpeedX;

	float		SpeedY;

	//加速度分量

	float		AccelX;

	float		AccelY;

	//根据指定速度和需要移动的目标位置确定SpeedX分量和SpeedY分量

	void		GetSpeedByTargetPoint(float tempSpeedValue,float targetX,float targetY);

	......
	
};

第三、移动

当我们在自动运行消息函数中加入以下代码后,物体就能根据设置的速度和加速度进行移动了。

void	Object::OnTimer(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
   

	//根据加速度计算新的速度

	SpeedX+=AccelX;
	
	SpeedY+=AccelY;

	//根据速度计算并设置新的位置信息

	Area.MoveTo(Area.ax+SpeedX,Area.ay+SpeedY);

}

物体的运动,可以理解为物品在二维空间中坐标的改变;位置的改变会受到速度的影响;速度的改变又会受到加速度的改变。举个例子:A物体SpeedX为1,SpeedY为0,加速度均为0,则物体会一直向右水平匀速移动。B物体SpeedX为-1,SpeedY为0.5,加速度均为0,则B物体会匀速向左下角移动。C物SpeedX为1,SpeedY为-1,AccelX为0,AccelY为0.3,则物体会向右上抛起,随后按抛物线落下。

在这里插入图片描述

也就是说,只要给不同的物体设定不同的速度和加速度,物体就可以按照自然规律进行移动,做出匀速前进,加速前进,减速前进,抛物线运动等各种效果。

为了后期操作方便,我们这里添加了一个GetSpeedByTargetPoint函数,用于在指定速度(tempSpeedValue)和目标位置点坐标(targetX,targetY)的情况下,计算并确定SpeedX分量和SpeedY分量的值,使得物体可以获取一个能够项目标点移动的速度值。

//根据指定速度和需要移动的目标位置确定SpeedX分量和SpeedY分量

void	Object::GetSpeedByTargetPoint(float tempSpeedValue,float targetX,float targetY)
{
   

	//记录当前位置

	float posX=Area.ax;

	float posY=Area.ay;

	//获取当前位置和目标位置的距离

	float distance=(float)sqrt(pow(targetX-posX,2)+pow(targetY-posY,2));

	//根据给定的速度值和目标位置计算出对应

	if(distance!=0)
	{
   

		SpeedX=(targetX-posX)*tempSpeedValue/distance;

		SpeedY=(targetY-posY)*tempSpeedValue/distance;

	}

}

3、添加会移动的小星星

我们这里给小星星一个爆炸散开,并自由落下的效果。其实就是给小行星一个任意方向上的初始速度(炸开效果),并加一个垂直向下的加速度(抛物线下落)。

//存储位图信息,图片会多次公用,因此加载为全局变量

HBITMAP		hSmallStar=(HBITMAP)LoadImage(NULL,"Image/SmallStar.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

//小星星类

class SmallStar:public Object
{
   

public:

	//标记是否有效

	bool		tagValid;

	//位
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 我会用Java语言编写一个简单的扑克游戏,包括玩家与电脑之间的游戏,玩家可以从一副牌中选择5张卡牌,电脑也会从一副牌中选择5张卡牌,然后比较双方的牌权,最终确定胜负。首先,我会定义一个类,用于表示一张扑克牌,其中包括花色和点数。然后,我会定义一个方法,用于创建一副扑克牌,其中包括52张牌,每种花色13张牌。最后,我会定义一个函数,用于比较双方的牌,以确定胜负。 ### 回答2: 作为程序员,我可以使用Java编写一个简单的扑克游戏。 首先,我会创建一个名为Card的类来表示一张扑克牌,其中包含花色和点数两个属性。然后,我会创建一个名为Deck的类来表示一副扑克牌,其中包含一个Card类型的数组来存储所有的牌。在Deck类中,我会实现初始化一副牌、洗牌和抽牌等方法。 接下来,我会创建一个名为Player的类来表示一个玩家,其中包含一个ArrayList来存储该玩家手中的牌。在Player类中,我会实现抽牌、出牌和计算手牌点数等方法。 然后,我会创建一个名为Game的类来表示整个游戏过程。在Game类中,我会创建两个玩家对象和一副扑克牌对象,并实现发牌、判断胜负和游戏结束等方法。 最后,我会创建一个名为Main的类作为程序的入口,用于初始化游戏和调用相关方法来进行游戏的进行。 以上就是用Java编写一个简单的扑克游戏的基本思路。当然,根据游戏的复杂程度和具体要求,还可以对代码进行更多的优化和功能的扩展。 ### 回答3: 作为程序员,我会使用Java语言来编写一个简单的扑克游戏。 首先,我会创建一个包含所有扑克牌的牌组,共计52张牌。每张牌有一个花色(黑桃、红心、方块、梅花)和一个点数(A、2-10、J、Q、K)。 然后,我会在游戏开始时洗牌,即将牌组中的所有牌打乱顺序。这可以通过随机交换牌组中的牌来实现。 接下来,我会定义两名玩家,一名玩家(玩家1)作为庄家,另一名玩家(玩家2)作为闲家。每名玩家会依次发两张牌。 游戏开始后,闲家可以选择要不要继续抽牌,直到他认为自己的牌足够接近21点,或者超过了21点(爆牌)。庄家则必须按照一定的规则来决定是否继续抽牌,例如当他的手牌点数小于17时必须继续抽牌。 然后,根据玩家手牌点数的大小来决定胜负。点数最接近21点且不超过的一方获胜。如果双方点数相同,则为平局。 最后,根据玩家的选择和游戏结果显示相应的信息,例如显示每位玩家的手牌、点数,以及谁赢谁输或者平局。 通过以上步骤,我会完成一个简单的扑克游戏编写。当然,还有很多细节可以完善和优化,例如加入更多的游戏规则、实现游戏的GUI界面等。这只是一个简单的示例,供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhooyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值