用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 相关文章推荐
使用SAE部署Python运行环境的教程
May 05 Python
python获取文件扩展名的方法
Jul 06 Python
深入浅析python定时杀进程
Jun 06 Python
分享6个隐藏的python功能
Dec 07 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
python将字母转化为数字实例方法
Oct 04 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Python实现双向链表
May 25 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在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
一看就懂得Python的math模块
2018/10/21 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
浅析python中while循环和for循环
2019/11/19 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
毕业生求职信
2014/06/10 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
终止劳动合同协议书
2014/10/05 职场文书
实习单位鉴定意见
2015/06/04 职场文书
昆虫记读书笔记
2015/06/26 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android