使用Python编写一个简单的tic-tac-toe游戏的教程

 更新时间:2015年04月16日 11:32:00   投稿:goldensun  
这篇文章主要介绍了使用Python编写一个简单的tic-tac-toe游戏的教程,有利于Python初学者进行上手实践,需要的朋友可以参考下

 这个教程,我们将展示如何用python创建一个井字游戏。 其中我们将使用函数、数组、if条件语句、while循环语句和错误捕获等。

首先我们需要创建两个函数,第一个函数用来显示游戏板:
 

def print_board():
  for i in range(0,3):
    for j in range(0,3):
      print map[2-i][j],
      if j != 2:
        print "|",
    print ""

这我们使用两个for循环来遍历map,该map是一个包含了位置信息的二维数组。

游戏板看起来是这样的:
 

|  | 
|  | 
|  |
 
X | X | 
O | X | O
 | O | X
 
X | X | X
X | X | X
X | X | X

 
下面我们需要一个函数check_done()来检查游戏是否结束。如果结束,则返回True并打印消息。
 

def check_done():
  for i in range(0,3):
    if map[i][0] == map[i][1] == map[i][2] != " " \
    or map[0][i] == map[1][i] == map[2][i] != " ":
      print turn, "won!!!"
      return True
     
  if map[0][0] == map[1][1] == map[2][2] != " " \
  or map[0][2] == map[1][1] == map[2][0] != " ":
    print turn, "won!!!"
    return True
 
  if " " not in map[0] and " " not in map[1] and " " not in map[2]:
    print "Draw"
    return True
     
  return False

有几个地方需要检查,首先检查水平和垂直方向,是否有一行或一列不为空且包含有三个相同的符号,然后我们再检查斜方向。如果上面有一个方向满足,游戏结束并打印“Won!!!”。请注意检查变量改变,它用来标记当前是哪一位玩家。

同时我们需要检查当前游戏板是否被填满且没有人获胜,游戏平局。

有了上面的两个函数,下面我们创建3个变量:
 

turn = "X"
map = [[" "," "," "],
    [" "," "," "],
    [" "," "," "]]
done = False

    turn : 轮到谁
    map : 游戏板
    done : 游戏是否结束

现在启动游戏:
 

while done != True:
  print_board()
   
  print turn, "'s turn"
  print
 
  moved = False
  while moved != True:

这里使用了while循环直到游戏结束并返回true.在这个循环里面,使用了另外一个while循环来检查玩家是否移动,如果玩家没有移动,则程序会跳到下一次循环。

下一步告诉玩家怎么玩:
 

print "Please select position by typing in a number between 1 and 9, see below for which number that is which position..."
    print "7|8|9"
    print "4|5|6"
    print "1|2|3"
    print
 
try:
      pos = input("Select: ")
      if pos <=9 and pos >=1:

我们期望玩家输入一个数字,检查该数字是否是在1到9之间。另外,我们这里需要一段错误处理逻辑,我们还需要需要检查玩家是否能移动到一个位置:
 

Y = pos/3
        X = pos%3
        if X != 0:
          X -=1
        else:
           X = 2
           Y -=1

以下是全部的代码:
 

def print_board():
  for i in range(0,3):
    for j in range(0,3):
      print map[2-i][j],
      if j != 2:
        print "|",
    print ""
 
 
def check_done():
  for i in range(0,3):
    if map[i][0] == map[i][1] == map[i][2] != " " \
    or map[0][i] == map[1][i] == map[2][i] != " ":
      print turn, "won!!!"
      return True
     
  if map[0][0] == map[1][1] == map[2][2] != " " \
  or map[0][2] == map[1][1] == map[2][0] != " ":
    print turn, "won!!!"
    return True
 
  if " " not in map[0] and " " not in map[1] and " " not in map[2]:
    print "Draw"
    return True
     
 
  return False
 
 
 
 
 
turn = "X"
map = [[" "," "," "],
    [" "," "," "],
    [" "," "," "]]
done = False
 
 
while done != True:
  print_board()
   
  print turn, "'s turn"
  print
 
  moved = False
  while moved != True:
    print "Please select position by typing in a number between 1 and 9,\
    see below for which number that is which position..."
    print "7|8|9"
    print "4|5|6"
    print "1|2|3"
    print
 
    try:
      pos = input("Select: ")
      if pos <=9 and pos >=1:
        Y = pos/3
        X = pos%3
        if X != 0:
          X -=1
        else:
           X = 2
           Y -=1
           
        if map[Y][X] == " ":
          map[Y][X] = turn
          moved = True
          done = check_done()
 
          if done == False:
            if turn == "X":
              turn = "O"
            else:
              turn = "X"
         
       
    except:
      print "You need to add a numeric value"

相关文章

  • python使用if语句实现一个猜拳游戏详解

    python使用if语句实现一个猜拳游戏详解

    这篇文章主要介绍了python使用if语句实现一个猜拳游戏详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python ZipFile模块详解

    Python ZipFile模块详解

    Python压缩和解压缩的使用方法详解,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo。
    2013-11-11
  • Python处理字符串的常用函数实例总结

    Python处理字符串的常用函数实例总结

    在数据分析中,特别是文本分析中,字符处理需要耗费极大的精力,因而了解字符处理对于数据分析而言,也是一项很重要的能力,这篇文章主要给大家介绍了关于Python处理字符串的常用函数,需要的朋友可以参考下
    2021-11-11
  • Python图片转换成矩阵,矩阵数据转换成图片的实例

    Python图片转换成矩阵,矩阵数据转换成图片的实例

    今天小编就为大家分享一篇Python图片转换成矩阵,矩阵数据转换成图片的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    这篇文章主要介绍了python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python import 引用上上上级包的三种方法

    python import 引用上上上级包的三种方法

    这篇文章主要介绍了python import 引用上上上级包的三种方法包的三种方法,需要的朋友可以参考下
    2023-02-02
  • 解决uWSGI的编码问题详解

    解决uWSGI的编码问题详解

    最近在用Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时出现了错误,通过查找相关的资料终于解决了,所以想着分享出来给大家,下面这篇文章主要介绍了解决uWSGI的编码问题的相关资料,需要的朋友可以参考下。
    2017-03-03
  • TensorFlow隐藏操作探索(张量操作和定制模型算法)

    TensorFlow隐藏操作探索(张量操作和定制模型算法)

    这篇文章主要为大家介绍了TensorFlow隐藏操作探索(张量操作和定制模型算法),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • numpy创建神经网络框架

    numpy创建神经网络框架

    本文介绍了使用numpy从零搭建了一个类似于pytorch的深度学习框架,可以用在很多地方,有需要的朋友可以自行参考一下
    2021-08-08
  • Matplotlib使用和绘制二维图表教程

    Matplotlib使用和绘制二维图表教程

    Matplotlib是一个强大的Python绘图库,可以用来绘制各种静态、动态和交互式的图表,文章介绍了Matplotlib的基本概念、绘制折线图、散点图、柱状图、直方图和饼图等方法,并详细解释了Matplotlib的三层结构
    2025-02-02

最新评论