用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字典序问题实例
Sep 26 Python
django基础之数据库操作方法(详解)
May 24 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
python playwright 自动等待和断言详解
Nov 27 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开发中的中文编码问题
2013/08/08 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
php数组和链表的区别总结
2019/09/20 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python交互式图形编程实例(三)
2017/11/17 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
"引用"与多态的关系
2013/02/01 面试题
毕业生自我推荐
2013/11/04 职场文书
教师个人鉴定材料
2014/02/08 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
小学运动会入场词
2015/07/18 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
你会写请假条吗?
2019/06/26 职场文书
delete in子查询不走索引问题分析
2022/07/07 MySQL