unity连连看教程_一个连连看游戏里面有很多小游戏

(5) 2024-06-20 14:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
unity连连看教程_一个连连看游戏里面有很多小游戏,希望能够帮助你!!!。

前情提要:

Unity的自学也有近半年,掌握了一些基础知识,也跟着官方的教程做了几个项目,自认为是入了门。因此总希望能够自己独立完成一个项目,完整地体验游戏制作始末的同时,也能借此搞清楚之前学得模棱两可的知识。因为本身是为了兴趣,而非专业人士,所以这次的项目选择了一个比较简单的连连看游戏。
学习Unity之前,也用JavaScript(因为Canvas的渲染比较方便)实现过几个小游戏(俄罗斯方块、数字迷宫之类的),但其体验与使用游戏引擎制作游戏有很大的区别,因此这次的连连看项目的完成也算是一次全新的体验,从中亦获益良多。这篇文章分上下两篇,分别对应前后两个版本,我会将主要的笔墨放在这个项目的几个关键问题与解决的方案,将之作为我对此次项目制作的一个总结,中间难免会出现各种各样的错误与不足,希望各路大佬指正。

开发概要:

关于连连看游戏的主要规则相信大家都很熟悉,我在这里就略过不提了。在第一个版本中,基本实现了连连看游戏功能,包括关卡自动生成、点击事件响应、方块消除、计分计时、通关-失败判定、暂停继续、返回主菜单、难度设置等。设置了简单、一般与困难三个难度等级,难度调整主要由图片数量与方块数量控制。关卡模式为单关卡模式。

几个关键问题:

一、数据结构的选择:

  1. 连连看游戏的主要界面是一个n * n的矩阵,因此自然而然会用到二维数组。为此我写了一个Map类,用来存储游戏中的每一个方块。与之配套的还有Vector结构体,主要用于确定位置与后面的寻路计算(之所以重新写了一个Vector而不是用Unity的Vector2,是因为Vector2中的变量类型为float,作为索引的话涉及比较频繁的强制转换)。
//Vector结构体 public struct Vector { 
    public int x, y; //这里定义了五个静态变量,用于表示方向与空向量((-1, -1)这个点不会在游戏中使用到) static public Vector left = new Vector(-1, 0); static public Vector right = new Vector(1, 0); static public Vector up = new Vector(0, -1); static public Vector down = new Vector(0, 1); static public Vector Null = new Vector(-1, -1); public Vector(int x_, int y_) { 
    this.x = x_; this.y = y_; } } //Map类 public class Map<T> where T : new() { 
    T[ , ] data; public Map(Vector v) { 
    data = new T[v.y, v.x]; for (int i = 0; i < v.y; i++) { 
    for (int j = 0; j < v.x; j++) { 
    data[i, j] = new T(); } } } public T getData(Vector v) { 
    return this.data[v.y, v.x]; } public void setData(Vector v, T element) { 
    this.data[v.y, v.x] = element; } } 

由于之前一直用的是C++,对于C#的很多语法还不是很熟悉,因此在写Map类的过程中,涉及二维数组的声明与初始化的问题还是让我头疼了一下。这里稍微提一下我查到的关于C#二维数组的声明与初始化的方法(只是个人总结,局限性较大,仅供参考):

//方法一: int[ , ] array = new int[m , n]; //声明一个m * n的二维数组 int[ , ] array = new int[m , n]{ 
   { 
   数组1}{ 
   数组2}, ...... , { 
   数组m}}; //对二维数组进行初始化 //方法二: int[][] array = new int[m][]; //声明一个含有m个一维数组的数组 //然后可以对数组array进行逐个的初始化 array[0] = 数组1; ...... array[m - 1] 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复