Sherry's emmm... Unnamed Blog

Recording while Learning

0%

动态规划

70. Climbing Stairs

https://leetcode.com/problems/climbing-stairs/

主要思路:上第n级台阶 = 从第n-1级台阶上1步 + 从第n-2级台阶上2步。

由于初始的上第1、2、3阶台阶的方法均可数,因而可以计算出上任意阶台阶的情况。

62. Unique Paths

https://leetcode.com/problems/unique-paths/

根据组合数的性质:
$$
C(n, m) = C(n-1, m-1) + C(n-1, m)
$$
二维vector初始化:

1
vector<vector<int>> ans(rows, vector<int>(cols), initNo));

注意:这里的需要走的横向步数和纵向步数不是m和n,而是m-1和n-1.

Read more »

问题:正确理解原型方法对软件生命周期不同阶段的支持,分别给出:辅助或代替分析阶段;辅助设计阶段;代替分析与设计阶段;代替分析、设计和实现阶段;代替全部开发阶段所对应的开发活动执行时间顺序。

原型方法:

Read more »

简答题

1. 软件工程的定义

软件工程是指导计算机软件开发和维护的工程学科,结合了工程、管理和技术的方法,是将系统的、规范的、可度量的方法应用于软件的开发、运行和维护的过程。

2. 解释导致 software crisis 本质原因、表现,述说克服软件危机的方法

根本原因

造成软件危机的本质原因是计算机性能和软件复杂性的快速增长导致了当前的解决方案不能胜任,是软件的大量需求和软件生产效率之间的矛盾和软件系统复杂性和软件开发方法之间的矛盾。

Read more »

Tanks

整体架构和之前的游戏相似,比如Director类、Factory类以及IUserGUI接口。效果如下:

preview

Read more »

gameView

游戏设计要求

  • 创建一个地图和若干巡逻兵(使用动画);
  • 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
  • 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
  • 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
  • 失去玩家目标后,继续巡逻;
  • 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;

设计要点

  • 关于游戏对象动作的控制,继承SSAction(动作基类)定义巡逻兵巡逻和追逐两个动作;
  • 对于玩家直接在FirstController中实现movePlayer方法根据UserGUI传入的键盘输入数据控制玩家的移动即可;
  • 这次任务的关键是控制游戏对象和游戏对象的接触、游戏对象和场景的接触(包括collision和trigger);
  • 动画的控制取store找一些models,自己建立Animator并在代码中设置相应参数即可;
  • 本游戏中引入了一种在之前作业中没有过的观察者模式,即事件的发布者与订阅者,采用的方法是构建GameEventManager管理所有事件,发布者在特定情况下发布GameEventManager中相应事件,订阅者用OnEnable()对相关事件进行响应。
Read more »

游戏对象工厂:打飞碟游戏

这篇博客会介绍一个打飞碟游戏,主要是引入一个游戏对象的创建与回收机制。

如果每次需要一个新的游戏对象的时候都重新创建它,用完了又马上销毁它,会造成资源的浪费以及游戏性能的下降。本次作业中的飞碟就是一个很好的例子,需要在游戏过程中源源不断地飞出,之后又被击落或者飞出屏幕。

Read more »

简要记录了一下近期作业中所使用过的创建、克隆游戏对象,添加、获取组件的方法。以及特殊的游戏对象和组件包括摄像机、terrain、天空盒的少许知识。

Read more »

What’s MVC? 简单地说,MVC是将Model, Controller, View分离开来的设计。但对于一个之前没有了解过MVC的初学者,这种说法太过抽象,让人摸不着头脑。借牧师与魔鬼这个作业说一下我对于这个设计模式的初步思考与认识。在此感谢这篇博客给了我很大的启发~如果想看比较专业的讲解可以点它 :)

Read more »

游戏对象运动的本质是什么?

  • 游戏对象运动的本质是通过在极短时间Time.deltaTime内改变游戏对象的transform.position实现运动效果的。

请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)

  1. 方法一【计算每一时刻x, y方向的分速度】:根据斜抛公式计算物体每个Time.deltaTime内沿x,y方向的分速度,用Vector3*Time.deltaTime计算每个deltaTime过后物体的所在位置。

    • 分速度计算公式如下:

      ​ 为简便计算,假设物体斜抛的水平方向初速度为initialVelocityRight,竖直方向初速度为initialVelocityUp

      • $ V_x = initialVelocityRight $
      • $ V_y = initialVelocityUp - g\sum\delta t $
    • 关键代码如下:

      1
      2
      3
      4
      void Update () {
      count += Time.deltaTime; //计算从抛出到当前时刻经过的时间
      transform.position += new Vector3(initialVelocityRight, initialVelocityUp-9.8f*count, 0.0f)*Time.deltaTime;
      }
    Read more »