Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |

+------------------------------+ +------------------------------+

Противник: B-QB4 Ваш ход: B-QB4

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |

+------------------------------+ +------------------------------+

Ваш
ход: B-QB4 Противник: B-QB4

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... +

+------------------------------+ +------------------------------+

Противник: Q-KR5 Ваш ход: Q-KR5

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |

+------------------------------+ +------------------------------+

Ваш ход: N-KB3 Противник: N-KB3

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |

+------------------------------+ +------------------------------+

Противник: QxP Checkmate! Ваш ход: QxP

+------------------------------+ +------------------------------+

| Заглушка! Шахматная доска... | | Заглушка! Шахматная доска... |

+------------------------------+ +------------------------------+

Capablanca поставил вам мат. Вы поставили мат Hal!

18.2. Сетевые клиенты

Иногда сервер пользуется хорошо известным протоколом — тогда нам надо лишь спроектировать клиента, который общается с сервером на понятном тому языке.

В разделе 18.1 мы видели, что это можно сделать с помощью протоколов TCP или UDP. Но чаще применяются протоколы более высокого уровня, например HTTP или SNMP. Рассмотрим несколько примеров.

18.2.1. Получение истинно случайных чисел из Web

Всякий, кто пытается сгенерировать случайное число, пользуясь детерминированными средствами, безусловно, живет во грехе.

Джон фон Нейман

В модуле

Kernel
есть функция
rand
, которая возвращает случайное число, но вот беда — число-то не является истинно случайным. Если вы
математик, криптограф или еще какой-нибудь педант, то назовете эту функцию генератором псевдослучайных чисел, поскольку она пользуется алгебраическими методами для детерминированного порождения последовательности чисел. Стороннему наблюдателю эти числа представляются случайными и даже обладают необходимыми статистическими свойствами, но рано или поздно последовательность начнет повторяться. Мы можем даже намеренно (или случайно) повторить ее, задав ту же самую затравку.

Но природные процессы считаются истинно случайными. Поэтому при розыгрыше призов в лотерее счастливчики определяются лототроном, который хаотично выбрасывает шары. Другие источники случайности — радиоактивный распад или атмосферный шум.

Есть источники случайных чисел и в Web. Один из них — сайт www.random.org, который мы задействуем в следующем примере.

Программа в листинге 18.4 имитирует подбрасывание пяти обычных (шестигранных) костей. Конечно, игровые фанаты могли бы увеличить число граней до 10 или 20, но тогда стало бы сложно рисовать ASCII-картинки.

Листинг 18.4. Случайное бросание костей

require 'net/http'

HOST = "www.random.org"

RAND_URL = "/cgi-bin/randnum?col=5&"

def get_random_numbers(count=1, min=0, max=99)

 path = RAND_URL + "num=#{count}&min=#{min}&max=#{max}"

 connection = Net::HTTP.new(HOST)

 response, data = connection.get(path)

 if response.code == "200"

data.split.collect { |num| num.to_i }

 else

[]

 end

end

DICE_LINES = [

 "+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ ",

 "| | | * | | * | | * * | | * * | | * * | ",

 "| * | | | | * | | | | * | | * * | ",

 "| | | * | | * | | * * | | * * | | * * | ",

 "+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ "

DIE_WIDTH = DICE_LINES[0].length/6

def draw_dice(values)

 DICE_LINES.each do | line |

for v in values

print line[(v-1)*DIE_WIDTH, DIE_WIDTH]

print " "

end

puts

 end

end

Поделиться:
Популярные книги

Лекарственные растения. Использование в народной медицине и в быту

Пастушенков Владимир Леонидович
Дом. Дача. Сад. Огород
Дом и Семья:
здоровье и красота
5.00
рейтинг книги
Лекарственные растения. Использование в народной медицине и в быту

Электроника?.. Нет ничего проще!

Эймишен Жан-Поль
885. Массовая радиобиблиотека
Техника:
радиоэлектроника
5.00
рейтинг книги
Электроника?.. Нет ничего проще!

Александр Иванович Шокин. Портрет на фоне эпохи

Коллектив авторов
6. Созидатели отечественной электроники
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Александр Иванович Шокин. Портрет на фоне эпохи

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Ермак. Регент

Древние тайны (Сборник)

Булычев Кир
Алиса и ее друзья в лабиринтах истории
Детские:
детская фантастика
6.00
рейтинг книги
Древние тайны (Сборник)

Робин Уильямс. Грустный комик, который заставил мир смеяться

Ицкофф Дэйв
Иконы кино. Биографии великих деятелей кинематографа
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Робин Уильямс. Грустный комик, который заставил мир смеяться

Точка Бифуркации XI

Смит Дейлор
11. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации XI

"Фантастика 2024-68". Компиляция. Книги 1-22

Фролов Андрей
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Фантастика 2024-68. Компиляция. Книги 1-22

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.25
рейтинг книги
Второгодка. Книга 3. Ученье свет

Печать пожирателя 6

Соломенный Илья
6. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фантастика: прочее
5.00
рейтинг книги
Печать пожирателя 6

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Worm

Дж Мак Крей
Фантастика:
боевая фантастика
киберпанк
6.25
рейтинг книги
Worm

Корабль смерти, Стальной человек и другие самые невероятные истории (сборник)

Матесон Ричард
Шедевры фантастики
Фантастика:
научная фантастика
ужасы и мистика
6.80
рейтинг книги
Корабль смерти, Стальной человек и другие самые невероятные истории (сборник)

Стихотворения и поэмы (основное собрание)

Бродский Иосиф Александрович
Поэзия:
поэзия
5.00
рейтинг книги
Стихотворения и поэмы (основное собрание)