Django文字游戏交易标签

2024-04-19 04:54:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Django创建网页文本游戏。我想给用户选择交易他的宠物与银行。交换表是静态的,不能修改。你知道吗

1 sheep = 6 rabbits

1 pig = 2 sheep = 12 rabbits = 1 sheep + 6 rabbits

1 cow = 3 pig = 6 sheeps = 36 rabbit etc.

现在,如果用户有3头猪,我想向他展示的选项,他可以用3头猪换1头牛或用1头猪换2只羊或用1头猪换12只兔子等。 有没有选择用ifs写这个或者我可以用别的方法写?你知道吗

你知道吗型号.py你知道吗

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)

Tags: 用户namedefaultmodelmodelsclasscharfieldrabbit
1条回答
网友
1楼 · 发布于 2024-04-19 04:54:59

列表项

如果这个表是静态的,那么它可以用作一个简单的dict

下面是一个示例代码,您可以解决这个问题

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()

相关问题 更多 >