New To Python: Pygame TypeError: update() takes 1 positional argument but 2 were given [closed]












-1















I run the game it runs just fine, however when First player shoots second player it crashes the game and gives this error:



pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
EPIC HIT! Player 2 HIT
Traceback (most recent call last):
File "C:UsersrmattOneDriveHackathon ProjectsShootMeme_Main.py", line 125, in <module>
player2.update(gameWindow)
TypeError: update() takes 1 positional argument but 2 were given
[Finished in 6.435s]


When player 2 shoots player 1 the bullet passes over player 1 no issues at all as I want.



I have been trying to figure out why it keeps flagging this. Any help would be very much appreciated! Below is the relevant code:



import pygame, utils, random
from GenericPlayer import PlayerActive
from GenericPlayer2 import PlayerActive2
#from BasicEnemy import Enemy
pygame.init()

gameWindow = pygame.display.set_mode((1000, 600))
pygame.display.set_caption("ShootMeme")
clock = pygame.time.Clock()

def closeGame():
pygame.quit()
quit()

whois = random.randint(0, 1)

whois = 0
if whois == 0:
player = PlayerActive()
player2 = PlayerActive2()
else:
player = PlayerActive2()
player2 = PlayerActive()

#enemy1 = Enemy()
#enemy2 = Enemy()
#enemy2.speed = 1


pygame.init()

pygame.mixer.init()
pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
pygame.mixer.music.set_volume(.15)
pygame.mixer.music.play(-1)


FPS = 30
gameActive = True
while gameActive:

for event in pygame.event.get():
#print (event)
if event.type == pygame.QUIT:

gameActive = False

activeKey = pygame.key.get_pressed()

if activeKey[pygame.K_d]:
#player.move(1, 0)
player.move(5)
if activeKey[pygame.K_a]:
#player.move(-1, 0)
player.move(-5)
if activeKey[pygame.K_w]:
#player.move(0, -1)
player.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)



if activeKey[pygame.K_SPACE]:
player.shoot()

#pygame.mixer.Channel(1).queue()
#pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
#pygame.mixer.music.play(-1)


if activeKey[pygame.K_RIGHT]:
#player.move(1, 0)
player2.move(5)
if activeKey[pygame.K_LEFT]:
#player.move(-1, 0)
player2.move(-5)
if activeKey[pygame.K_UP]:
#player.move(0, -1)
player2.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)

if activeKey[pygame.K_KP_ENTER]:
player2.shoot()

mouse = pygame.mouse.get_pressed()

if activeKey[pygame.K_ESCAPE]:
closeGame()

gameWindow.fill(utils.white)

#Do math stuff
#if mouse[0]:
# player.shoot()

#Draw stuff here

p1Bullets = pygame.sprite.Group()
p1Bullets.add(player.bullets)
p2Bullets = pygame.sprite.Group()
p2Bullets.add(player2.bullets)

p1 = pygame.sprite.Group()
p1.add(player)
p2 = pygame.sprite.Group()
p2.add(player2)

p1bulletCollision = pygame.sprite.groupcollide(p2Bullets, p1, False, False)
for player1 in p1bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

p2bulletCollision = pygame.sprite.groupcollide(p1Bullets, p2, False, False)
for player2 in p2bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

#Updates

player.update(gameWindow)
player2.update(gameWindow)

#print(str(player.rect.x))


#enemy1.update(gameWindow, player)
#enemy2.update(gameWindow, player)


#End drawing stuff

pygame.display.update()
clock.tick(FPS)

closeGame()


AND:



import pygame, utils, random, math
pygame.init()

class PlayerActive2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedShip000.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (76, 101))

#self.image.fill(utils.blue)
self.rect = self.image.get_rect()
self.image_rotated = self.image

self.memeMastery = 5

self.angle = 0
self.rect.x = 900
self.rect.y = random.randint(1, 5) * 100
self.speed = 5

self.spawnDelay = 0
self.spawnDelayMax = 15
self.ammo = pygame.sprite.Group()
self.bullets = pygame.sprite.Group()

self.rotation = 0

self.isAlive = True

self.cd = 10
self.cdMax = 10

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)

def move(self, dir):


#define angle between 0 and 359
#modulo out 360's either positive or negative to get direction
#for your angles established now, make the ship move in the x direction equal to -sin(x) and in the y direction equal to -sin(y)
#your projectiles can also be shot out once you have this angle.


#if self.angle >= 180:
#self.angle = -180
#elif self.angle <= -180:
#self.angle = 180
if self.angle >= 360:
self.angle = 0
elif self.angle < 0:
self.angle = 360


if dir == -5:
self.angle -= 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 5:
self.angle += 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 0:
#print(str(self.angle) + " ROTATION")

self.rect.x += (math.sin(-self.angle*math.pi/180)*self.speed)
self.rect.y -= (math.cos(-self.angle*math.pi/180)*self.speed)


#if dir == 0:
# self.speed
#print(self.rect.x)
#print(self.rect.y)

#if dir == 0:
#self.speed = math.sqrt((math.cos(-self.angle*math.pi/180)*self.speed)**2+(math.sin(-self.angle*math.pi/180)*self.speed)**2)
# self.rect.x -= (math.cos(-self.angle*math.pi/180)*self.speed)
# self.rect.y += (math.sin(-self.angle*math.pi/180)*self.speed)
# return
#self.angle = (self.angle + dir)%360
#print (str(self.angle) + " ANGLE")

#self.image_backup = self.image
#self.image_rotated = pygame.transform.rotate(self.image, self.angle)
#self.image = self.image_backup

def spawnAmmo(self):
self.ammo.add(Bullet(self.angle,self.rect.x+(self.rect.width/2)+self.rect.width/2*math.cos(self.angle),self.rect.y+(self.rect.height/2)-self.rect.height/2*math.sin(self.angle)))

def moveAmmo(self):

for obj in self.ammo:

if obj.rect.x + obj.rect.width >= self.rect.width:
obj.xmove *= -1
elif obj.rect.x <= 0:
obj.xmove *= -1
if obj.rect.y + obj.rect.height >= self.rect.height:
obj.ymove *= -1
elif obj.rect.y <= 0:
obj.ymove *=-1

obj.rect.x += obj.xmove
obj.rect.y += obj.ymove

def shoot(self):
if self.cd <= 0 and self.ammo:
self.cd = self.cdMax
bullet = self.ammo.sprites() [0]
self.ammo.remove(bullet)

bullet.rect.x = self.rect.x + self.rect.width/2 - bullet.rect.width/2
bullet.rect.y = self.rect.y + self.rect.height/2 - bullet.rect.height/2

bullet.getTarg()
self.bullets.add(bullet)

def destroy():
print("HIT! Gen 2")

def update(self, gw):
self.cd -= 1
self.spawnDelay -= 1
if self.spawnDelay <=0:
self.spawnAmmo()
self.spawnDelay = self.spawnDelayMax

self.moveAmmo()

#Active in scene
self.bullets.update()
self.bullets.draw(gw)

if self.isAlive:
gw.blit(self.image_rotated, self.rect)


charList = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split()

class Bullet(pygame.sprite.Sprite):
def __init__(self,angle,x,y):
pygame.sprite.Sprite.__init__(self)
self.angle = angle
self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedLaser.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (11, 11))
self.rect = self.image.get_rect()

self.rect.x = x#random.randint(0, 100 - self.rect.width)
self.rect.y = y#random.randint(0, 100 - self.rect.height)

self.speed = 20.0

self.xmove = 0
self.ymove = 0

#self.xmove = random.choice([-1, 1])
#self.ymove = random.choice([-1, 1])

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def getTarg(self):

self.xmove += (math.sin(-self.angle*math.pi/180)*self.speed)
self.ymove -= (math.cos(-self.angle*math.pi/180)*self.speed)


#xdiff = cur[0] - self.rect.x - self.rect.width/2
#ydiff = cur[1] - self.rect.y - self.rect.height/3
#xdiff = self.rect.x - math.cos(self.angle)*(self.speed)
#ydiff = self.rect.y - math.sin(self.angle)*(self.speed)

#magnitude = math.sqrt(float(xdiff ** 2 + ydiff ** 2))
#numFrames = int(magnitude / self.speed)

#self.xmove = xdiff/numFrames
#self.ymove = ydiff/numFrames

#xtravel = math.cos(self.angle)*self.xmove * numFrames
#ytravel = math.sin(self.angle)*self.ymove * numFrames

#self.rect.x += xdiff - xtravel
#self.rect.y += ydiff - ytravel

def destroy():
kill()

def update(self):
self.rect.x += self.xmove
self.rect.y += self.ymove









share|improve this question















closed as off-topic by Goyo, EdChum, Unheilig, Umair, thewaywewere Nov 19 '18 at 15:25


This question appears to be off-topic. The users who voted to close gave these specific reasons:



  • "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Goyo, thewaywewere

  • "This question was caused by a problem that can no longer be reproduced or a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers. This can often be avoided by identifying and closely inspecting the shortest program necessary to reproduce the problem before posting." – EdChum, Unheilig, Umair


If this question can be reworded to fit the rules in the help center, please edit the question.

















  • You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

    – Martijn Pieters
    Nov 19 '18 at 8:45













  • I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

    – Martijn Pieters
    Nov 19 '18 at 8:47
















-1















I run the game it runs just fine, however when First player shoots second player it crashes the game and gives this error:



pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
EPIC HIT! Player 2 HIT
Traceback (most recent call last):
File "C:UsersrmattOneDriveHackathon ProjectsShootMeme_Main.py", line 125, in <module>
player2.update(gameWindow)
TypeError: update() takes 1 positional argument but 2 were given
[Finished in 6.435s]


When player 2 shoots player 1 the bullet passes over player 1 no issues at all as I want.



I have been trying to figure out why it keeps flagging this. Any help would be very much appreciated! Below is the relevant code:



import pygame, utils, random
from GenericPlayer import PlayerActive
from GenericPlayer2 import PlayerActive2
#from BasicEnemy import Enemy
pygame.init()

gameWindow = pygame.display.set_mode((1000, 600))
pygame.display.set_caption("ShootMeme")
clock = pygame.time.Clock()

def closeGame():
pygame.quit()
quit()

whois = random.randint(0, 1)

whois = 0
if whois == 0:
player = PlayerActive()
player2 = PlayerActive2()
else:
player = PlayerActive2()
player2 = PlayerActive()

#enemy1 = Enemy()
#enemy2 = Enemy()
#enemy2.speed = 1


pygame.init()

pygame.mixer.init()
pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
pygame.mixer.music.set_volume(.15)
pygame.mixer.music.play(-1)


FPS = 30
gameActive = True
while gameActive:

for event in pygame.event.get():
#print (event)
if event.type == pygame.QUIT:

gameActive = False

activeKey = pygame.key.get_pressed()

if activeKey[pygame.K_d]:
#player.move(1, 0)
player.move(5)
if activeKey[pygame.K_a]:
#player.move(-1, 0)
player.move(-5)
if activeKey[pygame.K_w]:
#player.move(0, -1)
player.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)



if activeKey[pygame.K_SPACE]:
player.shoot()

#pygame.mixer.Channel(1).queue()
#pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
#pygame.mixer.music.play(-1)


if activeKey[pygame.K_RIGHT]:
#player.move(1, 0)
player2.move(5)
if activeKey[pygame.K_LEFT]:
#player.move(-1, 0)
player2.move(-5)
if activeKey[pygame.K_UP]:
#player.move(0, -1)
player2.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)

if activeKey[pygame.K_KP_ENTER]:
player2.shoot()

mouse = pygame.mouse.get_pressed()

if activeKey[pygame.K_ESCAPE]:
closeGame()

gameWindow.fill(utils.white)

#Do math stuff
#if mouse[0]:
# player.shoot()

#Draw stuff here

p1Bullets = pygame.sprite.Group()
p1Bullets.add(player.bullets)
p2Bullets = pygame.sprite.Group()
p2Bullets.add(player2.bullets)

p1 = pygame.sprite.Group()
p1.add(player)
p2 = pygame.sprite.Group()
p2.add(player2)

p1bulletCollision = pygame.sprite.groupcollide(p2Bullets, p1, False, False)
for player1 in p1bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

p2bulletCollision = pygame.sprite.groupcollide(p1Bullets, p2, False, False)
for player2 in p2bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

#Updates

player.update(gameWindow)
player2.update(gameWindow)

#print(str(player.rect.x))


#enemy1.update(gameWindow, player)
#enemy2.update(gameWindow, player)


#End drawing stuff

pygame.display.update()
clock.tick(FPS)

closeGame()


AND:



import pygame, utils, random, math
pygame.init()

class PlayerActive2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedShip000.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (76, 101))

#self.image.fill(utils.blue)
self.rect = self.image.get_rect()
self.image_rotated = self.image

self.memeMastery = 5

self.angle = 0
self.rect.x = 900
self.rect.y = random.randint(1, 5) * 100
self.speed = 5

self.spawnDelay = 0
self.spawnDelayMax = 15
self.ammo = pygame.sprite.Group()
self.bullets = pygame.sprite.Group()

self.rotation = 0

self.isAlive = True

self.cd = 10
self.cdMax = 10

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)

def move(self, dir):


#define angle between 0 and 359
#modulo out 360's either positive or negative to get direction
#for your angles established now, make the ship move in the x direction equal to -sin(x) and in the y direction equal to -sin(y)
#your projectiles can also be shot out once you have this angle.


#if self.angle >= 180:
#self.angle = -180
#elif self.angle <= -180:
#self.angle = 180
if self.angle >= 360:
self.angle = 0
elif self.angle < 0:
self.angle = 360


if dir == -5:
self.angle -= 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 5:
self.angle += 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 0:
#print(str(self.angle) + " ROTATION")

self.rect.x += (math.sin(-self.angle*math.pi/180)*self.speed)
self.rect.y -= (math.cos(-self.angle*math.pi/180)*self.speed)


#if dir == 0:
# self.speed
#print(self.rect.x)
#print(self.rect.y)

#if dir == 0:
#self.speed = math.sqrt((math.cos(-self.angle*math.pi/180)*self.speed)**2+(math.sin(-self.angle*math.pi/180)*self.speed)**2)
# self.rect.x -= (math.cos(-self.angle*math.pi/180)*self.speed)
# self.rect.y += (math.sin(-self.angle*math.pi/180)*self.speed)
# return
#self.angle = (self.angle + dir)%360
#print (str(self.angle) + " ANGLE")

#self.image_backup = self.image
#self.image_rotated = pygame.transform.rotate(self.image, self.angle)
#self.image = self.image_backup

def spawnAmmo(self):
self.ammo.add(Bullet(self.angle,self.rect.x+(self.rect.width/2)+self.rect.width/2*math.cos(self.angle),self.rect.y+(self.rect.height/2)-self.rect.height/2*math.sin(self.angle)))

def moveAmmo(self):

for obj in self.ammo:

if obj.rect.x + obj.rect.width >= self.rect.width:
obj.xmove *= -1
elif obj.rect.x <= 0:
obj.xmove *= -1
if obj.rect.y + obj.rect.height >= self.rect.height:
obj.ymove *= -1
elif obj.rect.y <= 0:
obj.ymove *=-1

obj.rect.x += obj.xmove
obj.rect.y += obj.ymove

def shoot(self):
if self.cd <= 0 and self.ammo:
self.cd = self.cdMax
bullet = self.ammo.sprites() [0]
self.ammo.remove(bullet)

bullet.rect.x = self.rect.x + self.rect.width/2 - bullet.rect.width/2
bullet.rect.y = self.rect.y + self.rect.height/2 - bullet.rect.height/2

bullet.getTarg()
self.bullets.add(bullet)

def destroy():
print("HIT! Gen 2")

def update(self, gw):
self.cd -= 1
self.spawnDelay -= 1
if self.spawnDelay <=0:
self.spawnAmmo()
self.spawnDelay = self.spawnDelayMax

self.moveAmmo()

#Active in scene
self.bullets.update()
self.bullets.draw(gw)

if self.isAlive:
gw.blit(self.image_rotated, self.rect)


charList = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split()

class Bullet(pygame.sprite.Sprite):
def __init__(self,angle,x,y):
pygame.sprite.Sprite.__init__(self)
self.angle = angle
self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedLaser.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (11, 11))
self.rect = self.image.get_rect()

self.rect.x = x#random.randint(0, 100 - self.rect.width)
self.rect.y = y#random.randint(0, 100 - self.rect.height)

self.speed = 20.0

self.xmove = 0
self.ymove = 0

#self.xmove = random.choice([-1, 1])
#self.ymove = random.choice([-1, 1])

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def getTarg(self):

self.xmove += (math.sin(-self.angle*math.pi/180)*self.speed)
self.ymove -= (math.cos(-self.angle*math.pi/180)*self.speed)


#xdiff = cur[0] - self.rect.x - self.rect.width/2
#ydiff = cur[1] - self.rect.y - self.rect.height/3
#xdiff = self.rect.x - math.cos(self.angle)*(self.speed)
#ydiff = self.rect.y - math.sin(self.angle)*(self.speed)

#magnitude = math.sqrt(float(xdiff ** 2 + ydiff ** 2))
#numFrames = int(magnitude / self.speed)

#self.xmove = xdiff/numFrames
#self.ymove = ydiff/numFrames

#xtravel = math.cos(self.angle)*self.xmove * numFrames
#ytravel = math.sin(self.angle)*self.ymove * numFrames

#self.rect.x += xdiff - xtravel
#self.rect.y += ydiff - ytravel

def destroy():
kill()

def update(self):
self.rect.x += self.xmove
self.rect.y += self.ymove









share|improve this question















closed as off-topic by Goyo, EdChum, Unheilig, Umair, thewaywewere Nov 19 '18 at 15:25


This question appears to be off-topic. The users who voted to close gave these specific reasons:



  • "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Goyo, thewaywewere

  • "This question was caused by a problem that can no longer be reproduced or a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers. This can often be avoided by identifying and closely inspecting the shortest program necessary to reproduce the problem before posting." – EdChum, Unheilig, Umair


If this question can be reworded to fit the rules in the help center, please edit the question.

















  • You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

    – Martijn Pieters
    Nov 19 '18 at 8:45













  • I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

    – Martijn Pieters
    Nov 19 '18 at 8:47














-1












-1








-1








I run the game it runs just fine, however when First player shoots second player it crashes the game and gives this error:



pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
EPIC HIT! Player 2 HIT
Traceback (most recent call last):
File "C:UsersrmattOneDriveHackathon ProjectsShootMeme_Main.py", line 125, in <module>
player2.update(gameWindow)
TypeError: update() takes 1 positional argument but 2 were given
[Finished in 6.435s]


When player 2 shoots player 1 the bullet passes over player 1 no issues at all as I want.



I have been trying to figure out why it keeps flagging this. Any help would be very much appreciated! Below is the relevant code:



import pygame, utils, random
from GenericPlayer import PlayerActive
from GenericPlayer2 import PlayerActive2
#from BasicEnemy import Enemy
pygame.init()

gameWindow = pygame.display.set_mode((1000, 600))
pygame.display.set_caption("ShootMeme")
clock = pygame.time.Clock()

def closeGame():
pygame.quit()
quit()

whois = random.randint(0, 1)

whois = 0
if whois == 0:
player = PlayerActive()
player2 = PlayerActive2()
else:
player = PlayerActive2()
player2 = PlayerActive()

#enemy1 = Enemy()
#enemy2 = Enemy()
#enemy2.speed = 1


pygame.init()

pygame.mixer.init()
pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
pygame.mixer.music.set_volume(.15)
pygame.mixer.music.play(-1)


FPS = 30
gameActive = True
while gameActive:

for event in pygame.event.get():
#print (event)
if event.type == pygame.QUIT:

gameActive = False

activeKey = pygame.key.get_pressed()

if activeKey[pygame.K_d]:
#player.move(1, 0)
player.move(5)
if activeKey[pygame.K_a]:
#player.move(-1, 0)
player.move(-5)
if activeKey[pygame.K_w]:
#player.move(0, -1)
player.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)



if activeKey[pygame.K_SPACE]:
player.shoot()

#pygame.mixer.Channel(1).queue()
#pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
#pygame.mixer.music.play(-1)


if activeKey[pygame.K_RIGHT]:
#player.move(1, 0)
player2.move(5)
if activeKey[pygame.K_LEFT]:
#player.move(-1, 0)
player2.move(-5)
if activeKey[pygame.K_UP]:
#player.move(0, -1)
player2.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)

if activeKey[pygame.K_KP_ENTER]:
player2.shoot()

mouse = pygame.mouse.get_pressed()

if activeKey[pygame.K_ESCAPE]:
closeGame()

gameWindow.fill(utils.white)

#Do math stuff
#if mouse[0]:
# player.shoot()

#Draw stuff here

p1Bullets = pygame.sprite.Group()
p1Bullets.add(player.bullets)
p2Bullets = pygame.sprite.Group()
p2Bullets.add(player2.bullets)

p1 = pygame.sprite.Group()
p1.add(player)
p2 = pygame.sprite.Group()
p2.add(player2)

p1bulletCollision = pygame.sprite.groupcollide(p2Bullets, p1, False, False)
for player1 in p1bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

p2bulletCollision = pygame.sprite.groupcollide(p1Bullets, p2, False, False)
for player2 in p2bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

#Updates

player.update(gameWindow)
player2.update(gameWindow)

#print(str(player.rect.x))


#enemy1.update(gameWindow, player)
#enemy2.update(gameWindow, player)


#End drawing stuff

pygame.display.update()
clock.tick(FPS)

closeGame()


AND:



import pygame, utils, random, math
pygame.init()

class PlayerActive2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedShip000.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (76, 101))

#self.image.fill(utils.blue)
self.rect = self.image.get_rect()
self.image_rotated = self.image

self.memeMastery = 5

self.angle = 0
self.rect.x = 900
self.rect.y = random.randint(1, 5) * 100
self.speed = 5

self.spawnDelay = 0
self.spawnDelayMax = 15
self.ammo = pygame.sprite.Group()
self.bullets = pygame.sprite.Group()

self.rotation = 0

self.isAlive = True

self.cd = 10
self.cdMax = 10

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)

def move(self, dir):


#define angle between 0 and 359
#modulo out 360's either positive or negative to get direction
#for your angles established now, make the ship move in the x direction equal to -sin(x) and in the y direction equal to -sin(y)
#your projectiles can also be shot out once you have this angle.


#if self.angle >= 180:
#self.angle = -180
#elif self.angle <= -180:
#self.angle = 180
if self.angle >= 360:
self.angle = 0
elif self.angle < 0:
self.angle = 360


if dir == -5:
self.angle -= 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 5:
self.angle += 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 0:
#print(str(self.angle) + " ROTATION")

self.rect.x += (math.sin(-self.angle*math.pi/180)*self.speed)
self.rect.y -= (math.cos(-self.angle*math.pi/180)*self.speed)


#if dir == 0:
# self.speed
#print(self.rect.x)
#print(self.rect.y)

#if dir == 0:
#self.speed = math.sqrt((math.cos(-self.angle*math.pi/180)*self.speed)**2+(math.sin(-self.angle*math.pi/180)*self.speed)**2)
# self.rect.x -= (math.cos(-self.angle*math.pi/180)*self.speed)
# self.rect.y += (math.sin(-self.angle*math.pi/180)*self.speed)
# return
#self.angle = (self.angle + dir)%360
#print (str(self.angle) + " ANGLE")

#self.image_backup = self.image
#self.image_rotated = pygame.transform.rotate(self.image, self.angle)
#self.image = self.image_backup

def spawnAmmo(self):
self.ammo.add(Bullet(self.angle,self.rect.x+(self.rect.width/2)+self.rect.width/2*math.cos(self.angle),self.rect.y+(self.rect.height/2)-self.rect.height/2*math.sin(self.angle)))

def moveAmmo(self):

for obj in self.ammo:

if obj.rect.x + obj.rect.width >= self.rect.width:
obj.xmove *= -1
elif obj.rect.x <= 0:
obj.xmove *= -1
if obj.rect.y + obj.rect.height >= self.rect.height:
obj.ymove *= -1
elif obj.rect.y <= 0:
obj.ymove *=-1

obj.rect.x += obj.xmove
obj.rect.y += obj.ymove

def shoot(self):
if self.cd <= 0 and self.ammo:
self.cd = self.cdMax
bullet = self.ammo.sprites() [0]
self.ammo.remove(bullet)

bullet.rect.x = self.rect.x + self.rect.width/2 - bullet.rect.width/2
bullet.rect.y = self.rect.y + self.rect.height/2 - bullet.rect.height/2

bullet.getTarg()
self.bullets.add(bullet)

def destroy():
print("HIT! Gen 2")

def update(self, gw):
self.cd -= 1
self.spawnDelay -= 1
if self.spawnDelay <=0:
self.spawnAmmo()
self.spawnDelay = self.spawnDelayMax

self.moveAmmo()

#Active in scene
self.bullets.update()
self.bullets.draw(gw)

if self.isAlive:
gw.blit(self.image_rotated, self.rect)


charList = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split()

class Bullet(pygame.sprite.Sprite):
def __init__(self,angle,x,y):
pygame.sprite.Sprite.__init__(self)
self.angle = angle
self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedLaser.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (11, 11))
self.rect = self.image.get_rect()

self.rect.x = x#random.randint(0, 100 - self.rect.width)
self.rect.y = y#random.randint(0, 100 - self.rect.height)

self.speed = 20.0

self.xmove = 0
self.ymove = 0

#self.xmove = random.choice([-1, 1])
#self.ymove = random.choice([-1, 1])

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def getTarg(self):

self.xmove += (math.sin(-self.angle*math.pi/180)*self.speed)
self.ymove -= (math.cos(-self.angle*math.pi/180)*self.speed)


#xdiff = cur[0] - self.rect.x - self.rect.width/2
#ydiff = cur[1] - self.rect.y - self.rect.height/3
#xdiff = self.rect.x - math.cos(self.angle)*(self.speed)
#ydiff = self.rect.y - math.sin(self.angle)*(self.speed)

#magnitude = math.sqrt(float(xdiff ** 2 + ydiff ** 2))
#numFrames = int(magnitude / self.speed)

#self.xmove = xdiff/numFrames
#self.ymove = ydiff/numFrames

#xtravel = math.cos(self.angle)*self.xmove * numFrames
#ytravel = math.sin(self.angle)*self.ymove * numFrames

#self.rect.x += xdiff - xtravel
#self.rect.y += ydiff - ytravel

def destroy():
kill()

def update(self):
self.rect.x += self.xmove
self.rect.y += self.ymove









share|improve this question
















I run the game it runs just fine, however when First player shoots second player it crashes the game and gives this error:



pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
EPIC HIT! Player 2 HIT
Traceback (most recent call last):
File "C:UsersrmattOneDriveHackathon ProjectsShootMeme_Main.py", line 125, in <module>
player2.update(gameWindow)
TypeError: update() takes 1 positional argument but 2 were given
[Finished in 6.435s]


When player 2 shoots player 1 the bullet passes over player 1 no issues at all as I want.



I have been trying to figure out why it keeps flagging this. Any help would be very much appreciated! Below is the relevant code:



import pygame, utils, random
from GenericPlayer import PlayerActive
from GenericPlayer2 import PlayerActive2
#from BasicEnemy import Enemy
pygame.init()

gameWindow = pygame.display.set_mode((1000, 600))
pygame.display.set_caption("ShootMeme")
clock = pygame.time.Clock()

def closeGame():
pygame.quit()
quit()

whois = random.randint(0, 1)

whois = 0
if whois == 0:
player = PlayerActive()
player2 = PlayerActive2()
else:
player = PlayerActive2()
player2 = PlayerActive()

#enemy1 = Enemy()
#enemy2 = Enemy()
#enemy2.speed = 1


pygame.init()

pygame.mixer.init()
pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
pygame.mixer.music.set_volume(.15)
pygame.mixer.music.play(-1)


FPS = 30
gameActive = True
while gameActive:

for event in pygame.event.get():
#print (event)
if event.type == pygame.QUIT:

gameActive = False

activeKey = pygame.key.get_pressed()

if activeKey[pygame.K_d]:
#player.move(1, 0)
player.move(5)
if activeKey[pygame.K_a]:
#player.move(-1, 0)
player.move(-5)
if activeKey[pygame.K_w]:
#player.move(0, -1)
player.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)



if activeKey[pygame.K_SPACE]:
player.shoot()

#pygame.mixer.Channel(1).queue()
#pygame.mixer.music.load("C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Sounds/ShootMeme0.mp3")
#pygame.mixer.music.play(-1)


if activeKey[pygame.K_RIGHT]:
#player.move(1, 0)
player2.move(5)
if activeKey[pygame.K_LEFT]:
#player.move(-1, 0)
player2.move(-5)
if activeKey[pygame.K_UP]:
#player.move(0, -1)
player2.move(0)
#if activeKey[pygame.K_s]:
#continue
#player.move(0, 1)

if activeKey[pygame.K_KP_ENTER]:
player2.shoot()

mouse = pygame.mouse.get_pressed()

if activeKey[pygame.K_ESCAPE]:
closeGame()

gameWindow.fill(utils.white)

#Do math stuff
#if mouse[0]:
# player.shoot()

#Draw stuff here

p1Bullets = pygame.sprite.Group()
p1Bullets.add(player.bullets)
p2Bullets = pygame.sprite.Group()
p2Bullets.add(player2.bullets)

p1 = pygame.sprite.Group()
p1.add(player)
p2 = pygame.sprite.Group()
p2.add(player2)

p1bulletCollision = pygame.sprite.groupcollide(p2Bullets, p1, False, False)
for player1 in p1bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

p2bulletCollision = pygame.sprite.groupcollide(p1Bullets, p2, False, False)
for player2 in p2bulletCollision:
print("EPIC HIT! Player 2 HIT")
continue

#Updates

player.update(gameWindow)
player2.update(gameWindow)

#print(str(player.rect.x))


#enemy1.update(gameWindow, player)
#enemy2.update(gameWindow, player)


#End drawing stuff

pygame.display.update()
clock.tick(FPS)

closeGame()


AND:



import pygame, utils, random, math
pygame.init()

class PlayerActive2(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedShip000.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (76, 101))

#self.image.fill(utils.blue)
self.rect = self.image.get_rect()
self.image_rotated = self.image

self.memeMastery = 5

self.angle = 0
self.rect.x = 900
self.rect.y = random.randint(1, 5) * 100
self.speed = 5

self.spawnDelay = 0
self.spawnDelayMax = 15
self.ammo = pygame.sprite.Group()
self.bullets = pygame.sprite.Group()

self.rotation = 0

self.isAlive = True

self.cd = 10
self.cdMax = 10

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)

def move(self, dir):


#define angle between 0 and 359
#modulo out 360's either positive or negative to get direction
#for your angles established now, make the ship move in the x direction equal to -sin(x) and in the y direction equal to -sin(y)
#your projectiles can also be shot out once you have this angle.


#if self.angle >= 180:
#self.angle = -180
#elif self.angle <= -180:
#self.angle = 180
if self.angle >= 360:
self.angle = 0
elif self.angle < 0:
self.angle = 360


if dir == -5:
self.angle -= 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 5:
self.angle += 5
self.image_rotated = self.rot_center(self.image, self.angle, self.rect.center)

if dir == 0:
#print(str(self.angle) + " ROTATION")

self.rect.x += (math.sin(-self.angle*math.pi/180)*self.speed)
self.rect.y -= (math.cos(-self.angle*math.pi/180)*self.speed)


#if dir == 0:
# self.speed
#print(self.rect.x)
#print(self.rect.y)

#if dir == 0:
#self.speed = math.sqrt((math.cos(-self.angle*math.pi/180)*self.speed)**2+(math.sin(-self.angle*math.pi/180)*self.speed)**2)
# self.rect.x -= (math.cos(-self.angle*math.pi/180)*self.speed)
# self.rect.y += (math.sin(-self.angle*math.pi/180)*self.speed)
# return
#self.angle = (self.angle + dir)%360
#print (str(self.angle) + " ANGLE")

#self.image_backup = self.image
#self.image_rotated = pygame.transform.rotate(self.image, self.angle)
#self.image = self.image_backup

def spawnAmmo(self):
self.ammo.add(Bullet(self.angle,self.rect.x+(self.rect.width/2)+self.rect.width/2*math.cos(self.angle),self.rect.y+(self.rect.height/2)-self.rect.height/2*math.sin(self.angle)))

def moveAmmo(self):

for obj in self.ammo:

if obj.rect.x + obj.rect.width >= self.rect.width:
obj.xmove *= -1
elif obj.rect.x <= 0:
obj.xmove *= -1
if obj.rect.y + obj.rect.height >= self.rect.height:
obj.ymove *= -1
elif obj.rect.y <= 0:
obj.ymove *=-1

obj.rect.x += obj.xmove
obj.rect.y += obj.ymove

def shoot(self):
if self.cd <= 0 and self.ammo:
self.cd = self.cdMax
bullet = self.ammo.sprites() [0]
self.ammo.remove(bullet)

bullet.rect.x = self.rect.x + self.rect.width/2 - bullet.rect.width/2
bullet.rect.y = self.rect.y + self.rect.height/2 - bullet.rect.height/2

bullet.getTarg()
self.bullets.add(bullet)

def destroy():
print("HIT! Gen 2")

def update(self, gw):
self.cd -= 1
self.spawnDelay -= 1
if self.spawnDelay <=0:
self.spawnAmmo()
self.spawnDelay = self.spawnDelayMax

self.moveAmmo()

#Active in scene
self.bullets.update()
self.bullets.draw(gw)

if self.isAlive:
gw.blit(self.image_rotated, self.rect)


charList = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split()

class Bullet(pygame.sprite.Sprite):
def __init__(self,angle,x,y):
pygame.sprite.Sprite.__init__(self)
self.angle = angle
self.image = pygame.image.load('C:/Users/rmatt/OneDrive/Hackathon Projects/ShootMeme/Images/RedLaser.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (11, 11))
self.rect = self.image.get_rect()

self.rect.x = x#random.randint(0, 100 - self.rect.width)
self.rect.y = y#random.randint(0, 100 - self.rect.height)

self.speed = 20.0

self.xmove = 0
self.ymove = 0

#self.xmove = random.choice([-1, 1])
#self.ymove = random.choice([-1, 1])

def rot_center(emptyVar, image, angle, centerSelf):
'''rotate an image while keeping its center'''
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect(center=centerSelf)
return rot_image

def getTarg(self):

self.xmove += (math.sin(-self.angle*math.pi/180)*self.speed)
self.ymove -= (math.cos(-self.angle*math.pi/180)*self.speed)


#xdiff = cur[0] - self.rect.x - self.rect.width/2
#ydiff = cur[1] - self.rect.y - self.rect.height/3
#xdiff = self.rect.x - math.cos(self.angle)*(self.speed)
#ydiff = self.rect.y - math.sin(self.angle)*(self.speed)

#magnitude = math.sqrt(float(xdiff ** 2 + ydiff ** 2))
#numFrames = int(magnitude / self.speed)

#self.xmove = xdiff/numFrames
#self.ymove = ydiff/numFrames

#xtravel = math.cos(self.angle)*self.xmove * numFrames
#ytravel = math.sin(self.angle)*self.ymove * numFrames

#self.rect.x += xdiff - xtravel
#self.rect.y += ydiff - ytravel

def destroy():
kill()

def update(self):
self.rect.x += self.xmove
self.rect.y += self.ymove






python pygame






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 19 '18 at 8:46









Martijn Pieters

711k13724812301




711k13724812301










asked Nov 19 '18 at 8:41









Richard MattinglyRichard Mattingly

31




31




closed as off-topic by Goyo, EdChum, Unheilig, Umair, thewaywewere Nov 19 '18 at 15:25


This question appears to be off-topic. The users who voted to close gave these specific reasons:



  • "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Goyo, thewaywewere

  • "This question was caused by a problem that can no longer be reproduced or a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers. This can often be avoided by identifying and closely inspecting the shortest program necessary to reproduce the problem before posting." – EdChum, Unheilig, Umair


If this question can be reworded to fit the rules in the help center, please edit the question.







closed as off-topic by Goyo, EdChum, Unheilig, Umair, thewaywewere Nov 19 '18 at 15:25


This question appears to be off-topic. The users who voted to close gave these specific reasons:



  • "Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a Minimal, Complete, and Verifiable example." – Goyo, thewaywewere

  • "This question was caused by a problem that can no longer be reproduced or a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers. This can often be avoided by identifying and closely inspecting the shortest program necessary to reproduce the problem before posting." – EdChum, Unheilig, Umair


If this question can be reworded to fit the rules in the help center, please edit the question.













  • You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

    – Martijn Pieters
    Nov 19 '18 at 8:45













  • I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

    – Martijn Pieters
    Nov 19 '18 at 8:47



















  • You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

    – Martijn Pieters
    Nov 19 '18 at 8:45













  • I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

    – Martijn Pieters
    Nov 19 '18 at 8:47

















You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

– Martijn Pieters
Nov 19 '18 at 8:45







You don't show the PlayerActive class. Could it be that PlayerActive.update() is being called?

– Martijn Pieters
Nov 19 '18 at 8:45















I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

– Martijn Pieters
Nov 19 '18 at 8:47





I'm not sure why you have separate classes for player 1 and player 2 though. Use the same class and use attributes on the class to distinguish between player 1 and player 2 behaviour and look.

– Martijn Pieters
Nov 19 '18 at 8:47












1 Answer
1






active

oldest

votes


















1














You've overwritten the name player2 in the for loop just before that line, when you do for player2 in p2bulletCollision:. Python does not have block scope, so that definition remains in the scope. This means that player2 is no longer an instance of PlayerActive, but whatever is inside the p2bulletCollision list.



You should use a different name; in fact, since you don't use the variable at all within the loop, use the _ character:



for _ in p2bulletCollision:





share|improve this answer






























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    You've overwritten the name player2 in the for loop just before that line, when you do for player2 in p2bulletCollision:. Python does not have block scope, so that definition remains in the scope. This means that player2 is no longer an instance of PlayerActive, but whatever is inside the p2bulletCollision list.



    You should use a different name; in fact, since you don't use the variable at all within the loop, use the _ character:



    for _ in p2bulletCollision:





    share|improve this answer




























      1














      You've overwritten the name player2 in the for loop just before that line, when you do for player2 in p2bulletCollision:. Python does not have block scope, so that definition remains in the scope. This means that player2 is no longer an instance of PlayerActive, but whatever is inside the p2bulletCollision list.



      You should use a different name; in fact, since you don't use the variable at all within the loop, use the _ character:



      for _ in p2bulletCollision:





      share|improve this answer


























        1












        1








        1







        You've overwritten the name player2 in the for loop just before that line, when you do for player2 in p2bulletCollision:. Python does not have block scope, so that definition remains in the scope. This means that player2 is no longer an instance of PlayerActive, but whatever is inside the p2bulletCollision list.



        You should use a different name; in fact, since you don't use the variable at all within the loop, use the _ character:



        for _ in p2bulletCollision:





        share|improve this answer













        You've overwritten the name player2 in the for loop just before that line, when you do for player2 in p2bulletCollision:. Python does not have block scope, so that definition remains in the scope. This means that player2 is no longer an instance of PlayerActive, but whatever is inside the p2bulletCollision list.



        You should use a different name; in fact, since you don't use the variable at all within the loop, use the _ character:



        for _ in p2bulletCollision:






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 '18 at 8:47









        Daniel RosemanDaniel Roseman

        450k41581636




        450k41581636

















            這個網誌中的熱門文章

            Academy of Television Arts & Sciences

            L'Équipe

            1995 France bombings