卡牌2D游戏展示
(游戏代码放到 卡牌04_游戏界面 文章最后面~)
游戏项目已托管到github上(里面有个32bit可执行文件) 传送门
规则
开始游戏每张卡牌初始翻开展示 展示几秒后卡牌扣下。
点击第一个卡牌,翻开、记录。 点击第二个卡牌, 如果不匹配,等待1秒后两个都重置为扣下 如果匹配,则变暗,禁止再次点击 所有卡牌成功配对
右上角显示时钟倒计时 时间结束,游戏失败
不同主题关卡不同,远不止15关~
启动屏
主菜单界面选择主题,不同主题对应不同图片素材。点击后进入选关界面
选关界面
鼠标进入某个具体关卡按钮上,底下对应显示这个关卡的描述信息
当关卡很多时,通过滑动屏幕,来切换多页显示
游戏界面
随机生成偶数对图片。两两配对
全部配对成功,游戏结束
核心算法:先后翻开两张卡牌,判断两个卡牌id相同即可
时间计时。剩余时间越多在关卡中标识星星越多(-3个)
数据结构设计
每个关卡在指定图片素材中随机、在全体图片素材中随机
记录的保存
记录最高的关卡编号。只有通过当前关卡才解锁下一关卡
每关根据完成比赛时间长短,显示不同的星级。
游戏整体分析
卡牌01_启动屏界面 传送门
卡牌02_主菜单界面 传送门
卡牌03_选关界面 传送门
卡牌04_游戏界面 传送门
启动屏界面
5s后start场景跳转到MainMenu场景
(0.5s闪烁一次!)
点击start场景(按任意键),从start场景跳转到MainMenu场景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; public class Scene_Start : MonoBehaviour { float _timer;
GameObject anyKeyObj; // Use this for initialization
void Start () {
_timer = ;
anyKeyObj = GameObject.Find("anykeyTxt");
} // Update is called once per frame
void Update () { _timer += Time.deltaTime; if (_timer % 0.5f > 0.25f)
{
anyKeyObj.SetActive(true);
}
else
{
anyKeyObj.SetActive(false);
} if (_timer>||Input.anyKeyDown)
{
GoToMainMenu();
}
} void GoToMainMenu()
{
SceneManager.LoadScene("MainMenu");
}
}
Scene_Start.cs
实现过程
创建四个场景,并保存到工程项目中
创建游戏屏幕分辨率
Canvas的分辨率及多屏幕适配
添加background(Image)、logo(Image)、name(text)、anykeyTxt(txt)
创建一个空对象,挂载脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; public class Scene_Start : MonoBehaviour { float _timer;
GameObject anyKeyObj; // Use this for initialization
void Start () {
_timer = ;
anyKeyObj = GameObject.Find("anykeyTxt");
} // Update is called once per frame
void Update () { _timer += Time.deltaTime; if (_timer % 0.5f > 0.25f)
{
anyKeyObj.SetActive(true);
}
else
{
anyKeyObj.SetActive(false);
} if (_timer>||Input.anyKeyDown)
{
//任意键按下,则直接跳转主菜单场景
GoToMainMenu();
}
} void GoToMainMenu()
{
SceneManager.LoadScene("MainMenu");
}
}
Scene_Start.cs
anykeyTxt文字闪烁效果
文字状态可见
anyKeyObj.SetActive(true);
文字状态不可见
anyKeyObj.SetActive(false);
添加文字闪烁
if (_timer % 0.5f > 0.25f)
{
anyKeyObj.SetActive(true);
}
else
{
anyKeyObj.SetActive(false);
}
5s钟后或任意键按下,则直接跳转到MainMenu场景
if (_timer>||Input.anyKeyDown)
{
GoToMainMenu();
} void GoToMainMenu()
{
SceneManager.LoadScene("MainMenu");
}