用Python的双端队列deque实现非常简单的大富翁地图
一、双端队列简介
双端队列有一个方法是rotate。可以把数据想成一个圆环,rotate能让它转起来,转多少,取决于我们给的参数。参数为正整数,那就顺时针旋转,为负整数则逆时针旋转。
from collections import deque
qlist=deque([1,2,3,4])
qlist.rotate(-3)
#参数为负,逆时针转三步
print(qlist)
下面是数据旋转的示意图:
二、用双端数列来实现非常简单的大富翁地图(地图就是一个环)
from collections import deque
import random#这个类用于生成地图
class Map():#初始化函数用于设置玩家的名字,并生成最初的地图以及玩家位置(玩家最初的位置就是在空地1)def __init__(self,name):self.qlst=deque(['空地1','空地2','空地3','空地4','空地5'])self.name=name#下面这个move方法是用于掷骰子并按照骰子的点数来变换位置的,返回的是玩家的新位置def move(self):self.step=random.randint(1,6)self.qlst.rotate(-self.step)return (self.step,self.qlst[0])#下面这个函数用于给空地重命名,如果玩家选择了买地,那么那块地就会冠上玩家的名字,返回的值是土地的新名字def rename(self):self.qlst[0]=self.name+'的地盘'return self.name+'的地盘'#下面这个函数是用于跟玩家互动的,玩家可以选择是否买地,并根据玩家的选择打印出当前的地图
def trade(my_location,your_location):input(my_location.name+',按任意键掷骰子')the_tuple=my_location.move()print('你掷出的点数是',the_tuple[0],'你所在的位置是',the_tuple[1])if the_tuple[1][:2]=='空地':code=input('是否要买地?输入Y买地,输入其他任意键不买。')if code=='Y':#下面是寻找我方要购买的土地在对方地图里的索引,然后把对方地图里的土地命名同步修改ind=your_location.qlst.index(the_tuple[1])newname=my_location.rename()your_location.qlst[ind]=newnameprint(my_location.qlst)else:print(my_location.qlst)#下面是实例化两个地图,我方玩家和对方玩家分别有一个地图,这样才能记录两个人的位置情况
player_location=Map('舒蓉')
enemy_location=Map('顾京飞')while True:trade(my_location=player_location,your_location=enemy_location)trade(my_location=enemy_location,your_location=player_location)#下面这些代码只是为了给程序的结束找到一个时机,避免死循环,跟真实的大富翁游戏判断输赢的标准没有关系。我这里的条件是,只要空地都被买走了,就结束程序(实际的运行中在玩家1买完了最后一块地后,玩家2还要再掷一次骰子,这个不是很重要,只要程序能结束就行,我就不改了……)for i in player_location.qlst:if '空' in i:breakelse:break
用Python的双端队列deque实现非常简单的大富翁地图相关推荐
- [转载] Python的双端队列deque
参考链接: Python中的双端队列DeQue Python的强大并不在于它的语法,而在于它的库,当你对各种数据结构感到苦恼时,Python提供了各种开箱即用的数据结构. 数据结构中最常讲授的数据结构 ...
- 队列(queue)与双端队列(deque)—Python实现方法及回文词应用
队列 Queue 抽象数据类型Queue:一个有次序的数据集合,数据项仅从 尾(rear) 端添加,且仅从 首(front) 端移除,具有 "FIFO" 的特点. 需要实现的操作: ...
- C++ 双端队列(deque)的使用
双端队列(deque)是什么 双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector, 双端队列(deque)属于STL(Standard ...
- c++ 双端队列 deque 之 (头部、尾部)插入元素/删除元素/
头文件 #include <deque> 和vector用法基本相同 没有 capacity() reserve() 有了push_back(),pop_back() //inse ...
- 6-5-2:STL之stack和queue——双端队列deque
文章目录 双端队列-deque 双端队列-deque deque是一种双向开口的连续线性空间.所谓双向开口,意思就是可以在头尾两端分别进行元素的插入和删除操作 deque的出现是为了解决融合vecto ...
- Python实现双端队列
Python实现双端队列 关于双端队列的介绍,请参考:https://blog.csdn.net/weixin_43790276/article/details/104033337 双端队列的数据存储 ...
- STL之双端队列deque:新手入门,基础应用
STL之双端队列deque:新手入门,基础应用 简单的自我介绍 STL之deque:基本函数的运用 源代码 运行结果 结尾 简单的自我介绍 一名努力学习code的计算机专业大二在校学生,平时不论是完成 ...
- 【C++】STL常用容器总结之五:双端队列deque
6.双端队列deque 所谓的deque是"double ended queue"的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中 ...
- java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习
queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.除了基本的 Collection 操作外,队列还 ...
最新文章
- 2020年1月Github上最热门的开源项目
- php5.5 反序列化利用工具_%00截断配合反序列化的奇妙利用
- EduCoder Linux 文件/目录管理
- 如何实现一个循环显示超长图片的控件
- Eureka自我保护机制
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(11) - 数据可缓存性控制指令
- 返回封装结果集Result
- NeHe OpenGL第三十二课:拾取游戏
- SpringMVC学习指南-前言
- 信息学奥赛c++ 初学保姆级教程
- C语言——类型限定词
- oracle数据库有哪些权限,ORACLE数据库中权限有哪些?
- JavaScript首次体验
- [2016 NUIST 程序设计竞赛] D. 达朗贝尔的台阶
- Qt Quick 渲染之 Scene Graph 详解
- 工厂管理系统该如何选?5款主流的工厂管理软件全测评!
- file.exists()方法,明明存在,
- Zigbee3.0 协议特性
- 《传感器电路的低噪声信号调理》阅读笔记
- 入行数据分析要知道数据挖掘到底是做什么的