Программная реализация в 1С недетерминированной игры с полной информацией::Журнал СА 01-02.2019
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 506
Комментарии: 1
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 634
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 502
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 404
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 994
Комментарии: 0
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Программная реализация в 1С недетерминированной игры с полной информацией

Архив номеров / 2019 / Выпуск №01-02 (194-195) / Программная реализация в 1С недетерминированной игры с полной информацией

Рубрика: Разработка /  Изучаем «1С»   | Дополнительные материалы

Кирилл Ткаченко КИРИЛЛ ТКАЧЕНКО, инженер 1-й категории, ФГАОУ ВО «Севастопольский государственный университет», tkachenkokirillstanislavovich@gmail.com

Программная реализация в 1С
недетерминированной игры с полной информацией

Программная реализация в 1С недетерминированной игры с полной информациейОна позволяет производить имитацию хода игры до победы одного из игроков. Программа может быть полезна всем изучающим программирование на языке 1С. Приводятся полный исходный текст программы и результаты ее работы

Современные компьютерные игры весьма сложны, но в основе некоторых все еще лежат простые идеи. Примером такой идеи может служить недетерминированная игра с полной информацией для нескольких игроков, которая широко известна и имеет коммерческие реализации [1, 2].

Упрощенный вариант подобной игры реализован на различных языках высокого и низкого уровня как хрестоматийный пример [3].

Поэтому целесообразно нам с вами рассмотреть программную реализацию на языке 1С, которая выполняет игру без участия игроков – то есть ее имитационную модель.

Целью настоящей работы является разработка на языке 1С имитационной модели недетерминированной игры с полной информацией, позволяющей протоколировать и воспроизводить процесс игры.

Исходный код программы имитационной модели игры находится в модуле управляемого приложения, протоколирование производится сообщением пользователю. В переменной ЗмеяЛестница находится соответствие для приземления по змее или лестнице, а в ГПСЧ – объект генератора псевдослучайных чисел для построения воспроизводимой последовательности псевдослучайных чисел:

Перем ЗмеяЛестница;
Перем ГПСЧ;

Процедура Инициализация() выполняет инициализацию доступных для подпрограмм переменных ЗмеяЛестница и ГПСЧ. Определяется переменная НомерИгры, в которой располагается текущий номер игры как семя ГПСЧ для воспроизводимой имитации:

Процедура Инициализация()
    Перем НомерИгры;

В текущем случае номер игры равен 1:

    НомерИгры = 1;

Переменной ЗмеяЛестница присваивается созданное новое соответствие, которое заполняется координатами для приземления по змее или лестнице, координаты аналогичны [3]:

    ЗмеяЛестница = Новый Соответствие();
    ЗмеяЛестница.Вставить(4, 14);
    ЗмеяЛестница.Вставить(9, 31);
    ЗмеяЛестница.Вставить(17, 7);
    ЗмеяЛестница.Вставить(20, 38);
    ЗмеяЛестница.Вставить(28, 84);
    ЗмеяЛестница.Вставить(40, 59);
    ЗмеяЛестница.Вставить(51, 67);
    ЗмеяЛестница.Вставить(54, 34);
    ЗмеяЛестница.Вставить(62, 19);
    ЗмеяЛестница.Вставить(63, 81);
    ЗмеяЛестница.Вставить(64, 60);
    ЗмеяЛестница.Вставить(71, 91);
    ЗмеяЛестница.Вставить(87, 24);
    ЗмеяЛестница.Вставить(93, 73);
    ЗмеяЛестница.Вставить(95, 75);
    ЗмеяЛестница.Вставить(99, 78);

Наконец, ГПСЧ присваивается новый созданный воспроизводимый генератор псевдослучайных чисел с семенем, равным номеру игры:

    ГПСЧ = Новый ГенераторСлучайныхЧисел(НомерИгры);
КонецПроцедуры

Функция Ход(НомерИгрока, НомерПоля) для игрока с номером НомерИгрока, находящимся на поле НомерПоля. Переменная Очки предназначена для хранения количества очков, полученных с ГПСЧНомерПоляТек – полученный новый текущий номер поля, НомерПоляСлед – возможный полученный новый следующий номер поля:

Функция Ход(НомерИгрока, НомерПоля)
    Перем Очки;
    Перем НомерПоляТек;
    Перем НомерПоляСлед;

Полученный новый текущий номер поля изначально равен номеру поля игрока, очки получаются с ГПСЧ (от 1 до 6 очков):

НомерПоляТек = НомерПоля;
    Очки = ГПСЧ.СлучайноеЧисло(1, 6);

Сообщается пользователю информация о текущем игроке и его местонахождении на игровом поле:

    Сообщить("Игрок № " + НомерИгрока + ", на поле № " + НомерПоляТек + ", очки " + Очки);

Если сумма номера поля и очков превышает 100, то игрок остается на исходном поле, иначе передвигается на поле на число очков, необходимая информация сообщается пользователю:

    Если НомерПоляТек + Очки > 100 Тогда
	Сообщить("Игрок № " + НомерИгрока + " не может перемещаться. Ход следующего игрока.");
	Возврат НомерПоляТек;
    Иначе
	НомерПоляТек = НомерПоляТек + Очки;
	Сообщить("Игрок № " + НомерИгрока + " перемещается на поле № " + НомерПоляТек);
    КонецЕсли;

Если по полученному текущему номеру поля нет змеи или лестницы, то следующий номер поля равен текущему, иначе происходит приземление на новое поле по соответствию:

    Если ЗмеяЛестница.Получить(НомерПоляТек) = Неопределено Тогда
	НомерПоляСлед = НомерПоляТек;
    Иначе
	НомерПоляСлед = ЗмеяЛестница.Получить(НомерПоляТек);
    КонецЕсли;

Если текущий номер поля игрока меньше следующего, то игрок приземлился на лестницу и поднялся на следующее поле, иначе если текущий номер поля игрока больше следующего, то игрок приземлился на змею и соскользнул наследующее поле:

    Если НомерПоляТек < НомерПоляСлед Тогда
	Сообщить("Игрок № " + НомерИгрока + " приземлился на лестницу и поднялся на поле № " + НомерПоляСлед);
    ИначеЕсли НомерПоляТек > НомерПоляСлед Тогда
	Сообщить("Игрок № " + НомерИгрока + " приземлился на змею и соскользнул на поле № " + НомерПоляСлед);
    КонецЕсли;

В конце функция возвращает номер следующего поля:

    Возврат НомерПоляСлед;
КонецФункции

Процедура Главная() обеспечивает взаимодействие остальных описанных ранее подпрограмм. В переменной НомерПоляИгрока располагается одномерный массив, ячейка которого содержит номер текущего игрового поля соответствующего ячейке по порядку номера игрока, НомерИгрока – номер текущего рассматриваемого игрока, НовыйНомерПоля – новый номер поля:

Процедура Главная()
    Перем НомерПоляИгрока;
    Перем НомерИгрока, НовыйНомерПоля;

Происходит инициализация переменных ЗмеяЛестница и ГПСЧ:

    Инициализация();

Создается новый массив НомерПоляИгрока:

    НомерПоляИгрока = Новый Массив();

Текущие номера игровых полей для всех игроков равны 1:

    НомерПоляИгрока.Добавить(1);
    НомерПоляИгрока.Добавить(1);
    НомерПоляИгрока.Добавить(1);

В бесконечном цикле по всем доступным игрокам совершается новый ход:

    Пока Истина Цикл
	Для НомерИгрока = 0 По НомерПоляИгрока.Количество() - 1 Цикл
	    НовыйНомерПоля = Ход(НомерИгрока + 1, НомерПоляИгрока[НомерИгрока]);

Игрок попадая на поле с номером 100 побеждает:

	    Если НовыйНомерПоля = 100 Тогда
		Сообщить("Игрок № " + (НомерИгрока + 1) + " победил!");
		Возврат;
	    КонецЕсли;

Иначе его новый номер поля отмечается в массиве текущих номеров полей игроков:

	    НомерПоляИгрока[НомерИгрока] = НовыйНомерПоля;
	    Сообщить("");
	КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Происходит вызов главной процедуры:

Главная();

Исходный текст программы находится на сайте журнала http://samag.ru, результаты работы программы представлены на рис. 1.

Рисунок 1. Результат работы программы

Рисунок 1. Результат работы программы

Полученная программная реализация позволит изучить основные конструкции языка 1С, а также строить каркасы имитационных моделей недетерминированных игр с полной информацией.

  1. Лила (игра) // Википедия. URL: https://ru.wikipedia.org/wiki/Лила_(игра) (дата обращения: 27.12.2018).
  2. Snakes and Ladders // Wikipedia. URL: https://en.wikipedia.org/wiki/Snakes_and_Ladders (дата обращения: 27.12.2018).
  3. Snake And Ladder // Rosetta Code. URL: http://rosettacode.org/wiki/Snake_And_Ladder (дата обращения: 27.12.2018).

Ключевые слова: недетерминированная игра, игра с полной информацией, имитационная модель, 1С.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru