2016-05-29 9 views
0

Ich erstelle Web-Text-Spiel in Django. Ich möchte Benutzeroption geben, um seine Haustiere mit Bank zu handeln. Die Exchange-Tabelle ist statisch und kann nicht geändert werden.Django Text Spiel Handel Tabelle

1 Schaf = 6 Kaninchen

1 pig = 2 Schafe = 12 Kaninchen = 1 + 6 Schafe Kaninchen

1 Kuh = 3 pig = 6 Schafe = 36 Kaninchen usw.

Jetzt, wenn der Benutzer 3 Schweine hat, möchte ich ihm Optionen zeigen, dass er 3 Schweine für 1 Kuh handeln oder 1 Schwein für 2 Schafe oder 1 Schwein für 12 Kaninchen etc. tauschen kann. Gibt es eine Option, dies mit ifs zu schreiben oder könnte ich etwas anderes tun?

models.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) 
+0

was meinst du mit "Austausch Tabelle ist statisch"? "Mit ifs wo schreiben? Ansichten oder Vorlage? – doniyor

+0

Austausch Tabelle kann nicht geändert werden, wie im obigen Beispiel. Eigentlich ist meine einzige Idee, wenn ich auf Vorlage und dann in Sicht sehr gut schreiben, dass Benutzer genug Zahl der Tiere haben, um auszutauschen, wenn er dann Austausch hat. – Krzysieqq

+0

kannst du deine models.py zeigen? abhängig davon können wir Ansichten schreiben – doniyor

Antwort

0

Liste item

Wenn die Tabelle statisch ist, dann kann es die Verwendung als einfache dict

Hier ist ein Beispielcode von Ihnen nähern, kann dieses Problem sein

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

Es funktioniert fast gut. Wenn ich 'print (get_trades_counters (TABLE ['sheep']))' Ich sehe am Ausgang 'small_dog 1 Schaf 1 Hase 6 '. Ich möchte nicht ein Schaf für 1 Schaf wechseln, also sollte dieses nicht angezeigt werden. Ich weiß nicht, wie dieser Code funktioniert, aber es ist fast das, was ich will. Danke für die Hilfe. – Krzysieqq

+0

Lesen Sie ein wenig über * Rekursion * und Sie können auch die unerwünschten Ergebnisse nach der Anwendung des Algorithmus entfernen. Ich werde noch ein paar Kommentare hinzufügen –

+0

Können Sie überprüfen, ob ich es richtig gemacht habe? Ich habe die Funktion get_trades_counters() geändert, um das Element zu entfernen und die Liste zurückzugeben: 'def get_trades_counters (tier, betrag): result = [Zähler (t) für t in get_trades (Anzahl * TRADE_TABLE [Tier])] r = [] für i im Ergebnis: r.append (i.most_common()) r.remove ([(Tier, Menge)]) return r' – Krzysieqq

Verwandte Themen