2016-04-11 6 views
0

Ich erstelle ein kleines Spiel in Python. Ziel des Spiels ist es, alle Karten zu vergleichen. Mein ursprünglicher Code hat 2 Subroutinen, die viel doppelten Code haben (gefunden here). Ich habe versucht, sie zu verdichten, aber es hat nicht funktioniert.Erstellen eines kleinen Spiels. Warum funktioniert die Player-Variable nicht?

Hier ist der aktuelle Code:

def pick(Player): 
    P1score = 0 
    P2score = 0 
    Player = 0 
    if Player == 0: 
     Player = Player+1 
    elif Player == 1: 
     Player = 2 
    elif Player == 2: 
     Player = 1 
    if len(set1) == 0: 
     won(P1score,P2score) 
    else: 
     print("It's Player" +str(Player) + "'s turn and there are still "+ str(len(set1)) + " pairs left to find!") 
     side1 =int(input("What number would you like to pick from side one?")) 
     side2 =int(input("What number would you like to pick from side two?")) 
     #This function makes the player input 2 valid card numbers 
     while side1 not in range(len(set1)) or side2 not in range(len(set2)): 
      side1 =int(input("What number would you like to pick from side one?")) 
      side2 =int(input("What number would you like to pick from side two?")) 
     s1pick = set1[side1] 
     s2pick = set2[side2] 
     matching(s1pick, s2pick, set1, set2,P1score, P2score) 

def matching(s1pick,s2pick,set1,set2,P1score,P2score,Player): 
    picks = [] 
    picks.append(s1pick) 
    picks.append(s2pick) 
    if picks[0] == picks[1]: 
     if Player == 1: 
      P1score = P1score+1 
     elif Player == 2: 
      P2score = P2score + 1 
     for i in range (10): 
      print("Correct") 
      time.sleep(0.2) 
     print("Good Job, you successfully picked " + picks[0] + " and "+ picks[0]) 
     set1.remove(s1pick) 
     set2.remove(s2pick) 
     pick(Player) 
    else: 
     print("Sorry, not a match! From side one you picked "+ picks[0] + " and from side 2 you picked " + picks[1]) 
     pick(Player) 

Player = 0 
pick(Player) 

Es gibt mehr Code darüber aber nicht, diesen Teil beeinflussen.

Grundsätzlich möchte ich die Variable Spieler von 1 zu 2, dann zurück zu 1, und so weiter, so dass der Rest des Programms weiß, wer den Punkt zu vergeben.

Warum funktioniert das nicht?

+2

Ich habe nicht Ihren ganzen Code gelesen, aber 'Player = 0' ist wahrscheinlich nicht das, was Sie tun möchten. Das heißt, egal welchen Wert Sie "picken" nennen, es wird sofort verworfen und stattdessen wird Null verwendet. Im Allgemeinen ist es eine schlechte Idee, das Argument einer Funktion unbedingt zu überschreiben, ohne es vorher zu betrachten. – Kevin

+0

Ich glaube, dass Ihr Abstand falsch ist. – ryekayo

+0

Es sieht so aus, als ob Ihr Eindruck verstümmelt wurde. Ich habe versucht, es zu beheben, aber überprüfe es, falls ich es vermasselt habe. Die letzten zwei Zeilen, insbesondere: Ich nehme an, dass diese nicht eingerückt werden sollten. –

Antwort

0

Versuchen Sie, den folgenden Code:

__author__ = "mexO" 
# SnapGameForFun 
import random 
from random import shuffle 
import time 

cards = ["Horse", "Cow", "Pig", "Goat", "Chicken", "Sheep", "Donkey", "Duck", "Rabbit"] 
print("Here are all the cards there could be, try to find out where they could be hiding!") 
time.sleep(3) 
for i in cards: 
    print(i) 
    time.sleep(0.5) 

print("The cards have been numbered 1 to 9.\nPick a number from the first list and one from the second list." 
     "\nIf they match the cards will be removed from the list.\nEasy right?\n\n\n\nLets start!") 

set1 = ["Horse", "Cow", "Pig", "Goat", "Chicken", "Sheep", "Donkey", "Duck", "Rabbit"] 
set2 = ["Horse", "Cow", "Pig", "Goat", "Chicken", "Sheep", "Donkey", "Duck", "Rabbit"] 

random.shuffle(set1,random.random) 
random.shuffle(set2,random.random) 

P1score = 0 
P2score = 0 
#--------------------------WON-------------------------- 
#--------------------------WON-------------------------- 
#--------------------------WON-------------------------- 

def won(P1score,P2score): 
    if P1score > P2score: 
     winner = "Player 1" 
     winnerscore = P1score 
    else: 
     winner = "Player 2" 
     winnerscore = P2score 
    print("Well done to {0} who got {1} of the 10 pairs correct!".format(winner, winnerscore)) 

def pick(player=0): 
    player = player % 2 
    global P1score, P2score 
    if len(set1) == 0: 
     won(P1score,P2score) 
    else: 
     print("It's Player {0}'s turn and there are still {1} pairs left to find!".format(player + 1, str(len(set1)))) 
     side1 =int(input("What number would you like to pick from side one?")) 
     side2 =int(input("What number would you like to pick from side two?")) 
     while side1 not in range(len(set1)) or side2 not in range(len(set2)): 
      side1 =int(input("What number would you like to pick from side one?")) 
      side2 =int(input("What number would you like to pick from side two?")) 
     s1pick = set1[side1] 
     s2pick = set2[side2] 
     if player == 0: 
      matching(s1pick, s2pick, set1, set2, P1score, player) 
     else: 
      matching(s1pick, s2pick, set1, set2, P2score, player) 

def matching(s1pick,s2pick,set1,set2,score,player): 
    global P1score, P2score 
    if s1pick == s2pick: 
     if player == 0: 
      P1score += 1 
     else: 
      P2score += 1 
     print('P1score:', P1score, 'P2score', P2score) 
     for i in range (10): 
      print("Correct") 
      time.sleep(0.2) 
     print("Good Job, you successfully picked {0} and {1}\n".format(s1pick, s2pick)) 
     set1.remove(s1pick) 
     set2.remove(s2pick) 
     pick(player + 1) 
    else: 
     print("Sorry, not a match! From side one you picked {0} and from side 2 you picked {1}\n".format(s1pick, s2pick)) 
     print('P1score:', P1score, 'P2score', P2score) 
     pick(player+1) 


if __name__ == "__main__": 
    pick() 

Es gibt noch ein paar Fragen für Sie zu sortieren: 1. Die Zahlen, die Sie eingeben müssen, sind 0-8 1-9 nicht als 2 angegeben Wenn der Benutzer nur eine Eingabe ohne Eingabe eingibt oder etwas eingibt, das nicht in ein int konvertiert werden kann, dann stirbt das Programm ab.

Verwandte Themen