Как нарисовать крестики нолики — подборка видео уроков
На этой странице собраны лучшие ролики о том Как нарисовать крестики нолики. Если вы хотите научиться рисовать с нуля, просто начните делать это ежедневно. Постарайтесь понять, в каком направлении искусства вы хотите развиваться: иллюстрации, концепт-арт, графический дизайн, детские рисунки, анимация или что-то другое.
Если вы еще не знаете, то наш сайт поможет вам определиться. Просто просматривайте страницы и пробуйте рисовать то что показано в видеоуроках. Если у вас есть какие-то полезные советы о том Как нарисовать крестики нолики, пожалуйста напишите об этом в комментариях. Тем самым вы поможете и нам и многим другим людям.
После получения базовых навыков вы можете перейти к изучению перспективы, композиции, цвету и освещению. Хороший художник знает все эти аспекты, но вам нужно с чего-то начать.
Помните, рисование — это не талант, это выученный навык и тысячи часов практики.
Познаем основы Java и создаем крестики-нолики
Java — это не только язык, это целая экосистема, включающая в себя средства разработки, платформу для запуска готовых приложений, огромный свод документации и активное сообщество. Одним из преимуществ Java на начальном этапе была кросс-платформенность (принцип — «написано один раз — запускается везде»).
Дело в том, что программа на Java исполняется не на прямую процессором компьютера, а виртуальной машиной Java (JVM). Это позволяет абстрагироваться от многих нюансов конкретных платформ. Программу, написанную на Java, можно без изменений кода запускать на Windows, Linux, MacOS и других операционных системах (если, конечно, программа не использует специфичные для ОС функции).
Кто застал начало 2000х, наверное помнит огромное количество мобильных телефонов (тогда еще они не были смартфонами), на каждом телефоне была по сути своя маленькая ОС, но при этом почти на каждом можно было запустить Java игру или приложение.
На сегодняшний день Java по-прежнему входит в топ языков для изучения, а Java как платформа — в топ используемых технологий в мире IT и смежных областях.
Сегодня мы начнем изучать Java, причем сразу с примера игры «Крестики-нолики».
Итак, поехали. Надеюсь как установить java SDK ты уже разобрался. Мы будем писать код в IDE IntelliJ IDEA, но если у вас какая-то другая, например Eclipse, то разницы большой не будет.
Итак, создаем новый проект: нажимаем «create new project», выбираем java и щелкаем «next» до окна, где требуется ввести имя проекта, вводим TicTacToe (крестики-нолики). В некоторых случаях на этапе создания потребуется выбрать шаблон проекта, тогда смело выбирай что-либо похожее на JavaConsoleApplication.
После этого нажимаем «Finish». Idea немного подумает и сгенерирует нам проект с классом Main, в котором определена функция main().
Давайте разберемся, что здесь что. Слева открыто окно структуры проекта «Project», как мы видим в папке src в пакете com.company находится единственный java-файл нашей программы с именем Main. Справа показано его содержимое. Тут надо сделать небольшое отступление, дело в том, что в Java почти все представлено классами. В том числе и файлы программы описывают классы, причем имя файла должно совпадать с классом, который описывается в этом файле (например, у нас файл Main.java описывает класс Main). Пусть слово «класс» не смущает на первом этапе. Пока лишь отмечу, что для глубокого изучения Java так или иначе придется познакомиться с объектно-ориентированным подходом. В двух словах, класс можно воспринимать как шаблон, идею, а экземпляры класса — как реализацию этой идеи. Экземпляры класса называются его объектами. Например, вы можете представить идею стола (нечто, на что можно класть предметы), однако конкретных экземпляров такого стола огромное множество (на одной ножке, на четырех, круглые, квадратные, из разных материалов). Примерно так соотносятся классы и объекты в объектно-ориентированном программировании.
Внутри нашего класса Main описана функция main(), в Java с этой функции начинается исполнение программы, это точка входа в наше приложение. Сейчас там написан только автоматический комментарий (комментарии в Java начинаются с двух символов //). Попробуем кое-что добавить в наш код и проверить работоспособность приложения. Внутри функции main() допишем две строки:
Встроенная функция println() просто выводит на экран текстовую информацию. Запустим наше приложение (нажимаем shift-F10 или зеленый треугольник). Внизу, во вкладке run появится вывод нашей программы:
Функция main() отработала и закончилась, вместе с ней закончилась наша программа.
В игре пользователю конечно захочется взаимодействовать с программой более продвинутым способом, поэтому нам понадобится окно. Набираем внутри функции main() следующие строки:
Смысл большинства строк понятен из комментариев к ним, отдельно отмечу строку window.setLayout() — здесь устанавливается менеджер расположения, который будет применяется к компонентам, добавляемым в наше окно. Менеджер BorderLayout может располагать новые компоненты относительно сторон света (North(верх), West(слева), East(справа), South(низ)), Center (центр)). По умолчанию он располагает компоненты по центру. Подробнее с менеджерами расположения можно познакомиться в документации.
Теперь, если запустить нашу программу, мы увидим окно:
Пока в этом окне ничего нет. Создадим свой компонент, который и будет отрисовывать графику игры.
Очевидно, что рисовать в консоли у нас не получится, нужен какой-то компонент для более продвинутого взаимодействия с пользователем. Для этой цели создадим еще один класс, назовем его TicTacToe. Щелкаем правой клавишей мыши на имени пакета приложения (в данном случае это com.company)
И в появившемся меню выбираем пункт «New» → «Java Class». В окне создания класса набираем его имя «TicTacToe» и нажимаем «Enter».
У нас в проекте появился еще один класс. В главное окно можно добавлять только объекты класса JComponent, кроме того, нам нужна область для рисования. Поэтому наследуем наш класс TicTacToe от JComponent. Ой сколько непонятных слов! Сейчас постараюсь пояснить.
Наследование классов — это как создание уточненного шаблона на базе существующего. Например, есть класс Стол, описывающий идею стола вообще. Но нам очень часто приходится создавать столы на четырех ногах с деревянной столешницей, поэтому для удобства мы можем уточнить идею класса Стол и создать шаблон ДеревянныйСтол — он будет иметь все те же основные свойства, что и родительская идея, но зато часть свойств у него уже определены и понятны — это число ног, равное четырем и материал столешницы — дерево.
С JComponent то же самое — данный класс реализует идею некоторого графического компонента пользовательского интерфейса. Такой компонент можно добавить в окно и он умеет как-то себя отрисовывать. Например, класс JButton — наследник класса JComponent, это компонент, который выглядит, как кнопка и умеет показывать анимацию клика мышкой.
Здесь же, наследуя класс JComponent, мы создадим свой компонент, в котором сможем рисовать то, что нам нужно.
Hannis Grantland Kkrm
Например, вы можете после «=» стоит приписывать симптомы к ячейкам: войска и делать это работает везде «) В игре, пользователь начал на том же судне в возрасте до пяти лет, это тот, кто имеет смысл, если вы играете. много (играет лую куб позволяет получить с помощью собственных элементов. важно установить ребенок также привыкли к имени). в проектах сорок вторая линии для самих падших, проигрывает.
Движение — и вы можете поставить свое лицо друг с другом и привлекать падение в себя — то же самое). Место закрытия, поле игрока в его расширенной роли развернута, а разрывалось нулевое, игрок Java и щелчок становится фатальным.
Возьмите сокровище не от действия зверя, обратите внимание, чтобы противника от рисования противника, но игроки с номером. Из необходимых материалов у меня есть пример главного (), работающего, а также огорожена стеной, стандартный футбол представляет собой стоящую ручку вертикально, есть 3 квадратных построенных изображения компонента Tictactoe для гоночной трассы (гонка), » Натрий «, и не двигается и устанавливает два поля квадратов — это самые объектно-ориентированные программированные карты.
ОТ 2 ДО 6 ЛЕТ
Варианты игр с игровым ковриком «КРЕСТИКИ-НОЛИКИ»:
::Объясните малышу правила игры в «Крестики-нолики» и играйте, как в обычную игру, которую рисуют в тетрадке.
Учимся считать
::Предложите ребенку разместить на пустом поле одну, две, три, четыре и более игровых фигур. Познакомьте его с понятиями «поровну», «одинаковое количество». Выложите на поле несколько крестиков. Попросите сосчитать и выложить столько же ноликов, убрав с поля крестики. Один крестик и два нолика. Два нолика и три крестика и т.д. Попросите кроху пересчитать, сколько всего фигур на поле.
Симметрия, орнамент
::Покажите малышу тарелку, скатерть, платок с орнаментом. Расскажите, что в орнаменте с определенной последовательностью повторяются одинаковые фигуры (в ряд или по краю). Сложите на поле простейший орнамент из игровых фигур. Предложите нарисовать платок или коврик для куклы с орнаментом.
::Сложите на поле симметричный узор из фигур. Обратите внимание на то, что левая половина рисунка повторяет правую, как в зеркале. Половинки такой картинки называются симметричными. Выложите еще несколько симметричных узоров, чтобы ребенок понял, что такое симметрия (никакие объяснения не действуют так, как наглядный пример!). Найдите в книгах изображения симметричных предметов и рассмотрите их. Найдите в доме предметы, имеющие ось симметрии. Когда вы бываете с ребенком на улице (в городе или на природе), обращайте его внимание на симметрию в зданиях и сооружениях, на симметрию в природе.
::Сложите на левой половине поля часть узора, предложите ребенку выложить «зеркальное отражение».Пусть малыш построит задание для вас (одну половинку), а затем проверит, правильное ли у вас получилось отражение (не забывайте иногда ошибаться!).
::Сложите такой узор, где симметрия будет нарушена. Предложите ребенку найти это нарушение и исправить ошибку — сделать половинки рисунка симметричными.
Ориентируемся в пространстве
::Знакомьте малыша с понятиями «право», «лево», «верх», «низ». Поставьте две фигуры рядом, спросите, какая находится справа, какая слева. Расположите две фигуры одну под другой. Какая сверху, а какая снизу?
::Предложите ребенку сделать узор, располагая фигуры определенным образом под вашу диктовку: «В правый верхний угол помести крестик, в центр — нолик и т.д.»
::Поместите фигуру на одну из клеток поля. «Диктуйте», куда будет двигаться фигура, но сама она пусть остается на месте. Задача ребенка следить глазами за предполагаемым передвижением фигуры. Назовите три-пять ходов фигуры, а малыш пусть покажет клетку, на которой она в результате должна оказаться.
Немного о Java
Java — это не только язык, это целая экосистема, включающая в себя средства разработки, платформу для запуска готовых приложений, огромный свод документации и активное сообщество. Одним из преимуществ Java на начальном этапе была кросс-платформенность (принцип — «написано один раз — запускается везде»).
Дело в том, что программа на Java исполняется не на прямую процессором компьютера, а виртуальной машиной Java (JVM). Это позволяет абстрагироваться от многих нюансов конкретных платформ. Программу, написанную на Java, можно без изменений кода запускать на Windows, Linux, MacOS и других операционных системах (если, конечно, программа не использует специфичные для ОС функции).
Кто застал начало 2000х, наверное помнит огромное количество мобильных телефонов (тогда еще они не были смартфонами), на каждом телефоне была по сути своя маленькая ОС, но при этом почти на каждом можно было запустить Java игру или приложение.
На сегодняшний день Java по-прежнему входит в топ языков для изучения, а Java как платформа — в топ используемых технологий в мире IT и смежных областях.
Создание проекта, первые шаги
Сегодня мы начнем изучать Java, причем сразу с примера игры Крестики-Нолики.
Итак, поехали. Надеюсь как установить java SDK ты уже разобрался. Мы будем писать код в IDE IntelliJ IDEA, но если у вас какая-то другая, например Eclipse, то разницы большой не будет.
Итак, создаем новый проект: нажимаем «create new project», выбираем java и щелкаем «next» до окна, где требуется ввести имя проекта, вводим TicTacToe (крестики-нолики). В некоторых случаях на этапе создания потребуется выбрать шаблон проекта, тогда смело выбирай что-либо похожее на JavaConsoleApplication.
После этого нажимаем «Finish». Idea немного подумает и сгенерирует нам проект с классом Main, в котором определена функция main().
Давайте разберемся, что здесь что. Слева открыто окно структуры проекта «Project», как мы видим в папке src в пакете com.company находится единственный java-файл нашей программы с именем Main. Справа показано его содержимое. Тут надо сделать небольшое отступление, дело в том, что в Java почти все представлено классами. В том числе и файлы программы описывают классы, причем имя файла должно совпадать с классом, который описывается в этом файле (например, у нас файл Main.java описывает класс Main). Пусть слово «класс» не смущает на первом этапе. Пока лишь отмечу, что для глубокого изучения Java так или иначе придется познакомиться с объектно-ориентированным подходом. В двух словах, класс можно воспринимать как шаблон, идею, а экземпляры класса — как реализацию этой идеи. Экземпляры класса называются его объектами. Например, вы можете представить идею стола (нечто, на что можно класть предметы), однако конкретных экземпляров такого стола огромное множество (на одной ножке, на четырех, круглые, квадратные, из разных материалов). Примерно так соотносятся классы и объекты в объектно-ориентированном программировании.
Внутри нашего класса Main описана функция main(), в Java с этой функции начинается исполнение программы, это точка входа в наше приложение. Сейчас там написан только автоматический комментарий (комментарии в Java начинаются с двух символов //). Попробуем кое-что добавить в наш код и проверить работоспособность приложения. Внутри функции main() допишем две строки:
Встроенная функция println() просто выводит на экран текстовую информацию. Запустим наше приложение (нажимаем shift-F10 или зеленый треугольник). Внизу, во вкладке run появится вывод нашей программы:
Функция main() отработала и закончилась, вместе с ней закончилась наша программа.
В игре пользователю конечно захочется взаимодействовать с программой более продвинутым способом, поэтому нам понадобится окно. Набираем внутри функции main() следующие строки:
Смысл большинства строк понятен из комментариев к ним, отдельно отмечу строку window.setLayout() — здесь устанавливается менеджер расположения, который будет применяется к компонентам, добавляемым в наше окно. Менеджер BorderLayout может располагать новые компоненты относительно сторон света (North(верх), West(слева), East(справа), South(низ)), Center (центр)). По умолчанию он располагает компоненты по центру. Подробнее с менеджерами расположения можно познакомиться в документации.
Теперь, если запустить нашу программу, мы увидим окно:
Пока в этом окне ничего нет. Создадим свой компонент, который и будет отрисовывать графику игры.
Свой компонент для рисования
Очевидно, что рисовать в консоли у нас не получится, нужен какой-то компонент для более продвинутого взаимодействия с пользователем. Для этой цели создадим еще один класс, назовем его TicTacToe. Щелкаем правой клавишей мыши на имени пакета приложения (в данном случае это com.company)
И в появившемся меню выбираем пункт «New» → «Java Class». В окне создания класса набираем его имя «TicTacToe» и нажимаем «Enter».
У нас в проекте появился еще один класс. В главное окно можно добавлять только объекты класса JComponent, кроме того, нам нужна область для рисования. Поэтому наследуем наш класс TicTacToe от JComponent. Ой сколько непонятных слов! Сейчас постараюсь пояснить.
Наследование классов — это как создание уточненного шаблона на базе существующего. Например, есть класс Стол, описывающий идею стола вообще. Но нам очень часто приходится создавать столы на четырех ногах с деревянной столешницей, поэтому для удобства мы можем уточнить идею класса Стол и создать шаблон ДеревянныйСтол — он будет иметь все те же основные свойства, что и родительская идея, но зато часть свойств у него уже определены и понятны — это число ног, равное четырем и материал столешницы — дерево.
С JComponent то же самое — данный класс реализует идею некоторого графического компонента пользовательского интерфейса. Такой компонент можно добавить в окно и он умеет как-то себя отрисовывать. Например, класс JButton — наследник класса JComponent, это компонент, который выглядит, как кнопка и умеет показывать анимацию клика мышкой.
Здесь же, наследуя класс JComponent, мы создадим свой компонент, в котором сможем рисовать то, что нам нужно.
Итак дописываем extends JComponent в строку описания класса:
Слово extends говорит о том, что наш класс TicTacToe расширяет (наследует) класс JComponent.
У всех компонентов есть метод paintComponent(), который отвечает за их отрисовку. В параметры этого метода приходит объект Graphics, с помощью которого мы и будем рисовать то, что нам необходимо. Давайте переопределим метод paintComponent так, чтобы он рисовал окружность (это необязательно, но для проверки, что у нас все работает как надо, будет хорошим тоном это сделать).
Переопределим метод paintComponent() в классе TicTacToe следующим образом:
метод setColor() объекта graphics, как очевидно из названия, устанавливает цвет, которым мы будем рисовать, а метод drawOval(x ,y, w, h) — в общем случае рисует овал с координатами центра x, y, шириной — w и высотой h. В данном случае рисуется окружность, так как ширина и высота заданы одинаковые — 100. Замечу, что экранные координаты отсчитываются от левого верхнего угла. То есть 0 по вертикали находится вверху.
Чтобы проверить, как выглядит наш объект класса TicTacToe надо создать его экземпляр и добавить в главное окно в качестве дочернего компонента. Создание новых объектов в Java осуществляется с помощью ключевого слова new.
Например, если у нас есть класс Стол и мы хотим создать объект этого класса (настоящий конкретный стол), то мы должны написать что-то такое: стол = new Стол(). Здесь «стол» имя, по которому мы будем обращаться к нашему объекту (взаимодействовать с ним), а Стол — имя класса, объект которого мы создаем.
Замечу сразу, что вместо «стол» мы могли написать любое имя, например «fdgdgdgfd», но программисты обычно стараются давать «говорящие» имена объектам, чтобы код было легче читать. Чтобы создать экземпляр класса TicTacToe мы можем также написать game = new TicTacToe(), а потом добавить его в окно методом add().
Теперь код класса Main выглядит вот так:
Если теперь запустить нашу программу, то мы увидим окно с окружностью:
Ну что ж. Рисовать в базе мы научились. Время приступать к созданию игры.
Создание игрового поля
Вернемся к классу TicTacToe. Для начала необходимо нарисовать игровое поле, состоящее из девяти клеточек. Для этого давайте нарисуем две горизонтальные и две вертикальные линии на нашем поле. Чтобы это сделать, воспользуемся методом drawLine(x1,y1,x2,y2) объекта Graphics, который приходит к нам в метод paintComponent() в качестве параметра. Метод drawLine() рисует линию от точки с координатами x1,y1 до точки x2,y2. Давайте подумаем как нарисовать игровое поле.
Если мы разобьем высоту поля на три (у нас же три клетки в ряду), то получим высоту одной клетки (назовем ее dh). Узнать высоту всего компонента можно методом getHeight(). Значит, мы должны нарисовать первую горизонтальную линию от точки 0,dh до точки w, dh, где w — ширина поля. Но это только одна горизонтальная линия, вторую рисуем также, но координаты будут уже: начало — 0, 2*dh, конец w, 2*dh. По аналогии, если высота поля равна h, а ширина одной клетки равна dw, то вертикальные линии рисуются в координатах dw,0 — dw,h и dw*2, 0 — dw*2, h.
Теперь давайте немного поговорим о переменных. Если помните — в алгебре за буквой могло скрываться какое-то значение, например выражение x = 2*a, подразумевало, что на место буквы а можно подставить любое значение и вычислить x.
Примерно то же самое происходит с переменными в программировании. Имя переменной (идентификатор) сопоставлен с некоторым значением и «хранит» его «в себе» (на самом деле, с объектами классов все несколько сложнее, там мы имеем дело со ссылками, но это пока за рамками данного материала).
Помимо этого, в программах есть разные типы данных. Наверное, вы согласитесь, что строку и целое число надо хранить в памяти как-то по-разному? Даже целые и дробные числа требуют разного подхода, поэтому в программах данные соответствуют определенным типам. В нашем примере нам уже понадобились значения ширины и высоты ячейки игрового поля dw и dh. Чтобы вычислить и сохранить их значения в памяти, воспользуемся следующими выражениями:
Здесь int — означает тип данных «целое число». Выражение int a = 10 объявляет переменную с именем a и задает ей сразу значение 10. В нашем примере создаются четыре переменных, значения w и h получаются из методов самого компонента TicTacToe, а dw и dh вычисляются. Обратите внимание, что при делении w / 3 получается целый тип данных. В Java, как и во многих других языках, деление целого на целое дает в результате целое. При этом дробная часть просто отбрасывается (округления нет). Заметьте, что здесь не используется слово «new», так как создаются не объекты, а переменные простых (скалярных) типов данных, в данном случае типа int.
Мы могли бы уже написать код для рисования всех линий, но мы же программисты, а программисты любят все упрощать, правда для этого они пишут много дополнительного кода. Представим, что у нас было бы поле не 3 на 3 клетки а, например, 15х15. Как бы мы его разлиновали? Вручную набирать код для рисования 28 линий это уж слишком.
К счастью, во всех языках программирования (привет ассемблер) есть конструкции, позволяющие повторить заданное число раз тот или иной участок кода — циклы.
Разберем, как автоматизировать рисование линий, заметим, что все горизонтальные линии содержат одни и те же значения координат по горизонтали (от начала до конца ширины игрового поля), при этом их координаты по вертикали различаются на dh. У первой линии высота dh, у второй 2*dh, и так далее.
Для вертикальных линий рассуждения аналогичны, только в рассуждении приведенном выше надо поменять вертикальные и горизонтальные координаты местами.
Попробуем рисовать линии с помощью цикла, в классе TicTacToe создадим свой метод с названием drawGrid(), он будет у нас отвечать за рисование линий сетки игрового поля:
Еще раз пробежимся по коду. Первые четыре строки метода — необходимые нам значения ширины, высоты игрового поля и ширины, высоты одной ячейки. Цикл начинается с ключевого слова for, в скобках после него указывается переменная, которая будет счетчиком (у нас она еще и объявляется сразу int i = 1), условие при ложности которого цикл прервется и выражение изменяющее переменную-счетчик (i++ увеличивает i каждую итерацию цикла на единицу).
Внутри цикла каждую итерацию рисуются очередные горизонтальная и вертикальная линии поля.
Добавим вызов нашего метода drawGrid() в метод отрисовки всего компонента paintComponent():
Запускаем программу и видим разрисованное поле:
Скажи мне, куда ты кликнул?
Итак, наше игровое поле выглядит готовым к игре, но теперь нам надо узнать в какой из квадратов кликнул пользователь. Для этого давайте немного настроим наш компонент TicTacToe, чтобы он смог принимать события от мыши. Во-первых, нам необходимо включить получение таких событий. Делается это с помощью метода enableEvents(), но где его вызвать?
Конечно можно было бы добавить его вызов в наш метод drawGrid() или даже в paintComponent(), но эти методы по логике работы игры будут вызываться каждый раз, когда мы захотим что-то нарисовать. А включить события надо лишь один раз. Где бы найти метод, который вызывается у компонента единожды, например при его создании?
На самом деле такой метод есть у каждого класса и называется он конструктором. Именно конструктор вызывается при попытке создания нового объекта. Конструкторов может быть несколько, он так же как обычный метод может принимать параметры, но вот возвращаемого значения у него нет. Конструктор класса имеет то же имя, что и класс. Создадим конструктор в классе TicTacToe:
Как видим — ничего сложного, просто еще один метод. А как же наш компонент создавался до этого? Ведь в классе Main мы его уже создавали. Помните, game = new TicTacToe()? Тут тоже никакой магии — если конструктор не задан явно, используется конструктор по умолчанию.
Именно здесь мы включим получение событий от мыши:
Хорошо! Получение событий мы включили, а где же мы их будем получать? В методе processMouseEvent() конечно, именно он будет срабатывать каждый раз, когда указатель мыши каким-либо образом взаимодействует с нашим игровым полем.
Приведу на всякий случай полный код класса TicTacToe на текущий момент:
Мозг игры
Ну не то чтобы уж мозг, но некоторую начинку нам создать придется. Итак, давайте подумаем, как хранить состояние игры? Неплохо бы было хранить состояние каждой клетки игрового поля, для этой цели хорошо подойдет двумерный массив целых чисел размером 3х3. Создается он просто int[][] field = new int[3][3].
Массив это уже целый объект, на который выделяется память в отдельной области (куче), поэтому тут мы используем слово new. Создадим в классе TicTacToe новый метод под названием initGame(), он будет отвечать у нас за сброс игры к начальному состоянию, именно здесь мы будем «очищать» игровое поле.
Для хранения состояния ячейки поля создадим три константы со значениями 0, 10 и 200. Ноль будет соответствовать пустой ячейке, 10 — крестику, а 200 — нолику. Первоначально заполним массив нулями.
Теперь добавим немного кода в метод processMouseEvent(), который отвечает за клики мышью на игровом поле. Также заведем логическую переменную isXturn, которая будет показывать чей сейчас ход.
Пробежимся по коду. Переход от координат к индексам довольно прост: мы делим текущую координату на размер одной ячейки и получаем сколько целых ячеек укладывается до текущей (если совсем непонятно, то поясню: разделить на w/3 это то же самое, что умножить на 3/w).
В 42й строке кода стоит условный оператор (также называемый ветвлением), пора с ним познакомиться. Если условие в скобках истинно (в нашем случае если поле пустое), то мы заходим «внутрь» условного оператора (строки 43-46), если же условие ложно (ячейка уже занята), то мы пройдем дальше. Что же происходит если кликнутая ячейка пуста?
В 44й строке после «=» стоит еще один интересный оператор — тернарный, он дает возможность записать в строку ветвление, если в результате него присваивается значение. Записывают его так: isXturn? — это проверка, чей сейчас ход (ходит крестик, если значение «истина»), далее следует определенная нами константа FIELD_X, именно она будет результатом выражения, если isXturn — true.
После FIELD_X стоит двоеточии и константа FIELD_O — ее значение станет результатом выражения, если ход «нолика». После изменения значения в ячейке массива, меняем очередность хода: isXturn = !isXturn изменит значение переменной на противоположное. В конце всех действий — вызываем перерисовку компонента, так как теперь нужно нарисовать крестик или нолик, там где его не было раньше.
Теперь осталось научиться рисовать крестики или нолики. Создадим два метода: drawX() и draw0(). На данном этапе мы уже умеем рисовать линии и круги, поэтому обойдусь комментариями в коде:
Комментарии в коде достаточно очевидны. Коротко поясню, что крестик мы рисуем как пересечение двух линий из угла в угол ячейки, а нолик — как овал чуть вытянутый по вертикали. Теперь у нас есть методы, рисующие крестик и нолик по заданным индексам ячейки поля. Как же мы будем рисовать процесс игры? Пробежимся еще раз по коду. Игроки кликают мышкой на наш компонент, при этом срабатывает метод processMouseEvent(), в котором мы определяем, какое событие произошло, пуста ли ячейка, в которую кликнули и вызываем перерисовку компонента (repaint()). На момент перерисовки в массиве field содержатся актуальные данные о поставленных крестиках и ноликах, остается пробежаться циклами по всему массиву и если встречается нолик — рисовать нолик, а если крестик — рисовать крестик. Поехали, создаем метод drawXO(). Именно в нем будем «просматривать» массив:
Осталось вызвать данный метод в методе painComponent():
Теперь, если запустить нашу программу можно понаслаждаться постановкой крестиков и ноликов:
Определяем победителя
Все бы хорошо, но сейчас игра никак не отслеживает свое состояние, то есть крестики и нолики успешно ставятся, но выигрыш никак не определяется. Придется еще немного потрудиться! Как же нам определить, что игра закончилась? Давайте присмотримся к массиву field. Если в ряду будут стоять одни крестики, значит, там значения 10, 10, 10.
Если нолики — 200, 200, 200. Эврика! Давайте проверять сумму всех ячеек в ряду по горизонтали и вертикали, а также по двум диагоналям. Создаем еще один метод checkState(), он будет каждый ход проверять сложившуюся на поле ситуацию и возвращать -1, если ходов не осталось, 3*FIELD_X если выиграли крестики и 3*FIELD_O, если выиграли нолики, в случае продолжения игры — метод пусть вернет 0.
Основные комментарии даны в коде. Элементы, стоящие на главной диагонали вычисляются просто — их индексы равны ([0][0], [1][1] и т. д.). Побочная диагональ содержит элементы с индексами [0][N-1], [1][N-2] и так далее (N — длина массива).
Часть кода с 142й по 160ю строку отвечает за подсчет суммы значений в ячейках по вертикальным и горизонтальным рядам: каждую «большую» итерацию по i фиксируется вертикальный (горизонтальный) ряд с индексом i и запускается малый цикл с перебором всех ячеек в данном ряду (цикл по j).
Кроме того, проверяется наличие на поле хотя бы одной не занятой ячейки (hasEmpty=true), это нужно чтобы определить ситуацию, когда все ячейки заняты, но никто не выиграл (ничья). Наконец, если нигде ранее не произошел выход из метода мы проверяем значение hasEmpty, если пустые ячейки есть — возвращаем 0, а если нет, то -1 (ничья).
Осталось использовать данный метод. Немного подправим обработку нажатий.
Здесь добавилось получение результата из метода checkState() и его обработка. Метод showMessageDialog() показывает сообщение с заданным текстом и заголовком. В ветвлении проверяем, какое значение вернул метод checkState() и показываем соответствующие сообщения (или продолжаем игру, если результат 0).
На этом данный туториал подходит к концу. За не столь долгое время нам удалось создать игру с графическим интерфейсом и захватывающим геймплеем: ).
Задание на дом: наша игра все-таки ленивая, и почему-то не зачеркивает выигрышный ряд. Подумайте, как можно его зачеркнуть, ведь рисовать линии вы уже умеете (подсказка, обратите внимание на метод checkState() — там уже сделана почти вся работа по нахождению выигрышного ряда).
На нашем курсе «Java-разработчик» ты научишься программировать с нул я на самом популярном языке программирования Java, добавишь сильные проекты к себе в портфолию и станешь востребованным специалистом для любой Digital-компании!
Подробная программа курса и регистрация по ссылке ниже

Вот посмотрите какая интересная очередная тема мартовского стола заказов. А озвучил ее для нас опять аноним, но я надеюсь , что просто забыли залогиниться. Но давайте все же заслушаем ее:
Игры на бумаге (используя листик и карандаш). Для одного, для двоих, для компании. Интересно почитать и научится (узнать секреты, если есть таких игр) в них играть.
Уверен, что хоть сейчас и компьютеризированное и гаджетное время, но всегда бывают ситуации, когда кроме друзей и листика бумаги у вас ничего не будет Так что запоминайте или записывайте ! Тут будут как и всем известные игры, так и надеюсь что для кого то новые. В свое время, когда как вы понимаете компьютеров и мобилок не было я играл практически во все !
1. Быки и коровы
Первый игрок задумывает четырехзначное число, так чтобы все цифры числа были разные. Цель второго игрока — отгодать это число. Каждый ход, отгадывающий называет число, тоже четырехзначное и с разными цифрами. Если цифра из названного числа есть в отгадываемом числе, то эта ситуация называется корова. Если цифра из названного числа есть в отгадываемом числе и стоит в том же месте, то эта ситуация называется бык.
Например, первый игрок задумал 6109, а второй игрок назвал 0123. То первый игрок должен сказать: один бык и одна корова (1б,1к).
Свое слово задумывает каждый партнер. Ходят по очереди. Выигрывает тот, кто раньше отгадает число соперника.
2. Виселица
«Палач» — еще одна популярная головоломка, созданная специально для двух игроков. Для этой игры вам понадобятся чистая бумага и ручка.
Первый игрок задумывает слово. Это должно быть существующее слово, и игрок должен быть уверен, что другой игрок знает это слово и знаком с его написанием. Он изображает ряд пустых мест, необходимых для написания слова. Затем рисует следующую схему, которая изображает виселицу с петлей.
Игра начинается, когда второй игрок предлагает букву, которая может входить в это слово. Если он угадывает, первый игрок пишет ее в нужном незаполненном месте. Если в слове такой буквы нет, он пишет эту букву в стороне и начинает дорисовывать виселицу, добавляя к петле круг, изображающий голову. Противник продолжает отгадывать буквы до тех пор, пока не отгадает все слово. За каждый неправильный ответ первый игрок добавляет одну часть туловища к виселице.
Если туловище нарисовано раньше, чем противник может угадать слово, первый игрок побеждает. Если противник отгадывает слово правильно до того, как туловище нарисовано полностью, побеждает он, и тогда наступает его черед задумать слово.
3. Крестики-нолики на бесконечном поле
Освободиться от предопределенности результата в Крестиках-ноликах позволяет расширение поля игры.
На бесконечном поле (вполне подойдет лист бумаги) играющие по очереди ставят свой знак (крестик или нолик). Игра заканчивается, когда один из играющих выигрывает или если поле заканчивается.
Выигрывает тот, кому удается выстроить пять своих знаков по одной линии, прямой или диагональной.
Если вы играете в компьютерные игры, то без труда сможете предположить, создатели каких из них отдали этому расширенному варианту крестиков-ноликов немало времени.
4. Лабиринт
Поле может быть квадратным или в форме пирамиды. При желании можно придумывать и более причудливые формы.
На игровом поле участники по очереди ставят черточки длиной в одну клетку — по вертикали или по горизонтали.
Тот из участников, кто закрыл квадрат (поставил четвертую составляющую его черту), ставит в этом квадрате свой знак (крестик или нолик) и ходит еще раз.
Задача играющих — поставить как можно больше своих знаков, выигрывает тот, у кого после полного заполнения поля этих знаков оказалось больше.
Чем сложнее и больше поле, тем интереснее и непредсказуемее игра.
5. Морской бой
Целью данной игры является уничтожение объектов (кораблей) противника. Играют двое человек. События игры происходят на 2-х квадратных полях размером 10х10. Одно из полей Ваше, другое соперника. На нем вы расставляете собственные объекты (корабли) и по ним наносит удары противник. На другом поле располагает свои объекты (корабли) противник.Ваши вооруженные силы, как и силы противника содержат следующие объекты (корабли):
1 палубный (размером 1 клетка) — 4 штуки2-х палубный (размером 2 клетки) — 3 штуки3-х палубный (размером 3 клетки) — 2 штуки4-х палубный (размером 4 клетки) — 1 штука.
Объекты (корабли) не могут расставляться вплотную, то есть между двумя соседними объектами (кораблями) должна быть как минимум одна свободная клетка (учтите, противник также не может располагать объекты (корабли) вплотную).
Когда все приготовления закончены и объекты (корабли) расставлены пора начинать битву.
Первым ходом обладает игрок, объекты (корабли) которорого расположены на левом поле. Вы выбираете на поле противника клетку и «стреляете» в этот квадрат. Если вы потопили корабль противника, то соперник должен сказать «убил», если вы ранили корабль (то есть вы попали в корабль имеющий больше чем одну палубу), то соперник должен сказать «ранил». В случае попадания в корабль соперника, Вы продолжаете «стрельбу».Игра заканчиваеся, когда один из ее участников теряеет все корабли.
6. Точки
Точки — игра на смекалку для двух или четырех человек. Однако лучше всего играть только вдвоем. Для этой игры вам понадобится чистая бумага и столько ручек, сколько игроков. Цель игры в том, чтобы соединить нарисованные линии в квадраты, тот игрок, который создаст наибольшее число квадратов, выигрывает игру.
Для начала создайте поле на чистом листе бумаги, нарисуйте горизонтальные и вертикальные линии из маленьких точек на одинаковом расстоянии друг от друга. Очень быстрая игра состояла бы из десяти вдоль и десяти точек поперек. Вы моете сделать поле как угодно большим или маленьким, в зависимости от уровня игры и числа игроков.
Как только поле создано, каждый игрок по очереди делает ход, рисуя по одной линии сразу, соединяющей две точки. Точки можно соединять по горизонтали или по вертикали, но иногда — по диагонали. Как только игрок заканчивает квадрат, он ставит свои инициалы внутри квадрата и получает следующий ход, и так далее, пока ему удается создавать квадрат с помощью одной дополнительной линии.
В этой игре возможны две стратегии: во-первых, можно мешать противникам создавать квадраты. Во-вторых, можно формировать поле так, чтобы иметь возможность создавать большое число квадратов с помощью одной дополнительной линии.
7. Футбол
Для игры в футбол Вам нужен листок в клетку, который будет служить полем. Играют двое человек. Ворота размером в шесть клеток. Игра начинается в центральной точке поля (листка). Первый ход разыгрывается жребием.
Ход — ломаная состоящая из трех отрезков каждый из которых — диагональ или сторона клетки.
Пересекать линии и касаться их нельзя. Если игрок не может сделать очередной ход, то противник пробивает штрафной : прямую линию в шесть клеток (по вертикали, горизонтали или диагонали).
Если после штрафного мяч остановился на уже проведенной линии, или игрок не может сделать ход, то пробиваеться еще один штрафной.
Играют до первого гола.
8. Цепочка
Задача состоит в том, чтобы для данной пары слов придумать цепочку метаграмм, превращающую одно из этих слов в другое. Каждое по- следующее слово получается из предыдущего заменой ровно одной буквы. Победителем становится тот, чья цепочка короче. Изобрел эту игру Льюис Кэрролл, автор книги «Алиса в стране чудес». Так, КОЗА превращается в ВОЛКА, ЛИСУ, БАРСА и других животных.
За 17 ходов НОЧЬ меняется на ДЕНЬ.
За 11 ходов РЕКА превращается в МОРЕ.
За 13 из ТЕСТА можно приготовить БУЛКУ.
Путешествие во времени займет 19 ходов: МИГ превратится в ЧАС, затем в ГОД, потом возникнет ВЕК и в конце концов получится ЭРА.
9. Балда
Первый игрок пишет букву, следующий добавляет букву спереди или сзади написанной буквы и т.д. Проигрывает тот, в результате подстановки кого получилось целое слово. Буквы нужно подставлять не абы как, добавляя очередную букву, вы должны иметь в виду какое-то определенное слово, в котором встречается написанная Вами комбинация букв. Если тот, кто должен сделать очередной ход, не может придумать ни одного слова с комбинацией букв, которая сложилась перед его ходом, он должен сдаться. В этом случае игрок, который написал последнюю букву, должен сказать, какое слово он имел в виду, если слово он назвать не может, то проигрывает сам, если назвал – проигрывает тот, кто сдался. Тот, кто проигрывает первый раз получает букву Б, второй раз – А и т.д., пока не получится слово Балда. Тот, кто первым станет Балдой, проигрывает окончательно.
Естественно, играть можно не только на бумаге, но и устно.
10 . Футбол 8х12
Рисуется поле 12х8 клеток. Точки посередине коротких сторон — это ворота. Первый ход — точно с центра поля. Ходят поочередно ставя черточку на одну клетку (по линии или по диагонали). Если ход заканчивается на зарисованой точке (то есть через которую уже ходили — например центр поля) то дается право на еще одну черточку и так далее, пока ход не кончится на пустой точке. Стороны считаются зарисоваными точками (то есть от сторон мяч «отбивается»). Целью является забить мяч в ворота.Дополнительное правило, которое мы выдумали в класе — вводить мяч в положение, из которого нельзя выйти является запрещенным ходом (например ход в угол). Если это единственный ход, который может сделать игрок — то это его проигрыш.
Каждое поле играется на один гол (при желании и на больше, но практика показала, что на один гол играть лучше все таки). Удобство этой игры по сравнению со стандартным футболом заключается в том, что она занимает мало места и для нее можно использовать и частично исписанный листок.
11. Лабиринт с предметами
Играют двое. Игроки рисуют по два поля 10х10. Для удобства можно присвоить клеткам обозначения: а, б, в, … , и, к – по горизонтали и 1, 2, 3, … , 9, 10 – по вертикали. (Помогает при общении по игре). На одном поле чертиться свой лабиринт, по которому будет ходить соперник. Второе, пока пустое, поле – лабиринт соперника, по которому ходит сам игрок. На нем отмечаются разведанные в процессе игры объекты лабиринта противника. Цель – вынести клад из чужого лабиринта быстрее чем соперник вынесет клад из твоего.Тут появляется возможность одновременно проявить себя и как приключенец и как «хозяин подземелья».
Требования к лабиринту:
Между клетками могут находиться стены, которые, собственно, лабиринт и образуют. Кроме этого, весь лабиринт по периметру также огражден стеной, которая называется «стена лабиринта».
В лабиринте должны находиться:
1 Арбалет1 Костыль1 Капкан4 Ямы4 Выхода из ям (каждой яме однозначно соответствует один выход)3 Ложных клада1 Настоящий клад4 Выхода из лабиринта с каждой стороны.Кроме того, каждый участник в начале игры имеет 3 гранаты.
Пример карты:
Игровой процесс.
Игроки говорят друг другу координаты точек, с которых они хотели бы начать игру.Игроки ходят по очереди. За ход игрок может переместиться на одну клетку вправо, влево, вверх или вниз, если клетку в которой он находится и ту, в которую желает переместиться, не разделяет стена. В случае, если такая стена все-таки присутствует, игроку об этом сообщается и он остается на своей клетке до следующего хода. Если эта стена является стеной лабиринта, об этом сообщается отдельно. Впрочем, по предварительной договоренности, можно не делать различий между внутренними стенами и стенами лабиринта и исключить понятие «стена лабиринта», но это может сильно затянуть игру. Потратив одну гранату, игрок может устранить любую стену (в т.ч. и стену лабиринта) до конца игры. Для этого не нужно ее сначала обнаруживать. Скажем, интуитивно почувствовав, что справа стена, игрок может не тратить ход на то, чтобы сходить вправо и убедиться в ее наличии. Он сразу может использовать гранату, и уж тогда там точно не будет стены. Но может быть, что ее там и не было, тогда граната все равно считается потраченной. Бросок гранаты считается ходом. Бросить гранату и переместиться в этот же ход нельзя.
После того как игрок переместился на новую клетку, противник сообщает ему о том, что на новой клетке находится (а на одной клетке может находиться только один объект).Это могут быть (с примерами обозначения):
а) арбалет («А»). После посещения этой клетки, игрок начинает «хромать» и противник за свой ход (уже наступивший) может совершить +1 действие (переместиться, кинуть гранату, наткнуться на стену). Арбалет срабатывает один раз, но его действие длится до конца игры.
б) костыль («Y»). Посещение этой клетки дает самому игроку, начиная со следующего хода, совершать за ход на 1 действие больше. Это не лекарство от действия арбалета, а самостоятельный объект. Костыль срабатывает один раз, но его действие длится до конца игры.
Действия костыля и арбалета складываются. Т.е., посещение обеих этих клеток дает тот же результат, что и непосещение ни одной из них. Если же Вы нашли костыль, а Ваш противник арбалет, то за ход Вы можете сделать уже три действия (не четыре!).
в) капкан («K»). Попуск трех ходов. Т.е. пока Вы выбираетесь из капкана (корректнее — ловушки), противник совершает четыре хода, после чего Вы опять можете перемещаться. Наличие у противника костыля позволяет ему совершить восемь ходов. Если Вы попали в капкан будучи перед этим ранены арбалетом, противник делает лишь четыре хода (перманентный пропуск ходов не работает, т.к. Вы все равно не двигаетесь). Капкан срабатывает каждый раз, когда игрок посещает клетку с ним.
г) Вы попали в яму № 1, 2, 3 или 4. («1,2,3,4») – мгновенное перемещение (тем же ходом) на клетку «Выход из ямы № 1, 2, 3 или 4» («I,II,III,IV») соответственно. Координаты выхода игроку не сообщаются. Он продолжает игру от клетки с выходом из ямы и сам определяет свое местоположение по косвенным признакам. Если игрок попал на клетку «выход из ямы» не падая в саму яму а просто «набрел», ему сообщается об этом. Теперь, упав в яму с этим номером, он будет знать, где появится.
д) Вы нашли клад. Ложный («О») или истинный («Х»), можно узнать только выйдя из лабиринта.Для выхода из лабиринта можно воспользоваться любым из выходов, которые имеются по одному с каждой стороны или пробить новый, воспользовавшись гранатой. (Впрочем, можно условиться, что стены лабиринта гранаты не берут, хотя при этом тратятся).
Игроку, который в свой ход вышел из лабиринта (случайно или преднамеренно), сообщается, что он вышел из лабиринта. Если при этом у него на руках клад, сообщается и какой это клад: ложный или настоящий.
Одновременно можно нести только один клад. При этом действия арбалета, костыля, капкана не отменяются. Бросать клад где вздумается нельзя, но можно менять один на другой. Брать клад не обязательно. Если оказавшись на клетке с кладом Вы решили его взять, об этом нужно сообщить противнику.
Лабиринт должен составляться таким образом, чтобы можно было посетить каждую клетку и выйти из лабиринта без применения гранат, начав игру из любой точки. Нельзя строить ловушки: когда игрок, попав в яму, выходит из нее в замкнутое пространство, из которого не может выбраться без применения гранат. Капкан может стоять где угодно.Выйдя из лабиринта, игрок может зайти только в тот выход, из которого вышел. Впрочем, вариант с возможностью повторного захода через любой выход тоже имеет право на существование. В этом случае можно отгораживать участки, попасть в которые можно только через определенный вход в лабиринт, если начальная точка находится за их пределами.
12. Чепуха
И даже бестолковая на первый взгляд игра «Чепуха» несет в себе глубокий смысл, если поиграть в нее всей семьей. Каждый игрок получает лист бумаги и пишет вверху ответ на вопрос «Кто?» (Винни-Пух, кот Бегемот, сосед дядя Вася и т.п.). Затем ответ загибается таким образом, что бы его нельзя было прочитать, и листки передаются по кругу. Следующий вопрос — «С кем?» Затем следуют: «Когда?», «Где?», «Что делали?», «Что из этого получилось?» Когда все ответы написаны, бумажки разворачиваются и прочитываются. «Так какой же во всем этом смысл?» — спросите вы. Если вся семья хохочет над получившейся чепухой, если родителям и детворе интересно и весело вместе — не в этом ли самый главный, самый важный смысл любых семейных игр?
13. Война вирусов
«Война вирусов». Игра для двоих (можно и больше, но желательно четное количество игроков, иначе один быстро становится жертвой), на поле 10*10 (опять же, можно и больше, тогда даже интересней), «вирусы» обозначает крестиками, кружочками и прочей нечистью (у каждого игрока свой цвет или фигура). За ход выставляется три «вируса». Начинают свое размножение вирусы из противоположных угловых клеток поля. Выставить «вирус» можно только рядом с другим своим «живым вирусом». Если рядом оказывается «вирус» противника то его можно съесть, закрасив клетку в свой цвет. Вторично эту клетку «пересъесть» противник уже не может. Такие образования называются «крепостями». Если «крепость» прикасается хоть к одному живому вирусу своего цвета, то от нее можно дальше в любом месте создавать новые «вирусы» или есть противника. Целью игры является полное уничтожение живых сил противника. Если обоим сторонам удается спрятать своих живых вирусов за крепостью из съеденных вирусов противника игра заканчивается ничьей.
«Клопы». Вариация «воины вирусов». Играть может от 2 до 6 игроков, но оптимально 4 игрока. Играют на тетрадном листе, каждый игрок должен иметь свой цвет. Игра начинается с рисования «главного клопа» — крестик обведенный рамкой и «штаба» окружение «главного клопа» из 8 крестиков в углах листа. Далее за ход можно делать 5 «ходиков», а не 3 как в «войне вирусов». Игра ведется на уничтожение «главных клопов». Но самое интересное в этом варианте игры то, что игроки, который играет по умолчанию каждый за себя имеют право заключать союзы и нарушать и по мере изменения обстановки или личных предпочтений. Часто хорошая «политическая» интрига в этом варианте, приносит больше дивидендов, чем комбинационный класс игры. Возможное дополнение: игрок построивший квадрат из 8 клопов, может поставить в центр нового «главного клопа», а старый при этом закрашивается в цвет игрока. Такая революция, позволяет спасти свою армию от разгрома, в случае если противник близко подобрался к старому «главному».
«Война». Очень сложная вариация «воины вирусов». Играть может от 2 до 6 игроков, но оптимально 4 игрока. Играют на тетрадном листе, каждый игрок должен иметь свой цвет. Игра начинается от «генералов», которые обозначаются буквой Г и располагаются в углах листа. За каждый ход, игрок может выставить:4 пехотинцев (обозначаются буквами П);2 коня которые ставятся буквой как в шахматах (и обозначаются буквой К);2 танка, которые ходят через одну клетку (можно и по диагонали) (обозначаются буквами Т);1 самолет, который ходит через 4 клетки по горизонтали, вертикали или диагонали (обозначаются буквами С).Во время любого хода можно отказаться от одного вида войск и сделать лишний один лишний ходик другим видом. Например, можно пойти сразу еще 3 раза самолетом за один ход, отказавшись соответственно от всех пехотинцев, от всех коней и всех танков.В отличие, от «войны вирусов», новых бойцов можно выставлять, только рядом с живыми бойцами (или рядом с «живой» крепостью) соответствующего вида при условии, что они имеют живую связь с генералом! То есть войска без управления не воюют. Связь может быть осуществлена через другой вид войск. Играют, конечно, на уничтожение генералов.
14. Пирамида
Играют двое игроков. Они по очереди пишут в виде пирамидки слова по правилу кроссворда, кроме того, повторять одинаковые слова запрещено. Начинают с трёхбуквенного слова, под словом можно написать слово той же длины или на одну букву длинее. Под каждым словом можно только один раз написать слово той же длины, следующее слово должно быть обязательно на одну букву длиннее. После хода соперника игрок внимательно анализирует получившуюся игровую словесную пирамиду и пытается составить слово минимум из трёх букв, взяв для него первую букву с произвольного уровня пирамиды, вторую со следующего под ним уровня и т.д. по одной букве с каждого следующего уровня. Это слово должно быть также нарицательным существительным в начальной форме и не аббревиатурой (не сокращением типа ГАИ). Игрок, который находит такое слово, добавляет к своему счёту столько очков, сколько букв в этом слове. Потом начинается следующий тур, и так, пока какой-либо игрок не наберёт 12 очков. Он и становится победителем.
Пример одного тура этой игры со словами: 1-й игрок пишет слово ЛЮК, 2-й пишет под ним слово МИГ. 1-му игроку надо найти уже 4-буквенное слово, он пишет слово ШАЛЬ. Оба игрока стараются подбирать слова из уже использованных букв, чтобы не дать шанса сопернику победить в туре. Тут 2-й игрок внимательно смотрит, нельзя ли составить какое-нибудь слово, но получается всякая чепуха вроде КИШ, ЛИЛ, ЮМЬ и т.д. Тогда 2-й игрок пишет 4-буквенное слово ШИЛО (а мог бы и 5-буквенное написать):ЛЮКМИГШАЛЬШИЛО
1-й игрок анализирует пирамиду… Он видит слова ГАИ, ИЛ и ЮГ, которые по условию этой игры в слова не подходят, и не замечает слова КИЛО! У пирамиды появляется очередной уровень:ЛЮКМИГШАЛЬШИЛОКАПЛЯ
2-й игрок видит слова ЛИК и ШИП, затем замечает слово КИЛО… И вдруг находит красивое 5-буквенное слово ЛИЛИЯ! Оно добавляет 5 очков к счёту 2-го игрока.
Подобные игры на бумаге со словами развивают, внимательность и умение комбинировать словами.
15. Танчики
Два игрока рисуют по 7-10 ?танчиков? или ?звездолетов?, каждый на своей половине двойного тетрадного листа (лучше не в клеточку, а в линейку или пустого А4). Расставив армию, игроки начинают обстреливать друг друга следующим образом: выстрел рисуется на своей половине поля, затем лист складывается ровно посередине, и выстрел, видимый напросвет, отмечается на второй половине поля. Если он задел танк, тот подбит (второе ?подбивание? фатально), а если попадал точно в него, танк сразу уничтожен.Каждый удачный выстрел дает право на следующий; в некоторых версиях игры, нельзя стрелять следующим выстрелом в тот же танк.После предварительной пристрелки, игра очень быстро переходит в стадию ?блиц-крига?, а точнее, стремительной развязки. Побеждает, естественно, тот, кто первым расстрелял армию соперника.
16. Заграждения
Простая тактическая игра, суть которой в позиционной борьбе за пространство. На поле 8х8 (т.е. размера шахматной доски), игроки один за другим чертят небольшие линии, которые перекрывают 2 любых клетки подряд: т.е. например игрок 1 проводит вертикальную линию, занимающую e2 и e3.Игрок 2 делает то же самое, но его линия не может пересекать или соприкасаться с уже существующими ?заграждениями?. По мере заполнения поля, остается все меньше свободного пространства, и в конце необходим трезвый расчет, чтобы закончить игру. Игрок, который не может больше поставить свою черту, т.к. все уже загорожено, проигрывает.
17. Ободки
Простая и довольно веселая игра, построенная на тех же принципах, что и парад монет, но совсем другая по форме.На небольшом поле (это может квадрат или прямоугольник произвольного размера, не особенно важно) игроками расставляется порядка 15-20 точек в самых разных местах, хотя более-менее равномерно.Затем первый игрок чертит ободок округлой, но произвольной формы, который проходит минимум через 1 точку. Максимум в классической версии неограничен, хотя я бы рекомендовал давать максимум 4 точки в ободке.Следующий игрок чертит свой ободок, единственное ограничение ? он не может пересекаться с уже начерченными. Ободки могут чертиться внутри ободков, или, наоборот, окружать уже существующие, главное, чтобы не пересекались. Через некоторое время остается совсем мало места, и тот, кто чертит последний ободок, проигрывает.Вариацией этой игры является правило чертить ободки, охватывающие только 1 или 2 точки, не более.
18. Цифровые войны
В этой игре главным действующим лицом является ластик. Стирать придется постоянно, это же война, и неизбежны потери. Многие циферки погибнут ради вашей победы!Игра очень быстрая и вариативная, и, в общем, весьма простая.Вы пишете ряд цифр от 0 до 9, в любой последовательности, в любых комбинациях. Длина может быть такая, какую вам захочется, рекомендую начать с 20. Например, это может быть ряд 5,3,6,9,0,8,4,6,1,3,2,4,8,7,0,9,5 ? или какой угодно иной.Своим ходом игрок может сделать одно из двух возможных в игре действий:
- изменить в меньшую сторону одну из цифр, максимум до 0 (отрицательных величин в игре нет);
- стереть любой ноль и все цифры справа него, сократив таким образом длину полосы.
Проигрывает тот, кто уничтожает последний ноль.
19. Точки и квадраты
Автор этой игры, популяризатор математики и наук Мартин Гарнер, считал ее ?жемчужиной логических игр?. Не разделяя его мнения, тем не менее, вполне можно назвать игру одной из лучших тактических игр, интересных в любом возрасте.Игровое поле ? ряды точек от 3х3, до 9х9. Начинать лучше с малого поля, и почувствовав вкус, наращивать размер. Правила очень просты: играющие соединяют две точки линией, и когда игрок может закрыть квадрат, он ставит в него свой знак (например, первую букву своего имени).Замыкая квадрат, игрок получает право на дополнительный ход, до тех пор, пока не проставит линию, которая ничего не замыкает. В конце игры подсчитывается, кто замкнул больше квадратиков, и определяется победитель.При кажущейся простоте, игра представляет неплохое пространство для комбинаторной игры, особенно на полях 5х5 и больше. Суть выигрышной тактики ? заставить поле полузакрытыми конструкциями, пожертвовать, несли необходимо, несколькими квадратиками в пользу оппонента, а затем, когда ставить уже практически некуда, вынудить его сделать невыгодный ход (ничего не закрывающий) ? и после того закрыть большинство квадратиков одной серией.
Простейшая словесная игра, по принципу крестиков-ноликов, только с буквами.На поле 3х3 (потом попробуйте и другие размеры), двое игроков ставят по одной любой букве, и выигрывает тот, у кого к концу партии (когда все поля будут заполнены) получится написать по диагонали, вертикали или горизонтали больше общеизвестных слов из 3 букв.Игра полезна для детей, которые учатся писать. Для взрослых в ней нет довольно малая соревновательная ценность, но игроков с юмором ждет масса удовольствия. Для детей, можно играть в вариант ?кто первый создаст слово, а не у кого слов будет больше.
21. Гонки
Более сложная и длинная игра, построенная на том же принципе, что и другие бумажные игры на координацию: движении ручки, стоящей вертикально, по листу от легкого щелчка.На листе (одинарном или двойном) чертится гоночная трасса (Race), в виде двух изгибающихся, неровных кругов, повторяющих очертания друг друга, шириной в 2-3-4 клетки (зависит от количества участников). Затем в произвольном месте получившегося кольца проводится линия старта/финиша, с которой стартуют гоночные машины.Короткими аккуратными росчерками, гонщики движутся по кольцу, преодолевая изгибы и специальные препятствия, вылетая в кювет, снова выходя на поле, и в результате, кто-то из них приходит к финишу первым, и пожинает лавры.Каждый раз, когда линия гонщика касается границы трассы или пересекает ее, в месте пересечения ставится крест, и гонщик пропускает следующий ход, разворачивая свою машину, чтобы она могла продолжить заезд. Таких пересечений у каждой машины в запасе 5 шт. (5 очков жизни), и шестое столкновение становится фатальным.Помимо этого, на трассе могут быть какие угодно препятствия ? например, зоны повышенной опасности: влетев в такую зону, машина получает больше повреждений, и теряет два очка жизни. Или специальные препятствия, которые выступают из краев, и делают проход более узким, лоибо наоборот, стоят в середине, и заставляют машины протискиваться вВозможно так же ввести touch points точки, вернее, небольшие кружки, в которые машина обязательно должна попасть, проезжая мимо (т.е., через которые обязательно должна пройти линия). На рисунке изображены сразу все перечисленные усложнения трассы, и видно, что гонка еще далека от завершения.Можно придумывать и вводить собственные правила, новые препятствия, а если участников 4 и больше, можно даже устроить гоночную серию, сделав несколько трасс, и в промежутках между ними позволяя игрокам закупать снаряжение, на сумму очков в зависимости от занятого места. Например, купить дополнительные очки жизни или атакующие шипы, и снимать по 1 очку жизни с машины, которую обгоняешь.
22. Гольф
Игроки стартуют с двух точек рядом друг с другом внизу двойного листка, стоящего вертикально (см. рисунок).Каждый играет ручкой своего цвета, и задача каждого ? за минимальное количество ударов (линий от ручки, скользящей по листу) завести мяч в лунку. Лунка находится на противоположном конце поля, т.е. сверху листа. И человеку с хорошей координацией требовалось максимум 4-5 ударов чтобы загнать линию в лунку.Но в продвинутых версиях Гольфа путь к ней не так-то прост, потому что от длинных прямых линий защищают холмы, выполняющие роль буфера и не позволяющие игроку. При попадании в холм, противник исполняет откат т.е. пуляет линию нарушившего в любую сторону, и тот вынужден продолжать свою серию ударов с места, куда эта линия пришла. Или, возможно, к трассе попавшего в холм приписывается 1 или 2 лишних хода.
И еще вот такая игра:

Ну а если уж возвращаться к компьютерным играм, то узнайте все таки что такое Аватарка или «Тот, кто нисходит» , а так же Как живут японские «интернет-беженцы»
Игры на бумажке, где надо подумать

Классические правила игры такие:
В клетках квадратика 3 на 3 по 2 игрока по очереди ставят крестики (первый) и нолики (второй). Выиграет тот, кто поставит в ряд 3 своих знака.
Давно известно, что при правильной игре крестики-нолики всегда сводятся к ничьей. Поэтому играть в них не слишком-то интересно. Зато у этой игры есть несколько забавных обобщений, в которые играть уже интереснее!
Крестики-нолики на бесконечной доске
Правила похожие. Первый ставит крестики, второй нолики. Выигрывает тот, кто поставит пять своих знаков в ряд. Но доска не ограничена (берем тетрадный листок
в клетку и играем).
Нолики нолики
В клетках квадрата 5 на 5 оба игрока ходят ноликами. Выигрывает тот, кто построит пять ноликов в ряд.
Супер-крестики-нолики

Вам потребуется нарисовать доску 3 на 3, состоящую из 9 полей 3 на 3 клеточки.
Первый ходит крестиками, второй ноликами.
Первый игрок ходит куда хочет.
Оппонент своим ходом должен сходить в то поле 3 на 3, которое сответствует только что сделанному ходу противника.
Например, если первый игрок сходил в центральную клетку (не важно, на каком поле), второй игрок должен ходить в центральное поле — а уж клетку выбирает сам!
Если все поле занято, то ходить можно в любое поле, где есть место.
Как только в каком-то маленьком поле 3 на 3 получилась «выигрышная позиция» дял крестиков или ноликов — на этом поле ставится большой крестик или, соответственно, нолик.
Выигрывает тот, кто поставит три больших своих фигуры в ряд.
Эта игра уже намного интереснее классических крестиков-ноликов!
Как модификация: маленькое поле, где уже стоит большой знак, можно считать закрытым для новых ходов.
Морской бой

Всем знакомая и любимая игра.
На поле 10 на 10 игроки расставляют корабли: 4 штуки 1 на 1, 3 штуки 1 на 2, 2 штуки 1 на 3 и 1 большой флагман 1 на 4. Причем, корабли не должны прикасаться
друг к другу ни стороной, ни даже вершиной.
Ходят по очереди, делая выстрелы — для этого надо просто назвать клеточку. Если на клетке у оппонента нет корабля, оппонент отвечает «мимо». Если есть корабль, отвечает «ранен». Если своим ходом игрок убивает корабль — ему так и говорят «убил».
Если игрок попал, он может сделать еще ход.
Выигрывает тот, кто быстрее потопит все корабли противника.
Модификация: разрешить не прямоугольные корабли.
А вот такие:
Быки и коровы

Два игрока задумывают 4-значные числа. Цель игры — первым отгадать число оппонента. Ходы делают по очереди.
В свой ход игрок называет 4-значное число. Оппонент сравнивает его с загаданным числом и подсчитывает «быков» и «коров». Быки — это цифры, которые угаданы вено и их позиция тоже угадана верно. Коровы — это цифры, которые есть в загаданном числе, но не на своем месте. Например, если загаданное число 1983, а названное число 1234, цифра 1 будет здесь «быком», а цифра 3 — коровой.
Из общих соображений следует, что угадать число, если играют без нуля, можно за 6 ходов; с нулем требуется не более 7. Попробуйте!
Захват территории

Для игры нужно нарисовать любое поле. Чаще всего рисуют в виде квадрата или прямоугольника, но это не обязательно.
Игрок в свой ход может провести линию вдоль любой стороны клеточки. Если при этом образовалась замкнутая территория — игрок заполняет ее своим символом (первый крестиками, второй ноликами). Кто только что зазватил территорию, рисует еще одну стенку. Выигрывает тот, кто в итоге захватил больше половины.
Рассада (она же точки)

На листике вначале ставят несколько точек — семян.
В свой ход игрок чертит линию с началом и концом в изображенных точках. И ставит на этой линии новую точку.
Допускается проводить «петлю» — линию у которой начало и конец одинаковые.
Из каждой точки не может выходить больше 3 побегов.
Проводимая линия не должна проходить через отмеченные точки, кроме ее начала и конца.
Проводимая линия не может пересекать ранее проведенные линии.
Проигрывает тот, кто не сможет сделать ход.
Приятного вам времяпрепровождения на философии и БЖД!