象棋棋谱之棋子识别(二)
-
遇到的主要问题
想要保存棋盘的话需要知道每个坐标的棋子。
在上篇中顺序打印棋子的时候每条线上的棋子的y(高度坐标,注意算出来的x,y坐标是从左上方开始的)坐标有出入,在根据坐标排序的时候,就出现乱序了。
之前的做法就是根据棋盘每条横线的大概高度,误差在一定范围内的就认定为此线的棋子,大概的做法如下。
#第一排的棋子高度大概就在19左右
if abs(y - 19) < 20:
y = 19
复制代码
我们想要完整实现棋盘识别的话,需要知道每个坐标点的棋子,上面的方法就没必要了。这里需要的是根据棋盘的坐标点来寻找匹配的棋子坐标,然后识别每个坐标点上的棋子。思路如下:\
思路如下
chess_array=[[] for i in range(10)]
if(len(sxFilter)==9 and len(zxFilter)==10):
#竖线 直线
print("---------------------")
for i in range(len(zxFilter)):
for j in range(len(sxFilter)):
#直线坐标
x1,x2,y1,y2=zxFilter[i]
#竖线坐标
x3,x4,y3,y4=sxFilter[j]
check = False
print(zxFilter[i],"-",sxFilter[j],i,j)
for k in range(len(questionCnts)):
x, y, w, h=questionCnts[k]
#获取中心坐标
centre_x=x+w/2
centre_y=y+h/2
#范围之内匹配成功
print(centre_x,"-",centre_y)
#获取范围
if(abs(centre_x-x3)<25 and abs(centre_y-y1)<25):
print("命中!")
check=True
im = img[y:y + h, x:x + w]
orc = get_match(im)
if orc is not None:
chess_array[i].append(orc)
else:
print("未识别...")
if not check:
chess_array[i].append("空空空")
else:
print("识别出错了!")
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
在做了一个月的进阶课程之后,终于又可以回来做游戏了。不得不说,对于我来讲做课程要比做游戏的难的多。做出来是一回事儿,讲出来又是另一回事儿了。尤其是还希望能讲的明白,讲的浅显易懂,感觉还是很难的。不过还好,做课程这件事情也是可以练习的,比如说我现在面对镜头讲一个东西的时候,就比一年前要好很多了。
终于要写第三篇教程了,中间拖的时间有点儿长,以至于我的好几位学员等不及已经自己做出来了。这是一件让我感到非常高兴的事情。一位学员从零基础开始学,到最后有一定的能力自己琢磨着把游戏做出来,这是一件不论是对学员来讲,还是对我来讲都是值得骄傲的事情。因为他们已经掌握了自己学习和前进的方法,我认为这种自发的能动性是推动一个人自主学习或者前进的最强大的动力。
上一节教程中我们使用的红色和白色的方块代表卡牌,为了区分不同的牌,我找了一些可爱的小动物头像(共 10 个),我们仍然是创建两层堆叠牌,不过这次这些牌会显示出不同的类型(不同的动物头像),每次生成的牌都是随机的,也就说即使是同一个关卡,每次打开也都会不一样。
接下来我们就直接开始吧!
还是先从理论开始,一共有 10 种不同类型的小动物卡牌,我们先给它们依次编上序号。
国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中