Python 实现劳拉游戏的实例代码(四连环、重力四子棋)


Posted in Python onMarch 03, 2021

游戏规则:双方轮流选择棋盘的列号放进自己的棋子,
若棋盘上有四颗相同型号的棋子在一行、一列或一条斜线上连接起来,
则使用该型号棋子的玩家就赢了!

程序实现游戏,并将每局的数据保存到本地的文件中

首先我们要创建一个空白的棋盘

def into():#初始空白棋盘
  for i in range(6):
    list_width=[]
    for j in range(8):
      list_width.append(' '+'|')
    screen.append(list_width)

然后呢 我们再写一个输赢判断

def eeferee():#判断输赢
  #判断行
  for i in range(6):
    for j in range(8-3):
      if screen[i][j][0]==screen[i][j+1][0]==screen[i][j+2][0]==screen[i][j+3][0] and screen[i][j][0]!=' ':
        return False
  #判断列
  for i in range(6-3):
    for j in range(8):
      if screen[i][j][0]==screen[i+1][j][0]==screen[i+2][j][0]==screen[i+3][j][0] and screen[i][j][0]!=' ':
        return False
  #判断斜线
  for i in range(6-3):
    for j in range(8-3):
      if screen[i][j][0]==screen[i+1][j+1][0]==screen[i+2][j+2][0]==screen[i+3][j+3][0] and screen[i][j][0]!=' ':
        return False
      if j>=3:
        if screen[i][j][0] == screen[i+1][j-1][0] == screen[i+2][j-2][0] == screen[i+3][j-3][0] and screen[i][j][0] != ' ':
          return False
  return True

下完每步棋,我们要显示一下棋盘,下面写一下棋盘的显示

def screen_print():#打印棋盘
  print('',1,2,3,4,5,6,7,8,sep=' ')
  print('', 1, 2, 3, 4, 5, 6, 7, 8, sep=' ', file=file, flush=True)
  for i in range(6):
    print('|',end='')
    print('|', end='', file=file, flush=True)
    for j in range(8):
      print(screen[i][j],end='')
      print(screen[i][j], end='', file=file, flush=True)
    print('')
    print('', file=file, flush=True)
  print('——'*(9))
  print('——' * (9), file=file, flush=True)

下面是劳拉的自动下棋

def lara(): # 劳拉
  global screen
  while True:
    coordinate=random.randint(0,7)
    flag = True
    high = 0
    for i in range(5,-1,-1):
      if screen[i][coordinate][0] == ' ':
        high = i
        break
      if i == 0 and screen[i][coordinate][0] != ' ':
        flag = False
    if flag:
      print('>>>轮到我了,我把O棋子放在第%d列...'%(coordinate+1))
      print('>>>轮到我了,我把O棋子放在第%d列...' % (coordinate + 1), file=file, flush=True)
      screen[high][coordinate] = 'O' + '|'
      break
  screen_print()

下棋中 我们还要判断棋盘是否被下满了

def full():
  for i in screen:
    for j in i:
      if j[0] == ' ':
        return True
  return False

最后 我们完成一下玩家的下棋

def user():
  global screen
  while True:
    print(">>>轮到你了,你放X棋子,请选择列号(1-8): ",end='')
    print(">>>轮到你了,你放X棋子,请选择列号(1-8): ", end='', file=file, flush=True)
    coordinate = int(input())-1
    if coordinate not in range(7):
      print('输入错误的列号,请重新输入')
      print('输入错误的列号,请重新输入', file=file, flush=True)
      continue
    flag=True
    high=0
    for i in range(5,-1,-1):
      if screen[i][coordinate][0] == ' ':
        high=i
        break
      if i==0 and screen[i][coordinate][0] != ' ':
        flag = False
        print('你输入的地方已经有棋子了,请重新输入')
        print('你输入的地方已经有棋子了,请重新输入', file=file, flush=True)
    if flag:
      screen[high][coordinate] = 'X' + '|'
      break
  screen_print()

完整代码如下:

import random

screen = [] #棋盘列表

def into():#初始空白棋盘
  for i in range(6):
    list_width=[]
    for j in range(8):
      list_width.append(' '+'|')
    screen.append(list_width)

def screen_print():#打印棋盘
  print('',1,2,3,4,5,6,7,8,sep=' ')
  print('', 1, 2, 3, 4, 5, 6, 7, 8, sep=' ', file=file, flush=True)
  for i in range(6):
    print('|',end='')
    print('|', end='', file=file, flush=True)
    for j in range(8):
      print(screen[i][j],end='')
      print(screen[i][j], end='', file=file, flush=True)
    print('')
    print('', file=file, flush=True)
  print('——'*(9))
  print('——' * (9), file=file, flush=True)

def eeferee():#判断输赢
  #判断行
  for i in range(6):
    for j in range(8-3):
      if screen[i][j][0]==screen[i][j+1][0]==screen[i][j+2][0]==screen[i][j+3][0] and screen[i][j][0]!=' ':
        return False
  #判断列
  for i in range(6-3):
    for j in range(8):
      if screen[i][j][0]==screen[i+1][j][0]==screen[i+2][j][0]==screen[i+3][j][0] and screen[i][j][0]!=' ':
        return False
  #判断斜线
  for i in range(6-3):
    for j in range(8-3):
      if screen[i][j][0]==screen[i+1][j+1][0]==screen[i+2][j+2][0]==screen[i+3][j+3][0] and screen[i][j][0]!=' ':
        return False
      if j>=3:
        if screen[i][j][0] == screen[i+1][j-1][0] == screen[i+2][j-2][0] == screen[i+3][j-3][0] and screen[i][j][0] != ' ':
          return False
  return True

def full():
  for i in screen:
    for j in i:
      if j[0] == ' ':
        return True
  return False

def lara(): # 劳拉
  global screen
  while True:
    coordinate=random.randint(0,7)
    flag = True
    high = 0
    for i in range(5,-1,-1):
      if screen[i][coordinate][0] == ' ':
        high = i
        break
      if i == 0 and screen[i][coordinate][0] != ' ':
        flag = False
    if flag:
      print('>>>轮到我了,我把O棋子放在第%d列...'%(coordinate+1))
      print('>>>轮到我了,我把O棋子放在第%d列...' % (coordinate + 1), file=file, flush=True)
      screen[high][coordinate] = 'O' + '|'
      break
  screen_print()

def user():
  global screen
  while True:
    print(">>>轮到你了,你放X棋子,请选择列号(1-8): ",end='')
    print(">>>轮到你了,你放X棋子,请选择列号(1-8): ", end='', file=file, flush=True)
    coordinate = int(input())-1
    if coordinate not in range(7):
      print('输入错误的列号,请重新输入')
      print('输入错误的列号,请重新输入', file=file, flush=True)
      continue
    flag=True
    high=0
    for i in range(5,-1,-1):
      if screen[i][coordinate][0] == ' ':
        high=i
        break
      if i==0 and screen[i][coordinate][0] != ' ':
        flag = False
        print('你输入的地方已经有棋子了,请重新输入')
        print('你输入的地方已经有棋子了,请重新输入', file=file, flush=True)
    if flag:
      screen[high][coordinate] = 'X' + '|'
      break
  screen_print()


if __name__ == '__main__':
  file=open('四连环Log-%d.txt'%random.randint(10000,99999),'w',encoding='utf-8')
  print("""Hi,我是劳拉,我们来玩一局四连环。我用O型棋子,你用X型棋子。
游戏规则:双方轮流选择棋盘的列号放进自己的棋子,
    若棋盘上有四颗相同型号的棋子在一行、一列或一条斜线上连接起来,
    则使用该型号棋子的玩家就赢了!""")
  print("""Hi,我是劳拉,我们来玩一局四连环。我用O型棋子,你用X型棋子。
  游戏规则:双方轮流选择棋盘的列号放进自己的棋子,
      若棋盘上有四颗相同型号的棋子在一行、一列或一条斜线上连接起来,
      则使用该型号棋子的玩家就赢了!""", file=file, flush=True)
  into()
  print('开始了!这是棋盘的初始状态:')
  print('开始了!这是棋盘的初始状态:', file=file, flush=True)
  screen_print()
  flag=True
  while eeferee() and full():
    lara()
    if not eeferee() and full():
      flag=False
      break
    user()
  if full():
    print('******* 难分胜负!@_@')
    print('******* 难分胜负!@_@', file=file, flush=True)
  if flag:
    print('******* 好吧,你赢了!^_^')
    print('******* 好吧,你赢了!^_^', file=file, flush=True)
  else:
    print('******* 耶,我赢了!^_^')
    print('******* 耶,我赢了!^_^', file=file, flush=True)

效果图:

Python 实现劳拉游戏的实例代码(四连环、重力四子棋)

到此这篇关于Python 实现劳拉游戏的实例代码(四连环、重力四子棋)的文章就介绍到这了,更多相关Python 实现劳拉游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Python3.x中自定义比较函数
Apr 24 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
python删除过期log文件操作实例解析
Jan 31 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
Django之无名分组和有名分组的实现
Apr 16 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 #Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 #Python
Pytorch 中的optimizer使用说明
Mar 03 #Python
解决pytorch 的state_dict()拷贝问题
Mar 03 #Python
解决pytorch 保存模型遇到的问题
Mar 03 #Python
解决pytorch 模型复制的一些问题
Mar 03 #Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 #Python
You might like
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
银行实习自我鉴定
2013/10/12 职场文书
护理专业的自荐信
2013/10/22 职场文书
小学生暑假感言
2014/02/06 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
小学教师个人总结
2015/02/05 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
python基础之文件处理知识总结
2021/05/23 Python
SQL Server中搜索特定的对象
2022/05/25 SQL Server