New To Python: Pygame TypeError: update() takes 1 positional argument but 2 were given [closed]
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
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.
add a comment |
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
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 thePlayerActiveclass. Could it be thatPlayerActive.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
add a comment |
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
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
python pygame
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 thePlayerActiveclass. Could it be thatPlayerActive.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
add a comment |
You don't show thePlayerActiveclass. Could it be thatPlayerActive.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
add a comment |
1 Answer
1
active
oldest
votes
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:
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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:
add a comment |
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:
add a comment |
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:
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:
answered Nov 19 '18 at 8:47
Daniel RosemanDaniel Roseman
450k41581636
450k41581636
add a comment |
add a comment |
You don't show the
PlayerActiveclass. Could it be thatPlayerActive.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