2015-07-08 2 views
-2

Я все еще довольно зеленый, работая с python, но я решил сделать свою собственную игру с нуля тем, что, как я знаю, будет хорошей практикой. У меня есть это соединение четыре игры вместе, и это работает в том, что касается переключения между игроками и «отбрасывания» их соответствующих частей. Теперь мне нужно условие выигрыша, хотя, честно говоря, я не знаю, с чего начать. Я бы предпочел какое-то руководство, а не прямой код ради обучения, но, конечно, любая помощь была бы весьма признательна. Благодарю. Быстрое замечание: текущий цикл while просто для отладки. Я думал об установке переменной «победитель» в False и выполнении цикла «while winner == False:», и условие win задало эту переменную True.Создание игры Connect 4 в python, но не знаю, с чего начать с условия выигрыша

board = [] #List for holding the board 

for x in range(6): 
    board.append(["O"] * 7) #builds 7 x 6 board (rows x columns) 

#function for printing the board 
def print_board(board): 
    for row in board: 
     print " ".join(row) 

print 'Welcome to Connect Four' 

player_one = raw_input('Player 1. Enter your name: ') 
player_two = raw_input('Player 2. Enter your name: ') #Gets players names 

print '%s vs. %s' % (player_one, player_two) 
print '--------------' 
print print_board(board) 
print 'Player 1 is Red(R) and Player 2 is Black(B)' 
print 'Let\'s play!!' # Game's 'Opening' 

turn = 0 #Keeps track of turn 


while turn < 6: #debugging purposes 

if turn % 2 == 0: #Determines whose turn it is by checking for even or odd turn 

    print '%s. Choose a column to drop your chip' % (player_one) 
    one_choice = int(raw_input('Column: ')) #Determines what column player will drop chip 

    #Checks for 'empty slot' from bottom up and fills it with players 'chip' 

    if (board[5][one_choice - 1] == 'O'):    
     board[5][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    elif(board[4][one_choice - 1] == 'O'): 
     board[4][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    elif(board[3][one_choice - 1] == 'O'): 
     board[3][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    elif (board[2][one_choice - 1] == 'O'): 
     board[2][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    elif (board[1][one_choice - 1] == 'O'): 
     board[1][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    elif (board[0][one_choice - 1] == 'O'): 
     board[0][one_choice - 1] = 'R' 
     print_board(board) 
     turn += 1 

    else: 
     print "Column is full!!"  
else:   

    #Same as above for player 2 
    print '%s. Choose a column to drop your chip' % (player_two) 
    one_choice = int(raw_input('Column: ')) 

    if (board[5][one_choice - 1] == 'O'): 
     board[5][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    elif(board[4][one_choice - 1] == 'O'): 
     board[4][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    elif(board[3][one_choice - 1] == 'O'): 
     board[3][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    elif (board[2][one_choice - 1] == 'O'): 
     board[2][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    elif (board[1][one_choice - 1] == 'O'): 
     board[1][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    elif (board[0][one_choice - 1] == 'O'): 
     board[0][one_choice - 1] = 'B' 
     print_board(board) 
     turn += 1 

    else: 
     print "Column is full!!" 

#Gets me out of loop for debugging 
if turn == 6: 
    print 'Game Over man!' 
+2

* «Я не знаю, с чего начать» * - тогда вы не готовы задавать вопрос здесь. – jonrsharpe

+0

Извините. Я действительно занимался исследованиями, и все, что я нашел, похоже, не совпало с типом платы, который я создал. Возможно, это связано с тем, что я все еще участвую в чтении кода других людей. В следующий раз я постараюсь быть более основательным, прежде чем публиковать свой вопрос. – user2669412

ответ

0

У вас есть 7x6 доски, и вы должны увидеть, если строка из 4 смежных или диагональных пространств содержат один и тот же символ. Эта плата 7x6 хранится в двухмерном массиве.

Для части, помещенной в борту, вы будете иметь 4 набора проверок вы должны сделать, чтобы увидеть, если это была выигрышная часть:

  1. Проверить влево/вправо на 3 ваших частей.
  2. Проверьте в верхнем левом/правом нижнем углу на 3 части.
  3. Проверьте на нижний левый/правый верхний угол на три части.
  4. Проверьте выше и ниже на 3 части.

Если рассматривать X и Y координат текущая доска объявлений, где бы я ни место кусок, эти проверки соответствуют:

  1. X увеличивается/уменьшается, Y постоянен.
  2. По мере увеличения X Y уменьшается, и наоборот.
  3. По мере увеличения X Y увеличивается, и наоборот.
  4. X постоянна, Y увеличивается/уменьшается.

Вы должны сделать ленивый чек, проверять каждое направление и идти в другую сторону, как только найдете что-то, что не является вашей частью. Если оба направления завершены, а ваши общие части не равны 4, это не будет выигрышный вектор и перейдите к следующей проверке.

EDIT: форматирование и четкость.

+0

Спасибо! Кажется, я понял. Извините, если это не похоже на то, что я сделал какое-либо исследование по этому вопросу, но все, что я нашел на «connect four win conditions», похоже, не совпало с тем, как я построил свою доску. Хотя это может быть просто потому, что я все еще учусь читать код других людей. Но снова спасибо, и спасибо за направление, а не за ответ. Надеюсь, я буду ловить рыбу. – user2669412

+0

Если вам понравился мой ответ, пожалуйста, примите его. – JRodge01

+0

Вы поняли. Еще раз спасибо. Теперь у меня есть функция полуработающей победы. Просто пытаюсь выяснить, как заставить его оставаться внутри индексов. Я туда добираюсь. – user2669412

0

Это звучит как проблема с непересекающимися множествами, но ваш график настолько мал, что, вероятно, было бы проще просто проверить все четыре направления каждый раз, как это говорил @John Rodgers. Разумеется, непересекающиеся наборы могут быть полезными. Вот страница википедии, если вы просто хотите прочитать об этом https://en.wikipedia.org/wiki/Disjoint-set_data_structure

Смежные вопросы