用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中__new__与__init__方法的区别详解
May 04 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python三级目录展示的实现方法
Sep 28 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Python中super函数的用法
Nov 17 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
详解Python中的分支和循环结构
Feb 11 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
python中pivot()函数基础知识点
Jan 03 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
零基础php编程好学吗
2019/10/11 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
学习python (1)
2006/10/31 Python
python 网络爬虫初级实现代码
2016/02/27 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
python中if及if-else如何使用
2020/06/02 Python
德国网上药房:Apotal
2017/04/04 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
学雷锋演讲稿汇总
2014/05/10 职场文书
校长创先争优承诺书
2014/08/30 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
大学生团员个人总结
2015/02/14 职场文书
建议书的格式及范文
2015/09/14 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android