用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根据出生日期获得年龄的方法
Mar 31 Python
python保存字符串到文件的方法
Jul 01 Python
20招让你的Python飞起来!
Sep 27 Python
Python 统计字数的思路详解
May 08 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python 追踪except信息方式
Apr 25 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
python中使用asyncio实现异步IO实例分析
Feb 26 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
yii框架中的Url生产问题小结
2012/01/16 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP7新增函数
2021/03/09 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
python实现一次创建多级目录的方法
2015/05/15 Python
python自动zip压缩目录的方法
2015/06/28 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
基于python监控程序是否关闭
2020/01/14 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
pandas分组聚合详解
2020/04/10 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
就业自荐信
2013/12/04 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
干部考核工作总结2015
2015/07/24 职场文书
《司马光》教学反思
2016/02/22 职场文书