用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]=newname
            print(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:
            break
    else:
        break

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值