闲来无事用VC++写一个小游戏,消灭星星【连载七】

闲来无事用VC++写一个小游戏,消灭星星【连载七】

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

1、本节要达到的效果:上一节,我们介绍了游戏层的概念,极大增加了游戏控制的便利性。本节课我们将通过定时器来实现一些简单的动画效果。实现的动画效果为:当点击开始游戏按键后,开始游戏按键会闪烁几秒后进入游戏页面,我们今天要实现的就是这个按键闪烁动画。

在这里插入图片描述

2、添加动画定时器

为什么要添加定时器呢?我们前边讲过让图片跟随鼠标移动产生类似动画的效果,但是这时图片的移动依赖于用户鼠标的移动,鼠标动图片动,鼠标不动图片不动。

在这里插入图片描述

而我们现在需要一个随时间变化自动进行动画显示的方式,而不仅仅是随鼠标操作来显示的动画方式。Windows系统提供了一个WM_TIMER消息处理机制。在编程时,我们会经常使用定时器去实现一些自动运行的功能。使用定时器的方法比较简单,只需要通过SetTimer即可,函数告诉Windows你需要自动运行操作的时间间隔,然后Windows就会以此时间间隔周期性发送WM_TIMER消息。我们只需要在系统消息处理函数WndProc的WM_TIMER消息中操作动画显示效果就行了。

3、添加定时器

第一步:初始化定时器

在程序创建时设置定时器,我们使用SetTimer函数添加定时器,SetTimer函数只用在程序中添加一次。SetTimer函数的第2各参数0表示定时器的编号(一个程序可以有多个定时器,可以用定时器编号进行区分),第3个参数表示时间间隔,单位以毫秒计算,这里我们采用的时间间隔为30毫秒,就是说系统将每隔30毫秒发送一次WM_TIMER消息,理论上每秒执行33次。

	case WM_CREATE:

		......

		//添加定时器

		SetTimer(hWnd,0,30,NULL);

		......

第二步:在系统消息处理函数WndProc中添加WM_TIMER处理

我们现在就可以在系统消息处理函数WndProc中添加WM_TIMER处理,同时添加上管理层Layer层的OnTimer消息处理,以后我们就可以直接在各个类实例中运行各自OnTimer消息处理函数了。我们在这里加上页面刷新消息,这样页面就能不间断的进行刷新,实时显示所有动画效果了。

	case WM_TIMER:	

		//层中所有实例的鼠标移动消息

		Layers.OnTimer(hWnd,message,wParam,lParam);

		//当鼠标移动式刷新窗口内容

		InvalidateRect(hWnd,NULL,false);			

		return 0;

添加以上代码后,我们后期就可以直接在各个类实例中运行各自OnTimer消息处理函数了。后期如果添加了多个定时器,还可以从OnTimer函数参数中获取定时器的编号,以便来区分是要处理哪个定时器的操作。

4、添加按键动画

按键的动画效果我们这里采用不断切换显示按键高亮图片和非高亮图片的方式呈现。我们需要用一个计数器来控制,需要给游戏开始按键(StartGameButton)添加一个整型变量。


class StartGameButton:public Button
{
   

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值