记忆纸牌

来源:互联网 发布:免费相册集制作软件 编辑:程序博客网 时间:2024/04/27 13:52

写在最前面:

自学了两个月unity3D,今天自己闲来无事做了这么一个游戏,拿上来和大家分享下。就实现了最基础的玩法,萌新请轻喷。 = =。

一、功能介绍

1.1场景切换

我们的场景分为3个,一个开始场景,主要负责向其他场景的调转以及游戏的退出。另一个是游戏场景,是游戏的主体部分,实现娱乐功能。还一个是帮助场景,玩家可以在此查看游戏玩法。



T1开始场景



T2游戏场景



T3帮助场景

1.2游戏场景布置

整个游戏场景中分为三个部分,分别为:16个Button、2个Text、16张image、8张Sprite。

1)按钮的功能主要接收玩家的点击,显示下层纸牌,计数,传递匹配名。按钮将以纸牌背面显示。

2)文本的功能是实时显示倒计时以及玩家得分。

3))图片的功能是渲染纸牌,它将以纸牌正面显示。

1.3洗牌

每次游戏纸牌排布循序都将不同,增加游戏的不确定性和可玩性。

1.4点击三次匹配

当玩家翻开三张不同的扑克时,游戏将会自动检查前两张是否匹配,匹配则加分并且消除纸牌;不匹配则将前两张纸牌重新置反。

1.5匹配以及消除

游戏判断纸牌是否为相同的纸牌。将纸牌从游戏场景中消除


1.6总分

弹出游戏面板,并且显示玩家的总分。


二、 实现

2.1场景切换

给每个场景添加按钮,在场景跳转的按钮上添加脚本。使用SceneManager.LoadScene(“string”)  函数可以通过修改string参数实现向不同场景的跳转。

2.2游戏场景布置

1)设置按钮、图片为预制体并用两个数组分别参访。通过排布预制体的方法可以快速布局游戏场景。同时调节按钮的图层高于图片,用于最先显示按钮。


T4


T5

2)设置按钮的source image将按钮的显示图片改为纸牌背面。同时,给按钮添加点击事件:向GameManager脚本传入图片名字和对应按钮,并且把按钮设为不可见、不可点击。


3)使用InvokeRepeating()函数实现每秒减一的功能,并且修改时间的文本,以更新时间。


4)16张图片的作用是渲染纸牌,它将以纸牌正面显示。纸牌由8张sprite用作纸牌正面。修改图片的source image使图片渲染纸牌。渲染纸牌正面所用到的图片用一个数组来存放。


T6

2.3洗牌

首先设置两个数组,一个存放0~15的正序数,另一个存放打乱后的数字作为T5数组渲染T6图片的index.

具体通过使用Random.Range(),函数实现随机取数,然后将取到的数存放到第二个数组中并remove()第一组中相应的内容。


2.4点击三次匹配

首先设置一个showing变量每次点击纸牌时加一,当加到3的时候调用匹配函数。并且重新置1。值得一提的是,在最后一次匹配时判断依据变为匹配数满14并且showing变量为2。其中匹配数为一个整形变量,每成功匹配一对,加二。


2.5匹配和消除

给每个按钮设置对应0~15的标签,用于确定点击的按钮在数组中的位置。通过这个位置访问T6相应位置上图片的名字。每次点击纸牌都将传出对应的名字,并在游戏主脚本中设置一个集合接收。通过比较集合中前两个元素来检查是否匹配。如果匹配成功就将传值的按钮可见性通过GetComponent<>().enable设置为false。并且把被渲染的图片也设置为false。然后再把接收名字和按钮的集合清空。


如果匹配不成过,那么重新把就收到的按钮设为可点击,并且把按钮设为可见,把底层图片设为不可见。


2.7总分

设置一个Panel,并且一开始设为不可见,当倒计时为0时,调节为可见。在Panel上添加得分文本、重来和返回菜单的按钮。

得分文本通过访问游戏的得分数据来显示。给按钮添加场景跳转功能。

原创粉丝点击