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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
Python实现求最大公约数及判断素数的方法
May 26 Python
Python读取网页内容的方法
Jul 30 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
Python单元测试简单示例
Jul 03 Python
python socket 聊天室实例代码详解
Nov 14 Python
python圣诞树编写实例详解
Feb 13 Python
python实现堆排序的实例讲解
Feb 21 Python
520使用Python实现“我爱你”表白
May 20 Python
keras中的backend.clip用法
May 22 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+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
Js四则运算函数代码
2012/07/21 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
js点击选择文本的方法
2015/02/09 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python递归全排列实现方法
2018/08/18 Python
python配置文件写入过程详解
2019/10/19 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
公司出纳岗位职责
2015/03/31 职场文书
大学生入党群众意见书
2015/06/02 职场文书
社区低保工作总结2015
2015/07/23 职场文书