Игра "Девятнадцать"

19.01.23

Задачи пользователя - Игры

Представляю вашему вниманию игру из школьных времен - "девятнадцать". Когда-то не один десяток листков в клеточку были исписаны во время этой игры...

Скачать исходный код

Наименование Файл Версия Размер
Игра "Девятнадцать":
.erf 12,47Kb
12
.erf 12,47Kb 12 Скачать

Мастеръ Гамбсъ этимъ полукресломъ начинаетъ новую партiю мебели. Автор начинает серию статей, посвященных играм на 1С. Каждый месяц в течение года предполагается публикация новой игры. Открывает серию представитель класса "TimeKiller" - игра-головоломка "Девятнадцать".

 
 Зачем игры на 1С, почему и как?

 

Правила игры:

Игра предназначена для одного игрока. Прямоугольное поле случайным образом заполняется цифрами от 1 до 9. Необходимо вычеркивать пары одинаковых цифр или пары цифр, дающих в сумме 10, если они стоят на одной горизонтали или вертикали и между ними нет других цифр. Также можно вычеркивать такие же пары цифр, если одна из них - последняя в строке, а другая первая в следующей строке. 

 

 

На картинке цветом выделены три пары цифр, которые можно убрать.

Если нет доступных к вычеркиванию цифр, то нужно "приписать" в конец все имеющиеся на поле цифры. "Приписка" идет без промежутков. Цель игры - убрать все цифры. При всей кажущейся простоте здесь есть место стратегии - важен порядок вычеркивания цифр, а иногда лучше не убирать цифры, чтобы они попали в число тех, которые будут приписаны - так получается лучшая комбинация.

 
 Пример игры

В игре можно настроить ширину игрового поля, выбрать один из трех уровней сложности. Текущая игра сохраняется при закрытии, ее можно продолжить впоследствии (некоторые игры растягиваются на несколько дней). 

Игра тестировалось на платформе 8.3.21.1393, но разрабатывалась в основном два года назад, поэтому должна работать и на более старых версиях платформы.

Как всегда, приветствуются замечания / дополнения / комментарии.

PS: уже подготовив публикацию, я увидел аналог игры: "Циферки", в сети также встречаются названия "Чиселки" и "Семечки". Почему у нас она называлась "Девятнадцать" - неизвестно, "Семечки" более точно описывает увлеченность игровым процессом)).

 

 
 Некоторые из прочих моих публикаций

 

Игра девятнадцать циферки чиселки семечки

См. также

Пасьянс Паук

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Классическая игра пасьянс Паук, на платформе 1С.

15.04.2024    989    58    user1693438    1    

16

Классическая игра "Змейка" на 1С (управляемые формы)

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Игра "Змейка" в классическом варианте на управляемых формах в 1С. Собирайте яблоки и ставьте рекорд!

09.02.2024    3179    175    emilyabochkova    12    

26

Ключворды в 1С

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Создавайте новые ключворды или разгадывайте существующие.

1 стартмани

05.02.2024    1727    1    alexpvs    0    

6

Игра "5 букв"

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Игра "5 Букв", сделанная на 1С. В игре загадано слово, существительное в единственном числе. Нужно отгадать загаданное слово.

1 стартмани

29.12.2023    1279    2    APTEM_SLV    9    

6

Пятнашки

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Цель - обучение хитростям нашей всеми любимой 1С.

28.11.2023    962    37    user1834118    0    

6

Кар магедон

Игры Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Держись, российский геймдев, я уже еду. Бета тест, можно оформлять предзаказы, будет донатный магазин с модельками российского автопрома (по цене реальных авто).

01.11.2023    1849    39    user1834118    7    

11

Турнир по 1С. Танки на СКД

Игры Платформа 1С v8.3 Абонемент ($m)

Предлагаю свою версию турнира. Особенность этого турнира в том, что тут нет правильных или неправильных решений. Есть твое решение и решение твоих соперников. У кого решение лучше тот и победит.

1 стартмани

09.10.2023    1924    1    opx    1    

13

Плоский "Кубик Рубика"

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вы можете собрать кубик Рубика? Я - только с помощью инструкции:). Попробуйте справиться с его плоским аналогом.

1 стартмани

29.05.2023    2168    7    Alxby    3    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1631 19.01.23 10:49 Сейчас в теме
(0) молодец, что развиваешь тему игр! я очень рад
2. Alxby 1149 19.01.23 11:12 Сейчас в теме
(1)Ждите еще как минимум 11 штук в течение года)
3. Lem0n 420 19.01.23 11:49 Сейчас в теме
(2) герои будут?
ardn; user621724_Dimav1979; +2 Ответить
4. Alxby 1149 19.01.23 11:52 Сейчас в теме
(3)Если имеется в виду HMM - то нет, не в моих это возможностях. А если героями считать тех, кто сможет с первого раза выиграть во все планируемые игры, то может быть и будут.
Ingraf; ixijixi; +2 Ответить
22. sifftsov 4 23.01.23 11:47 Сейчас в теме
(4) HMM были реализованы ещё на 1С 7.7. У меня где-то лежал архив с играми на семёрке. Там, наверное десятка два игр было.... Причем в HMM была анимация, что меня несколько поразило.))))
23. Alxby 1149 23.01.23 15:14 Сейчас в теме
(22)Если найдете - дайте ссылку. Вообще, в 77 многие вещи, в том числе и игры, делаются проще...
5. kembrik 10 19.01.23 14:32 Сейчас в теме
6. Alxby 1149 19.01.23 14:38 Сейчас в теме
(5)Да, это колоссальный труд. В статье тоже ее упомянул.
7. gooket 19.01.23 17:39 Сейчас в теме
Я джва года хочу такую игру.
user621724_Dimav1979; pavlov_dv; +2 Ответить
8. Alxby 1149 19.01.23 17:49 Сейчас в теме
(7)только корованы здесь грабить нельзя...
11. user621724_Dimav1979 404 20.01.23 11:42 Сейчас в теме
(7) а можно в ней грабить корованы?
15. gooket 20.01.23 13:03 Сейчас в теме
(11) Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья. Можно покупать и т.п. возможности как в Daggerfall. И враги 3-хмерные тоже, и труп тоже 3д. Можно прыгать и т.п. Если играть за охрану дворца то надо слушаться командира, и защищать дворец от злого (имя я не придумал) и шпионов, партизанов эльфов, и ходит на набеги на когото из этих (эльфов, злого…). Ну а если за злого… то значит шпионы или партизаны эльфов иногда нападают, пользователь сам себе командир может делать что сам захочет прикажет своим войскам с ним самим напасть на дворец и пойдет в атаку. Всего в игре 4 зоны. Т.е. карта и на ней есть 4 зоны, 1 - зона людей (нейтрал), 2- зона императора (где дворец), 3-зона эльфов, 4 - зона злого… (в горах, там есть старый форт…)
16. Alxby 1149 20.01.23 13:19 Сейчас в теме
(15)...Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее... поставить протез. Сохранятся можно...
9. Obertone 76 19.01.23 18:44 Сейчас в теме
Отличная идея! Создавал на 1С подобную игру с числами «NERDLE» в шестикратном варианте: https://infostart.ru/public/1640276/
10. sanek_kop 15 20.01.23 10:32 Сейчас в теме
Согласен, что игры интереснее писать нежели какие-то стандартные "программистские дела". Когда-то решил написать 2048 на 7.7 (https://infostart.ru/public/401256/), пришлось поломать голову над алгоритмом немного.
14. Alxby 1149 20.01.23 12:02 Сейчас в теме
(10)Интересно было бы узнать о каком алгоритме речь
17. sanek_kop 15 20.01.23 15:22 Сейчас в теме
(14) Про алгоритм "схлопывания" чисел. После написания в лоб, выяснилась ошибка при которой не все "схлопывалось", что должно. На просторах инфостарта находил игру, где это выдавалось за "фичу" игры.
18. Alxby 1149 20.01.23 15:25 Сейчас в теме
(17)Понятно. А не думали над алгоритмом появления новых чисел, чтобы затруднить или облегчить игру?
20. sanek_kop 15 20.01.23 15:52 Сейчас в теме
(14)
(18)Именно затруднить или облегчить, нет. Я игрался с вероятность появления 2 и 4, чтобы органично игралось. В первых вариантах она была одинаковая и сильно заметно было, что что-то не так с игрой.
21. sanek_kop 15 20.01.23 15:54 Сейчас в теме
(20)У меня изначально идея была понять на сколько реально дойти до конца игры. Потому я и сделал сохранения, чтобы в случае ошибки можно было откатиться и переиграть.
12. ASDF2 288 20.01.23 11:50 Сейчас в теме
Даешь больше игр! Делал когда-то такую же на обычных формах https://infostart.ru/public/18316/
13. Alxby 1149 20.01.23 11:57 Сейчас в теме
(12)Надо же, "Шпиль" - еще одно название
19. Alexei_Siva 187 20.01.23 15:27 Сейчас в теме
Плюс за тему игр.
Полтора месяца назад опубликовал игру, идею о которой вынашивал больше 10 лет, но что-то плюсов собрала)
Obertone; +1 Ответить
24. RustIG 1631 30.01.23 15:26 Сейчас в теме
(0) Позволите немного рефакторинга кода?
Процедура НачалоНаКлиенте()
	...
	Генератор = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());	
	
	Для с = 1 По 3 * НастройкиИгры.ШиринаПоля Цикл  		
		Данные.Добавить(Цифры[Генератор.СлучайноеЧисло(0, ?(НастройкиИгры.Сложность = 0, 3, ?(НастройкиИгры.Сложность = 1, 5, 8)))]);
	КонецЦикла;
	
	....
КонецПроцедуры

Показать


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

Такой код можно заменить на следующий:
Процедура НачалоНаКлиенте()
	...
	Генератор = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());	
	
	Сложность = СоответствиеУровняСложности.Получить(НастройкиИгры.Сложность);
	Для с = 1 По 3 * НастройкиИгры.ШиринаПоля Цикл  		
		Данные.Добавить(Цифры[Генератор.СлучайноеЧисло(0, Сложность)]);
	КонецЦикла;
	
	...
КонецПроцедуры

//Раздел инициализации переменных
СоответствиеУровняСложности = Новый Соответствие;
СоответствиеУровняСложности.Вставить(0, 3);
СоответствиеУровняСложности.Вставить(1, 5);
СоответствиеУровняСложности.Вставить(2, 8);
Показать


В моем виде код легче читаем, быстрее адаптируем, и переменную Сложность рассчитываем один раз, а не внутри цикла.
О подобном способе программирования я написал в своей публикации https://infostart.ru/1c/articles/1768304/
28. Alxby 1149 01.02.23 17:42 Сейчас в теме
(24)Согласен, только вместо соответствия лучше использовать массив. А еще лучше - просто вынести тернарный оператор за цикл и заменить его на Если, и не связываться с дополнительными коллекциями. Это не тот случай, когда требуется оставлять возможность кастомизации))).
31. RustIG 1631 01.02.23 20:23 Сейчас в теме
(28)
Это не тот случай, когда требуется оставлять возможность кастомизации))).

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

Я рассуждаю так: если игра на одного человека, то массив для хранения данных не нужен - табличный документ выполняет одновременно роль хранителя данных и представления данных.
Если игра локальная на двоих или троих людей, тогда массив для хранения данных будет обязательным для перерисовки/новой отрисовки табличного поля у каждого игрока после очередного хода другого игрока - то есть массив это буфер данных. А в этом случае интересно будет усложнить настройки игры - расширить поле, расширить уровень сложности (сделать вариантов 10 и больше). Для 10 вариантов уровней сложности писать Если/Тогда будет не комильфо.
Использовать массив вместо соответствия можно лишь для числовых уровней: 0,1,2 и т.д. А если рассмотреть уровни "слабый", "новичок", "профи", "средний" - то подойдет коллекция Соответствие. Универсально для всех случаев.
34. Alxby 1149 01.02.23 21:19 Сейчас в теме
(31)И снова Вы правы, но... Все-таки это не та игра, где гибкие настройки значительно повысят качество/интерес/реиграбельность. А для казуальных игр (как эта) обилие настроек, вообще говоря, - зло. Игроку достаточно 2-3 варианта, а не 10-20, он не должен думать над настройками, а должен поскорее начать играть. Отдельный массив для данных нужен, вспомним про MVC. Здесь массив данных - M, а табличный документ - V. Вдобавок я уверен, что доступ для чтения к элементу массива многократно быстрее, чем к ячейке документа, плюс - защита от "повреждения" текста в ячейках документа, плюс - возможность переделки ТабДок на другой вид отображения. Использовать Соответствие для уровней сложности, заданных в текстовом виде - самый правильный вариант, но зачем их создавать в текстовом виде? Преимущества минимальны, но зато мы лишимся упорядочивания (чем больше номер, тем сложнее). И опять же - не та игра, чтобы так усложнять. Если же говорить о качественной архитектуре программного модуля, то самым правильным способом будет вынести в отдельную функцию получение нужного значения в зависимости от настроек сложности. И назвать переменную не "Сложность", а "ИндексКоличестваВариантовДоступныхЦифр" - это более правильно описывает смысл этого значения. Что будет внутри такой функции - каскад "Если" (аналог switch...case), чтение из Соответствия, или что-то другое - уже не так важно. Кстати, именно каскад "Если" - наиболее универсальный вариант.
37. RustIG 1631 02.02.23 09:25 Сейчас в теме
(34)
Все-таки это не та игра, где гибкие настройки значительно повысят качество/интерес/реиграбельность.

Да-да, все верно. Буду ждать следующих ваших игр, чтобы развивать мысль.
Я на основе вашей игры стал учить программированию своего сына. Он загорелся, видя что может управлять параметрами игры. Складывать два числа, чтобы в сумме было 10 - это легко. Посложнее это когда надо получить 23 - при этом у игроков игра будет развивать внимательность, счет в уме и т.д. Играть в паре интереснее - из-за соревновательности и непредсказуемости - "твое" число вдруг "съедает" другой игрок - приходится начинать поиск подходящей пары чисел снова.

Полагаю, что на табДоке можно реализовать игру Мемо для всей семьи.
25. RustIG 1631 30.01.23 20:12 Сейчас в теме
(0) Значение в ячейке можно получить через конструкцию Число(Таб.ТекущаяОбласть.Текст).
Не понятно, зачем использовать массив для хранения значений ячеек?

Если не использовать массив, то можно игровое поле делать квадратным или вообще любой длины и высоты.
26. RustIG 1631 31.01.23 10:10 Сейчас в теме
(25)
можно игровое поле делать квадратным или вообще любой длины и высоты

Подумал и понял, как можно это делать для любой размерности. Для любого массива.
29. Alxby 1149 01.02.23 17:46 Сейчас в теме
(25)Методически не очень хорошо использовать табличный документ (т.е. средство представления результата) в качестве хранилища данных. И, да, массив может содержать данные для поля любого размера и соотношения сторон.
30. RustIG 1631 01.02.23 19:07 Сейчас в теме
(29) ясно, хорошо, понял вас и согласен
33. RustIG 1631 01.02.23 20:35 Сейчас в теме
(27) исходники можете вытащить? а то у меня платформы 7.7 нет.
36. Alxby 1149 01.02.23 21:36 Сейчас в теме
38. RustIG 1631 02.02.23 09:31 Сейчас в теме
(36) у меня и анпак нет. Представляете весь этот процесс погружения в неизвестность - найти и изучить анпак, затем залезть в исходники 7.7 - чтобы среди многого что-то интересное и полезное вытащить - сложный алгоритм чего-либо....этот процесс - для меня болото, для другого человека возможно нет. Экономика быстрее развивается, когда каждый вносит свой небольшой вклад. Не обращайте внимание на лирику, тут смысл сказанного важен.
40. sifftsov 4 02.02.23 09:53 Сейчас в теме
(33)
(38)
Неее. Исходники - это уже сами доставайте. У меня та же проблема. Найти где-то в архивах платформу 7.7, поставить, И повытаскивать исходники. А мне оно надо? У меня на работе сейчас веселье, перетащить данные из УТ 10.3 в УТ 11.4. Если уж по правильному, допустим вы хотите портировать какую-нибудь игру из 7.7 в 8.3 - нужно её запустить в оригинале, посмотреть, как оно работает, и уже потом кодить на 8.3. Например, HMM (Герои Меча и Магии) на 7.7 реализованы интерактивно. Там также движется герой, такие-же подобия лесов, такие-же подобия врагов, встречаясь с которыми ты сражаешься. (Вот только, собственно, сами сражения не реализованы, но это уже мелочи). Вообще, она меня весьма приколола. Может, конечно, убого по сравнению с оригинальными Героями, но всё же...
Так что, всё сами....
Тем более, изначально, вы просили ссылку на игры. Ссылку я дал. )
32. RustIG 1631 01.02.23 20:34 Сейчас в теме
Я добавил в игру поле для задания параметра - у вас по умолчанию сумма чисел должна быть равной 10 - я же задаю параметр. Плюс научился подсвечивать ячейки - выделять цветом и толстой рамкой, какие ячейки дают в сумме 10 - как раз для этих целей удобен массив для хранения данных...
...Плюс думаю в сторону представления двумерных массивов через табличный документ: хранение в массивах, представление в табличном поле, как у вас в игре...
35. Alxby 1149 01.02.23 21:23 Сейчас в теме
(32)Мне, с одной стороны, приятно, что моя игра дала толчок для таких модификаций, но, право же, есть гораздо более интересные игры для этого, в том числе и на этой площадке. А подсвечивание ячеек слишком облегчает игру, делая ее менее интересной))))
39. RustIG 1631 02.02.23 09:34 Сейчас в теме
(35)
Мне, с одной стороны, приятно, что моя игра дала толчок для таких модификаций, но, право же, есть гораздо более интересные игры для этого, в том числе и на этой площадке. А подсвечивание ячеек слишком облегчает игру, делая ее менее интересной))))

да-да , все понимаю. вы хотите понять мой интерес? - у меня их несколько - и они сошлись в одном месте - один из интересов научить ребенка программированию. Я вижу как "подсвечивание" ячеек помогает в этом процессе.
Оставьте свое сообщение