Программа должна обновлять значение глобальной переменной int_choice
каждый раз, когда игрок набирает очки (это игра в понг).
int_choice
может иметь значение только 1 или 0. Если это 1, функция left_or_right
"говорит" мячу идти вправо, если 0, мяч идет влево.
int_choice
обновляется в нескольких местах: сначала инициализируется, потом в функции left_or_right()
, потом в функции draw()
.
Каждый раз, когда пользователь забивает, мяч должен возрождаться из центра стола в сторону этого пользователя, но мяч всегда возрождается дважды в одном и том же направлении, а затем дважды в противоположном направлении и так далее, независимо от того, кто был последним. счет.
Вот код:
import random
int_choice = random.randint(0,1)
direc = None
def left_or_right():
global direc, int_choice
if int_choice == 0:
direc = "LEFT"
elif int_choice == 1:
direc = "RIGHT"
return direc
def spawn_ball(direction):
left_or_right()
global ball_pos, ball_vel # these are vectors stored as lists
ball_pos = [WIDTH / 2, HEIGHT / 2]
if direction == "LEFT":
ball_vel[0] = (random.randrange(12, 25)*(-0.1))
print "Velocity[0]: ", ball_vel[0]
ball_vel[1] = (random.randrange(6, 19)*(-0.1))
elif direction == "RIGHT":
ball_vel[0] = (random.randrange(12, 25)*(0.1))
print "Velocity[0]: ", ball_vel[0]
ball_vel[1] = (random.randrange(6, 19)*(-0.1))
print "Velocity[1]: ", ball_vel[1]
def new_game():
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel, direc
global score1, score2,
spawn_ball(direc)
score1 = 0
score2 = 0
def draw(canvas):
global remaining_names, score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel, BALL_RADIUS, direc
global int_choice
# update ball
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
if ball_pos[1] - BALL_RADIUS <= 0:
ball_vel[1] = ball_vel[1] + (ball_vel[1] * (-2))
elif ball_pos[1] + BALL_RADIUS >= HEIGHT:
ball_vel[1] = ball_vel[1] + (ball_vel[1] * (-2))
elif ball_pos[0] - BALL_RADIUS <= (0 + PAD_WIDTH):
if (ball_pos[1] > paddle1_pos) and (ball_pos[1] < (paddle1_pos + PAD_HEIGHT)):
ball_vel[0] = ball_vel[0] + (ball_vel[0] * (-2.1))
else:
int_choice = 1
spawn_ball(direc)
score2 = score2 + 1
elif (ball_pos[0] + BALL_RADIUS) >= (WIDTH - PAD_WIDTH):
if (ball_pos[1] > paddle2_pos) and (ball_pos[1] < (paddle2_pos + PAD_HEIGHT)):
ball_vel[0] = ball_vel[0] + (ball_vel[0] * (-2.1))
else:
int_choice = 0
spawn_ball(direc)
score1 = score1 + 1
random.randint(0,1)
— это псевдоним дляrandom.randrange(2)
. Подумайте об использовании последнего. - person Mad Physicist   schedule 29.07.2016left_or_right()
может быть просто заменена списком:directions = ['LEFT', 'RIGHT']
, аdirections[int_choice]
будет переводить целое число в текст каждый раз, когда вам нужен текст. - person Martijn Pieters   schedule 29.07.2016spawn_ball()
, который затем вызывает такжеleft_or_right()
. Зачем проходить в направлении, а затем вызывать функцию, чтобы установить его снова? Функция также возвращает направление, но вы везде игнорируете возвращаемое значение. - person Martijn Pieters   schedule 29.07.2016left_or_right()
вspawn_ball()
переворачивает смыслint_choice
от того, что вы хотите. Вероятно, вам следует удалить этот вызов. - person Mad Physicist   schedule 29.07.2016int_choice
в противном случае устанавливалось странным чередующимся образом в этом коде. - person Martijn Pieters   schedule 29.07.2016