终于考完试了,让我们继续三子棋。
之前,我们的机器人是傻傻地随机落子,现在,让我们来让它变得聪明。要变得聪明,在三子棋中还是比较容易实现的,无非是两个方面:
连子
堵子
从优先获胜的角度来看,连子的优先级应该更高一些。由于我们只是用来熟悉Python,就用最笨的遍历。和检查胜利条件一样,但每行的和变成了2(-2),满足条件时,就在这一行(列、对角线)找到空的那一格落子。
1defcomputer(tablelist):
2sumnum =
3heading = 0#朝向
4num = -1#位置
5pos = [-1,-1]
6forxinrange(0,3):
7sumnum =sum(tablelist[x])
8ifsumnum ==2orsumnum==-2:
9heading = 1
10num =x
11foryinrange(0,3):
12sumnum = sum([tablelist[0][y],tablelist[1][y],tablelist[2][y]])
13ifsumnum ==2orsumnum==-2:
14heading = 215num =y
16sumnum = sum([tablelist[0][0],tablelist[1][1],tablelist[2][2]])
17ifsumnum ==2orsumnum==-2:
18heading = 3
19num =
20sumnum = sum([tablelist[0][2],tablelist[1][1],tablelist[2][0]])
21ifsumnum ==2orsumnum==-2:
22heading = 4
23num = 2
24ifnum == -1:#没有特殊情况
25pos[0] = random.randrange(1,4,1)
26pos[1] = random.randrange(1,4,1)27ifheading == 1:
28foryinrange(0,3):
29iftablelist[num][y] ==0:
30pos[0] =num
31pos[1] =y
32ifheading == 2:
33forxinrange(0,3):
34iftablelist[x][num] ==0:
35pos[0] =x
36pos[1] =num
37ifheading == 3:
38numtemp =num
39forxinrange(0,3):
40iftablelist[x][numtemp] ==0:
41pos[0] =x
42pos[1] =numtemp
43ifnum ==0:
44numtemp = numtemp + 1
45ifnum == 2:
46numtemp = numtemp - 1
47returnpos
尝试了一下,比刚才聪明多了,但缺少一点预判,由于水平有限,只好进行人工预判:下过三子棋的人都知道,当先手落子在正中间的时候,必须下在四个角上,否则必输,那么,我们就多加一步判断。
1defcomputer(tablelist):
2sumnum =
3heading = 0#朝向
4num = -1#位置
5pos = [-1,-1]
6forxinrange(0,3):
7sumnum =sum(tablelist[x])
8ifsumnum ==2orsumnum==-2:
9heading = 1
10num =x
11foryinrange(0,3):
12sumnum = sum([tablelist[0][y],tablelist[1][y],tablelist[2][y]])
13ifsumnum ==2orsumnum==-2:
14heading = 2
15num =y
16sumnum = sum([tablelist[0][0],tablelist[1][1],tablelist[2][2]])
17ifsumnum ==2orsumnum==-2:
18heading = 3
19num =
20sumnum = sum([tablelist[0][2],tablelist[1][1],tablelist[2][0]])
21ifsumnum ==2orsumnum==-2:
22heading = 4
23num = 2
24ifsum([sum(tablelist[0]),sum(tablelist[1]),sum(tablelist[2])]) == 1andtablelist[1][1] == 1andtablelist[0][0] ==0:
25pos[0] =
26pos[1] =
27returnpos
28ifnum == -1:#没有特殊情况
29pos[0] = random.randrange(1,4,1)
30pos[1] = random.randrange(1,4,1)
31ifheading == 1:
32foryinrange(0,3):
33iftablelist[num][y] ==0:
34pos[0] =num
35pos[1] =y
36ifheading == 2:
37forxinrange(0,3):
38iftablelist[x][num] ==0:
39pos[0] =x
40pos[1] =num
41ifheading == 3:
42numtemp =num
43forxinrange(0,3):
44iftablelist[x][numtemp] ==0:
45pos[0] =x
46pos[1] =numtemp
47ifnum ==0:
48numtemp = numtemp + 1
49ifnum == 2:
50numtemp = numtemp - 1
51returnpos
主程序部分也有改动,但都是些简单的改动,就不再贴了。
什么?我用代码水了一期?
领取专属 10元无门槛券
私享最新 技术干货