人机对战初体验 Python基于Pygame实现四子棋游戏

               

人机对战初体验—四子棋游戏

继去年3月人机大战引发全球瞩目以来,围棋AI(人工智能)再度引发跨领域的关注:一个叫Master的围棋AI,几天时间,面对中日韩顶尖职业围棋选手,已取得60胜0败的恐怖战绩,展现出的围棋技艺已经到了人类理解不了的程度。这可以视为人工智能在围棋领域的一次“大征服”,而在此之外的意义则是,告诉了我们人工智能在征服一项领域或职业时,究竟速度有多快。理解这一点,对于人类,乃至每一个人,都非常重要。通过本实验的学习,可以对人机对战有初步了解。

一、实验介绍

1.1 实验内容

实验利用Python模拟AI和玩家进行四子棋游戏,利用游戏实验Pygame库,为游戏提供界面和操作支持。AI算法借用蒙特卡洛搜索树思想。通过设置AI的难度系数,即AI所能考虑到的未来棋子的可能走向,从而选择出最佳的方案和玩家对抗。难度系数越大,AI搜索范围越广,它所能做出的决定越明智。

游戏最终效果截图:

此处输入图片的描述

1.2 实验知识点

  • Pygame的基础操作
  • 蒙特卡洛搜索树

1.3 实验环境

  • Python2.7
  • gedit

1.4 适合人群

本课程难度一般,属于初级课程,适合具有Python基础并对Pygame有所了解的用户学习。

1.5 代码获取

你可以通过下面命令将代码下载到实验楼环境中,作为参照对比进行学习。

$ wget http://labfile.oss.aliyuncs.com/courses/746/fourinrow.py

二、四子棋游戏

四子棋游戏是在7*6的格子中。轮流从格子最上方落下棋子。棋子会落在该列格子中最下面的空格子里。先将四个棋子连成一条线(水平直线,竖直直线,或倾斜直线)者获胜,游戏结束。

三、项目文件结构

此处输入图片的描述

四、实验步骤

4.1 开发准备

在Code目录下进行创建工程文件Fourinrow,在终端执行命令

cd Code && mkdir Fourinrow

下载本次实验所需的图片资源到Fourinrow文件下

$ cd Fourinrow$ wget http://labfile.oss.aliyuncs.com/courses/746/images.zip$ unzip images.zip

此处输入图片的描述

安装依赖包

$ sudo apt-get update$ sudo apt-get install python-pygame

4.2 游戏流程

此处输入图片的描述

4.3 初始化变量

用到的变量包括,棋盘的宽度,长度(可以修改,设计不同规格的棋盘),难度系数,棋子大小以及一些设计坐标变量的设定。

FourinRow.py 文件中输入如下代码:

import random, copy, sys, pygamefrom pygame.locals import *BOARDWIDTH = 7  # 棋子盘的宽度栏数BOARDHEIGHT = 6 # 棋子盘的高度栏数assert BOARDWIDTH >= 4 and BOARDHEIGHT >= 4, 'Board must be at least 4x4.'#python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。#可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。DIFFICULTY = 2 # 难度系数,计算机能够考虑的移动级别               #这里2表示,考虑对手走棋的7种可能性及如何应对对手的7种走法SPACESIZE = 50 # 棋子的大小FPS = 30 # 屏幕的更新频率,即30/sWINDOWWIDTH = 640  # 游戏屏幕的宽度像素WINDOWHEIGHT = 480 # 游戏屏幕的高度像素XMARGIN = int((WINDOWWIDTH - BOARDWIDTH * SPACESIZE) / 2)#X边缘坐标量,即格子栏的最左边YMARGIN = int((WINDOWHEIGHT - BOARDHEIGHT * SPACESIZE) / 2)#Y边缘坐标量,即格子栏的最上边BRIGHTBLUE = (0, 50, 255)#蓝色WHITE = (255, 255, 255)#白色BGCOLOR = BRIGHTBLUETEXTCOLOR = WHITERED = 'red'BLACK = 'black'EMPTY = NoneHUMAN = 'human'COMPUTER = 'computer'

除此之外我们还需要定义一些pygame的全局变量。这些全局变量在之后的各个模块中会被多次调用。其中很多是存储载入图片的变量,准备工作有点长,请大家耐心一点哦。

#初始化pygame的各个模块pygame.init()#初始化了一个Clock对象FPSCLOCK = pygame.time.Clock()#创建游戏窗口DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))#游戏窗口标题pygame.display.set_caption(u'four in row')#Rect(left,top,width,height)用来定义位置和宽高REDPILERECT = pygame.Rect(int(SPACESIZE / 2), WINDOWHEIGHT - int(3 * SPACESIZE / 2), SPACESIZE, SPACESIZE)#这里创建的是窗口中左下角和右下角的棋子BLACKPILERECT = pygame.Rect(WINDOWWIDTH - int(3 * SPACESIZE / 2), WINDOWHEIGHT - int(3 * SPACESIZE / 2), SPACESIZE, SPACESIZE)#载入红色棋子图片REDTOKENIMG = pygame.image.load('4row_red.png')#将红色棋子图片缩放为SPACESIZEREDTOKENIMG = pygame.transform.smoothscale(REDTOKENIMG, (SPACESIZE, SPACESIZE))#载入黑色棋子图片BLACKTOKENIMG = pygame.image.load('4row_black.png')#将黑色棋子图片缩放为SPACESIZEBLACKTOKENIMG = pygame.transform.smoothscale(BLACKTOKENIMG, (SPACESIZE, SPACESIZE))#载入棋子面板图片BOARDIMG = pygame.image.load('4row_board.png')#将棋子面板图片缩放为SPACESIZEBOARDIMG = pygame.transform.smoothscale(BOARDIMG, (SPACESIZE, SPACESIZE))#载入人胜利时图片HUMANWINNERIMG = pygame.image.load('4row_humanwinner.png')#载入AI胜时图片COMPUTERWINNERIMG = pygame.image.load('4row_computerwinner.png')#载入平局提示图片TIEWINNERIMG = pygame.image.load('4row_tie.png')#返回一个Rect实例WINNERRECT = HUMANWINNERIMG.get_rect()#游戏窗口中间位置坐标WINNERRECT.center = (int(WINDOWWIDTH / 2), int(WINDOWHEIGHT / 2))#载入操作提示图片ARROWIMG = pygame.image.load('4row_arrow.png')#返回一个Rect实例ARROWRECT = ARROWIMG.get_rect()#操作提示的左位置ARROWRECT.left = REDPILERECT.right + 10 #将操作提示与下方红色棋子实例在纵向对齐ARROWRECT.centery = REDPILERECT.centery

至此我们完成了前期的准备工作。

4.4 棋盘设计

初始时,将棋盘二维列表清空,然后根据玩家和AI的走法将棋盘相应位置设定颜色。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值