00:00
同学们,我们来代码实现一下这个。其实都有问题。那首先呢,我们打开eclipse,我们来建一下这个相关的类,然后把相关的方法写一写。写个类,呃,建一个包吧,同学们,咱们还是老规矩,建一个包。那这个包呢,我们取个名字第二,Horse horse。有麻对吧,然然后呢,我们在里面写一个类。同学们,我们写个类。这个类我们就叫ho horse。Chess棋盘board。B。BORAD。对吧。Boardd board。我把主方法勾上,我们来开始编写,那大家想一想哈,我们既然是一个棋盘,是不是我们首先要把这个棋盘的列还有它的行写下来,所以说我先写一个private。
01:01
Static,然后呢,Int,咱们写个X吧。这个呢,我们表示棋盘的列,注意啊,我这个X表示的是列,不是行列竖。同学们待会在写代码的时候呢,要看看清楚,我这X表示的是列数,因为我我将来这个表示的是列还是行,对我们后边写代码是有影响的。紧接着我们再来写一个变量in y。那这个表示什么呢?好,这个代表棋盘的行数,就是有多少行。好,那当我们把棋盘的列和行确定下来过后,我们要不要先把这个写清楚。这里面比较重要的一个方法是这。就是在当前位置,注意听根,我们把这个完成,根据当前位置计算马儿还能走哪些位置,并且把这个位置放在一个集合中。
02:03
我先把这个做一下好吧,因为这这里面这个方法是比较重要的。我们先把这个方法完成。大家知道我我要完成什么事情哈,好,现在呢,我们来写一把。我把这个方法先写了,呃,Public。Public static r list在这里面呢,我会放什么呢?我会放一个point,这个point是我们Java自带的一个类,代表一个点,这个点呢,待会体现出来,就是代表我们的在这个棋盘的某一个位置,明白了吧。这这个point大家应该是知道的咯,我写一个,那比如叫next,那我怎么得到这个点呢?你要把当前这个点给我,比如说当前要叫current。Point。没问题吧,同学们,就是你你把当前这个点给我,然后呢,我根据当前点计算,嗯,计算它能够走的其他点,好,我先把相关的包引一下。
03:08
我先写一写这个含义,好吧,我先写一下这个含义,Point呢,咱们也引进去了,好的,我先说一下这个函数的功能。这个功能是干什么呢?朋友们,这个功能就是刚才老师在这分析的时候。就是根据当前的位置。哎,就是这句话,根据当前的这个位置,这个位置呢,它是用一个point对象来描述的,计算码儿还能走哪些哪些位置,哪些位置呢,也是一个point来体现的,并放在一个中,最多有八个位置,这个能理解吧,哪现在老师开始写了。那首先呢,我们先创建一个。创建一个AA。A list这个没问题吧,那我就溜了六一个a list里面放的是point,对不对,同学们。
04:03
好,我先把它生成一个变量,那这个变量的名字呢,我们就简写一下叫就完事了,好吧。好,那现在呢,我们干什么办呢?好,我们创建创建我想想怎么写哈,咱们创建吧,创建这一个point,创建一个point,那我就写了6POINT。这个point将来。将来它的X坐标Y坐标我们不确定,所以先不用写,就取个名字叫P就可以了好吗?现在我就开始判断了,判断啊,大家看我这段代码,你们能不能看清楚是什么意思,这个地方我们取个名字叫P1吧,好,这样取个P1 p1.x。p1.x,它等于。Current point就是当前这个点的X减去一个二。
05:02
大家知道我在写什么吗?不着急啊,我先把它给写出来,大家就知道老师在写什么了。如果它大于等于零,大于等于零,并且大家再看,并且P一点Y p.Y它等于。Current point就是当前这个点的Y减一,减完一过后呢,它也大于等于零。来这个地方,一旦这个地方形成了,我们就在就在这个里面加入这个点,加入哪个点呢?加入六一个point,看清楚了,六一个point什么呢?P。哎,大家看这啥意思,同学们看到这啥意思。写完了。诶,这边是有问题吗?看一下又一个point。是不是多了一个呀?
06:00
好,这就可以了。嗯,同学们先看一下这句话的含义是什么啊,来,我把这句话呢,拿到我们这边来给大家做一个。做一个说明。大家可以看到这句话是什么意思。我先把刚才这段代码拿过来,大家一看就明白了。同学们看,我先创建了一个point。如果P1,就是说先看current point X减二代表啥,什么意思,是不是代表。从他这个当前位置。从在这个当前位置,它的这一个X代表列嘛,代表列的话是不是往这边移动啊,相当于说把我们这个码儿。在这个位置,先往往这边移动两个位置。那么如果呃移移动移动两呃,就相当于在这个位置向左移动两列,那如果移动两列还大于等于零,就代表它这这一行是可以走的。
07:00
就是代表哪一行呢?代表呃,代表这一列是可以走的,就说还有可以走,同时还要满足current。点Y减一,而current减减Y减一是不是相当于说往上再走一行啊,那大家可以看到这个交点是哪里,是不是就是五啊。也就是说我这个条件。成立的话,就代表这个马儿能够走。五这个点。五这个点为,为什么呢?因为大家也看到它相当于说向左移动两列,向上移动一行,居然都满足。那就说在这种情况下都是大于等于零的,因为大于等于零代表他没有还没有出这个棋盘嘛。是不是,那在这种情况下,说明我们这个马儿是可以走五这个点的,就这个点是可以走的,但是你想假设这个马在这个位置,假如啊,马在这个位置,你想。如果马在这个位置的话,它减两,它的列往这边移动两个,变这来了,变这来是不是实际上这个就已经不再大于等于零了,所以说相当于说它不能够往左移动两列。
08:11
明白吧,就说这种情况下就不能走五这个位置,因为我这个位置早就越界了。所以说这个条件我想清楚了啊,这个条件就代表什么呢,表示。表示马儿,马儿可以走五这个位置。那么当然这个五的位置呢,就是我这画的啊,嗯,不同的书上可能他这标的不是五。好,那是不是以此类推,我们看看马怎么能够走六,走七,走零,走一走二,走三走四,是不是这样这个意思啊,同学们能理解吗?就是刚才你只是判断了马儿可以走五,所以说你把这个点加到了我们这个里面,那能不能走右呢?不知道能不能走七呢?能不能走零呢?能不能走一呢?能不能走二呢?能不能走三呢?能不能走四呢?是不是应该还有七个判断?
09:04
那把这七个判断,判断完了过后,是不是最终这个里面有几个点,有几个元素,就代表当前这个码儿可以走的。下一步的位置有哪些能理解了吧?好,那这个时候老师就不啰嗦了啊,我就直接把这几个写完来咱们判断。判断啊,判断马儿,判断马儿是否可以走六这个位置,是不是这样写的六,对,好,我把这些都写完,判断马儿能不能走七这个位置。判断马儿能不能走零这个位置。走零这个位置,好,我就复制一下判断马儿能不能走一走二走三走四,是不是还有12345677个判断就可以了,那老师就不啰嗦直接写代码了啊这块我就。不做那么多说明了p1.x。
10:02
跟着我的思路啊,p1.x。它如果等于。在于,呃,Current,跟上我的思路,这个地方要小心点current。怎么写呢,Current。点X减一。哦,OK,如果它减完一个还大于等于零,并且满足什么呢?好,跟上我的思路,P1。p.X。啊,这个应该是Y了,对吧?Y等于什么呢?好,等于current point.y。Y减去一个二,这个时候它应该大于什么呢?也是大于等于零,对,如果这个条件满足,说明它是可以走六这个位置的,所以说这个时候我们又可以把这个P再加一个进去。是不是又可以加一个进去,因为刚才溜了一个,现在又溜了一个嘛,这是一个匿名对象嘛,加进去就完了。
11:00
这个很好理解吧,减一你看嘛,减减一不是代表这个位置吗。往上走,往上走两个不代表六了吗?如果它两个都是大于等于零的话,就说明可以走六这个位置,好,紧接着我们再来看走七这个位置,我就复制了。复制我改吧改吧就行哈p.X。我们现在是,诶这个不对,这不能走七这个位置了。对,走齐这个位置应该怎么写呢?跟上我的思路,是不是current point X。走七这个位置的话。应该怎么写呢?是不是应该加一了呀。为什么是加一,同学们,因为它是往右边走了,右边肯定是加嘛,加完了过后呢,它应该大于等于什么呢?同学们,走七这个位置应该是大于,不能大于了,它要小于了,它小于什么?同学们,它是不是应该是小于?X就可以了,就说因因为你现在是往这边走。
12:02
它不能,它这个时候判断的就是不是跟零比较了,而是看你这个七有没有超出这个位置,所以它如果还小于X,说明它没有小,没有出,我们这个棋盘能理解了吧,所以这边给的条件是小于X,同样这边呢,一样的道理,这边是Y。Y,怎么样呢?同学们,这个地方是刚才是加一,这边应该还是减二,减二过后。呃,减二过后这个地方大于哦,这个没问题,这个条件依然跟前面是一样的,是不是这样子的,你想吗。因为你现在是往上走,往上走的话,那跟这个六是一样的,好,这个不用动它。这个能能跟上我的思路哈,我把这个格式化一下。并不难,就是p.Y等于c.Y减去二大于零,零说明七的可以走好,紧接着我们再写零这个位置,零这个位置呢?零这个位置应该什么呢?是加二了。
13:02
是不是加二了,同学们,加二小于XP一点,这个是应该减一了,对不对?为什么减一啊,因为你现在零嘛,显然是往上走一行就可以了。没有问题吧,同学们好,这个呢也是OK的,所以说零这个也写完了,来紧接着再写,同学们一定要小心哈,这边写错了,后面代码肯定是错的,那一这个位置应该怎么写了呢?同学们一这个位置应该怎么写了?哎,现在是走的哪个位置?一领领走了没有?零走了,零零如果走了的话,下面就是一这个位置了,一这个位置应该怎么写呢?好,跟上我的思路,就应该是加二,加二还是小于X,这个没有问题。到这边就应该是加一了。加一加一过后干什么呢?要。呃,这个地方叫小于了,不能是大于了,小于什么呢?小于,大写的Y。
14:04
是不是这样子就对了。走一,我们来看看视频上写的啊,走一,走一的话往这边移动是列势,要加上一个二对的。加上一个二,然后小于X是正确的,同样它往下面走的,往下面走的话是Y加一个一加一个一呢,还要小于Y正确的。加一个一小块正确啊,没有问题,紧接着我们在写二这个位置。那二这个位置应该怎么写的呢?二这个位置是这好,那这个地方,二这个位置我们要调整一下,二应该是加一了。为什么是加一啊?加一,你看这个列不是移动,往这边移动一下就行了,向右移动一列是吧?呃,小于Y小于X,这个不用变化。这边呢,应该变形呢。
15:01
哎,是不是加二了。同学们是不是加二了,因为你二这个位置是往下面走两行是不是走了,完过后看看还要要求小于Y,这就可以了。好,紧接着再来看三。嗯,三这个位置的话应该怎么写呢,同学们。三这个位置是不是应该就要减了,不能再加了,因为它是在在我们这个当前点的左边减几呢?减掉一个一,减掉一个一要大于等于零,是这样子吧,同学们。好,这个没问题吧,同学们P,然后current y应该是加二了。是不是加二呢,小于Y看对不对,减减去一个一。三二减去一个一减去一个一呢,还要小于我们的。呃小呃,就是先先按这个列来说啊,减掉这个减去减去一列过后呢,要大于零零,正确的往下走,往下走是加。
16:05
加上我们的二,加上二过后呢,要小于Y正确没没有毛病,最后一个。好,最后一个不要乱啊,这地方稍微有一点要小心的,呃,是这个位置的话呢,P1那应该是减二了。Y应该是减二了,为什么是减二?我们来看看最后是这个位置减二吗?对不对,减二,那刚才这个是减一吧,对的,这个是减一,没就减减二,减完二以后,减完二以后还要大于等于什么,还要大于等于零。在这种情况下,说明它没有,它的列没有没有出去,然后呢,p1.y这个地方应该加一加一小于Y吗。这个是加二,这个是加一,好,这个是加一就没问题,加一就没问题,看看对不对,减二。列往这边减去一个二没有,没有减二没有问题。这边是减二是减少嘛,加一好,加一过后呢,还要加一过后还要小于我们的Y。
17:07
加一过后要小于Y正确。正确没有毛病吧?减二大于等于零,然后PY。呃,p.Y等于c.Y加一小于Y说明正确,好,这就写完了,写完过后我们整个把这个返回代码就写完了。这段代码,这段代码,嗯,这一段代码大家大家能看懂吗。不难是吧,就是你要想到这去就行了,好同学们,你看经过这一番,嗯,这个测试呢,我们已经把这一步最核心的这段代码写完了,就是我们能够计算码儿,从当前这个位置,能够计算码儿还能走哪些位置。最多八个,而且的确是这样的,大家看我在进行这个判断的时候,用的是if,不是用的if else啊,千万不要用if else,不要用if else if这种结构。
18:04
因为他只要满足一个条件就有一个点,所以说全部用的是单独的if来判断的,而且大家可以看到每次加的时候是一个匿名对象,所以说它并不影响。明白好同学们,那关于我们这一个,嗯,马踏马踏棋盘算法的第一部分。核心代码就先给大家讲到这,大家看理解了没有,那一会呢,我们接着写它的核心算法。
我来说两句