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连接mysql数据库示例(做增删改操作)
Dec 31 Python
python两种遍历字典(dict)的方法比较
May 29 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
python简单判断序列是否为空的方法
Jun 30 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python 生成器和迭代器的原理解析
Oct 12 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
python统计文章中单词出现次数实例
Feb 27 Python
用Python创建简易网站图文教程
Jun 11 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
JAVA/JSP学习系列之六
2006/10/09 PHP
一周学会PHP(视频)Http下载
2006/12/12 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python删除不需要的python文件方法
2018/04/24 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
Python标准库itertools的使用方法
2020/01/17 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
幼儿园大班教学反思
2014/02/10 职场文书
感恩的演讲稿
2014/05/06 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
深入理解Vue的数据响应式
2021/05/15 Vue.js