Как я должен случайно перевернуть стрелку со следующей стрелкой? - PullRequest
1 голос
/ 30 марта 2019

Я создаю простую игру через Pygame. В коде стрелка случайным образом переворачивается с каждым пигмеем. Ничья, но я хочу, чтобы она перевернулась (случайным образом при следующей стрелке в игре.

Это неполный код

import pygame
import random
import sys
pygame.init()
h=600
w=800
arrow_pos=[w/2,0]
base_size=[w/2,50]
base_pos=[w/4,h-50]
screen=pygame.display.set_mode((w,h))
bg_color=(0,0,0)
base_color=(255,0,0)
arrow_color=(0,150,255)
clock=pygame.time.Clock()
game_over=False
def updating_arrow(arrow_pos):
    if arrow_pos[1]>=0 and arrow_pos[1]<h:
        arrow_pos[1]+=10
    else:
        arrow_pos[1]-=h
    return arrow_pos[1]    
def draw_arrow(screen,arrow_color,arrow_pos,arrow_size):
        pygame.draw.polygon(screen, arrow_color, ((arrow_pos[0], 
        arrow_pos[1]+10), (arrow_pos[0], arrow_pos[1]+20), 
        (arrow_pos[0]+arrow_size, arrow_pos[1]+20), 
        (arrow_pos[0]+arrow_size, 
        arrow_pos[1]+30), (arrow_pos[0]+(arrow_size)*1.5, 
        arrow_pos[1]+15), 
        (arrow_pos[0]+arrow_size, arrow_pos[1]), 
        (arrow_pos[0]+arrow_size, 
        arrow_pos[1]+10)),0)
while not game_over:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    screen.fill(bg_color)
    arrow_pos[1]=updating_arrow(arrow_pos)

    arrow_size=random.choice([50,-50])
    draw_arrow(screen,arrow_color,arrow_pos,arrow_size)
    pygame.draw.rect(screen,base_color, 
    (base_pos[0],base_pos[1],base_size[0],base_size[1]))
    pygame.display.update()
    clock.tick(30)

1 Ответ

0 голосов
/ 31 марта 2019

Произвольная инициализация arrow_size перед основным циклом:

arrow_size = random.choice([50,-50])
while not game_over:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()  

Изменять размер стрелки только тогда, когда новая стрелка появляется в верхней части окна.Вы должны использовать оператор global , чтобы изменить значение глобальной переменной arrow_size в функции updating_arrow:

def updating_arrow(arrow_pos):
    global arrow_size
    if arrow_pos[1] >= 0 and arrow_pos[1] < h:
        arrow_pos[1] += 10
    else:
        arrow_pos[1] -= h
        arrow_size = random.choice([50,-50])
    return arrow_pos[1]  

Или передать arrow_size вработать по параметру и возвращать измененное, как вы делаете это с arrow_pos:

def updating_arrow(arrow_pos, arrow_size):
    if arrow_pos[1]>=0 and arrow_pos[1]<h:
        arrow_pos[1]+=10
    else:
        arrow_pos[1]-=h
        arrow_size = random.choice([50,-50])
    return arrow_pos, arrow_size  
arrow_pos, arrow_size = updating_arrow(arrow_pos, arrow_size) 
# arrow_pos[1]=updating_arrow(arrow_pos) <---- delete
# arrow_size=random.choice([50,-50])     <---- delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...