I have an if statement which has 3 requirements.
if (-30 < distancey1_1 < 30) and (german_startx1 < 705) and (distance1_1 < 600) : # is german 1 in position and are the russians in range (between 30 and minus 30 doesnt work)
print(distancey1_1)
print('1_shoots_1')
shoot(bulletx1, bullety1, 10, 10, yellow)
Somehow it runs this if statement, even when all 3 requirements are not met.
i get this as an output sometimes. its basically admitting that its ignoring the -30 < distancey1_1 < 30 rule
1 shoots 1
-152.0
1 shoots 1
-152.0
1 shoots 1
-152.0
1 shoots 1
-152.0
1 shoots 1
this is part of a stupid little recreation im making of that scene from enemy at the gates.
the full code is below. it just makes squares which moves side ways, some of them shoot.
import pygame
import time
import random
import math
pygame.init()
display_width = 800
display_height= 600
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
grey=(169,169,169)
yellow = (246, 240, 55)
gameDisplay= pygame.display.set_mode((800,600))
pygame.display.set_caption('stalingrad V0.1')
clock = pygame.time.Clock()
def spawn_soldier(thingx,thingy, thingw, thingh, colour):
pygame.draw.rect(gameDisplay, colour,[thingx, thingy, thingw, thingh])
def shoot(bulletx, bullety, bulletw, bulleth, colour):
pygame.draw.rect(gameDisplay, colour,[bulletx, bullety, bulletw, bulleth])
def game_loop():
# soldier constants
russian_width= 20
russian_height= 20
russian_speed = 6
russian_startx1=-300
russian_startx2=-310
russian_startx3=-322
russian_startx4=-305
russian_startx5=-306
russian_startx6=-313
russian_starty1 =display_height/2
russian_starty2 =random.randrange(0, display_height)
russian_starty3 =random.randrange(0, display_height)
russian_starty4 =random.randrange(0, display_height)
russian_starty5 =random.randrange(0, display_height)
german_width=20
german_height=20
german_speed=-1
german_startx1=780
german_startx2=820
german_startx3=789
german_startx4=835
german_startx5=780
german_startx6=820
german_startx7=789
german_startx8=835
german_start1y=display_height/2
german_start2y=random.randrange(0, display_height)
german_start3y=random.randrange(0, display_height)
german_start4y=random.randrange(0, display_height)
german_start5y=random.randrange(0, display_height)
german_start6y=random.randrange(0, display_height)
german_start7y=random.randrange(0, display_height)
german_start8y=random.randrange(0, display_height)
german_start9y=random.randrange(0, display_height)
german_start10y=random.randrange(0, display_height)
german_start11y=random.randrange(0, display_height)
german_start12y=random.randrange(0, display_height)
bulletx1 = german_startx1 - 5
bullety1 = german_start1y - 5
germancount=0
russiancount=0
bullet_speed=-10
game_exit=False
soldier1=1
while not game_exit:
gameDisplay.fill(white)
###
#below = spawn germans
###
spawn_soldier(german_startx1, german_start1y, german_width, german_height, grey) # gerry 1
spawn_soldier(german_startx2, german_start2y, german_width, german_height, grey) # gerry 2
spawn_soldier(german_startx3, german_start3y, german_width, german_height, grey) # gerry 3
spawn_soldier(german_startx4, german_start4y, german_width, german_height, grey) # gerry 4
###
# below = move germans into position
###
if german_startx1 > 700:
german_startx1 += german_speed
if german_startx2 > 700:
german_startx2 += german_speed
if german_startx3 > 700:
german_startx3 += german_speed
if german_startx4 > 700:
german_startx4 += german_speed
#####
# below = spawn russians and move them right
####
spawn_soldier(russian_startx1, russian_starty1, russian_width, russian_height, red) # rusky 1
if russian_startx1 < display_width+90: #russian moves to the right until off screen
russian_startx1 += russian_speed
if russian_startx1 > 810: # once its gone beyond the screen give me a fresh russian from the left
russian_starty1 = random.randrange(0, display_height)
russian_startx1 = -30
print('reset rusky 1')
spawn_soldier(russian_startx2, russian_starty2, russian_width, russian_height, red) # rusky 2
if russian_startx2 < display_width+90:
russian_startx2 += russian_speed
if russian_startx2 > 830:
russian_starty2 = random.randrange(0, display_height)
russian_startx2 = -30
print('reset rusky 2')
###
# below = distance between each russian and each german. if touching german dies and respawns
###
distancex1_1 = russian_startx1 - german_startx1
distancey1_1 = russian_starty1 - german_start1y
distance1_1 = math.sqrt((distancex1_1)**2+(distancey1_1)**2)
if distance1_1 < 10:
german_startx1= 780
distancex1_2 = russian_startx1 - german_startx2
distancey1_2 = russian_starty1 - german_start2y
distance1_2 = math.sqrt((distancex1_2)**2+(distancey1_2)**2)
if distance1_2 < 10:
german_startx2= 820
distancex1_3 = russian_startx1 - german_startx3
distancey1_3 = russian_starty1 - german_start3y
distance1_3 = math.sqrt((distancex1_3)**2+(distancey1_3)**2)
if distance1_3 < 10:
german_startx3= 789
distancex1_4 = russian_startx1 - german_startx4
distancey1_4 = russian_starty1 - german_start4y
distance1_4 = math.sqrt((distancex1_4)**2+(distancey1_4)**2)
if distance1_4 < 10:
german_startx4= 780
distancex1_5 = russian_startx1 - german_startx5
distancey1_5 = russian_starty1 - german_start5y
distance1_5 = math.sqrt((distancex1_5)**2+(distancey1_5)**2)
if distance1_5 < 10:
german_startx5= 7999
distancex1_6 = russian_startx1 - german_startx6
distancey1_6 = russian_starty1 - german_start6y
distance1_6 = math.sqrt((distancex1_6)**2+(distancey1_6)**2)
if distance1_6 < 10:
german_startx6= 789
distancex2_1 = russian_startx2 - german_startx1
distancey2_1 = russian_starty2 - german_start1y
distance2_1 = math.sqrt((distancex2_1)**2+(distancey2_1)**2)
if distance2_1 < 10:
german_startx1= 780
distancex2_2 = russian_startx2 - german_startx2
distancey2_2 = russian_starty2 - german_start2y
distance2_2 = math.sqrt((distancex2_2)**2+(distancey2_2)**2)
if distance2_2 < 10:
german_startx2= 820
distancex2_3 = russian_startx2 - german_startx3
distancey2_3 = russian_starty2 - german_start3y
distance2_3 = math.sqrt((distancex2_3)**2+(distancey2_3)**2)
if distance2_3 < 10:
german_startx3= 789
distancex2_4 = russian_startx2 - german_startx4
distancey2_4 = russian_starty2 - german_start4y
distance2_4 = math.sqrt((distancex2_4)**2+(distancey2_4)**2)
if distance2_4 < 10:
german_startx4= 780
distancex2_5 = russian_startx2 - german_startx5
distancey2_5 = russian_starty2 - german_start5y
distance2_5 = math.sqrt((distancex2_5)**2+(distancey2_5)**2)
if distance2_5 < 10:
german_startx5= 7999
distancex1_6 = russian_startx1 - german_startx6
distancey1_6 = russian_starty1 - german_start6y
distance1_6 = math.sqrt((distancex1_6)**2+(distancey1_6)**2)
if distance1_6 < 10:
german_startx6= 789
###
# below = shooting
###
print(distancey1_1)
if (-30 < distancey1_1 < 30) and (german_startx1 < 705) and (distance1_1 < 600) : # is german 1 in position and are the russians in range (between 30 and minus 30 doesnt work)
print(distancey1_1)
print('1_shoots_1')
shoot(bulletx1, bullety1, 10, 10, yellow)
bulletx1 += bullet_speed
if bulletx1 < -100: #firing again
bulletx1 = german_startx1 -5
if distancey1_1 > 0: # vertical aiming
print('aim up')
bullety1 += 1
if distancey1_1< 0:
bullety1 += -1
print('aim down')
disx1_1 = russian_startx1 - bulletx1 #distance between bullet and target
disy1_1 = russian_starty1 - bullety1
if -10< disx1_1 < 10 and -10< disy1_1 <10:
bulletx1 =-10
russian_startx1 = -30
russian_starty1 =random.randrange(0, display_height)
#####change numbers
if german_startx1 < 705 and distance1_2 < 600 and distancey1_2 <30 : # is german 1 in position and are the russians in range
print('1 shoots 1')
shoot(bulletx1, german_start1y, 10, 10, yellow)
bulletx1 += bullet_speed
if bulletx1 < 100:
bulletx1 = german_startx1 - 5
pygame.display.update()
clock.tick(40)
game_loop()
pygame.quit()
quit()
how can i make it only perform the if statement when all 3 things are met?
Aucun commentaire:
Enregistrer un commentaire