Программирование на языке Ruby - [203]
>name, ipname, color = response.split ":"
>color = color.to_i
>if color == BLACK # Цвет фигур другого игрока,
> puts "\nУстанавливается соединение..."
> server = TCPServer.new(PeerPort)
> session = server.accept
> str = nil
> begin
> timeout(30) do
> str = session.gets.chomp
> if str != "ready"
> raise "Ошибка протокола: получено сообщение о готовности #{str}."
> end
> end
> rescue TimeoutError
> raise "He получено сообщение о готовности от противника."
> end
> puts "Ваш противник #{opponent}... у вас белые.\n"
> who = WHITE
> move = nil
> board = nil # В этом примере не используется.
> num = 0
> draw_board(board) # Нарисовать начальное положение для белых.
> loop do
> num += 1
> move = my_move(who, move, num, board, session)
> draw_board(board)
> case move
> when "resign"
> puts "\nВы сдались. #{opponent} выиграл."
> break
> when /Checkmate/
> puts "\nВы поставили мат #{opponent}!"
> draw_board(board)
> break
> end
> move = other_move(who, move, num, board, session)
> draw_board(board)
> case move
> when "resign"
> puts "\n#{opponent} сдался... вы выиграли!"
> break
> when /Checkmate/
> puts "\n#{opponent} поставил вам мат."
> break
> end
> end
>else # Мы играем черными,
> puts "\nУстанавливается соединение..."
> socket = TCPSocket.new(ipname, PeerPort)
> socket.puts "ready"
> puts "Ваш противник #{opponent}... у вас черные.\n"
> who = BLACK
> move = nil
> board = nil # В этом примере не используется.
> num = 0
> draw_board(board) # Нарисовать начальное положение.
> loop do
> num += 1
> move = other_move(who, move, num, board, socket)
> draw_board(board) # Нарисовать доску после хода белых,
> case move
> when "resign"
> puts "\n#{opponent} сдался... вы выиграли!"
> break
> when /Checkmate/
> puts "\n#{opponent} поставил вам мат."
> break
> end
> move = my_move(who, move, num, board, socket)
> draw_board(board)
> case move
> when "resign"
> puts "\nВы сдались. #{opponent} выиграл."
> break
> when /Checkmate/
> puts "\n#{opponent} поставил вам мат."
> break
> end
> end
> socket.close
>end
Я определил этот протокол так, что черные посылают белым сообщение «ready», чтобы партнер знал о готовности начать игру. Затем белые делают первый ход. Ход посылается черным, чтобы клиент мог нарисовать такую же позицию на доске, как у другого игрока.
Повторю, приложение ничего не знает о шахматах. Вместо проверки допустимости хода вставлена заглушка; проверка выполняется локально, то есть на той стороне, где делается ход. Никакой реальной проверки нет — заглушка всегда говорит, что ход допустим. Кроме того, мы хотим, чтобы имитация игры завершалась после нескольких ходов, поэтому мы написали программу так, что черные всегда выигрывают на четвертом ходу. Победа обозначается строкой «>Checkmate!
» в конце хода. Эта строка печатается на экране соперника и служит признаком выхода из цикла.
Помимо «традиционной» шахматной нотации (например, «P-K4») существует еще «алгебраическая», которую многие предпочитают. Но написанный код вообще не имеет представления о том, какой нотацией мы пользуемся.
Поскольку это было несложно сделать, мы позволяем игроку в любой момент сдаться. Рисование доски тоже заглушено. Желающие могут реализовать грубый рисунок, выполненный ASCII-символами.
Метод >my_move
всегда относится к локальному концу, метод >other_move
— к удаленному.
В листинге 18.3 приведен протокол сеанса. Действия клиентов нарисованы друг против друга.
>% ruby chess.rb Hal % ruby chess.rb
>Capablanca:deepthought.org Hal:deepdoodoo.org
>Устанавливается соединение... Устанавливается соединение...
>Ваш противник Capablanca... у вас белые. Ваш противник Hal... у вас черные.
>+------------------------------+ +------------------------------+
>| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |
>+------------------------------+ +------------------------------+
>Ваш ход: N-QB3 Противник: N-QB3
>+------------------------------+ +------------------------------+
>| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |
>+------------------------------+ +------------------------------+
>Противник: P-K4 Ваш ход: P-K4
>+------------------------------+ +------------------------------+
>| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |
>+------------------------------+ +------------------------------+
>Ваш ход: P-K4 Противник: P-K4
>+------------------------------+ +------------------------------+
>| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |
>+------------------------------+ +------------------------------+
>Противник: B-QB4 Ваш ход: B-QB4
>+------------------------------+ +------------------------------+
>| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |
>+------------------------------+ +------------------------------+
>Ваш ход: B-QB4 Противник: B-QB4
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.