gpt4 book ai didi

python - 为什么 Python 每次执行一个循环时不执行一个函数?

转载 作者:行者123 更新时间:2023-11-28 22:16:51 25 4
gpt4 key购买 nike

我编写了这个脚本,它创建了向左移动并停在一个点的灰色方 block ,并创建了无限向右移动的红色方 block 。目前每个方 block 只生成 1 个。

在我看来(我是初学者)下面的脚本部分是循环的,所以每次计算机执行循环时,它都应该创建一个新的灰色方 block ,直到总共有 15 个方 block 。为什么不呢?

(顺便说一句,德国人是灰色方 block )

if germancount<15:
spawn_soldier(german_startx, german_starty, german_width, german_height, grey)

我的完整代码如下:

import pygame
import time
import random


pygame.init()

display_width = 1000
display_height= 800

black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
grey=(169,169,169)

gameDisplay= pygame.display.set_mode((800,600))

pygame.display.set_caption('stalingrad')

clock = pygame.time.Clock()



def spawn_soldier(thingx,thingy, thingw, thingh, colour):
pygame.draw.rect(gameDisplay, colour,[thingx, thingy, thingw, thingh])


def game_loop():

russian_width= 20
russian_height= 20
russian_speed = 2
russian_startx=-30
russian_starty=random.randrange(0, display_height)

german_width=20
german_height=20
german_speed=-1
german_startx=780
german_starty=random.randrange(0, display_height)

germancount=0
russiancount=0

game_exit=False

while not game_exit:
gameDisplay.fill(white)



if germancount<15:
spawn_soldier(german_startx, german_starty, german_width, german_height, grey)

if german_startx > 700:
german_startx += german_speed

if russiancount<100:
spawn_soldier(russian_startx, russian_starty, russian_width, russian_height, red)


russian_startx += russian_speed

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


game_loop()
pygame.quit()
quit()

编辑,我想我已经找到了一种更好地定义我的问题的方法。

我需要 15 个这样的“spawn_soldier”函数,仅供德国人使用。

            spawn_soldier_1(german_startx, german_starty, german_width, 
spawn_soldier_2(german_startx, german_starty, german_width,
spawn_soldier_3(german_startx, german_starty, german_width,

有没有办法让它在不复制和粘贴 115 次的情况下使用不同的 y 值执行此函数的 115 个不同版本?因为那将是一场噩梦。

最佳答案

每次循环,你都会生成一个新士兵。事实上,因为您永远不会更改 germancountrussiancount,所以您不仅会更改 15 次,而且会永远更改。每次,您通过用白色覆盖所有现有士兵来删除它们,然后永远生成一个新的德国人和一个新的俄罗斯人(尽管最终他们不在屏幕边缘,所以您看不到他们)。

我想你想要的是写一个绘制士兵的函数:

def draw_soldier(rect, colour):
pygame.draw.rect(gameDisplay, colour, rect)

然后,在你的帧循环中,在用像斯大林格勒冬天一样的白雪删除整个屏幕之后,每次添加一个新矩形,然后重新绘制所有矩形:

# When the game starts, there are no soldiers
germans = []
russians = []

while not game_exit:
gameDisplay.fill(white)

# Each time through the loop, add another soldier to each
# side until they're full
if len(germans) < germancount:
germans.append([german_startx, german_starty, german_width, german_height])
german_startx += german_speed
if len(russians) < russiancount:
russians.append([russian_startx, russian_starty, russian_width, russian_height])
russian_startx += russian_speed

# Now draw all the soldiers in front of that white fill
for german in germans:
draw_soldier(german, grey)
for russian in russians:
draw_soldier(russian, red)

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

关于python - 为什么 Python 每次执行一个循环时不执行一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com