Merhabalar herkese kolay gelsin 8 kişiden oluşan bir zar turnuvası gibi bir turnuva yapmayı düşünüyorum fakat yapamadım yardımcı olursanız sevinirim. Örnek çıktığı ve yapabildiğim kodlamayı aşağıya bırakıyorum.
1.tur
-
masa: 1. & 2. oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 2. oyuncu
-
masa: 3. & 4. oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 3. oyuncu
-
masa: 5. & 6. oyuncu: Atılan zarlar sırasıyla 3 ve 2, kazanan 5. oyuncu
-
masa: 7. & 8. oyuncu: Atılan zarlar sırasıyla 2 ve 1, kazanan 7. oyuncu
2.tur
-
masa 2. oyuncu & 3.oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 3. oyuncu
-
masa 5. oyuncu & 7.oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 5. oyuncu
3.tur
- masa 3.oyuncu & 5.oyuncu: Atılan zarlar sırasıyla 1 ve 3, kazanan 5. oyuncu
Sonuç:
Kazanan 5.oyuncu
import random
import numpy as np
zar1 = (np.random.randint(1,7,8))
zar1 = zar1.reshape(4,2)
print(zar1)
tur1=[]
tur2=[]
tur3=[]
x=1
for i in range(4):
for j in range(2):
tur1.append("Oyuncu {}".format(x))
x+=1
tur1=np.array(tur1).reshape(4,2)
print(tur1)
for i in range(4):
for j in range(1):
if zar1[i][j] > zar1[i][j+1]:
tur2.append(tur1[i][j])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
else:
tur2.append(tur1[i][j+1])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j+1],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
print(tur2)
başka fikir varsa çok sevinirim belki sizin için çok basittir pythona yeni başladım biraz zorlanıyorum.
Son olarak böyle yaptım fakat beraberlik olunca sıkıntı oluyor.
import random
import numpy as np
zar1 = (np.random.randint(1,7,8))
zar1 = zar1.reshape(4,2)
tur1=[]
tur2=[]
tur3=[]
kazanan=[]
x=1
for i in range(4):
for j in range(2):
tur1.append("Oyuncu {}".format(x))
x+=1
tur1=np.array(tur1).reshape(4,2)
for i in range(4):
for j in range(1):
if zar1[i][j] > zar1[i][j+1]:
tur2.append(tur1[i][j])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
else:
tur2.append(tur1[i][j+1])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur1[i][j+1],tur1[i][j],zar1[i][j],tur1[i][j+1],zar1[i][j+1]))
print("\n Yarı Final Turuna Geçmeye Hak Kazanan Oyuncular: ",tur2,"\n")
tur2=np.array(tur2).reshape(2,2)
zar2 = (np.random.randint(1,7,4))
zar2 = zar2.reshape(2,2)
for i in range(2):
for j in range(1):
if zar1[i][j] > zar1[i][j+1]:
tur3.append(tur2[i][j])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur2[i][j],tur2[i][j],zar2[i][j],tur2[i][j+1],zar2[i][j+1]))
else:
tur3.append(tur2[i][j+1])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur2[i][j+1],tur2[i][j],zar2[i][j],tur2[i][j+1],zar2[i][j+1]))
print("\nFinal Turuna Geçmeye Hak Kazanan Oyuncular: ",tur3,"\n")
tur3=np.array(tur3)
zar3 = (np.random.randint(1,7,2))
for i in range(1):
if zar3[i] > zar3[i+1]:
kazanan.append(tur3[i])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur3[i],tur3[i],zar3[i],tur3[i+1],zar3[i+1]))
else:
kazanan.append(tur3[i+1])
print("{} turu kazandı. Atılan Zarlar:\n{}: {}\n{}: {}".format(tur3[i+1],tur3[i],zar3[i],tur3[i+1],zar3[i+1]))
print("\nYarışmayı Kazanan Oyuncu: ",kazanan)
Tam olarak nasıl bir fikir almak istiyorsunuz forum üyelerinden ?
1 Beğeni
Son attığım kod da berabere kalınca sıkıntı veriyor ve
1.tur
-
masa: 1. & 2. oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 2. oyuncu
-
masa: 3. & 4. oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 3. oyuncu
-
masa: 5. & 6. oyuncu: Atılan zarlar sırasıyla 3 ve 2, kazanan 5. oyuncu
-
masa: 7. & 8. oyuncu: Atılan zarlar sırasıyla 2 ve 1, kazanan 7. oyuncu
2.tur
-
masa 2. oyuncu & 3.oyuncu: Atılan zarlar sırasıyla 2 ve 5, kazanan 3. oyuncu
-
masa 5. oyuncu & 7.oyuncu: Atılan zarlar sırasıyla 6 ve 1, kazanan 5. oyuncu
3.tur
- masa 3.oyuncu & 5.oyuncu: Atılan zarlar sırasıyla 1 ve 3, kazanan 5. oyuncu
Sonuç:
Kazanan 5.oyuncu
şu tarza benzer bir çıktı almak istiyorum turnuvayı yapıp kodlar ile ilgili fikir almak istiyorum
Berabere olan durumu kontrol etmek için oyuncu değişkenlerinin str ya da int değerlerinin if koşulu ile aynı olup olmadığına bakarak bunu bir döngü içerisine alıp eğer berabere bittiyse bunu if kontrol eder ve aynı kişileri tekrar zar attırır. Taki biri kazanana kadar. Bu söylediklerimi kod haline yazarak kontrol edebilirsiniz.
Şöyle bir kod yazdım bir bakın isterseniz. Oyuncular önce rastgele olarak gruplandırılıyor. Ancak dilerseniz random
parametresini False
yaparak sıraya göre de gruplandırabilirsiniz… Daha sonraki gruplandırmalar ise ilk oluşturulan random
düzene göre sırayla yapılıyor. Yani ilk maçın galibi ile ikinci maçın galibi eşleşiyor. Ancak yine dilerseniz bu gruplamayı random
parametresini True
yaparak rastgele yapabilirsiniz.
from random import randint, choice
def group_players(players: list = [], random: bool = False) -> list:
print("Oyuncular gruplandırılıyor.\nGruplar:\n")
groupings = []
if not random:
n = 0
for i in range(len(players) // 2):
groupings.append([players[n], players[n + 1]])
n += 2
print(groupings[i])
print()
else:
groupings.extend([[] for _ in range(len(players) // 2)])
for i in range(len(groupings)):
for j in range(2):
player = choice(players)
players.remove(player)
groupings[i].append(player)
print(groupings[i])
print()
return groupings
def match(group: list = []) -> str:
print(f"{group[0]} ve {group[1]}'nin maçı başladı.")
results = {}
for i in group:
dice = randint(a=1, b=6)
print(f"{i} oyuncusunun attığı zar {dice}")
results[dice] = i
if len(results.keys()) == 1:
print("Maç berabere bitti ve tekrar oynanacak.")
return match(group=group)
else:
winner = results[max(results.keys())]
print(f"Maç bitti. Kazanan: {winner}\n")
return winner
def tournament(players: list = [], random: bool = False) -> None:
remained_players = [
match(group=group)
for group in group_players(players=players, random=random)
]
if len(remained_players) == 1:
print(f"Turnuvayı kazanan oyuncu: {remained_players[0]}")
else:
return tournament(players=remained_players, random=False)
if __name__ == "__main__":
tournament(
players=["A", "B", "C", "D", "E", "F", "G", "H"],
random=True
)
Çıktı:
Oyuncular gruplandırılıyor.
Gruplar:
['D', 'F']
['B', 'G']
['C', 'A']
['E', 'H']
D ve F'nin maçı başladı.
D oyuncusunun attığı zar 4
F oyuncusunun attığı zar 5
Maç bitti. Kazanan: F
B ve G'nin maçı başladı.
B oyuncusunun attığı zar 2
G oyuncusunun attığı zar 1
Maç bitti. Kazanan: B
C ve A'nin maçı başladı.
C oyuncusunun attığı zar 3
A oyuncusunun attığı zar 3
Maç berabere bitti ve tekrar oynanacak.
C ve A'nin maçı başladı.
C oyuncusunun attığı zar 6
A oyuncusunun attığı zar 4
Maç bitti. Kazanan: C
E ve H'nin maçı başladı.
E oyuncusunun attığı zar 4
H oyuncusunun attığı zar 2
Maç bitti. Kazanan: E
Oyuncular gruplandırılıyor.
Gruplar:
['F', 'B']
['C', 'E']
F ve B'nin maçı başladı.
F oyuncusunun attığı zar 5
B oyuncusunun attığı zar 2
Maç bitti. Kazanan: F
C ve E'nin maçı başladı.
C oyuncusunun attığı zar 2
E oyuncusunun attığı zar 3
Maç bitti. Kazanan: E
Oyuncular gruplandırılıyor.
Gruplar:
['F', 'E']
F ve E'nin maçı başladı.
F oyuncusunun attığı zar 5
E oyuncusunun attığı zar 5
Maç berabere bitti ve tekrar oynanacak.
F ve E'nin maçı başladı.
F oyuncusunun attığı zar 3
E oyuncusunun attığı zar 3
Maç berabere bitti ve tekrar oynanacak.
F ve E'nin maçı başladı.
F oyuncusunun attığı zar 6
E oyuncusunun attığı zar 3
Maç bitti. Kazanan: F
Turnuvayı kazanan oyuncu: F
4 Beğeni