用Python设计一个经典小游戏
这是关于Python的第9篇文章,介绍如何用Python设计一个经典小游戏:猜大小。
在这个游戏中,将用到前面我介绍过的所有内容:变量的使用、参数传递、函数设计、条件控制和循环等,做个整体的总结和复习。
游戏规则:
初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额。
- 玩家选择下注,押大或押小;
- 输入下注金额;
- 摇3个骰子,11≤骰子总数≤18为大,3≤骰子总数≤10为小;
- 如果赢了,获得1倍金额,输了,扣除1倍金额,本金为0时,游戏结束。
程序运行结果是这样的:

现在,我们来梳理下思路。
- 我们先让程序知道如何摇骰子;
- 让程序知道什么是大,什么是小;
- 用户开始玩游戏,如果猜对,赢钱;猜错,输钱;输完后,游戏结束。
梳理清楚思路后,接下来开始敲代码。
摇骰子:
定义roll_dice函数,3个骰子,循环次数numbers为3,骰子点数points初始值为空,这里的参数传递用到的是之前讲到的关键词参数传递。
随机数生成用import random来实现。Python中最方便的就是有很多强大的库支持,现在我们可以直接导入一个random的内置库,用它来生成随机数。如:
import random point = random.randrange(1,7) # random.randrange(1,7)生成1-6的随机数 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版本,3.6;PyCharm版本,2016.2;电脑:Mac
----- End -----
作者:杜王丹,微信公众号:杜王丹,互联网产品经理。

用Python设计一个经典小游戏的更多相关文章
- python做一个数独小游戏
最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...
- 一个js小游戏----总结
花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用web ...
- JS练习实例--编写经典小游戏俄罗斯方块
最近在学习JavaScript,想编一些实例练练手,之前编了个贪吃蛇,但是实现时没有注意使用面向对象的思想,实现起来也比较简单所以就不总结了,今天就总结下俄罗斯方块小游戏的思路和实现吧(需要下载代码也 ...
- 如何在CentOS上安装一个2048小游戏
如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由 ...
- 制作一个 JavaScript 小游戏
简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...
- python【控制台】小游戏--贪吃蛇
传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...
- Java课程设计—拿火柴小游戏
这是我的Java课程设计,做的是拿火柴小游戏.要求是人机互拿火柴,拿到最后一根火柴者赢.最主要的就是处理好多线程,其他的就是添加组件啥的,那个不难,我就给出以下多线程的代码吧. import java ...
- Python开发接水果小游戏
我研发的Python游戏引擎Pylash已经更新到1.4了.如今我们就来使用它完毕一个极其简单的小游戏:接水果. 下面是游戏截图: 游戏操作说明:点击屏幕左右两边或者使用键盘方向键控制人物移动.使人物 ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
随机推荐
- Seajs使用实例入门介绍
本文所用例子的代码目录结构: seajs example |--sea-module //存在依赖文件 |--jquery |--jqeury.js |--sea.js |--static //存放自 ...
- java 接口默认修饰符问题
package test; public interface InterfaceTest { void todo();} /** * 以下是反编译的内容,接口里的方法默认都是public的.abstr ...
- 服务器中 配置phpstudy一键安装包
在线phpstudy一键安装包 安装版: (很简单) wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin ...
- Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践
参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分 ...
- Java内存泄露实例
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
- UWP: 掌握编译型绑定 x:Bind
在 UWP 开发中,我们在进行数据绑定时,除了可以使用传统的绑定 Binding,也可以使用全新的 x:Bind,由于后者是在程序编译时进行初始化操作(不同于 Binding,它是在运行时创建.初始化 ...
- java线程池ThreadPoolExector源码分析
java线程池ThreadPoolExector源码分析 今天研究了下ThreadPoolExector源码,大致上总结了以下几点跟大家分享下: 一.ThreadPoolExector几个主要变量 先 ...
- 微信小程序,前端大梦想(三)
微信小程序的事件及生命周期 继续下节课,今天我们还是从四个方面来了解小程序: ●常用事件和事件冒泡 ●配置 ●app生命周期及app对象的使用 ●页面的生命周期 一.事件的 ...
- 非负矩阵分解(4):NMF算法和聚类算法的联系与区别
作者:桂. 时间:2017-04-14 06:22:26 链接:http://www.cnblogs.com/xingshansi/p/6685811.html 声明:欢迎被转载,不过记得注明出处 ...