首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python学习笔记3——三子棋(3)

终于考完试了,让我们继续三子棋。

之前,我们的机器人是傻傻地随机落子,现在,让我们来让它变得聪明。要变得聪明,在三子棋中还是比较容易实现的,无非是两个方面:

连子

堵子

从优先获胜的角度来看,连子的优先级应该更高一些。由于我们只是用来熟悉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

主程序部分也有改动,但都是些简单的改动,就不再贴了。

什么?我用代码水了一期?

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G0QM0J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券