how can i solve this videogame error? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Game Development (https://python-forum.io/forum-11.html) +--- Thread: how can i solve this videogame error? (/thread-7726.html) |
how can i solve this videogame error? - abscorpy - Jan-22-2018 THIS IS THE ERROR I AM GETTING: Traceback (most recent call last): File "C:\Users\usuario\Documents\abscorp\232\232.py", line 132, in <module> newdrop() File "C:\Users\usuario\Documents\abscorp\232\232.py", line 44, in newdrop d = Drop1() TypeError: 'Group' object is not callable THIS IS MY CODE: import pygame import time import sys import random WIDTH = 800 HEIGHT = 600 FPS = 360 WHITE = (255, 255, 255) BLACK = (0, 0, 0) GRAY = (168, 169, 173) font_name = pygame.font.match_font('arial') pygame.init() pygame.mixer.init() screen=pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("where is the drop!") clock = pygame.time.Clock() #Load all game graphics and sounds background = pygame.image.load("bckgrnd_3.png").convert() background_rect = background.get_rect() boy_1_img = pygame.image.load("boy_1_img.png").convert() drop_img = pygame.image.load("drop_img.png").convert() explosion_anim = {} explosion_anim['lg'] = [] explosion_anim['sm'] = [] for i in range(3): filename = 'exp_{}.png'.format(i) img = pygame.image.load(filename).convert() img.set_colorkey(GRAY) img_lg = pygame.transform.scale(img, (75, 75)) explosion_anim['lg'].append(img_lg) img_sm = pygame.transform.scale(img, (32, 32)) explosion_anim['sm'].append(img_sm) def newdrop(): Drop1 = pygame.sprite.Group() d = Drop1() all_sprites.add(d) drop.add(d) class Drop(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.transform.scale(drop_img, (50, 38)) self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.radius = int(self.rect.width * .85/ 2) #pygame.draw.circle(self.image, RED, self.rect.center, self.radius) self.rect.x = random.randrange(WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 2) self.speedx = random.randrange(-1, 1) def update(self): self.rect.x += self.speedx self.rect.y += self.speedy if self.rect.top > HEIGHT + 10: self.rect.x = random.randrange(WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 2) class Player(pygame.sprite.Sprite): #sprite for the Player def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.transform.scale(boy_1_img, (50, 38)) self.image.set_colorkey(WHITE) self.rect = self.image.get_rect() self.radius = 25 #pygame.draw.circle(self.image, RED, self.rect.center, self.radius) self.rect.center = (WIDTH / 1.5, HEIGHT / 1.5) self.shield = 100 self.shoot_delay = 250 self.last_shot = pygame.time.get_ticks() def update(self): self.speedx = 0 self.speedy = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LEFT]: self.speedx = -2 if keystate[pygame.K_RIGHT]: self.speedx = 2 if keystate[pygame.K_UP]: self.speedy = -2 if keystate[pygame.K_DOWN]: self.speedy = 2 if keystate[pygame.K_SPACE]: self.throw() self.rect.x += self.speedx self.rect.y += self.speedy if self.rect.right > WIDTH: self.rect.right = WIDTH if self.rect.left < 0: self.rect.left = 0 if self.rect.top > HEIGHT: self.rect.top = HEIGHT if self.rect.bottom < 0: self.rect.bottom = 0 ## def shoot(self): ## now = pygame.time.get_ticks() ## if (now - self.last_shot > self.shoot_delay): ## self.last_shot = now ## bullet = Bullet(self.rect.centerx, self.rect.top) ## all_sprites.add(bullet) ## bullets.add(bullet) ## shoot_sound.play() ##shoot_sound = pygame.mixer.Sound('pew.wav') ##expl_sounds = [] ##for snd in ['expl3.wav', 'expl6.wav']: ## expl_sounds.append(pygame.mixer.Sound(snd)) ##pygame.mixer.music.load('bckgrnd_1.wav') ##pygame.mixer.music.set_volume(0.4) all_sprites = pygame.sprite.Group() drop = pygame.sprite.Sprite() player=Player() all_sprites.add(player) for i in range(8): newdrop() ##pygame.mixer.music.play(loops=-1) # Game Loop score = 0 running= True while running: #keep loop running at the right speed clock.tick(FPS) #Process input (events) for event in pygame.event.get(): #check for closing window if event.type == pygame.QUIT: running= False #Update all_sprites.update() #check to see if a drop hits bucket hits = pygame.sprite.spritecollide(drop, player, True, True) for hit in hits: score += 1 ##random.choice(expl_sounds).play() expl = Explosion(hit.rect.center, 'lg') all_sprites.add(expl) newdrop() #check to see if a drop hits floor hits = pygame.sprite.spritecollide(bucket, drop, True, pygame.sprite.collide_circle) for hit in hits: newdrop() player.shield -= 10 expl = Explosion(hit.rect.center, 'sm') all_sprites.add(expl) if player.shield <= 0: running = False #print (player.shield) #Draw / render screen.fill(BLACK) screen.blit(background, (0, 0)) all_sprites.draw(screen) draw_text(screen, str(score), 18, WIDTH / 2, 10) draw_shield_bar(screen, 5, 5, player.shield) #*after* drawing everything, flip the display pygame.display.flip() pygame.quit() RE: how can i solve this videogame error? - j.crater - Jan-22-2018 Please put your code in Python code tags, and error in error tags. Make sure formatting/indentation is preserved. You can find help here: https://python-forum.io/misc.php?action=help&hid=25 RE: how can i solve this videogame error? - metulburr - Jan-22-2018 group is a container that holds objects. There is no reason to call its object, but call its objects methods . Quote:def newdrop(): Drop1 = pygame.sprite.Group() d = Drop1() all_sprites.add(d) drop.add(d) You would do something like this # This is a list of 'sprites.' Each block in the program is # added to this list. # The list is managed by a class called 'Group.' block_list = pygame.sprite.Group() # This is a list of every sprite. # All blocks and the player block as well. all_sprites_list = pygame.sprite.Group() ... for i in range(50): # This represents a block block = Block(BLACK, 20, 15) # Set a random location for the block block.rect.x = random.randrange(screen_width) block.rect.y = random.randrange(screen_height) # Add the block to the list of objects block_list.add(block) all_sprites_list.add(block) ... player = Block(RED, 20, 15) all_sprites_list.add(player)full example here http://programarcadegames.com/index.php?chapter=introduction_to_sprites RE: how can i solve this videogame error? - abscorpy - Apr-09-2018 So, now the runs like magic, but a drop of water should appear falling from the top of the screen randomly several times, but it doesnt happen, can anyone help me??? if you need the image files give me your email i will send them to you. I apprecieate your help |