用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入门篇之数字
Oct 20 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python tkinter图形界面代码统计工具
Sep 18 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
Python函数的默认参数设计示例详解
Dec 01 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 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高级对象构建 多个构造函数的使用
2012/02/05 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
node.js中watch机制详解
2014/11/17 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用python Django做网页
2013/11/04 Python
Python入门篇之字符串
2014/10/17 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python制作数据导入导出工具
2015/07/31 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
函授本科自我鉴定
2013/11/03 职场文书
普通话宣传标语
2014/06/26 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
远程培训的心得体会
2014/09/01 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
现役军人家属慰问信
2015/03/24 职场文书
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript