Баг движения в змейке в консоли. python
Я решил попробовать сделать змейку в консоли на python, но у меня появился баг который я не могу исправить:
Я пока-что сделал управление на клавишах w и d, вроде работает, но когда после d или w нажимаешь другую клавишу, клавиши совмещаются и персонаж начинает размножаться и заполнять всю карту. Помогите исправить.
Код я уменьшил, хотя всё равно код не самый маленький. Код:
import keyboard
import time
from threading import Thread
from os import system
death = 'no'
movement = 'none'
f = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
e = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
d = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
c = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
b = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
a = ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', ]
moving = 6
c[moving] = '▬'
print('')
output1 = ''.join(f)
print(output1)
time.sleep(.3)
output2 = ''.join(e)
print(output2)
time.sleep(.3)
output3 = ''.join(d)
print(output3)
time.sleep(.3)
output4 = ''.join(c)
print(output4)
time.sleep(.3)
output5 = ''.join(b)
print(output5)
time.sleep(.3)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
def up():
keyboard.wait('w')
movement = 'up'
while movement == 'up':
if movement == 'up':
if '▬' in a and movement == 'up':
time.sleep(.6)
a[moving] = '.'
b[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in b and movement == 'up':
time.sleep(.6)
b[moving] = '.'
c[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in c and movement == 'up':
time.sleep(.6)
c[moving] = '.'
d[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in d and movement == 'up':
time.sleep(.6)
d[moving] = '.'
e[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in e and movement == 'up':
time.sleep(.6)
e[moving] = '.'
f[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in f and movement == 'up':
time.sleep(.6)
f[moving] = '.'
a[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in a and movement != 'up':
a[moving] = '.'
if '▬' in b and movement != 'up':
b[moving] = '.'
if '▬' in c and movement != 'up':
c[moving] = '.'
if '▬' in d and movement != 'up':
d[moving] = '.'
if '▬' in e and movement != 'up':
e[moving] = '.'
if '▬' in f and movement != 'up':
f[moving] = '.'
def right():
global moving
keyboard.wait('d')
movement = 'right'
while movement == 'right':
if movement == 'right':
if '▬' in a and movement == 'right':
time.sleep(.6)
a[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
a[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in b and movement == 'right':
time.sleep(.6)
b[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
b[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in c and movement == 'right':
time.sleep(.6)
c[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
c[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in d and movement == 'right':
time.sleep(.6)
d[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
d[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in e and movement == 'right':
time.sleep(.6)
e[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
e[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in f and movement == 'right':
time.sleep(.6)
f[moving] = '.'
if moving != 14:
moving += 1
else:
moving = 0
f[moving] = '▬'
system('cls')
print('')
output1 = ''.join(f)
print(output1)
output2 = ''.join(e)
print(output2)
output3 = ''.join(d)
print(output3)
output4 = ''.join(c)
print(output4)
output5 = ''.join(b)
print(output5)
output6 = ''.join(a)
print(output6)
print('move with w, a, s, d')
if '▬' in a and movement != 'right':
a[moving] = '.'
if '▬' in b and movement != 'right':
b[moving] = '.'
if '▬' in c and movement != 'right':
c[moving] = '.'
if '▬' in d and movement != 'right':
d[moving] = '.'
if '▬' in e and movement != 'right':
e[moving] = '.'
if '▬' in f and movement != 'right':
f[moving] = '.'
def upstart():
while death == 'no':
up()
def rightstart():
while death == 'no':
right()
Thread(target=upstart).start()
Thread(target=rightstart).start()