|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Bonjour,
Je suis étudiante en première année bio-ingénieur, et je dois programmer le jeu Lunar Lander. Je recois cette erreur TypeError: __init__() takes exactly 1 argument (5 given) qui est relatée au morceau de code ci-dessous, mais je ne vois pas où est ma faute! Quelqu'un à la réponse à ma question? class Lander_View(object): def __init__(self,owner): self.owner = owner self.frame = frame () curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white) curve(frame, pos=[(-11,16),(-12,14),(-10,15)], radius =0, color = color.white) curve(frame, pos=[(-8,16),(-7,14),(-9,15)], radius =0, color = color.white) curve(frame, pos=[(-10,15),(-9.5,12),(-9,15)], radius=0, visible= False) Dans mon code, les lignes sont mises à la bonne hauteur, mais ici tout se met à ligne ... Merci d'avance |
|
|
00
|
|
|
#2 | ||||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 615 ![]() |
Bonjour,
L'erreur est pourtant explicite: __init__ attend un argument et vous en donnez 5 lors de l'instanciation. Code :
Code :
@+
__________________
Merci d'utiliser le forum pour les questions techniques. |
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Merci d'avoir réagi si rapidement.
Si je comprends bien l'erreur, j'aurais donné trop d'arguments à une fonction __init__. Mais quand je controle mon code, je ne vois pas d'endroit où j'ai mis plus que 'owner' en 'self' comme 'argument' Si la faute ne vient pas de la partie de code que j'ai donné la dernière fois, il viendra peut -être de la partie suivante? class Game_View(object): def __init__(self, owner): self.owner = owner self.frame = frame() # maanoppervlak curve(frame=f, pos=[(-20,-20),(-17,-17)], radius = 0, color = color.red) curve(frame=f, pos=[(-17,-17),(-9,-17)], radius = 0, color= color.green) curve(frame=f, pos=[(-9,-17),(-6,-18),(-2,-15),(2,-17)], radius = 0, color = color.red) curve(frame=f, pos=[(2,-17),(10,-17)], radius = 0, color = color.green) curve(frame=f, pos=[(10,-17),(15,-19),(18,-15),(20,-20)], radius = 0, color = color.red) # self.body = f side = owner.size thk = 0.1 s2 = 2*side - thk s3 = 2*side + thk box(pos=( side, 0, 0), length=thk, height=s2, width=0, color = color.blue) box(pos=(-side, 0, 0), length=thk, height=s2, width=0, color = color.blue) box(pos=(0, -side, 0), length=s3, height=thk, width=0, color = color.blue) box(pos=(0, side, 0), length=s3, height=thk, width=0, color = color.blue) scene.background = (0,0,0) En faite, l'erreur que IDLE donne et plus longue: Traceback (most recent call last): File "E:\lunar lander\spel_met_nieuwe_code.py", line 142, in <module> nieuw_spel = Moon_Lander_Game() File "E:\lunar lander\spel_met_nieuwe_code.py", line 14, in __init__ self.lander = Lander(self) File "E:\lunar lander\spel_met_nieuwe_code.py", line 50, in __init__ self.view = Lander_View(self) File "E:\lunar lander\spel_met_nieuwe_code.py", line 90, in __init__ curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white)# rechthoek TypeError: __init__() takes exactly 1 argument (5 given)mais, je sais difficelement mettre tout mon code dans un message... la ligne 90 c'est la 5ième ligne du code dans le mail précédent, c'est pour cela que je pensais que la faute se troivait dans cette partie de code Je ne comprends pas trop Cécile |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 615 ![]() |
Il y a bien 5 arguments (4 + self) lors de l'instanciation de curve.
__________________
Merci d'utiliser le forum pour les questions techniques. |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 941 ![]() |
Salut,
Utilises les balises code pour que ton script soit plus lisible. (L'icône #) Tu n'as qu'un seul fichier dans ton code ? Vu comme tel ça a l'air étrange, ce doit donc être une bêtise, simplement on ne l'a pas sous les yeux. Tu peux mettre ton code en entier en attachement si il est trop long. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
J'ai mis tout mon code dans un attachement, le travail est en néerlandais (pour info).
Comment puis-je réduire les 5 arguments à 1 tout en gardant les courbes ? |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 615 ![]() |
Citation:
Ou.... ?
__________________
Merci d'utiliser le forum pour les questions techniques. |
|
|
|
00
|
|
|
#8 | ||||||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 704 ![]() |
Salut,
Coder est un exercice de précision: Code :
curve est une primitive "simple". Avant de l'intégrer dans un programme "compliqué", pourquoi ne pas essayer de faire fonctionner le truc avec des appels simples passé à la console: Code :
Code :
__________________
Architectures Post-Modernes |
||||||
|
|
10
|
|
|
#9 | ||
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Je ne comprends pas pourquoi ca ne marche pas, vu qu'avec ce code si il ne me donne aucune faute et j'utilise également 'frame' .
(c'est le code d'une ancienne version de mon jeu) Code :
@ PauseKawa : ca ne marche pas avec tes propositions |
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 704 ![]() |
Utilisez "frame" comme keyword et lui passer une instance de "frame" ou passer en paramètre la classe frame... çà se ressemble, mais ce n'est pas la même chose.
La question est: vous voulez faire quoi? -W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 615 ![]() |
Oui, cela fonctionne. A condition de prendre en compte le fait que j'ai la touche f du clavier fatiguée : curve(frame=self.rame, >>> curve(frame=self.frame,
Remplacez tous vos curve(frame, ... et curve(frame=f, ... par curve(frame=self.frame, ... Note: Attention aussi au meli melo self.positie/frame.pos (self.frame.positie n'existe pas par exemple) et de pas oublier self (ligne 111 par exemple : self.positie = frame.pos >>> self.positie = self.frame.pos)
__________________
Merci d'utiliser le forum pour les questions techniques. |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
J'ai un peu changé mon code et maintenant l'erreur n'apparaît plus, merci pour les idées!
Ma question de base est solutionnée. Mais ce que je ne sais pas, c'est comment je dois lier mon code de formules à la visualisation, pour que mon vaisseau spatial bouge. Dans ce cas, comment je dois lier la position de 'frame' à la vitesse, l'accélération ... Pour l'instant le vesseau ne bouge pas, alors qu'il devrait etre attiré par la gravité. J'ai écrit toutes les formules, mais j'ai du oublié une liaison quelque part ... |
|
|
00
|
|
|
#13 | |||||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 615 ![]() |
Bonsoir,
En fait vous n'arrivez pas a utiliser les classes (et la poo. C'est le but de mon 'Note' au dessus.). Le code en deviens (ce n'est pas un reproche) n'importe quoi. Code :
Code :
Citation:
Désolé mais le code donné comporte trop de méconnaissances pour aller plus loin avec. Note: Commencez par tester sans classe puisque ce n'est pas un sujet acquis. @+
__________________
Merci d'utiliser le forum pour les questions techniques. |
|||||
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Ok, je comprends !
Pour les classes, je suis obligée de travailler avec ... Merci pour votre temps consacré à mes questions. Cécile |
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 941 ![]() |
Salut,
En simplifiant et en modifiant quelques paramètres j'arrive à piloter le module. Code :
Il faudra encore refaire la fonction de détection du crash, mais je ne sais pas comment tu comptais t'y prendre. |
||
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Un grand merci, VinsS d'avoir regardé mon programme, et d'avoir fait bougé le vaisseau!
J'ai quelques questions sur le code changé, je ne comprends pas tout - ligne 49-50: je ne sais pas à quoi cela sert, et quand je fait 'crtl+c' IDLE affiche 'sys is not defined' - ligne 85 et 89: pourquoi ajouter un tuple avec des valeurs fixes - ligne 93: la vitesse causé par l'attraction de la lune (qui est une accélération) est lié au temps, la vitesse à laquelle le vesseau tombe doit augmenter au fur et à mesure que le jeu progresse la formule : v(t) = v + a*DT ca donnerait : self.velocity = self.velocity + self.acceleration*DT (et l'acceleration de -0.5 , sinon cela va trop lentement) dans votre code , le temps n'a aucune influence sur la vitesse, mais dans le mien il le faut - ligne 96: le *val à la place de *DT, je ne vois pas ce que cette valeur est, vous l'avez mis comme argument, mais où trouve-t-on une valeur pour val? Pour la détection de crash, j'ai recu du code qui détecte quand 2 segments se touchent (dans l'attachement), mais je dois encore l'étudier je pensais rassembler toutes les segments de la lune dans un 'tuple' ou dans une 'liste' et controler pour chaque segment si le vesseau ne le touche pas (à tout moment) avec quelque chose comme : for i in (list) et puis le code. Mais je n'ai pas encore eu le temps d'y travailler. J'espère que mes questions et mes explications sont assez claires. |
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 941 ![]() |
Salut,
sys est un module qu'il faut importer et que j'ai oublié dans mon code. Pour les déplacements gauche droit, j'ai remplacé tes valeurs par ces tuples parce que les valeurs que tu utilisais n'avais aucun effet. Modifies les valeurs, testes et tu comprendras ce que je veux dire. Pour le reste, j'ai été un peu obligé de deviner le calcul auquel tu recourais pour la descente donc j'ai modifié tes données en me fiant uniquement au résultat visible. Avec tes nouvelles explications c'est plus clair. Et aussi plus simple. J'ai modifié le code en utilisant ton calcul d'accélération et en supprimant des noms (variables) qui faisait doublon. Par contre pour le calcul de la poussée, tu modifies l'altitude (coordonnée Y) avec un valeur de 1 (sin(PI / 2)) ce qui n'a pratiquement aucun effet. Mais bon, ça c'est à toi de juger comment le module doit réagir. Code :
|
||
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
En fait, quand je tourne à gauche/droite, le module doit seulement changer son angle de pi/20 / -pi/20 à chaque fois qu'on pousse sur la fleche, et garder ce nouvel angle.
C'est pour cela que dans ma def draai_links / draai_rechts je n'ai mis que le changement de l'angle. Mais je ne sais pas comment je dois lier cela au module. J'ai pensé que ça marcherait peut-être avec l'axe, mais je ne sais pas comment. Pour l'axe , j'ai trouvé comment faire quand le frame est composé d'objects telle des cilindres, des cercles etc , mais pas pour un ensemble de segments. Ce n'est que quand on pousse sur la flèche du haut qu'il doit avancer le long de cet axe. Et quand on ne touche plus sur les fleches il doit tomber tout droit vers le sol. J'ai essayé de commencer par la base, pour le jeu. Je voulais faire les 'détails' plus tard. J'ai encore du travail ... |
|
|
00
|
|
|
#19 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 941 ![]() |
Ah ben oui, j'ai lié directement le mouvement aux flèches gauche-droite, je pensais que le bouton 'up' servait à redonner un peu d'altitude au vaisseau.
Mais ça n'implique pas un gros changement ça, et pour l'axe du vaisseau je pense que tu ne dois changer que l'axe du frame sans t'occuper de ses composants. Regarde si ceci correspond: Code :
Tu as un collègue de cours qui a exposé ce problème sur la ML de Python (1), son code est similaire au tien mais il multiplie par 10 la valeur d'angle de déviation. (1) http://mail.python.org/pipermail/pyt...ry/637910.html |
||
|
|
00
|
|
|
#20 | ||
|
Invité de passage
![]() Étudiant Inscription : décembre 2012 Messages : 9 ![]() |
Dans votre version la flèche du haut ne fonctionne pas, et quand j'utilise la flèche de droite ou de gauche le module ne pas pas vraiment à droite ou gauche , mais on dirait qu'il tourne pour se mettre en profil.
J'ai vu que vous faites changer l'axe par (0,0,0.5), je pense que c'est ça qui cause le mouvement de profil. Et je pense que pour les vecteurs , c'est (cos(angle), sin(angle)) et non (sin, cos). J'ai essayé quelque chose , mais il quand on actionne les flèches droite/gauche, il se réduit , devient plat, et réapparaît à l'envers. Je ne sais pas ce qui cause ca. Et quand je pousse sur la flèche du haut, il ne s'arrête plus !! Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com