Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения.
Открытие окна происходит через стандартную для Swing процедуру:
С помощью SwingUtilities.invokeLater мы помещаем создание окна в очередь событий - event dispatch thread.
Основное окно использует компоновщик BoxLayout:
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)
и размещает панели сверху-вниз.
Внутрь окна мы помещаем две панели: MainPanel и BottomPanel, которые будут содержать более детальные блоки программы, о чем будет рассказано ниже.
Примерная структура любого окна в Swing:
Структура нашего окна:
Параметры нашего окна определяются следующими командами:
На первый взгляд мудрено.
Рассмотрим более детально.
Внутрь MainPanel помещаются три панели - LeftPanel, CenterPanel, RightPanel, для них задаются конкретные размеры с помощью функции setPreferredSize(new Dimension(X, Y)). Дальше простая арифметика - сумма параметров по X и Y должна равняться параметрам
X и Y MainPanel.
Внутри MainPanel используется тоже компоновщик BoxLayout, но уже по оси X, размещающий панели слева-направо.
Внутрь панелей вносятся элементы. Для позиционирования элементов я выбрал способ - создание EmptyBorder(int top, int left, int bottom, int right) и задание конкретных размеров элементов через функцию setPreferredSize(new Dimension(X, Y)).
В BottomPanel помещаются две кнопки и разносятся по сторонам через:
setAlignmentX(Component.RIGHT_ALIGNMENT)
setAlignmentX(Component.LEFT_ALIGNMENT)
Внутри элементов TextPanel размещаются элементы JTextPane. Использование данных элементов позволило стилизовать текст через следующую конструкцию:
StyleConstants.setAlignment(simpleAttributeSet, StyleConstants.ALIGN_LEFT)- выравнивание по левому краю.
StyleConstants.setFontSize(simpleAttributeSet, 12) - размер шрифта.
StyleConstants.setFontFamily(simpleAttributeSet, "Times New Roman, cursive") - семейство шрифта.
simpleAttributeSet.addAttribute(StyleConstants.CharacterConstants.Foreground, new Color(112, 126, 173)) - цвет шрифта.
Дляотражения имеющихся танков использованы JProgressBar-ы, в дальнейшем они будут отражать промежуточные показатели здоровья танком, а не только жив-мертв.
setMinimum(0) - минимальное значение в прогресс баре.
setMaximum(100) - максимальное значение.
setValue(100) - текущее значение.
setString("Легкий танк СССР " + (i + 1)) - аннотация.
BattleList (JTextPane) мы помещаем внутрь JScrollBar и назначаем параметр jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) - чтобы всегда отражался скролл.
Все блоки графики имеют статус private, т.е. изменения возможны только через специальный интерфейс - обычные правила хорошего тона в программировании (если судить по книжкам).
public static void setButton(String text, Boolean setActive) - меняет нашу кнопку buttom (меняет текст и делает активно/неактивной).
public static void setHealthes(Tank ussrTank, Tank germanTank) - меняет параметры здоровья в текстовых блоках слева и справа.
public static void setCurrentBattle(Tank ussrTank, Tank germanTank) - устанавливает текст текущей битвы в текстовом блоке CurrentBattle.
public static void updateFrame() - обновляем окно.
public static void updateBattleList() - обновляем battleList.
public static void startBattle() - запускает бой.
public static void setTankHealth(int id, int percent) - устанавливает значение здоровья танка в соответствующем JProgressBar.
public static void showLog() - отображает окно лога битвы.
Лог битвы выведен на отдельную кнопку, открывающую окно лога, состоящего из JFrame и помещенного в него JScrollBar с вложенным в него JTextPane.
За сим на сегодня все..) Продолжение следует. )
Задачки для изучающих Java41 пост 1.6K подписчиков
Правила сообществаПрошу воздержаться от взаимных оскорблений.
Больше позитива, ведь программирование - это весело)
Swing всегда был монструозный, что тут сказать.
Хотелось бы дать совет. Есть такой механизм, с помощью которого можно попросить git не учитывать некоторые файлы - файл .gitignore, это полезно в случае разработки проекта с помощью IDE, когда среди файлов проекта находятся файлы к нему не относящиеся (например, если это идея, то это директория .idea и iml файл).Пользоваться им очень просто, достаточно добавить этот файл в корень проекта и в него записывать имена файлов, имена директорий или маски файлов, за изменением которых не нужно следить.
Например, для данного проекта хватило бы такого содержимого:
Ещё одним хорошим шагом будет использование средств сборки проектов, например Maven или Gradle. Благодаря ним ваш проект можно будет собрать и запустить без использования сред разработки.
у меня собственно только один вопрос: почему Swing, а не JavaFX?
Зачем писать Object o;o = new Object();
Если можно Object o = new Object();
Ой, знакомые письмена! Я видел это на скрижалях! Мне ее нужно выучить с 0 за завтрашний день (3 часа после работы) и написать 5 задач к зачету :D
Забайтился на котиков, но разочаровался из-за одного лишь недоделанного меню в посте.
Методы и функции по правилам хорошего тона надо называть с большой буквы.
В некоторых IDE например Atom, Sublime Text, etc трудно сразу понять где метод/функция, а где просто переменная.
Так же нужно учиться использовать полиморфизм. Методы setMinimum(), setMaximum(), setValue() можно заменить на один (условно):
Это три разных метода, но из за ООП будет работать как один. Ты же встречал такое где в один метод можно передать разные параметры или типы параметров? - Вот это тоже самое
В итоге на старте можно использовать SetHP(current, min, max) - задавая все параметры.
Далее например при апгрейде можно использовать SetHP(current, max) - меняя текущее ХП с учетом каких-либо факторов и изменяя максимальное ХП если например новая башня даёт +100 к ХП.
И непосредственно в игре можно использовать только SetHP(current) например отнимая ХП при попадании снаряда.
Помогу желающим стать backend-разработчиком на Python или Ruby
Еще до того, как на Пикабу все начали помогать друг другу, я немного помогал желающим войти в IT. Вот и сейчас предлагаю бесплатно стать ментором или разово проконсультировать. Моя специализация - бэкенд разработка на Python и Ruby.
Кому могу быть полезен: в первую очередь тем, у кого нет еще коммерческого опыта. Также если человек устроился на первую работу, а там происходит какая-то херня (сам был в такой ситуации), то объясню, что это действительно херня, а не "сам виноват, я плохой программист, видимо это не моё" и вот это всё.
Чем могу помочь:
- составить план развития, подскажу что и как учить
- выходить из затыков
- ревьювить код и подсказывать, что улучшить
- говорить, что ты крутой/крутая чувак/чувиха и у тебя всё получится
Пишите на [email protected] Расскажите в письме о 1) своём бэкграунде 2) о своих целях.
P.S. Понятия не имею, сколько будет откликов. Просто скажу, что постараюсь ответить всем.
Ползу в направлении мечты. Пост № 9
Всем привет, дорогие Пикабушники. Прошел еще месяц и как обещала, выкладываю видео игры, которая получилась по итогу. Это не полноценная игра, это проект, который я делала, обучаясь на Udemy. Вот само видео, после него будет небольшой обзор самого курса и того, чему научилась, ну и планы на будущее.
И так, курс скажу я не плохой, но и не отличный. Он очень поверхностный с одной стороны, но с другой, если это самое начало, и ты ничего не умеешь, то этот курс “для скелета” очень даже подойдет. Но, конечно, необходимо будет изучать Unity дальше, более углубленно, чтобы использовать в будущем правильные вещи в игре. Мне повезло еще в том, что у меня имеется очень хороший наставник, который мне объяснял какие вещи, например лучше не использовать, хотя они указаны в курсе, т.к. они, например жрут много ресурсов, памяти или медленные и т.д. Ну и давал дополнительные какие то задания, вот тут и начинается настоящее обучение, когда делаешь сам, а не просто повторяешь всё по курсу. Еще в этом курсе много багов, которые автор даже убирает в каких-то уроках, но на самом деле они остаются. Как например двойной прыжок. То решение, которое он показывает, на самом деле не решает эту проблему. Но как я и говорила, курс очень поверхностный, и автор сам этого не скрывает. Из плюсов, дополнительно, автор показывает еще и мобильное управление, это не плохо.
И так, в этом курсе я поняла, как работать с камерой, создавать персонажа, как работать с ассетами, даже как делать анимацию (не глобально, конечно) но что-то про анимировать по мелочи могу. Управление персонажем: бег, ходьба, прыжки, боевка, работа с врагами, их движения, атака, преследование персонажа, работа с префабами, как добавлять музыку и определенные звуки, работа со сценами, менюшками, какие-то взаимодействия в игре. В общем, считаю, что у меня появилась не плохая база. Которую я могу уже перенести на свой проект, и уже на своем проекте изучать Юнити более углубленно. Думаю, в этом плане уже хорошо будут помогать книги по Unity.
Теперь, после окончания этого курса, считаю, что можно больше времени уделять и С#. До этого основной упор был на Юньку. НО! Для тех, кто только начинает или собирается начинать, мой совет, в начале изучаете С#, просто основы, а потом уже переходите в Unity. Иначе у вас будет каша и вы вообще не будете понимать, чтобы пишите.
И так, мои планы. Наверное, в начале апреля хорошо займусь С#, а после начну свой проект и параллельно уже буду более углубленно изучать и шарп, и юньку. Свой проект тоже хочется создать уже по нормальному, поэтому еще немного времени уделю на геймдизайну и левелдизайну. Что бы понимать, что это вообще за верь и было более полное понимание своего проекта. Всё-таки это потом будет мой карточкой. В которую я скорее всего загляну в будущем и буду удивляться, какую же чушь я раньше писала в коде)))
Если у кого то в процессе обучения появились какие то вопросы, то можете писать мне в телеграмм, группа @annaleeplay Она у меня больше по играм, но возможно совмещу ее с обучением с геймдевом.
Всем хорошего вечера.
Петиция к Yandex о поддержке российского Data Science
@Yandex.Support, Официальное обращение к вам.
Так как портал Coursera закрыл доступ к российским курсам и дал только 90 дней на завершение текущего курса, мы, нижеподписавшиеся (поставившие плюс посту) просим перенести вашу специализацию "Машинное обучение и анализ данных" (Яндекс-МФТИ) на доступную платформу для поддержки и развития российского сообщества Data Science.
В качестве дополнительной меры поддержки было бы неплохо сделать этот курс бесплатным
Начинаем новую жизнь (принимаю эстафету нового трэнда)
На фоне тренда "добродел", продолжаем совместно бесплатно обучаться программированию на C# в ламповой обстановке, к черту рейтинг, рады всем желающим, телега: https://t.me/BusinessProgrammers
Бесплатно помогаю пикабушникам учить программирование, часть 28: «Итоги спустя 2 года»
Подведем итоги
- 41 человек обучился до уровня стажера/младшего разработчика.
- 2 человека сейчас на этапе прохождения собеседований в несколько компаний.
- 6 человек прошли какую-то часть плана обучения, но перешли во фронтенд.
- 2 человека обучился до уровня стажера, поработав несколько месяцев и ушли в DevOps.
Некоторые пикабушники поддержали мою идею и взялись бесплатно помогать с обучением в других направлениях. Вот каналы некоторых из них:
Я немного заболел панкреатитом, поэтому пока занимаюсь этим проектом гораздо меньшее время, чем бы мне того хотелось. Это вынужденное уменьшение моей активность очень временное явление. Мне очень нравится заниматься этим проектом и я и дальше планирую дополнять его интересными статьями.
Программа QA Manual Engineer 2.0 - Освоение профессии тестировщика без СМС и регистрации
Привет! Представляю новую программу для освоения профессии QA Engineer (тестировщик) по направлению WEB. Собрана на базе бесплатных и общедоступных материалов, оформлена в программу, ориентированную примерно на 4 месяца.
Зачем тебе такой большой монитор ?
Делюсь своей небольшой программой для детей "Вычитайка"
Здравствуйте, решил и я поделиться. Не так давно сделал небольшую программу под названием "Вычитайка", она помогает детям начального и дошкольного образования научиться самостоятельно и быстро считать примеры на сложение, вычитание, умножение и деление. Моя программа полностью бесплатна и не содержит рекламы.
Она работает в операционных системах Windows и Linux (проверено только на 64 битных системах и в Astra Linux и Linux Mint).
В линукс в свойстве файла "Math_tests" необходимо установить - запускать как программу.
Программу сделал в Lazarus, т.к. ранее немного программировал на Delphi 7. Это её второй вариант, в ней теперь сохраняется результат прохождения заданий и сама программа выглядит намного лучше первой версии. Моим детям и знакомым она очень понравилась.
Сильно не пинайте за ошибки, я бывший троечник, а с тегами похоже что-то намудрил.
Продолжение поста «Тоже помогу чем смогу: получить работу программистом»
Уф. я ожидал, что человек 20 откликнется. Закрыл анкету, когда в ней было 184 ответа! Приятно удивлен, но чувствую некоторое давление ответственности. Блин, во что я ввязался ))
Ввиду отсутствия у себя резиновых качеств, мне пришлось применить грубые фильтры: random.sample(range(184), 3) выделить тех, кто сейчас работает программистом, с хоть каким-то английским.
А дальше читал, пытался понять в чем я могу помочь, а в чем и сам не шарю. Пытался найти общие темы и так далее. Убил три часа.
Вот к чему пришел:
1) Выбрал трех людей, которые кажутся наиболее мотивированными и в хорошо известных мне областях, с общими вопросами, кому я смогу помочь классическим менторством. Ну или не смогу, увидим.
2) Выбрал 8 человек с весьма специфическими вопросами (как научиться проходить собеседования, специфика FAANG и все в этом духе). Поскольку проблемы схожие, надеюсь, получится сэкономить кучу сил - найду общепригодные статьи, что-то от себя наклепаю. Плюс вопросы весьма определенные, то есть рассчитываю на весьма краткосрочное сотрудничество. Проведу тестовое собеседование и дам фидбэк. Чудес не ждите, за руку каждого вести не смогу, в конечном счете человек сам должен учиться и прорываться, я помогу советом и мотивацией как смогу, отвечу на вопросы.
Печально, что не могу помочь всем, но я и так порвусь - основная работа, сын, куча волонтерства и все вот это. Но буду стараться быть полезным.
Здесь не буду писать ники "счастливчиков" (или жертв, это вы сами для себя решите), это уже на их усмотрение, светиться или нет. Разошлю email'ы через час-другой. Еще раз прошу прощения, кому не написал - я один, вас легион и маленькая тележка.
Ну и чуток статистики по анкетам, если кому интересно:
Вчера днем (на примерно 130 ответах) соотношение возраста было 50.0%, мой перфекционист довольно мурчал. А потом понабежала молодежь и все испортила, эх.
Тоже помогу чем смогу: получить работу программистом
Воодушевился массовыми добродеяниями и бесплатной помощью. Хотя кого я обманываю, мне просто скучно.
Я 10 лет в программировании, сейчас работаю ведущим (principal) разработчиком в большой корпорации (из FAANG, хотя это уже MANGA ведь?).
Я не буду учить программированию с нуля, про это тыща книг, курсов и прочего, это не интересно. Но если кто-то хочет прокачать скиллы, чтобы получить работу мечты, или просто свалить за бугор - это я могу.
Язык программирования не важен (если считаете, что ЯП - объясню, почему это не так). Помогу освоить методологии, научиться решать задачи (те, которые все спрашивают на собеседованиях, и которые почти никто не использует в работе), в общем проходить собеседования, ну и просто чем смогу.
Я сугубо бекендер, но фронтендерам и мобильщикам могу помочь в общих вопросах.
Короче, отметьтесь кому интересно, придумаем формат. Я бы предпочел "менторство" один на один, а не групповые занятия. Думаю, человека три потяну, может пять.
Все бесплатно. Мне скучно.
UPD: кажется, желающих много. Я тут накидал форму, чтобы как-то собрать данные и выбрать несколько людей, которым я и правда смогу помочь. 22го вечером сделаю пост с результатами. Простите, что превращаю это в собеседование, но не придумал ничего лучше.
Ответ на пост «Подборка книг по IT»
Тоже поделюсь своей коллекцией собирал по Java + немного Android. Старался собирать на русском языке.
Сейчас изучаю Java, если есть желающие, можем скооперироваться. Заканчиваю изучение Java Core и к лету перейду на изучение спринга.(иду по платному курсу с преподователем)
Могу помочь тем кто начинает. Советы, объяснение, просто общение)
Также есть подборка по изучению испанского языка:
Терминатор IntelliJ-800
Давайте кандидатам задачи
Когда только начинал собеседовать - знания проверялись только через тестовые задания. Но на проверку уходило много времени, да и не все хотели их делать. Поэтому на их место пришли вопросы наподобие типов данных в js или что такое замыкание?
После первого кандидата, который ответил идеально на теорию, был нанят, а на деле оказался слабым, добавили простые задачки на кодинг: перевернуть строку, поиск гласных, анаграммы. И да, этот этап оказался узким местом.
Это не были какие-то умные задачи на алгоритмы - печально известный FizzBuzz не мог потянуть каждый 2-ой.
Именно поэтому я пришел к выводу, что такие задачи давать надо!
Если у кандидата не получается их решить, то скорее всего со своей работой он справляться не будет. Это не всегда так, но корреляция высокая.
Также важно понимать, что это не способ найти хорошего программиста.
Это нужно для того, чтобы отсечь потенциально слабого.
Когда тебе нужна максимальная проверка
Квинтисенция программирования
Меня восхищает как наш профессор на курсе Java(senior с почти 40-летним стажем программирования), каждый раз перед запуском программы , произносит всегда, что-то типа :"ну с богом, надеюсь, что запустится".
Программирование изнутри
Ответ на пост «Как войти в IT после 30, мой путь от офисного планктона до Middle Java разработчика в Сбербанке»
Поддерживаю, если есть цель - войти в IT после 30 вполне себе реально даже при наличии семьи и кучи обязательств. Мне было 34)
Я довольно долго работала контент-менеджером - модерация, корректура, обработка фотографий, всякое вот такое для сайта, где люди предлагают разнообразные услуги. Параллельно занималась текстами различной направленности. Развиваться ни там, ни там мне не хотелось, всегда интересен был горизонтальный рост, сложные задачи, чем больше надо закапываться в детали, тем лучше. И тут я как-то пошла попить пива с приятельницей - техническим писателем. Разговорились о работе, то се, и у меня прямо тумблер щелкнул - хочу заниматься именно этим. И интересно, и перспективно, и бабла платят норм. А дальше начался хардкор.
Приятельница свела меня со своей начальницей, исключительно приятной дамой, с которой мы пообщались с час и выяснили, что я пока не тяну даже на джуна и условно вот вам лето, вот направления для обучения, а в сентябре поговорим (дело было в мае). Я долго думала эту мысль и решила, что мне нужно какое-то системное обучение, потому что иначе я даже не пойму, с какого края начать разъяснять эту сову. При этом высшего образования у меня не было, ну я и решила убить двух зайцев. За год подготовилась к ЕГЭ и поступила в университет на "Программную инженерию" - очка, бюджет. Да, мы не ищем легких путей. Тут еще стоит отметить, наверное, что я всегда была основным добытчиком в доме, плюс у меня двое детей))) так что упороться предстояло по полной. Но я сделала ставку на то, что человек, умеющий хорошо писать, с хорошим английским, да еще и профильным техническим образованием совершенно точно найдет место в жизни, и ради этого была готова упарываться. Ну и муж тоже меня поддерживал, и морально, и физически - дети и дом в первое время свалились на него почти полностью.
Забавно, кстати, но работу по нужной мне специальности я нашла уже на первом курсе - во втором семестре. Платили откровенно мало, но я хватала все подработки, которые могла найти, в результате мы смогли взять ипотеку. Через полтора года после фактического входа в IT я ушла на оклад в 2,2 раза выше того, что у меня был. Еще через год - опять ушла, и опять примерно с таким же повышением. Сейчас пишу диплом и жду первого аванса на новой работе, и задачи пока как раз такие, как мне нравится. И полный карт-бланш) ужасно довольна, что не зассала и таки изменила свою жизнь и жизнь своей семьи - уровень жизни у нас сильно вырос. В моем случае решение про переход в IT полностью себя оправдало, и хорошо, что я приняла его после 30. В 20 у меня на это все не хватило бы ни мозгов, ни энергии.