Итак, я создаю программу тетрис в PyGame и начал программировать ротацию и удары по столам. Мой процесс основан на возникновении ошибки всякий раз, когда он пытается выполнить проверку за пределами массива (включая отрицательные числа индекса), но недавно я обнаружил, что отрицательные числа, используемые в качестве индекса, принимают значение в конце списка/массива, и я не Я не хочу, чтобы это произошло. Я знаю, что могу поставить проверку в начале каждой проверки размещения, но это будет очень длительный процесс и еще больше усложнит и без того сложный процесс.
Вот как запускается моя функция :
def rotate(direction):
global rotation_state, grid_active
active_row = []
active_col = []
active_cel = []
arc = 0
acc = 0
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
if grid_active[row][col] > 0:
active_row.append(row)
active_col.append(col)
active_cel.append(grid_active[row][col])
if grid_center[row][col] > 0 : < b r / > a r c = r o w < b r / > a c c = c o l < b r / > < / к о д > < b r / > В о т о д н а п р о в е р к а р о т а ц и и ( о ч е н ь д л и н н а я ) : < / p > < b r / > < c o d e > i f a c t i v e _ p i e c e = = 2 : < b r / > < b r / > i f r o t a t i o n _ s t a t e = = 0 : < b r / > < b r / > i f d i r e c t i o n = = - 1 : < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c - 1 ] = = 0 : < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > g r i d _ c e n t e r [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > g r i d _ a c t i v e [ a r c - 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c - 1 ] = a c t i v e _ c e l [ 0 ] < b r / > r o t a t i o n _ s t a t e = - 1 < b r / > r e t u r n 1 < b r / > < b r / > e x c e p t : < b r / > f o r r o w i n r a n g e ( G R I D _ H E I G H T ) : < b r / > f o r c o l i n r a n g e ( G R I D _ W I D T H ) : < b r / > g r i d _ a c t i v e [ r o w ] [ c o l ] = 0 < b r / > g r i d _ c e n t e r [ r o w ] [ c o l ] = 0 < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = a c t i v e _ c e l [ i ] < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ arc+1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row][active_col] = 0
grid_center[active_row][active_col] = 0
grid_center[arc][acc+1] = 1
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc][acc+1] = active_cel[0]
grid_active[arc+1][acc+1] = active_cel[0]
grid_active[arc+1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row][active_col] = active_cel
grid_center[arc][acc] = 1
try:
if grid_placed[arc-1-1][acc+1]==0 and grid_placed[arc-1][acc+1]==0 and grid_placed[arc+1-1][acc+1]==0 and grid_placed[arc+1-1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row][active_col] = 0
grid_center[active_row][active_col[i]] = 0
grid_center[arc-1][acc+1] = 1
grid_active[arc-1-1][acc+1] = active_cel[0]
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
try:
if grid_placed[arc+2][acc]==0 and grid_placed[arc+2][acc]==0 and grid_placed[arc+1+2][acc]==0 and grid_placed[arc+1+2][acc-1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc+2][acc] = 1
grid_active[arc-1+2][acc] = active_cel[0]
grid_active[arc+2][acc] = active_cel[0]
grid_active[arc+1+2][acc] = active_cel[0]
grid_active[arc+1+2][acc-1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
try:
if grid_placed[arc-1+2][acc+1]==0 and grid_placed[arc+2][acc+1]==0 and grid_placed[arc+1+1][acc+1]==0 and grid_placed[arc+1+2][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc+2][acc+1] = 1
grid_active[arc-1+2][acc+1] = active_cel[0]
grid_active[arc+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
return 2
Подробнее здесь: https://stackoverflow.com/questions/793 ... e-indexing
Можете ли вы+Как установить правило, которое выдает ошибку при отрицательной индексации? [дубликат] ⇐ Python
Программы на Python
1736348838
Anonymous
Итак, я создаю программу тетрис в PyGame и начал программировать ротацию и удары по столам. Мой процесс основан на возникновении ошибки всякий раз, когда он пытается выполнить проверку за пределами массива (включая отрицательные числа индекса), но недавно я обнаружил, что отрицательные числа, используемые в качестве индекса, принимают значение в конце списка/массива, и я не Я не хочу, чтобы это произошло. Я знаю, что могу поставить проверку в начале каждой проверки размещения, но это будет очень длительный процесс и еще больше усложнит и без того сложный процесс.
Вот как запускается моя функция :
def rotate(direction):
global rotation_state, grid_active
active_row = []
active_col = []
active_cel = []
arc = 0
acc = 0
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
if grid_active[row][col] > 0:
active_row.append(row)
active_col.append(col)
active_cel.append(grid_active[row][col])
if grid_center[row][col] > 0 : < b r / > a r c = r o w < b r / > a c c = c o l < b r / > < / к о д > < b r / > В о т о д н а п р о в е р к а р о т а ц и и ( о ч е н ь д л и н н а я ) : < / p > < b r / > < c o d e > i f a c t i v e _ p i e c e = = 2 : < b r / > < b r / > i f r o t a t i o n _ s t a t e = = 0 : < b r / > < b r / > i f d i r e c t i o n = = - 1 : < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c - 1 ] = = 0 : < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > g r i d _ c e n t e r [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > g r i d _ a c t i v e [ a r c - 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c - 1 ] = a c t i v e _ c e l [ 0 ] < b r / > r o t a t i o n _ s t a t e = - 1 < b r / > r e t u r n 1 < b r / > < b r / > e x c e p t : < b r / > f o r r o w i n r a n g e ( G R I D _ H E I G H T ) : < b r / > f o r c o l i n r a n g e ( G R I D _ W I D T H ) : < b r / > g r i d _ a c t i v e [ r o w ] [ c o l ] = 0 < b r / > g r i d _ c e n t e r [ r o w ] [ c o l ] = 0 < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = a c t i v e _ c e l [ i ] < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ arc+1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc][acc+1] = 1
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc][acc+1] = active_cel[0]
grid_active[arc+1][acc+1] = active_cel[0]
grid_active[arc+1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
try:
if grid_placed[arc-1-1][acc+1]==0 and grid_placed[arc-1][acc+1]==0 and grid_placed[arc+1-1][acc+1]==0 and grid_placed[arc+1-1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc-1][acc+1] = 1
grid_active[arc-1-1][acc+1] = active_cel[0]
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
try:
if grid_placed[arc+2][acc]==0 and grid_placed[arc+2][acc]==0 and grid_placed[arc+1+2][acc]==0 and grid_placed[arc+1+2][acc-1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc+2][acc] = 1
grid_active[arc-1+2][acc] = active_cel[0]
grid_active[arc+2][acc] = active_cel[0]
grid_active[arc+1+2][acc] = active_cel[0]
grid_active[arc+1+2][acc-1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
try:
if grid_placed[arc-1+2][acc+1]==0 and grid_placed[arc+2][acc+1]==0 and grid_placed[arc+1+1][acc+1]==0 and grid_placed[arc+1+2][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0
grid_center[arc+2][acc+1] = 1
grid_active[arc-1+2][acc+1] = active_cel[0]
grid_active[arc+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc-1+1] = active_cel[0]
rotation_state = -1
return 1
except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1
return 2
Подробнее здесь: [url]https://stackoverflow.com/questions/79339604/can-youhow-to-set-a-rule-that-raises-an-error-with-negative-indexing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия