用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之玩转字符串(2)
Sep 14 Python
解析Python编程中的包结构
Oct 25 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python win32com 操作Exce的l简单方法(必看)
May 25 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
Python的collections模块真的很好用
Mar 01 Python
python基础之停用词过滤详解
Apr 21 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 工厂模式使用方法
2010/05/18 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
Python help()函数用法详解
2014/03/11 Python
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python实现机器人行走效果
2018/01/29 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python3 flask实现文件上传功能
2020/03/20 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
Python Process多进程实现过程
2019/10/22 Python
Python运行DLL文件的方法
2020/01/17 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
工作评语大全
2014/04/26 职场文书
公司授权委托书样本
2014/09/15 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
Mysql 设置boolean类型的操作
2021/06/04 MySQL
Redis的字符串是如何实现的
2021/10/24 Redis