用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 测试实现方法
Dec 24 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
详解Django之auth模块(用户认证)
Apr 17 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python实现图片压缩代码实例
Aug 12 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Python模块future用法原理详解
Jan 20 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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
PHP中的加密功能
2006/10/09 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
javascript globalStorage类代码
2009/06/04 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
python安装及变量名介绍详解
2020/12/12 Python
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
文职个人求职信范文
2013/09/23 职场文书
大学生求职自荐信
2013/12/12 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
Python turtle实现贪吃蛇游戏
2021/06/18 Python
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA