Bottom-up array - Python

Asked

Viewed 115 times

0

I managed to do as the problem asks, with the code below, the only problem is that I can’t get the user to put the coordinates 0,0, only gets column 0 and the line is not 0, gets 1. I want the user to be able to choose the wall option so that it is on line 0 and not line 1.

GOAL:

• Build an environment whose shape is a variable size matrix of N rows per M columns.

FUNCTIONAL REQUIREMENTS OF THE PARENT ENVIRONMENT

The software must:

allow the user to set the N and M values as input;

allow the user to set walls in any positions;

allow the user to choose the starting position of the moving object;

the coordinate (0,0) is in the lower left corner of the matrix;

be able to represent a moving object moving in the matrix;

the mobile object is able to move one house at a time in any direction when receiving a command go(x)tal x {N, NE, L, SE, S, SO, O, NO};

the moving object must remain in the same position if it receives a command impossible to execute: that moves you off the grid or does so slam into a wall;

the moving object must be able to return its current position upon receiving the command lerPos().

At each cycle, the software must:

ask the user which command to send to the mobile object (ir(x) or lerPos());

upon receiving a command, the mobile object will perform the corresponding action;

print the current state of the environment.

# Importando o numpy (lib do python para manipulação de array):
import numpy as np

# Pedindo ao usuário o tamanho do tabuleiro:
row = int(input('Informe o número de linhas: '))
col = int(input('Informe o número de colunas: '))
print('')

# Criando o tabuleiro com números 0 representando os caminhos livres:
tabuleiro = np.zeros(row*col).reshape(row, col)
print(tabuleiro)
print('')

# Pedindo as coordenadas de uma parede ao usuário dentro de um while para poder ter quantas paredes 
ele quiser:
while True:
  parede_x = int(input('Informe a coordenada X de uma parede: '))
  parede_y = int(input('Informe a coordenada Y de uma parede: '))
  tabuleiro[parede_x:parede_x+1, parede_y:parede_y+1] = 8 # A parede é representada pelo número 8
  print('')
  print(tabuleiro)
  print('')
  opc = input('Deseja colocar mais paredes no tabuleiro? (s / n) ')
  if opc == 's':
    pass
  elif opc == 'n':
    break
  else:
    print('Opção inválida! Digite s para sim e n para não.')

# Pedindo ao usuário o ponto de partida representado por 1:
x = int(input('Informe a linha do ponto de partida sabendo que a contagem começa em 0: '))
y = int(input('Informe a coluna do ponto de partida sabendo que a contagem começa em 0: '))
inicio = tabuleiro
inicio[x:x+1, y:y+1] = 1
lerPos = np.copy(inicio)
print('')
print(inicio)
print('')

# Passando as direções de onde eu quero andar (sua posição atual é representado por 2):
while True:
  mov = input("Para saber sua posição atual digite 'lerPos' \nPara qual direção você deseja ir?\n [1] - NORTE\n"+
                        " [2] - SUL\n [3] - LESTE\n [4] - OESTE\n [5] - NORDESTE\n"+
                        " [6] - NOROESTE\n [7] - SULDESTE\n [8] - SULDOESTE\n [0] - SAIR\n")
  if mov == '1':
    if lerPos[x-1:x, y:y+1] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x -= 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '2':
    if lerPos[x+1:x+2, y:y+1] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x += 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '3':
    if lerPos[x:x+1, y-1:y] != 8:
      lerPos[x:x+1, y:y+1] = 0
      y -= 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '4':
    if lerPos[x:x+1, y+1:y+2] != 8:
      lerPos[x:x+1, y:y+1] = 0
      y += 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '5':
    if lerPos[x-1:x, y+1:y+2] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x -= 1
      y += 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '6':
    if lerPos[x-1:x, y-1:y] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x -= 1
      y -= 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '7':
    if lerPos[x+1:x+2, y-1:y] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x += 1
      y -= 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '8':
    if lerPos[x+1:x+2, y+1:y+2] != 8:
      lerPos[x:x+1, y:y+1] = 0
      x += 1
      y += 1
      lerPos[x:x+1, y:y+1] = 2
    else:
      print('Você bateu na parede!')
  elif mov == '0':
    break
  elif mov == 'lerPos':
    print('({}, {})'.format(x, y))
  else:
    print('Opção inválida! Selecione uma direção válida.')

  print(lerPos)

Thank you!

  • More information is missing in your question. I suggest explaining in a way well-detailed what the purpose of your code is, what it does, what you’d like it to do, and what you think is wrong with it. Your question is getting negative points because this information is missing and your code is quite extensive. I hope to have helped.

  • Okay, Fernando. Done, I have further detailed the purpose of the code.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.