PYTHON - ΜΑΘΗΜΑ 16 - OOP: ΚΛΑΣΕΙΣ - Μέρος 15 από 16 - Game Project: WoW Part 1

preview_player
Показать описание
ΠΕΡΙΕΧΟΜΕΝΑ ΒΙΝΤΕΟ:
4. Game Project: WoW Part 1
=====================================
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ:
1. Αντικειμενοστραφής Προγραμματισμός (OOP)
1.1. Κλάσεις
1.2. Μέλη Κλάσης και η μέθοδος __init__()
1.3. Μέθοδοι Κλάσης
1.4. Δημόσια και Ιδιωτική Πρόσβαση
1.5. Σχέση “έχει” μεταξύ κλάσεων
1.6. Παρατηρήσεις
2. Algorithm: Quick Sort (Γρήγορη Ταξινόμηση)
3. Data Structures: Stack (Στοίβα)
4. Game Project: WoW Part 1
5. Data Project: CRUD – Refactoring
Рекомендации по теме
Комментарии
Автор

Καλησπέρα, μπορείτε να μου εξηγήσετε γιατί στο 21:00 (περίπου) κάναμε το loop με αντίστροφη σειρά ?

elinanikolopoulou
Автор

Δεν θα μπορουσαμε να χρησιμοποιήσουμε del στο 20ο λεπτο για να αφαιρεσουμε τον νεκρο απο τη λιστα χωρις να επηρεασουμε τα υπολοιπα στοιχεια;

ItsBrocraftHd
Автор

Καταρχήν συγχαρητήρια για τις playlists σας, απ' όσες σχετικές έχω παρακολουθήσει είναι εύκολα οι πιο ολοκληρωμένες για beginners/intermediate σε προγραμματισμό, με πολύ καλή αναλογία πρακτικής και θεωρίας. Δεν έχω βρει πουθενά τέτοια ποιότητα σε free series, είτε σε ελληνικές είτε σε αγγλόφωνες. Δεν υπερβάλλω!

Σχετικά με το βίντεο, χάθηκα λίγο εκεί που κάναμε το for loop για να τσεκάρουμε τους νεκρούς. Είπατε πως το κάνουμε από δεξιά γιατί αλλιώς μπορεί να έχει απροσδόκητη συμπεριφορά, τι ακριβώς εννοούσατε? Και πως να το κάνουμε από δεξιά το λύνει αυτό? Ρωτάω γιατί εμένα μου φαίνεται ακριβώς το ίδιο

thanasispappas
Автор

Δάσκαλε στην κλάση Arena στο line 52 αφού έχεις όλη την κλάση του character θα μπορούσες να κάνεις έλεγχο αν το health==0 όπως έκανες στην line 29 με το delay κ να κάνεις pop(character).Επίσης το import της κλάσης character στην arena είναι unused αφού ούτως η άλλως την έχει την κλάση character στην λίστα του TeamA κ TeamB μαζί με τις μεθόδους κ τα attributes όλων των characters

giannisnik
Автор

Δημήτρη το'χουμε θα βοηθήσω και γω !
Απλά όχι gnomes ...

ndis
Автор

class Character:
Δάσκαλε η κατασκευή της Character θα μπορούσε να γίνει όπως φαίνεται παρακάτω?



def __init__(self, name):
self.name = name
self.health = 100
self.attack_speed = 2
self.delay = 0


Δλδ να μην βάζω απαραίτητα ολά τα μέλη σαν ορίσματα

gntag
Автор

Καλησπέρα και χρόνια πολλά ...
Μια ερώτηση...
Ο έλεγχος για το ποιος εχει πεθάνει δεν θα έπρεπε να γίνεται πριν ξεκινήσει την επίθεση ο κάθε παίχτης ? το λέω αυτό γιατί μπορεί να τύχει να φτάσει υπό το μηδεν κάποιο health με το να επιτεθεί κάποιος σε κάποιον που έχει ζωή 0 . Δεν ξέρω αμα καταλάβατε τι εννοώ ακριβώς.

pauloskalyvas
Автор

Καλησπέρα δάσκαλε, και σας ευχαριστούμε παρα πολύ για αυτη τη εξαιρετική σειρά μαθημάτων της Python . Στο σημείο που αφαιρούμε τους νεκρούς, για να γλυτώσουμε ολη αυτη την ιστορία με την pop, δε θα μπορούσαμε να χρησιμοποιήσουμε την remove ?
Παραθέτω και τον κώδικα μου :

for char in self.team_A:
if char.is_dead():
self.team_A.remove(char)
print(f"Character {char.character_name} is dead!💀")
for char in self.team_B:
if char.is_dead():
self.team_B.remove(char)
print(f"Character {char.character_name} is dead!💀")

stathispapadopoulos
Автор

κύριε δημητρη αυτό το παιχνίδι δεν είναι το World of warcraft?Επίσης στο παιχνίδι αυτό συμπεριλαμβάνεται και η Dota

johnniewalkerjohnniewalker
Автор

Το delay δεν κατάλαβα που χρησιμεύει γιατί παρατήρησα αν δεν κάνω λάθος ότι δεν επηρεάζει κάπου το παιχνίδι στο πως τρέχει ακόμη και εντελώς να το αφαιρέσω από παράμετρο δεν επηρεάζεται κάπου το παιχνίδι.

ant
Автор

Από τα πιο δύσκολα project το WoW κυριε δημητρη

from random import randrange
from random import seed

seed(a=None)


def set_delay():
return randrange(0, 4)


class Character:
def __init__(self, name, team):
self.name = name
self.health = 100 # ugeia
self.attack_speed = 2 # taxitita epithesis
self.delay = 0 # apeikonizei poso prepei na perimenei gia na xanaxtipisei
self.team = team

def attack(self):
self.delay = 10 - self.attack_speed
return randrange(3, 11)

def is_dead(self):
return self.health <= 0

def end_round(self):
if self.health < 100:
self.health += 1
self.delay -= 1

def set_attack_speed(self, attack_speed):
self.attack_speed = attack_speed

def set_delay(self, lower, upper):
self.delay = randrange(lower, upper)

def print(self):
print("Team:" + str(self.team) + ", Health:" + str(self.health) + ", Attack Speed:" + str(self.attack_speed) + ", Delay:" + str(self.delay))




from random import randrange
from random import seed
from Character import Character
from random import shuffle

seed(a=None)


class Arena:
def __init__(self, team_A, team_B) -> object:
self.team_A: list[Character] = team_A
self.team_B: list[Character] = team_B

def print_state(self):
print("Team A : ")
for i in range(len(self.team_A)):
self.team_A[i].print()
print("")

for i in range(len(self.team_B)):
self.team_B[i].print()
print()


def play(self):
active_game = True
while active_game:
fighters = [] # a list with the players who are ready to fight
for i in range(len(self.team_A)):
if self.team_A[i].delay == 0:


for i in range(len(self.team_B)):
if self.team_B[i].delay == 0:


shuffle(fighters)

for i in range(len(fighters)):
if fighters[i].team == "A":
if len(self.team_B) > 0:
choice = randrange(0, len(self.team_B))
self.team_B[choice].health -= fighters[i].attack() * (not fighters[i].is_dead())
if
self.team_B.pop(choice)
print("player " + str(i) + " from team A killed player " + str(choice) + " team B")
else:
break
else:
if len(self.team_A) > 0:
choice = randrange(0, len(self.team_A))
self.team_A[choice].health -= fighters[i].attack() * (not fighters[i].is_dead())
if
self.team_A.pop(choice)
print("player " + str(i) + " from team B killed player " + str(choice) + " team A")
else:
break

if len(self.team_A) == 0:
print("Winner is Team B")
break
elif len(self.team_B) == 0:
print("Winner is team A")
break
else:
for i in range(len(self.team_A)):
self.team_A[i].end_round()
for i in range(len(self.team_B)):
self.team_B[i].end_round()

from random import randrange
from random import seed
from Character import Character
from Arena import Arena

seed(a=None)
orcs: list[Character] = []
for i in range(3):
orcs.append(Character("orc", "A"))

for i in range(3):
orcs[i].set_delay(0, 4)


elfs = []
for i in range(5):
elfs.append(Character("elf", "B"))

for i in range(5):
elfs[i].set_attack_speed(3)
elfs[i].set_delay(0, 3)

arena = Arena(orcs, elfs)

arena.print_state()
arena.play()

johnniewalkerjohnniewalker
Автор

Κυριε Ψουνη, πραγματικα δυο μερες τωρα το μοναδικο προβλημα που αντιμετωπισα στο προγραμμα ηταν αυτο με τη διαπεραση στη λιστα, για να βρω τους νεκρους χαρακτηρες.
Αφου πραγματικα εχασα τα λογικα μου χρησιμοποιησα την μεθοδο del για να διαγραψω τον νεκρο χαρακτηρα.
Θα επανελθω με τον πληρη κωδικα!

Επισης μια απορια, επειδη εκανα μονος μου παραδειγματα με λιστες για να δω γιατι δε δουλευει η διαπεραση με την θεση θα ηθελα αν μπορειτε να μου το εξηγησετε.
Δηαλδη εγω εκανα¨

for i in len(self.TeamA)):
if self.TeamA[i].is_dead:
self.TeamA.pop(i)

Μου εβγαζε Key Error:list index out of range
Δεν μπορουσα να καταλαβω γιατι δε δουλευε, στο μυαλο μου φαινοταν λογικο!

konstantinostzaferis
visit shbcf.ru