用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素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
随机推荐
- apache 配置多个版本的 php
注:这里说的是windows环境下的配置 我们在配置apache+php的时候,是在apache的配置文件httpd.conf里加载php的模块并指定php.ini路径 LoadModule php5 ...
- python安装图文教程---超详细。。。不过是转的,但有改动
如果你已安装好python,想安装第三方模块,方法详见如下地址: python安装第三方模块教程----marsggbo 1.想要安装Python,首先当然是去Python的官方网站(www.pyth ...
- 当Node.js遇见Docker
Node.js Best Practices - How to Become a Better Developer in 2017提到的几点,我们Fundebug深有同感: 使用ES6 使用Promi ...
- Android Doze模式启用和恢复
从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...
- Omi架构与React Fiber
原文链接-https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架在架构设计的时候就决定把update的控制权交给了开发者,视灵 ...
- Unity3D Layer要点
简介 Layer可以用于光照的分层和物理碰撞的分层,这样可以很好地进行性能优化 数据结构 Layer在Unity中有3中呈现方式:1.string名字,2.int层索引 ...
- jdk源码剖析:Synchronized
开启正文之前,先说一下源码剖析这一系列,就以"死磕到底"的精神贯彻始终,最少追踪到JVM指令(再往下C语言实现了). =========正文分割线=========== Sync ...
- 万能数据库连接类-Oracle、DB2 、Access 、Sql Server
package cc.apps.report; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- Activity的Task详解
1.Task Task是一个具有栈结构(后进先出)的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个Task,来放置根Activity.默认情况下,一个Activity启动另 ...
- PHP对象相关知识点的总结
对象传递:一种说法是"PHP对象是通过引用传递的",更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容. <?ph ...