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 基础学习第二弹 类属性和实例属性
Aug 27 Python
Python3.6正式版新特性预览
Dec 15 Python
python 连接sqlite及简单操作
Jun 30 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
python中判断文件结束符的具体方法
Aug 04 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php桌面中心(一) 创建数据库
2007/03/11 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
Js的MessageBox
2006/12/03 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
jquery等待效果示例
2014/05/01 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
js文字横向滚动特效
2015/11/11 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
vue二级路由设置方法
2018/02/09 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
基于python操作ES实例详解
2019/11/16 Python
python 实现两个线程交替执行
2020/05/02 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
民生工程实施方案
2014/03/22 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
邓小平理论心得体会
2014/09/09 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
Java版 简易五子棋小游戏
2022/05/04 Java/Android
nginx配置指令之server_name的具体使用
2022/08/14 Servers