2015-12-03 3 views
0

Хорошо, это немного над моей головой, так что несите со мной немного. Я и группа студентов работают над проектом Tetris в Python 3.5Python: Размещение изображения на основе матрицы

Я занимаюсь Gui, и у меня проблемы. Я хочу назначить координаты изображения, помещенного в холст, в соответствии с числами внутри матрицы.

Пример:

redB = PhotoImage(file="redBlock.gif") 
self.myMatrix = [[0,0,0,0], 
       [0,0,0,0], 
       [0,0,0,0], 
       [0,0,1,0]] 

def BLOCKplace(self): 
    for xx in range(0, len(self.myMatrix)): 
     if self.myMatrix[xx] == 1: 
      x = # Place in matrix where it equals 1, position multiplied 
       # by 24, the blocks are 24x24 
      y = # Same as above 
      canvas.create_image(x, y, image=redB, state="normal", tag="rB") 
      canvas.update() 

Это, вероятно, любительская ошибка, которую я делаю или что я не вижу, но некоторая помощь будет оценена.

+1

Это поможет, если вы превратите свой код в [MCVE] (http://stackoverflow.com/help/mcve) и укажите, что такое * проблема *. – Ajean

+0

Не следует ли 'if self.myMatrix [xx] = 1:' иметь двойные равные '=='? – BatteryAcid

ответ

0

Я нашел свой собственный ответ, хотя я хочу поблагодарить Лукас Годой и Роб Дэвис, по крайней мере, указывая на меня в определенном направлении.

def BLOCKplace(self): 
    for row_index in range(len(self.myMatrix)): 
     for column_index in range(len(self.myMatrix[row_index])): 
      if self.myMatrix[row_index][column_index] == 1: 
       canvas.create_image(row_index, column_index, image=redB, state="normal", tag="rB") 
       canvas.update() 

В основном проблема заключалась в утверждении If. Это Python 3.X, с которым я имею дело, и он не обрабатывает значения подсчитанного значения в циклах For для EQUAL для переменной, используемой для подсчета цикла. Настройка инструкции if для проверки каждой из своих отдельных ячеек решила проблему.

Хотя я бы не сделал это так далеко без какой-либо структуры или вклада от всех, кто разместил здесь, так что спасибо!

0

Может быть что-то вроде этого является то, что вы ищете:

def BLOCKplace(self): 
    for row_index in range(len(self.myMatrix)): 
     for column_index in range(len(self.myMatrix[row_index])): 
      if column_index == 1: 
       canvas.create_image(row_index, column_index, image=redB, state="normal", tag="rB") 
       canvas.update() 

Имейте в виду: начальное значение

  • range по умолчанию 0. Таким образом, range(0, len(foo)) и range(len(foo) идентичны.

  • Я использовал row_index и column_index, чтобы было более ясно, что они означают. Но так как они длинные имена, люди, как правило, используют только x и y для ссылок на матричные индексы.

  • range используется для каждой итерации. Обычно лучше хранить хранилища где-то длину строки и длину столбца или вашу матрицу, поэтому вам не нужно повторять range (т. Е. Все длины строк идентичны).

+0

Я дам ему выстрел и ответю, – Quto

+0

Я думаю, что я ушел куда-то в то, что вы отправили. Это делает тщательную проверку, хотя она дает мне этот странный набор блоков в верхней части экрана. http://i49.photobucket.com/albums/f294/shadetheexile/TetrisScreen_zpscmdtjslx.png Либо я перепутал где-то в своей установке, либо что-то еще. – Quto

+0

Кажется, что вы используете Tkinter, чтобы сделать ничью. Я могу рассмотреть его более подробно чуть позже. В то же время вы пытались переключить 'row_index' для' column_index' на 'create_image'? (т. е. 'canvas.create_image (column_index, row_index, ...)'. –

0

Итак, у Python нет матриц. Вместо этого вы получаете списки списков. Таким образом, вы myMatrix не матрица, это список длины 4, который содержит список длины 4.

for xx in range(0, len(self.myMatrix)): 

попробовать

for xx in range(0, len(self.myMatrix)): 
    for yy in range(0, len(self.myMatrix[xx])): 
+0

I «Я знаю, что в Python нет матриц. Я студент колледжа, пытающийся выполнить его задания, а разные языки имеют свой собственный способ маркировки вещей от массивов к спискам и словарям, так далее и т. д. Вызвать его матрицей вместо списка, потому что он помогает мне понять, с чем я имею дело, и помогает моим другим одноклассникам, которые имеют дело с одним и тем же. – Quto

+0

Приносим извинения за беспорядок. Я делал это заявление, потому что, как вы индексировали myMatrix в списке никогда не будет сценария, где self.myMatrix [xx] == 1. результат self.myMatrix [xx] всегда будет иметь список типов. I (ложно) предположил, что ваш xx был либо попыткой в ​​строке/индекс столбца или убеждение, что ваша матрица была единственным списком длины 16. –