首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django文字游戏交易表

Django文字游戏交易表
EN

Stack Overflow用户
提问于 2016-05-29 07:32:47
回答 1查看 121关注 0票数 0

我在Django中创建网络文本游戏。我想让用户选择与银行交换宠物。Exchange表是静态的,不能修改。

1只羊=6只兔子 1只猪=2只羊= 12只兔子=1只羊+6只兔子 1头牛=3头猪=6头羊= 36只兔子等。

现在,如果用户有3头猪,我想告诉他,他可以用3头猪换1头牛,用1头猪换2头羊,用1头猪换12只兔子等等。有什么选项可以用ifs来写吗?或者我可以做一些其他的事情?

models.py

代码语言:javascript
复制
class Players(models.Model):
    name = models.CharField(max_length=25)  # nazwa gracza


class Game(models.Model):
    name = models.CharField(max_length=25)  # nazwa gry
    turn = models.IntegerField(default=1)  # numer gracza ktory aktualnie rzuca
    rabbit = models.IntegerField(default=60)
    sheep = models.IntegerField(default=24)
    pig = models.IntegerField(default=20)
    cow = models.IntegerField(default=12)
    horse = models.IntegerField(default=6)
    small_dog = models.IntegerField(default=4)
    big_dog = models.IntegerField(default=2)


class GamePlayer(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)
    player = models.ForeignKey(Players, on_delete=models.CASCADE)
    turn = models.IntegerField()
    rabbit = models.IntegerField(default=0)
    sheep = models.IntegerField(default=0)
    pig = models.IntegerField(default=0)
    cow = models.IntegerField(default=0)
    horse = models.IntegerField(default=0)
    small_dog = models.IntegerField(default=0)
    big_dog = models.IntegerField(default=0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-29 08:33:24

列表项目

如果表是静态的,那么它可以作为一个简单的数据块使用。

下面是您可以处理此问题的示例代码

代码语言:javascript
复制
from collections import Counter

# 1 sheep = 6 rabbits
# 
# 1 pig = 2 sheep = 12 rabbits = 1 sheep + 6 rabbits
# 
# 1 cow = 3 pig = 6 sheeps = 36 rabbit etc.

TABLE = {
         'rabbit': 1,
         'sheep': 6,
         'pig': 12,
         'cow': 36,
         }



def get_trades(amount, l=()):
    '''
    Recursive function that returns a list of all possible trades as tuples 
    '''
    if amount < 0 : return [()] # bad trade (not enough money)
    if amount == 0 : return [l] # bingo!!! we have a full trade possibly.
    possible_trades = []        
    animals_sorted = sorted(TABLE, key= lambda key: TABLE[key], reverse=True)
    if l: 
        animals_sorted = animals_sorted[animals_sorted.index(l[-1]):] #preventing duplicates - since order doesn't matter
    for something in animals_sorted:
        value = TABLE[something]

        trades = get_trades(amount-value, l + (something,)) #get possible trades for l+something ...
        possible_trades.extend(trades)
    return possible_trades

def get_trades_counters(amount):
    return [Counter(t) for t in get_trades(amount)]


def main():
    print(get_trades_counters(TABLE['pig']))
    print(get_trades_counters(2*TABLE['pig']))
    print(get_trades_counters(2*TABLE['cow']))


if __name__ == '__main__':
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37507368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档