用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 06 Python
Python中super函数的用法
Nov 17 Python
Python读取word文本操作详解
Jan 22 Python
python实现图片文件批量重命名
Mar 23 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
python区分不同数据类型的方法
Oct 14 Python
python学生管理系统的实现
Apr 05 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
在Python中字典按值排序的实现方法
Nov 12 Python
Python Pandas pandas.read_sql函数实例用法
Jun 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
第三节 定义一个类 [3]
2006/10/09 PHP
php学习笔记之面向对象
2014/11/08 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
php进程间通讯实例分析
2016/07/11 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue观察模式浅析
2018/09/25 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python实现猜数字小游戏
2020/03/24 Python
Python返回数组/List长度的实例
2018/06/23 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
应届生财务会计求职信
2013/11/05 职场文书
外语学院毕业生的自我鉴定
2013/11/28 职场文书
医院总经理职责
2013/12/26 职场文书
论文评语大全
2014/04/29 职场文书
小学生交通安全寄语
2015/02/27 职场文书
辞职信如何写
2015/02/27 职场文书