Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur dans un jeu du site Pygame.

21 décembre 2010 à 1:56:13

Bonjour.
J'ai télécharger un jeu sur le site de Pygame.
Quand je lance le main, python me renvoi une erreur provenant d'un module.

Traceback (most recent call last):
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\main.py", line 141, in <module>
    m = Main()
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\main.py", line 31, in __init__
    self.levelLoader.load(1)
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\levelLoader.py", line 32, in load
    for y in range(self.main.gridH):
TypeError: 'float' object cannot be interpreted as an integer


Voici le module en question:

import os
import pygame

import enemies
#import helpers
import objects

class LevelLoader:
    def __init__(self,main):
        self.main = main


    def load(self,levelNumber):
        img = pygame.image.load(os.path.join('data','levels',str(levelNumber)+'.png'))

        self.main.gridW = img.get_width()
        self.main.gridH = self.main.H/self.main.GES
        self.main.minX = 0
        self.main.maxX = self.main.gridW*self.main.GES
        self.main.rect = pygame.Rect(self.main.minX,0,self.main.maxX-self.main.minX,self.main.H)
        
        self.main.grid = []
        self.main.cloudPathGrid = [] #Grid of 1s and 0s telling where clouds can and can not go.
        for x in range(self.main.gridW):
            gridCol = []; cloudCol = []
            for y in range(self.main.gridH):
                gridCol.append([]); cloudCol.append(0)
            self.main.grid.append(gridCol)
            self.main.cloudPathGrid.append(cloudCol)
        
        for x in range(self.main.gridW):
            for y in range(self.main.gridH):
                c = img.get_at((x,y))
                #See data\levels\key.txt
                #BLOCKS
                if c == (255,255,255):
                    self.main.get(objects.NormBlock(self.main,x,y)) #Normal Block
                elif c == (128,128,128):
                    self.main.get(objects.MetalBlock(self.main,x,y)) #Metal Block
                elif c == (255,0,0):
                    self.main.get(objects.DamagerBlock(self.main,x,y)) #Damager Block
                #ITEMS
                elif c == (255,255,128):
                    self.main.get(objects.CoinBlock(self.main,x,y)) #Coin Block
                elif c == (128,255,255):
                    self.main.get(objects.ChaosBlock(self.main,x,y)) #Coin Block
                elif c == (255,128,128):
                    self.main.get(objects.EvilItemBlock(self.main,x,y)) #Evil Item Block
                #ENEMIES
                elif c == (255,128,255):
                    self.main.cloudPathGrid[x][y] = 1 #Cloud Path
                elif c == (255,0,255):
                    self.main.get(enemies.Cloud(self.main,x,y)) #Cloud
                    self.main.cloudPathGrid[x][y] = 1 #Also puts path there
                elif c == (255,0,128):
                    self.main.get(enemies.Walker(self.main,x,y))
                #PIPES
                elif c == (0,255,0):
                    if img.get_at((x-1,y)) == (0,255,0): pass #This has been taken care of.
                    else: #We will put a pipe part here.
                        if img.get_at((x,y-1)) == (0,255,0): self.main.get(objects.PipeExtender(self.main,x,y)) #This is not the top.
                        else: self.main.get(objects.PipeTop(self.main,x,y)) #Put on the top to the pipe.

                elif c == (255,255,0):
                    self.main.get(objects.Coin(self.main,x,y))


Merci d'avance... :p
  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2010 à 2:26:26

TypeError: 'float' object cannot be interpreted as an integer

C'est quand même explicite là. Si tu n'apprends pas à comprendre les messages d'erreur même les plus triviaux, tu auras besoin des forums à chaque erreur bête que tu fais, c'est quand même dommage...
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

21 décembre 2010 à 3:10:50

C'est une erreur de type, je sait...
Sauf que ce n'est pas moi qui est coder le jeu, je ne sait donc rien sur les variables ou ce qu'elle peuvent contenires...
  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2010 à 7:38:49

pas d'erreur chez moi, python 2.6.5/ pygame 1.9.1
si d'autres veulent tester: download
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

21 décembre 2010 à 13:41:55

Citation : ShikiSokuZeku

Sauf que ce n'est pas moi qui est coder le jeu, je ne sait donc rien sur les variables ou ce qu'elle peuvent contenires...


J'ai réussi à trouver l'erreur juste en lisant le message d'erreur et le code, tu devrais pouvoir toi aussi.

A la ligne qui pose problème tu as juste une variable qui est utilisée, et passée en argument à une fonction, pas besoin d'aller chercher loin.

Citation : josmiley

pas d'erreur chez moi, python 2.6.5/ pygame 1.9.1
si d'autres veulent tester: download


Il y a un warning normalement sous Python 2.6, mais sous Python 3 c'est une erreur.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

23 décembre 2010 à 0:47:49

Citation

J'ai réussi à trouver l'erreur juste en lisant le message d'erreur et le code



Et c'est quoi cette fameuse erreur? :-°
  • Partager sur Facebook
  • Partager sur Twitter
23 décembre 2010 à 2:22:34

Tu as un message d'erreur qui te dis que sur la ligne qui pose problème, un float ne peut pas être interprété comme 'integer'.
Autrement formulé : tu passe un float dans un contexte ou il attends un entier.

Dans la ligne qui pose problème tu as une fonction range() qui est ultra connue, et à laquelle on passe un paramètre self.main.gridH.
Or il semblerait que range() veuille un int en paramètre, et que self.main.gridH soit un float.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

23 décembre 2010 à 3:23:16

mmh... J'ai modifier toute les variable float des fonction range en int, mais cette fois-ci ça me lance des erreurs au niveau du main...

Laisse tombé. La prochaine fois je veillerai à télécharer des jeux écrit en Python3...
  • Partager sur Facebook
  • Partager sur Twitter
23 décembre 2010 à 3:30:56

Sinon télécharger python 2, ça prend pas beaucoup de temps non plus.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

23 décembre 2010 à 8:13:10

Sinon réviser les bases, ça prend pas beaucoup de temps non plus. (division entière) o_O
  • Partager sur Facebook
  • Partager sur Twitter
23 décembre 2010 à 8:35:11

Citation : ShikiSokuZeku

Traceback (most recent call last):
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\main.py", line 141, in <module>
    m = Main()
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\main.py", line 31, in __init__
    self.levelLoader.load(1)
  File "C:\Python31\Stupid Jetpak Mario Nov 25 10 SOURCE\levelLoader.py", line 32, in load
    for y in range(self.main.gridH):
TypeError: 'float' object cannot be interpreted as an integer


Je me sens plein de gentillesse ce matin, allez: for y in range(int(self.main.gridH)):
  • Partager sur Facebook
  • Partager sur Twitter
yjltg.
23 décembre 2010 à 11:26:34

Citation : quelqun_dautre

Je me sens plein de gentillesse ce matin, allez: for y in range(int(self.main.gridH)):


ça explique pas pourquoi il y a une erreur.
chez moi self.main.gridW et self.main.gridH sont 2 int et valent 224 et 15.
j'ai ni erreur, ni warning ...
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

23 décembre 2010 à 13:16:47

Sous python 3 la division avec / retourne un float, il faut utiliser // pour faire une division entière et obtenir un int.

Le warning est peut être uniquement sous 2.7 ?
  • Partager sur Facebook
  • Partager sur Twitter