def obtener_direccion(velocidad, dif_velocidad): """La funcion recibe la entrada del usuario y determina el movimiento de la serpiente""" tecla_actual = "" entrada_usuario = timed_input(velocidad + dif_velocidad) direccion = "" poder_especial = "" if not entrada_usuario == "": tecla_actual = entrada_usuario[0] if not tecla_actual in "awsdzxc": tecla_actual = "" if tecla_actual == "w": direccion = "arriba" if tecla_actual == "s": direccion = "abajo" if tecla_actual == "a": direccion = "izquierda" if tecla_actual == "d": direccion = "derecha" if tecla_actual == "z": poder_especial = "$" if tecla_actual == "c": poder_especial = "%" if tecla_actual == "x": poder_especial = "&" return direccion, poder_especial
def pedir_movimiento(movimiento_anterior, tiempo_max): '''Recibe por parámetro el movieminto anterior y el tiempo máximo para ingresar una tecla. Cuando el usuario ingresa una tecla, se valida si es válida o no. La función devuelve el movimiento válido actual o el movimiento anterior.''' movimiento = terminal.timed_input(tiempo_max).lower() if es_movimiento_valido(movimiento): return obtener_movimiento_valido(movimiento) return movimiento_anterior
def pedir_movimiento(movimiento_anterior, tiempo_max, teclas_especiales): '''Recibe por parámetro el movieminto anterior, el tiempo máximo para ingresar una tecla y las teclas necesarias para activar un especial. Cuando el usuario ingresa una tecla, se valida si es válida o no. La función devuelve una secuencia con el movimiento válido actual o el movimiento anterior y con la tecla para activar el especial.''' movimiento = terminal.timed_input(tiempo_max).lower() movimiento_ingresado = obtener_movimiento_valido(movimiento, movimiento_anterior) especial_activado = obtener_especial_valido(movimiento, teclas_especiales) return movimiento_ingresado, especial_activado
def start_game_loop(): """Comienza el loop de renderizacion del tablero de juego""" global snake snake = [(random.randint(0, board_size - 1), random.randint(0, board_size - 1))] direction = 'w' while True: user_input = parse_user_input(timed_input(seconds_between_key_input)) if user_input in directions.keys(): direction = user_input generate_fruit() if not try_to_move_snake(direction): return False update_snake_position() clear_terminal() render_frame() if snake_size == max_snake_size: return True
def obtener_direccion(): """La funcion recibe la entrada del usuario y determina el movimiento de la serpiente""" tecla_actual = "" entrada_usuario = timed_input(1) direccion = "" if not entrada_usuario == "": tecla_actual = entrada_usuario[0] if not tecla_actual in "awsd": tecla_actual = "" if tecla_actual == "w": direccion = "arriba" if tecla_actual == "s": direccion = "abajo" if tecla_actual == "a": direccion = "izquierda" if tecla_actual == "d": direccion = "derecha" return direccion
def inputJugada(movimiento): """Recibe la variable de movimiento. Recibe, medianta input la jugada y comprueba que sea válida. Si no es válida, devuelve <NoneType>. Comprueba que lo ingresado no sea el opuesto del movimiento anterior.""" entrada = timed_input(SPEED) if entrada.isspace(): #Para salir del juego, presiona <SPACE> return False if entrada == 'w' and not movimiento == 's': return entrada elif entrada == 'a' and not movimiento == 'd': return entrada elif entrada == 's' and not movimiento == 'w': return entrada elif entrada == 'd' and not movimiento == 'a': return entrada return movimiento
def main(): snake = 'O' tamañoSnake = 0 fruta = '+' frutaCol, frutaFil = generarFruta() direccion = '+y' posX = (FILAS // 2) posY = (COLUMNAS // 2) for t in range(0, TIEMPO): tablero = [] clear_terminal() print('Tiempo restante: ' + str(TIEMPO - t)) print(f'Score: {tamañoSnake}') #Construir tablero for fila in range(0, FILAS): tablero.append([]) for col in range(0, COLUMNAS): tablero[fila].append('.') if direccion == '+y': posY -= 1 if direccion == '-y': posY += 1 if direccion == '+x': posX += 1 if direccion == '-x': posX -= 1 #Posicionar fruta tablero[frutaFil][frutaCol] = COLOR_ROJO + '+' + COLOR_NORMAL #Snake come la fruta if frutaFil == abs(posY) and frutaCol == abs(posX): tamañoSnake += 1 frutaCol, frutaFil = generarFruta() tablero[(posY)][(posX)] = COLOR_VERDE + snake + COLOR_NORMAL for s in range(0, tamañoSnake): if direccion == '+x': tablero[(posY + s)][(posX)] += snake if direccion == '-x': tablero[(posY - s)][(posX)] += snake if direccion == '+y': tablero[(posY)][(posX + s)] += snake if direccion == '-y': tablero[(posY)][(posX - s)] += snake #DEBUG ZONE #print(f"({posX}, {posY})") #END DEBUG ZONE if tamañoSnake == SNAKE_MAX_LENGHT: break #Imprime el tablero for fila in range(0, FILAS): lst = tablero[fila] tableroFinal = "" for dot in lst: tableroFinal += dot print(tableroFinal) #Recibe el input y fija una direccion entrada = timed_input(VELOCIDAD) if entrada == '' or len(entrada) > 1: continue if entrada.isspace() == True: break if entrada == 'w': direccion = '+y' if entrada == 's': direccion = '-y' if entrada == 'd': direccion = '+x' if entrada == 'a': direccion = '-x' print('Gracias por jugar!')