python五子棋游戏的设计与实现


Posted in Python onJune 18, 2019

这个python的小案例是五子棋游戏的实现,在这个案例中,我们可以实现五子棋游戏的两个玩家在指定的位置落子,画出落子后的棋盘,并且根据函数判断出输赢的功能。

这个案例的思路如下所示:

首先,根据棋盘的样子画出棋盘
然后,对棋盘进行初始化,将可以落子的位置进行统一化处理
接下来,就是进入游戏的环节,双方轮流落子,落子后,并将棋盘画出
最后,根据落子的位置判断选手的的输赢情况,游戏结束

五子棋游戏的设计和实现

代码如下:

def main():
  print("五子棋游戏".center(50,'='))
  guige=int(input("请输入棋盘的规格:"))
 
  #按照五子棋的棋盘样式,画出棋盘
  print_init(guige)
 
  # 初始化棋盘
  wzq = {}
  for i in range(1, guige + 1):
    for j in range(1, guige + 1):
      wzq[(i, j)] = "+"
 
  #重画棋盘
  reprint(guige,wzq)
 
#按照五子棋的棋盘样式,画出棋盘
def print_init(guige):
  #打印出首行的棋盘列
  for i in range(guige):
    print("%4d"%(i+1),end='')
  print()
  #双重循环,第一重为棋盘的行,隔一行输出棋盘的行数
  for i in range(guige*2-1):
    #打印出类似 “1 +---+---+---+---+---+”,行号,+,—
    if(i%2==0):
      print("%-3d"%((i+2)/2),end='')
      #第二重循环,为棋盘的列,主要在于找出对应位置显示的内容
      for j in range(guige * 4 - 3):
        if (j % 4 == 0):
          print("+", end='')
        else:
          print("-", end='')
    #打印出类似“ |  |  |  |  |  |”
    else:
      print("%3s"%' ',end='')
      for j in range(guige*4-3):
        if(j%4==0):
          print("|",end='')
        else:
          print(" ",end='')
    #每行输出完成之后换行
    print()
 
#重画棋盘,对双方下子进行重画
def reprint(guige,wzq):
  for i in range(guige*guige) :
    if i % 2 == 0:
      xuanshou = "X"
    else:
      xuanshou = "O"
    # 双方轮流下棋
    while 1:
      print("现在轮到%s方落子" % xuanshou)
      position = input("请输入落子位置:")
      x_position = int(position.split()[0])
      y_position = int(position.split()[1])
      #判断输入的位置是否有子,有子一直输入,直到输入的位置无子
      if wzq[(x_position, y_position)] in ["X", "O"]:
        print("您输入的位置有子,请重新输入!")
      else:
        break
 
    if wzq[(x_position, y_position)]=="+":
      #重画棋盘
      wzq[(x_position, y_position)] = xuanshou
      for i in range(guige):
        print("%4d"%(i+1),end='')
      print()
      for i in range(guige*2-1):
        if(i%2==0):
          print("%-3d"%((i+2)/2),end='')
          for j in range(guige * 4 - 3):
            if (j % 4 == 0):
              x=(i+2)/2
              y=j/4+1
              print(wzq[(x,y)],end='')
            else:
              print("-", end='')
        else:
          print("%3s"%' ',end='')
          for j in range(guige*4-3):
            if(j%4==0):
              print("|",end='')
            else:
              print(" ",end='')
        print()
    else:
      isture=True
      print("您输入的位置已经有子,请重新输入!")
      # 判断输赢
    # 第一种情况
    wzq_win1(wzq,guige,xuanshou)
    # 第二种情况
    wzq_win2(wzq,guige,xuanshou)
    # 第三种情况
    wzq_win3(wzq,guige,xuanshou)
    # 第四种情况
    wzq_win4(wzq,guige,xuanshou)
  else:
    print("游戏结束,平局!")
 
# 判断输赢
def wzq_win1(wzq,guige,xuanshou):
  # 第一种输赢情况
  for i in range(1, guige + 1):
    for j in range(1, guige - 3):
      if (wzq[(i, j)] == wzq[(i, j + 1)] == wzq[(i, j + 2)] == wzq[(i, j + 3)] == wzq[(i, j + 4)] and wzq[(i, j)] in ["X", "O"]):
        print("%s获胜,游戏结束!" % xuanshou)
        exit()
def wzq_win2(wzq,guige,xuanshou):
  # 第二种输赢情况
  for i in range(1, guige - 3):
    for j in range(1, guige + 1):
      if (wzq[(i, j)] == wzq[(i + 1, j)] == wzq[(i + 2, j)] == wzq[(i + 3, j)] == wzq[(i + 4, j)] and wzq[(i, j)] in ["X", "O"]):
        print("%s获胜,游戏结束!" % xuanshou)
        exit()
def wzq_win3(wzq,guige,xuanshou):
  # 第三种输赢情况
  for i in range(1, guige - 3):
    for j in range(1, guige - 3):
      if (wzq[(i, j)] == wzq[(i + 1, j + 1)] == wzq[(i + 2, j + 2)] == wzq[(i + 3, j + 3)] == wzq[(i + 4, j + 4)] and wzq[(i, j)] in ["X", "O"]):
        print("%s获胜,游戏结束!" % xuanshou)
        exit()
def wzq_win4(wzq, guige, xuanshou):
  # 第四种输赢情况
  for i in range(1, guige - 3):
    for j in range(5, guige + 1):
      if (wzq[(i, j)] == wzq[(i +1, j - 1)] == wzq[(i + 2, j - 2)] == wzq[(i + 3, j - 3)] == wzq[(i + 4, j - 4)] and wzq[(i, j)] in ["X", "O"]):
        print("%s获胜,游戏结束!" % xuanshou)
        exit()
main()

结果如下:

======================五子棋游戏=======================
请输入棋盘的规格:8
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
6 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到X方落子
请输入落子位置:5 5
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---+---X---+---+---+
  |  |  |  |  |  |  |  |
6 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到O方落子
请输入落子位置:6 1
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---+---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到X方落子
请输入落子位置:4 4
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---+---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到O方落子
请输入落子位置:5 4
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到X方落子
请输入落子位置:6 6
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---+---X---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到O方落子
请输入落子位置:6 5
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---O---X---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到X方落子
请输入落子位置:3 3
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---X---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---+---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---O---X---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到O方落子
请输入落子位置:5 6
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---X---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---O---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---O---X---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
现在轮到X方落子
请输入落子位置:2 2
  1  2  3  4  5  6  7  8
1 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
2 +---X---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
3 +---+---X---+---+---+---+---+
  |  |  |  |  |  |  |  |
4 +---+---+---X---+---+---+---+
  |  |  |  |  |  |  |  |
5 +---+---+---O---X---O---+---+
  |  |  |  |  |  |  |  |
6 O---+---+---+---O---X---+---+
  |  |  |  |  |  |  |  |
7 +---+---+---+---+---+---+---+
  |  |  |  |  |  |  |  |
8 +---+---+---+---+---+---+---+
X获胜,游戏结束!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python itertools模块详解
May 09 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
python生成式的send()方法(详解)
May 08 Python
Python的装饰器使用详解
Jun 26 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
Numpy之random函数使用学习
Jan 29 Python
详解爬虫被封的问题
Apr 23 Python
使用python实现ftp的文件读写方法
Jul 02 Python
centos7之Python3.74安装教程
Aug 15 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
Python基础学习之时间转换函数用法详解
Jun 18 #Python
python实现简单五子棋游戏
Jun 18 #Python
Python基础学习之函数方法实例详解
Jun 18 #Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 #Python
Python弹出输入框并获取输入值的实例
Jun 18 #Python
python使用tkinter库实现五子棋游戏
Jun 18 #Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 #Python
You might like
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
range 标准化之获取
2011/08/28 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
JS hashMap实例详解
2016/05/26 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python操作Excel之xlsx文件
2017/03/24 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python读取并写入mat文件的方法
2019/07/12 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
新大陆软件面试题
2016/11/24 面试题
酒店秘书求职信范文
2014/02/17 职场文书
保安岗位职责
2014/02/21 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
搞笑爱情保证书
2014/04/29 职场文书
城管大队整治方案
2014/05/06 职场文书
组织鉴定材料
2014/06/02 职场文书
授权委托书
2014/09/17 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
Python语言内置数据类型
2022/02/24 Python
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
mysql序号rownum行号实现方式
2022/12/24 MySQL