游戏开发之前,我们需要先做一个游戏开发文档,用来描述游戏规则,目标和原理。
规则
- 游戏有时间限制,玩家需要在规定时间到达之前找出所有的牌。
- 玩家每个回合只能翻开两张。
- 纸牌匹配的条件是指牌面一样。
- 如果玩家发现了所有的纸牌,就胜利。
- 如果时间用完,游戏结束。
- 玩家可以在任何时候重置游戏,重新开始游戏。
从上面的游戏流程图里,我们要实现如下:
- 纸牌:游戏的对象。
- 时间:计算用时,可以重置。
- 游戏判断机制:检查是否匹配,是否满足胜利条件。
GameMaker:Studio 2上我们用鼠标点击进行翻转纸牌。当纸牌翻过来后,记下图形用于和第二个纸牌比对。第一个纸牌将显示正面直到点第二个纸牌。翻译成GML的代码就是,我们需要一个obj_card 游戏对象设置两个事件。
- Create:纸牌初始化参数信息
- Left Pressed:写入翻转和选择的代码
首先,我们要有几个纸牌素材,8个纸牌的正面和1个背面。用变量0到7来代码它们。用数组来把变量记录下来。
下面是对数据具体形象的图形描述
一维数组的图形表示
二维数组的图形表示
数组对于信息的整合,有很大的用处。比如,菜单,RPG状态,道具栏等。
在Create事件里添加下面的代码
// Initializing the main properties for a card object index = noone; // the position of the card in the deck type = 0; // associates the card with its sprite (0-7) face = 0; // the face the card is showing (0 = back,1 = front)
这样我们就初始化了纸牌的参数。
然后在Left Pressed事件里填写下面的代码
if (face == 0) { face = 1; } else { face = 0; }
这样每次我们单击这个obj_card对象时,如果纸牌是背面显示,就会翻转到正面,反之亦然。
我们现在有了这个功能,但是还不能看到效果,因为点击后不会更新。我们需要一个step事件。
填写下面的代码到step事件里
///@description show the correct sprite if(face==0) { sprite_index=spr_cardback; } else { switch(type) { case 0: sprite_index=spr_a; break; case 1: sprite_index=spr_2; break; case 2: sprite_index=spr_3; break; case 3: sprite_index=spr_4; break; case 4: sprite_index=spr_5; break; case 5: sprite_index=spr_6; break; case 6: sprite_index=spr_7; break; case 7: sprite_index=spr_8; break; default: break; } }
现在我们有了这个更新的效果。打开room0把这个obj_card拖到里面,修改这个room的大小为600*800。
运行游戏,会默认显示纸牌的背面,如果你点击后,会翻转过来。再次点击,又翻转回去。
这样我们有纸牌可以翻转了,接下是桌子和洗牌的功能。
暂无关于此日志的评论。