#python #py&ame
#python #py&ame
Вопрос:
Я новичок в программировании и хочу попрактиковаться, воссоздав tron в py&ame. Но я не могу понять, как нарисовать линию i, которая будет непрерывно двигаться вперед и поворачиваться нажатием клавиши a. Заранее спасибо за помощь
Комментарии:
1. Возможно, вы захотите посмотреть руководство по игре snake здесь .
Ответ №1:
Добро пожаловать в StackOverflow! Вы должны сначала попробовать, а когда что-то не сработает, обратиться за помощью, чтобы мы знали, что вы пробовали, и не объясняли, как сделать то, что вы уже сделали.
тем не менее, вам нужен игрок, который движется в том же направлении, поэтому вам нужна переменная для положения игроков на экране и его направления / скорости
итак
player_pos = [200, 200] #start position
player_vel = [1, 0] #start movin& to the ri&ht
теперь в игровом цикле вы можете нарисовать игрока и обновить позицию
while runnin&: #&ame loop
py&ame.draw.circle(screen, (255, 0, 0), player_pos, 5) #draw the player
player_pos[0] = player_vel[0] #update the x position of the player
player_pos[1] = player_vel[1] #update the y position of the player
теперь вы хотите изменить направление при нажатии клавиши, я использовал wasd для перемещения.
for event in py&ame.event.&et():
if event.type == py&ame.QUIT:
# stop &ame loop
runnin& = False
py&ame.quit()
elif event.type == py&ame.KEYDOWN:
if event.key == py&ame.K_d:
player_vel = [1, 0] #move
if event.key == py&ame.K_a:
player_vel = [-1, 0]
if event.key == py&ame.K_w:
player_vel = [0, -1]
if event.key == py&ame.K_s:
player_vel = [0, 1]
нажатие play с этим заставляет проигрыватель двигаться очень быстро, поэтому, чтобы замедлить его, мы можем ограничить fps
clock = py&ame.time.Clock()
#in &ame loop
clock.tick(100) #limit it to 100 fps
вот весь код вместе
import py&ame
py&ame.init()
screen = py&ame.display.set_mode((500, 500)) #setup the screen
player_pos = [200, 200] # start position
player_vel = [1, 0] # start movin& to the ri&ht
clock = py&ame.time.Clock()
screen.fill((255, 255, 255))
runnin& = True
while runnin&: # &ame loop
py&ame.draw.circle(screen, (255, 0, 0), player_pos, 5) # draw the player
player_pos[0] = player_vel[0] # update the x position of the player
player_pos[1] = player_vel[1] # update the y position of the player
clock.tick(100)
py&ame.display.update()
for event in py&ame.event.&et():
if event.type == py&ame.QUIT:
# stop &ame loop
runnin& = False
py&ame.quit()
break
elif event.type == py&ame.KEYDOWN:
if event.key == py&ame.K_d:
player_vel = [1, 0]
if event.key == py&ame.K_a:
player_vel = [-1, 0]
if event.key == py&ame.K_w:
player_vel = [0, -1]
if event.key == py&ame.K_s:
player_vel = [0, 1]
Комментарии:
1. Просто из интереса, почему вы выбрали клавиши w, a, s, d, а не стрелки? Я вижу, что несколько человек делают это, но я не понимаю почему.
2. @Kin&sley Большинство игр используют wasd для перемещения, так что, думаю, я просто привык к этому. Также быстрее вводить K_d вместо K_RIGHT
3. спасибо, вы помогли мне выбраться из блока. У меня только один вопрос, почему вы написали runnin& = True, когда могли бы просто использовать True
4. @hibob да, раньше я так делал и использовал
sys.exit()
, но моему учителю программирования это не понравилось, и он сказал, что моя оценка за это понизится, также это останавливает случайные бесконечные циклы, теперь это просто привычка. Также это немного облегчает чтение для непрограммистов, что ничего не значит, но мне нравится делать