• 单一职责原因


    单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。

    现在比如说要写一个俄罗斯方块,怎么能实现功能的代码复用呢?

    不管怎么样游戏中的有些东西是始终没有变化的,比如说下落、旋转、碰撞判断、移动、堆积这些游戏的逻辑是没有变化的。这些都是和游戏有关的逻辑,和界面如何没有什么关系。

    如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,设计会遭受到意向不到的破坏。

    软件设计真正要做的许多的内容就是发现职责,并把那些职责相互分离。

    下面就写一个完整的俄罗斯方块的游戏:

    第一步:游戏逻辑分析

    方块的可移动区域,可以设计为一个二维整型的数组用来表示坐标,比如说宽10高20,则:

    int[][] arraySquare = new int[10][20];

    整个方块的移动其实就是数组下标的变化,比如说原方块在arraySquare[3][5]上,则下移时就变成arraySquare[3][6],如果下移的同时还按下了左键,就是arraySquare[2][6]。

    每个数组的值就是是否存在方块的标志,存在为1,不存在时缺省为0。

    所以碰撞检测:

    是否能左移就是判断arraySquare[x][y]中的x-1是否小于0,否则就碰撞了。或者arraySquare[x-1][y]是否等于1,否则就说明左侧有堆积的方块。

    所谓堆积,不过是判断arraySquare[x][y+1]是否等于1的过程,如果是则将自己arraySquare[x][y]的值修改为1。

    那么消层,就是arraySquare[x][y]中循环由0到9,判断arraySquare[x][y]是否都等于1,是则次行数据清零,并将其上方的数组值遍历下移一位。

    所谓游戏逻辑,不过是数组的每一项值变化的问题,下落、旋转、碰撞检测、移动、堆积这些都是在做数组具体项的值的变化。

    而这部分游戏的逻辑,代码是可以复用的。

    [未完,待续……]

  • 相关阅读:
    计蒜客
    CodeForces -1216B.Shooting
    关于gets读入因为缓冲区出现的问题
    CodeForces
    Codeforces Round #603 (Div. 2) C.Everyone is A Winner!
    Codeforces Round #603 (Div. 2) A.Sweet Problem
    Codeforces Round #603 (Div. 2)B. PIN Codes
    Codeforces 524C.The Art of Dealing with ATM(暴力)
    Codeforces Round #600 (Div. 2) C. Sweets Eating
    数组的定义和初始化
  • 原文地址:https://www.cnblogs.com/stemon/p/4167818.html
Copyright © 2020-2023  润新知