用Python设计一个经典小游戏


Posted in Python onMay 15, 2017

本文主要介绍如何用Python设计一个经典小游戏:猜大小。

在这个游戏中,将用到前面我介绍过的所有内容:变量的使用、参数传递、函数设计、条件控制和循环等,做个整体的总结和复习。

游戏规则:

初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额。

  1. 玩家选择下注,押大或押小;
  2. 输入下注金额;
  3. 摇3个骰子,11≤骰子总数≤18为大,3≤骰子总数≤10为小;
  4. 如果赢了,获得1倍金额,输了,扣除1倍金额,本金为0时,游戏结束。

程序运行结果是这样的:

用Python设计一个经典小游戏

现在,我们来梳理下思路。

  1. 我们先让程序知道如何摇骰子;
  2. 让程序知道什么是大,什么是小;
  3. 用户开始玩游戏,如果猜对,赢钱;猜错,输钱;输完后,游戏结束。

梳理清楚思路后,接下来开始敲代码。

摇骰子:

定义roll_dice函数,3个骰子,循环次数numbers为3,骰子点数points初始值为空,这里的参数传递用到的是之前讲到的关键词参数传递。

随机数生成用import random来实现。Python中最方便的就是有很多强大的库支持,现在我们可以直接导入一个random的内置库,用它来生成随机数。如:

1 import random
2 point = random.randrange(1,7)
3 # random.randrange(1,7)生成1-6的随机数
4 print(point)

print(point)后可以看到打印出的随机数,每次运行结果都是随机的。

接下来我们看下摇骰子这部分的完整代码:

import random
def roll_dice(numbers = 3,points = None):
 print('----- 摇骰子 -----')
 if points is None:
  points = []
  # points为空列表,后续可以插入新值到该列表
 while numbers > 0:
  point = random.randrange(1,7)
  points.append(point)
  # 用append()方法将point数值插入points列表中
  numbers = numbers - 1
  # 完成一次,numbers减1,当小于等于0时不再执行该循环
 return points

定大小:

11≤骰子总数≤18为大,3≤骰子总数≤10为小,代码如下:

def roll_result(total):
 isBig = 11 <= total <=18
 isSmall = 3 <= total <= 10
 if isBig:
  return '大'
 elif isSmall:
  return '小'

玩游戏:

初始本金1000元,默认赔率1倍;赢了,获得一倍金额,输了,扣除1倍金额;本金为0时,游戏结束。

def start_game():
 your_money = 1000
 while your_money > 0:
  print('----- 游戏开始 -----')
  choices = ['大','小']
  # choices赋值为大和小,用户需输入二者之一为正确
  your_choice = input('请下注,大 or 小:')
  your_bet = input('下注金额:')
  if your_choice in choices:
   points = roll_dice()
   # 调用roll_dice函数
   total = sum(points)
   # sum为相加,将3个骰子的结果相加
   youWin = your_choice == roll_result(total)
   if youWin:
    print('骰子点数:',points)
    print('恭喜,你赢了 {} 元,你现在有 {} 元本金'.format(your_bet,your_money + int(your_bet)))
    # your_bet是字符串格式,这里需要转化为int类型进行计算
    your_money = your_money + int(your_bet)
    # 最新本金
   else:
    print('骰子点数:',points)
    print('很遗憾,你输了 {} 元,你现在有 {} 元本金'.format(your_bet, your_money - int(your_bet)))
    your_money = your_money - int(your_bet)
  else:
   print('格式有误,请重新输入')
   # 如果输入的不是choices列表中的大或小,则为格式有误
 else:
  print('游戏结束')
start_game()

到这里,我们就完成了该游戏三大部分的设计,大家一定要仔细思考,梳理设计思路,动手敲出代码才好。

最后,附【猜大小】游戏的完整代码

import random

def roll_dice(numbers = 3,points = None):
 print('----- 摇骰子 -----')
 if points is None:
  points = []
 while numbers > 0:
  point = random.randrange(1,7)
  points.append(point)
  numbers = numbers - 1
 return points

def roll_result(total):
 isBig = 11 <= total <=18
 isSmall = 3 <= total <= 10
 if isBig:
  return '大'
 elif isSmall:
  return '小'

def start_game():
 your_money = 1000
 while your_money > 0:
  print('----- 游戏开始 -----')
  choices = ['大','小']
  your_choice = input('请下注,大 or 小:')
  your_bet = input('下注金额:')
  if your_choice in choices:
   points = roll_dice()
   total = sum(points)
   youWin = your_choice == roll_result(total)
   if youWin:
    print('骰子点数:',points)
    print('恭喜,你赢了 {} 元,你现在有 {} 元本金'.format(your_bet,your_money + int(your_bet)))
    your_money = your_money + int(your_bet)
   else:
    print('骰子点数:',points)
    print('很遗憾,你输了 {} 元,你现在有 {} 元本金'.format(your_bet, your_money - int(your_bet)))
    your_money = your_money - int(your_bet)
  else:
   print('格式有误,请重新输入')
 else:
  print('游戏结束')

start_game()

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python struct模块解析
Jun 12 Python
Djang中静态文件配置方法
Jul 30 Python
python实现Decorator模式实例代码
Feb 09 Python
解决pycharm界面不能显示中文的问题
May 23 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
详解python Todo清单实战
Nov 01 Python
python向图片里添加文字
Nov 26 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
python进度条显示之tqmd模块
Aug 22 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python入门学习关于for else的特殊特性讲解
Nov 20 Python
Python 对象中的数据类型
May 13 #Python
Python中matplotlib中文乱码解决办法
May 12 #Python
使用Python对Csv文件操作实例代码
May 12 #Python
python 读取excel文件生成sql文件实例详解
May 12 #Python
Python实现读取并保存文件的类
May 11 #Python
Python使用defaultdict读取文件各列的方法
May 11 #Python
python中nan与inf转为特定数字方法示例
May 11 #Python
You might like
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php中namespace use用法实例分析
2016/01/22 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
简单了解Python write writelines区别
2020/02/27 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
水利学院求职自荐书
2014/02/01 职场文书
2014小学年度工作总结
2014/12/20 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL