hw6存在的两个问题

致命问题

这是一个有关状态转换的问题。
本作业(俄罗斯方块)存在的状态转换。
这是有关暂停的一个函数。涉及到了状态(@running)的转换。

 def pause
    if @running
      @running = false
      @timer.stop
    else
      @running = true
      self.run_game
    end
  end

另外一个状态转换,如下所示
Part I

def next_cheat_piece
    @current_block = MyPiece.next_cheat_piece(self)
    @current_pos = nil
    @cheat = false
end

Part II

def next_piece
    @current_block = MyPiece.next_piece(self)
    @current_pos = nil
    @cheat = true
end

从表面上来看,代码好像没错,甚至有一些对称美。但是!!!,当next_piece并不会让@cheat = true,而是通过c按键(alter_cheat_condition函数来改变的),所以对于Part II来说,正确的代码是没有@cheat=true这一行的。

严重问题

在hw6provided.rb中,也就是class MyPieces中的run方法和drop_all_the_way方法都用到了next_piece方法。如果采用上面的Part I和Part II的写法来写的话,就需要在run和drop_all_the_way里面修改代码,这无疑造成了代码的冗余性(不简洁)。而对于@current_block来说,这里需要修改的地方只有一处,所以可采用新建函数(MyPiece.cheat_next_piece)的方法。
所以我们需要把Part I和II合并在一起,即:

def next_piece
    if @cheat == false
        @current_block = MyPiece.next_piece(self)
    else
        @current_block = MyPiece.cheat_next_piece(self)
        @cheat = false
    end
    @current_pos = nil #common same sentence
end

2017.10.28思考

状态转移其实在生活中也很常见。就拿穿衣服来说,通过看衣服的logo,确定是否要把衣服转过来。如果是正确的,就不需要转,直接穿上。反之转一下穿上即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,646评论 18 399
  • 陈雄与岛阅读 1,346评论 0 0
  • 今天再一次入了霸道总裁的坑,本来在刷微信,被标题党欺骗了,点开一看是霸道总裁文,对于霸道总裁文是点开容易想关掉就难...
    夜星未眠阅读 4,925评论 2 2
  • 最近非常喜欢这句话,甚至想作为公司聊天工具的签名。后来觉得不妥就没放。 为什么喜欢这句话?是因为想到那些曾经现在一...
    南瓜土豆饼阅读 1,688评论 1 3

友情链接更多精彩内容