2021CS61B-LabsANDHWs
摘要
Git教程
https://www.bilibili.com/video/BV1HM411377j?p=1&vd_source=d84f08a0531e04d6d41c38180cce9fb5
我的博客,希望自己能够不要那么那么笨了。
我记得,好像是vscode吧,,给你看个截图
是很久以前配置的,懒得改了
有点没绷住,git clone 的时候不能开代理,不然就会出错
太棒了,,过去的点滴积累没有白费,,太好了!!
我换过桌面,D盘里面的桌面是DesktopNew。真正的Desktop在C盘。里面放着cs61b
太棒了,本来是蒙的,没想到youyouyou蒙对了
yes,离成功又近了一步
太棒了,,成功辣,,把他们的代码骨架skeleton都搞下来了
哈哈到这里出错了,,但是无所谓了。
oracleopenjdk不行就换,但这也是之后的事情了,我已经进步太多了。
哈哈哈,绷不住了,,到最后我还是用的java8跑的,无所谓了,,后面再改吧。反正前面简单从内容用不到新语言的特性
修复测试乘成功了
git提交应该是没出错的,但是他的自动评分系统报错,个人感觉是因jdk版本的原因。这个之后再改吧,已经是几乎成功了。
我突然其实是感觉课程不配套导致的,我的作业写的是24年的。
但是评测gradescope测评的是2021年从春季的课程
靠了,,放出没看懂他们的话,,现在看懂了。
既然只有21spring开放的测评机,那一切都从21Spring 的版本为准吧。版本不重要,重要的是坚持做完。
搜了搜有没有CS61B的2024Spring的入学代码,完全找不到。网上都是2021Spring的博客和笔记,个人猜测是2021Spring的Gradescope开放的,所以大家都用这个学期的版本。那我也学这个学期的版本,与大部分人同步得了。
重新换任务我也等到6.1号之后了。
真别急,谁说最后还用不用的着你的程序代码呢,慢点开始。看了看电脑设置多个jdk麻烦死了。不想动了,不管这些了。
上面都是2024SpringCS61B的Lab01的过程,我现在改成2021SpringCS61B了。
Week1✔
Lab 1 Setup: Setting Up Your Computer✔
hhhhhhhhhhhhh为什么我这里java HelloWorld成功了,但是之前不成功,难道真是的用户变量里面的CLASSPATH的alg4.jar导致的吗。
感觉用Windows Terminal也一样行,我试试
果然是是的用户变量里面的CLASSPATH的alg4.jar导致的。奶奶的
那我的普林斯顿的那个之后放到后面做了。因为alg4的配置比我先做的更麻烦,我先歇一会。
Lab 1: IntelliJ, Java, git✔
太棒了,这个也做完了。
而且自动评分器得了满分。太好了
有个小小的报错
1 | Cannot resolve symbol 'String' 和 'System’ |
解决方法https://blog.csdn.net/wy_hhxx/article/details/121239112
个人感觉原因是,把别人的setting导入进来的时候,别人的jdk路径和自己的jdk路径不一样,所以会有这个报错。
果然好了,不报错了
这也解决了我的选择困难症,再也不用纠结用哪个color scheme,用加州大学伯克利分校的教授同款怎么样都是好。好好哈后
HW 0: A Java Crash Course✔
讲的很细,和C++49讲的一样
中断并继续
有时,您可能会发现使用break
或continue
关键字很有用。该continue
语句跳过循环当前迭代的其余部分,有效地直接跳转到增量条件。
增强的 For 循环
这一点和acwing讲的一样
Java 还支持使用“增强的 for 循环”对数组进行迭代。基本思想是,在很多情况下我们实际上根本不关心索引。在这种情况下,我们避免使用涉及冒号的特殊语法来创建索引变量。
例如,在下面的代码中,我们执行的操作与BreakDemo
上面的完全相同。但是,在这种情况下,我们不创建索引i
。相反,从开始到,只接受String
s
每个的标识一次。您可以通过此链接试用此代码。String``a``a[0]``a[a.length - 1]
1 | public class EnhancedForBreakDemo { |
Project 0: 2048✔
好难,要做吗
介绍
您可以在https://youtu.be/Xzihuj_JZBI找到该项目的高级概述。
但您的任务仅存在于四种方法中Model.java
,并且仅限于四种方法。(感觉没那么难),其他的部分他都给我封装好 了。
游戏
在这个项目中,您将构建此游戏的核心逻辑。也就是说,我们已经整合了所有 GUI 代码、处理按键以及大量其他框架。您的工作是完成最重要和最有趣的部分。
具体来说,您将在文件中填写 4 种方法Model.java
,这些方法控制用户按下某些键后发生的情况。
在第一次移动之前,应用程序会将包含 2 或 4 的方块添加到最初为空的棋盘上的随机方格中。2 或 4 的选择是随机的,选择 2 的概率为 75%,选择 4 的概率为 25%
以下是发生合并时的完整规则,如上图所示。
- 两块相同数值的牌合并为一块牌,其数字是初始数字的两倍。
- 合并后的图块不会在该倾斜度上再次合并。例如,如果我们有 [X, 2, 2, 4],其中 X 代表空白区域,我们将图块向左移动,最终结果应该是 [4, 4, X, X],而不是 [8, X, X, X]。这是因为最左边的 4 已经是合并的一部分,因此不应再次合并。
- 当运动方向上的三个相邻图块具有相同的编号时,运动方向上的前两个图块将合并,而后面的图块则不会合并。例如,如果我们有 [X, 2, 2, 2] 并将图块向左移动,则最终结果应该是 [4, 2, X, X],而不是 [2, 4, X, X]。
根据这些规则,如果在运动方向上有四个相邻的图块具有相同的编号,它们将形成两个合并的图块。例如,如果我们有 [4, 4, 4, 4],那么如果我们向左移动,我们最终会得到 [8, 8, X, X]。这是因为前两个图块将根据规则 3 合并,然后后面的两个图块将合并,但是由于规则 2,这些合并的图块(在我们的示例中为 8)不会在该倾斜方向上自行合并。您会在上面的动画 GIF 中找到上面列出的 3 条规则中的每一个的应用,因此请仔细观看几次以很好地理解这些规则。
注意:您的代码不会添加任何新图块!我们已经为您完成了这一部分。
您的代码需要更新分数
当当前玩家没有可用的移动(没有倾斜可以改变棋盘)或移动形成包含 2048 的方格时,游戏结束。您的代码将负责检测游戏何时结束。
作业理念与课程设计
当您进行该项目的第四个最终任务(编写方法tilt
)时,其中一个挑战是找出这些方法和实例变量中的哪些是有用的。
Board
此类代表棋盘本身。它有三种方法供您使用:setViewingPerspective
、tile
、move
。您也可以选择使用 进行实验getRandomNonNullTile
。
您只能编辑Model.java
此作业中的文件。Gradescope只会采用您的Model.java
文件并使用其他文件的框架版本,因此如果您对文件进行编辑Tile.java
,Gradescope 将无法识别该文件。
你的任务
您在这个项目中要做的工作是修改和完成Model
类,特别是emptySpaceExists
、maxTileExists
和atLeastOneMoveExists
方法 tilt
。其他一切都已为您实现。我们建议按此顺序完成它们。前两个相对简单。第三个(atLeastOneMoveExists
)更难,最后一种方法tilt
可能相当困难。我们预计tilt
您需要 3 到 10 个小时才能完成。前三种方法将处理游戏结束条件,最后一种方法tilt
将在用户按下按键后修改棋盘。您可以阅读该方法的简短主体,checkGameOver
以了解如何使用您的方法来检查游戏是否结束。
前面的视频和SLids和指南和现场问答都看完了。就差pro 0 了
纪念一下
理解了,悟了。Tile t为null表示空格子,没有数字。所以为了引用空指针要先判断t != null,当然这也算一个小小的短路原则。
一次性写对了,很开心
贴上我的代码
1 | public static boolean atLeastOneMoveExists(Board b) { |
第四个函数
贴上我的代码
1 | public boolean tilt(Side side) { |
运行testModel.java
也成功了。
开心,终于完成任务 了
Week2
DONE | ||
---|---|---|
Debugging (due 01/29) | ||
[Project 0 due 1/29] | DONE | |
现在把可能用到的网页放在这里
最主要的两个链接。
https://www.gradescope.com/courses/137626
参考作业
https://github.com/KANIKIG/cs61b-sp21/blob/main/proj0/game2048/Model.java