CS61B 2021sp学习笔记1——project0

 

        正如课程安排中的第一周内容所说,Project0提供了一次很有意义的项目练手机会。留给练习的任务是2048小游戏的逻辑设计,在课程刚起步阶段,为达这一目标需要克服许多畏难心理,如:畏惧陌生语法、畏惧繁多文件、畏惧各种class的定义、畏惧陌生IDE的配置。Project0的引导很细心地让我几乎不得不直面这些畏难心理。

        引导首先设置了编写三个Test方法的小练习,对标工程中的Test项目,跑过Test的逻辑十分简单,练习的价值主要就在于努力读懂并使用工程中许许多多的class定义——这可以看作是一次对架构的学习。工程文件的核心class为Board、Tile、Side,其中Tile的定义对于初学面向对象语言的我来说十分晦涩难懂。最大的困惑是,在一个class的定义里引入该class的实例作为class成员,再加上class中声明的成员变量一般还附有许多陌生的modifier,使得靠自己入门仅有的语法知识来反推如此行为的意义变得十分困难。project0最有价值的地方我觉得就在这里,正如Josh Hug自己所说,it's ok for you to be confused and not able to figure out everything in the project。保持困惑能激发人的好奇心也能使人劝退,对于学习而言,关键在于困惑的程度。每当我放弃思考困惑点,继续聚焦于工程的任务时,我发现自己依然能够推进project的进度,这种成就感总是能打消不少困惑带给人的受挫情绪,使我一直没有放弃对困惑的思考,而后来的课程内容证明,这种思考是很有意义的——class成员的声明并不等于调用;Java在实例化class时,赋给instance的值为引用变量(reference variable),代表该instance的地址。project0之后就是对链表的编写学习,而编写链表的核心就在于每实例化一个class,就附带有下一个实例的地址。这些困惑,再往后便让我对递归思想有了思考的基础——很早接触编程就已听说甚至使用过递归,但在project0中的思考才使我真正感受到对递归的慢慢掌握。

        完成了三个Test方法之后,就是对游戏核心逻辑的设计了,这是针对本次目标而言真正逻辑思考的难点。如何知道每次移动时,哪些tile该动,又该移动到哪个位置?这是需要解决的核心逻辑问题。在之前写Test方法的过程中,我熟悉了使用横竖两个方向遍历的方式来获取board中的每一个tile,根据遍历的顺序,首先提取board中的一列,然后按行提取特定的tile。project文件中的class Side就是围绕这一遍历方式而设计的巧妙办法,使得每一个方向的移动都可以看成一列tile向上的移动。那么只需在每一列的循环之中,判断当前循环所选tile的上部是否存在空档,就可完成存在空档情况下的移动操作。除了空档之外,移动判断还有是否融合,但其实核心逻辑跟空档移动类似,只是再多了一次循环来使得融合之外的tile进行填补移动。

        

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
cs61b spring18是伯克利大学的一门计算机科学课程,是基于Java编程语言的数据结构和算法的进阶课程。对于学习者来说,有一些资源是可以帮助他们更好地理解和掌握这门课程的。 首先是课程网站,学生可以在伯克利大学的网站上找到cs61b spring18的课程页面,其中包含课程信息、课程教材、作业和项目说明等。这个页面非常详细,学生可以从中获取到所有关于这门课程的信息。 其次,教师提供了讲座的视频录像,学生可以通过观看这些录像来学习课程中的知识。这些录像可以在课程网站上找到并随时观看。教师在讲解知识时会结合具体的实例和代码,在给学生提供理论知识的同时,也给出了实践的操作方法。 此外,课程网站上还提供了课程讲义和课程作业的解答。学生可以下载这些讲义并进行学习,同时可以参考作业的解答来巩固和理解课程的概念和知识。 最后,在线论坛是一个很有用的资源。课程网站还提供了一个在线论坛,学生可以在这里与其他学生进行讨论和交流。他们可以分享问题和解决方案,互相帮助和支持。 总的来说,cs61b spring18的学习资源非常丰富,学生可以通过课程网站、讲座录像、讲义、作业解答和在线论坛等多种方式来学习和理解课程中的知识。这些资源旨在帮助学生更好地掌握数据结构和算法的概念和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值