Игра "Сапер" by STivO (v.1.2)





Написана максимально приближенно к оригиналу игры "Сапер" для Windows

Кто не знаком с этой игрой, можете почитать тут http://ru.wikipedia.org/wiki/Сапёр_(игра)

Изменения в версии 1.2:

— Устранены баги при открытии ячеек

Изменения в версии 1.1:

— Открытие ячейки щелчком ЛКМ

— Установка флажков/вопросов щелчком ПКМ

P.S. Идея «отлова» нажатия ЛКМ, ПКМ была взята из статьи Ввод щелчком мыши: правым, левым, двойным

 

Все замечания и предложения приветствуются!

12 Comments

  1. Serj1C

    Мне понравилось. Единственное, что пришлось поправить — открытие поля одним щелчком мыши (при Активизации Ячейки а не при Выборе)

    Reply
  2. STivO

    (1) Serj1C, Спасибо. Да, изначально так и было, но в данном случае невозможно было бы установить флажок/метку. Хотя есть те, кто их не используют.

    Reply
  3. _apelsin4ik

    Вообще, вполне играбельная программа. Мне понравилась)

    Reply
  4. ShantinTD

    реально продумал. молодец. борись за правую кнопку.

    Reply
  5. codmal

    По поводу нерешённой проблемы с управлением (не отлавливается событие ПКМ) :

    она решена в публикациях «Ввод щелчком мыши: правым, левым, двойным» и «Игра «Сапёр»»

    http://infostart.ru/public/62233/

    http://infostart.ru/public/62411/

    Reply
  6. DrAku1a

    Предлагаю алгоритм автоматического решателя:

    //— DrAku1a
    // анализ игрового поля, открытие 100% пустых клеток и установка флажков.
    // с высокой вероятностью — выигрыш
    Функция ОткрытьСмежныеЯчейки(Поле, ЭлементПоле) Экспорт
    фл=ложь;
    Пока СостояниеИгры=1 Цикл
    фл=ложь;
    Для x = 0 по ВысотаПоля — 1 Цикл
    Для y = 0 по ШиринаПоля — 1 Цикл
    чм = Поле[x][y];
    Если (чм>0) и (чм<9) Тогда
    чя = 0;
    Для dx=-1 По 1 Цикл
    Для dy=-1 По 1 Цикл
    xx = x + dx; yy = y + dy;
    Если (dx=0 и dy=0) или (xx<0) или (xx>=ВысотаПоля) или (yy<0) или (yy>=ШиринаПоля) Тогда
    Продолжить;
    КонецЕсли;
    Если Поле[xx][yy]=0 Тогда
    чя = чя + 1;
    ИначеЕсли Поле[xx][yy]=9 Тогда
    чм = чм — 1;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Если (чя=чм) и (чм>0) и (чм<9) Тогда
    фл = Истина;
    Для dx=-1 По 1 Цикл
    Для dy=-1 По 1 Цикл
    xx = x + dx; yy = y + dy;
    Если (dx=0 и dy=0) или (xx<0) или (xx>=ВысотаПоля) или (yy<0) или (yy>=ШиринаПоля) Тогда
    Продолжить;
    КонецЕсли;
    Если Поле[xx][yy]=0 Тогда
    Поле[xx][yy]=9;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    ИначеЕсли чм=0 Тогда
    Для dx=-1 По 1 Цикл
    Для dy=-1 По 1 Цикл
    xx = x + dx; yy = y + dy;
    Если (dx=0 и dy=0) или (xx<0) или (xx>=ВысотаПоля) или (yy<0) или (yy>=ШиринаПоля) Тогда
    Продолжить;
    КонецЕсли;
    Если Поле[xx][yy]=0 Тогда
    фл=Истина;
    ЭлементПоле.ТекущаяСтрока = Поле[xx];
    ЭлементПоле.ТекущаяКолонка = ЭлементПоле.Колонки[yy];
    ОткрытьЯчейку();
    Если СостояниеИгры=0 Тогда
    Сообщить(«Ой…»);
    ИзобразитьЧислоМин();
    Возврат истина;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Если не фл Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;
    ИзобразитьЧислоМин();
    Возврат фл;
    КонецФункции
    

    Показать

    (Прошу прощения за названия переменных)

    Далее — в форме — переделываем процедуру

    Процедура ПолеВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    
    ОткрытьЯчейку();
    
    //DrAku1a —
    ОткрытьСмежныеЯчейки(Поле, ЭлементыФормы.Поле);
    
    КонецПроцедуры
    

    Показать

    Всё! Теперь после клика на ячейку — будет открыта часть поля, затем анализируются клетки окружения, выставляются флажки и открываются клетки… Т.е., компьютер уже думает за нас 🙂

    Reply
  7. STivO

    (6) DrAku1a, Весьма забавно получилось) С первого хода несколько раз выигрывал, «читерство» получается))

    Reply
  8. alean

    понравилось.

    прекрасно реализовано!

    Reply
  9. Ёпрст

    (10) нет, это для снеговика

    Reply
  10. Gendalf_beliy

    я так понял эта обработка для платформы 7.7?

    Reply
  11. STivO

    (10) Gendalf_beliy, для 8.2

    Reply
  12. Gendalf_beliy
    (10) Gendalf_beliy, для 8.2

    (12)

    Спасибо за ответ, тогда скачаю.

    Просто показалось, что цветовой оформление такое же как у 1с 7.7.

    Ксати создание сапер, это одно из заданий обучения 1с для школьников ))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *