2016-10-31 3 views
0

Я пишу функцию, которая проверяет, если шашек часть может делать ходы прыгать, и останавливается, когда он не может прыгать, так что я писал:Множественные условия во время цикла

def checkJump(x,y,count,incr): 
player = board[x][y] 
count = 0 

jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7 

jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7 

while jumpleft or jumpright:  
    while jumpleft: 
     x += incr*2 
     y += incr*2 
     count += 1 
     jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7 

    while jumpright: 
     x += incr*2 
     y -= incr*2 
     count += 1 
     jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7 

    jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7 

    jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7 
return x,y,count  

Однако условия для проверка слишком избыточна, несколько условий связаны с and. Есть ли лучший способ написать несколько условий для цикла while, а просто связать их с помощью and? Большое спасибо за ответы

+0

Ожидаете ли вы циклы while для выполнения анимации? – Soviut

+0

'while' никогда не было того же уровня 2 (два) условия. Хотя func требуется ** уникальные элементы синхронизации ** (не значение, время). Как обращаться, когда пользователь одновременно нажимает 2 клавиши (плохой мальчик, не делайте этого!). поэтому используйте 'if jumpleft: ..... elif jumpright' (не используйте' else'). И никогда не вычисляйте значение, если не предусмотрено исключение. И разделите часы процессора с помощью внешнего триггера. Значит, не теряйте процессор, если не имеете никаких действий. Может быть, ваш код 'awesome', но вам нужен« перерыв »в каждом подцикле (ужасная идея, как сканировать, какой разрыв исключен?) Печатать что-то на RTC ap? :)). – dsgdfg

ответ

0

Может быть, вы можете определить две проверку функции, которые возвращают Верно или неверно:

def jumpleft(x, y, board, incr): 
    return (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7 

def jumpright(x, y, board, incr): 
    return (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7 

И просто называть их, чтобы получить значение. Это сделает ваш код более удобочитаемым.

0

Поскольку вы заинтересованы в программировании игр, я бы рекомендовал pygame. Если вас это не интересует, я бы рекомендовал заменить несколько операторов «и» присваиванием условными «операторами if». Они служат той же цели и более читабельны.