Привет. Если ты читаешь эти строки, то подтверждаю, что это уроки Java. Курс просто напичкан практикой (1200+ практических задач) и рассчитан на взрослую аудиторию. Я ненавижу скучные лекции, поэтому JavaRush сделан в виде онлайн-игры (квеста).

Тебе приходилось играть и прокачивать персонажей? Иногда сам не замечаешь, как втягиваешься, да? Догадываешься, куда я клоню? В JavaRush тебе тоже придется прокачивать персонажа. С 1-го уровня до 40-го. Пройдешь весь курс - станешь крутым Java-программистом.

Пройдешь 40 уровней – сможешь устроиться на работу Java Junior. Хотя есть индивидуумы, которые уже на 20-м уровне нашли себе работу. Потому что в JavaRush много практических задач. Очень много.

События игры разворачиваются в далеком-далеком будущем, в 3017-ом году, где люди живут на Земле вместе с роботами, и любой может путешествовать по космосу.

Однажды один космический корабль разбился на неизвестной планете…

Предыстория

Команда Galactic Rush потерпела крушение на неизвестной планете. При падении корабль врезался в гору и оказался почти полностью засыпан обломками скалы. Несколько дней ушло на тщетные попытки освободить корабль. Экипаж потерял всякую надежду вернуться домой и начал обживаться на новом месте…

Неделю спустя Элли, штурман корабля, случайно обнаружила, что планета населена… тысячами диких роботов! Они бы могли помочь разобрать камни и освободить корабль. Но они очень примитивны и тупы - у них нет никаких навыков. Они даже камни таскать не умеют. Что было бы очень кстати.

Научный глава экспедиции, Профессор Нудлс, потом вспоминал:
- Через несколько дней я нашёл выход. Я додумался взять прошивку робота Диего, члена нашего экипажа, переделать её на прошивку каменщика и загрузить диким роботам.

Но неудачи, казалось, преследовали нас. После небольшого исследования выяснилось, что у роботов нет разъёма для загрузки прошивки. У них вообще не было никакого разъёма для перепрошивки!

Билаабо, единственный инопланетянин в составе экипажа, вспомнил, что когда-то на своей родной планете видел робота, который знал программирование. И не просто знал, а сам правил баги в своей собственной прошивке.

Именно в этот момент меня посетила гениальная идея. Ведь когда-то давно я научил одного способного робота программированию на Паскале.

Я приказал поймать самого талантливого молодого робота и обучить его программированию на Java. Умея программировать, он смог бы написать себе любую прошивку и помочь нам!

В общем, мы поймали один сообразительный экземпляр. Диего предложил назвать его Амиго, в честь своего брата, которого никогда не имел.

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

Диего потом напишет в своих мемуарах:

Я был возмущён таким неприкрытым грабежом моего собрата, но вся команда стала на сторону профессора и Риши. Конечно же, я согласился (для вида) и предложил помочь научить Амиго. Хе-хе! Тем более, что никто не может обучить робота лучше, чем другой робот.

Все так сильно обрадовались моей уступчивости, что тоже решили принять активное участие в обучении Java робота Амиго.

Ты начинаешь с первого уровня. Твоя задача – прокачать Амиго до 40 уровня. Но давай начнем с малого. Для начала дойди до второго уровня . Может быть тебе так понравится, что ты не заметишь, как пройдешь курс и пойдешь работать;)

А теперь давай перейдем к обучению с нуля - жми на кнопку «Открыть следующую лекцию…» .

  • Перевод

«Вы счастливчики. Мы по три месяца жили в мешках из дерюги в грязных сараях. Мы вставали в шесть утра, стирали мешки, съедали по корке чёрствого хлеба и шли работать на мельницу, по 14 часов в день, с понедельника и до воскресенья, и когда мы возвращались домой, наш папа порол нас своим ремнем»
- Летающий цирк Монти Пайтона, Четыре йоркширца

Ленивая молодёжь.

Что может быть хорошего в тяжёлой работе?

Верный признак моего старения - моё ворчание и жалобы о «современной молодёжи» и о том, как не хотят или не могут больше делать ничего сложного.

Когда я был молод, я учился программировать на перфокартах. Если вы случайно делали ошибку, у вас не было такой «современной возможности», как нажать клавишу backspace и ввести заново то, что нужно. Вам приходилось выкидывать карту и начинать ввод заново.

Когда я начинал проводить интервью с программистами в 1991 г., я обычно позволял им использовать любой язык программирования для решения моей задачи на кодирование. В 99% случаев они выбирали C.

В наши дни они обычно выбирают Java.

Не поймите меня неправильно: нет ничего неправильного в использовании Java в качестве рабочего языка.

Подождите минутку, я хочу немного изменить это утверждение. Я не утверждаю в этой отдельно взятой статье, что в использовании Java в качестве рабочего языка есть что-то неправильное. В этом много неправильного, но оно подождет до другой статьи.

Вместо этого я хочу сказать, что Java в целом недостаточно сложна, чтобы отделить отличных программистов от посредственных. Может быть, это отличный язык для работы, но сегодня речь не об этом. Я даже могу зайти так далеко, что скажу - факт того, что Java не сложен, это фича, а не баг, - но это ведёт к данной проблеме.

Это может звучать немного резковато, это просто моё скромное мнение, но есть две вещи, которым традиционно учат в университетах в курсе компьютерных наук (Computer Science, CS ) и которые многие люди никогда полностью по-настоящему так и не понимают: указатели и рекурсия.

В самом начале обучения в колледже вы проходите курс структур данных, со связанными списками, хеш-таблицами и прочими мелочами, с широким использованием указателей. Такие курсы довольно часто используются как курсы для отсева: они так сложны, что все, кто не обладает мыслительными способностями, необходимыми для CS, бросают, и это очень хорошо, потому что если вы думаете, что указатели сложны, то подождите пока вам не придётся доказывать факты теории неподвижной точки.

Все те юные гении, которые в старших классах школы писали на Бейсике пинг-понг для Apple II, поступают в колледжи, выбирают CompSci 101, курс по структурам данных, и когда сталкиваются с работой с указателями, их мозги просто взрываются, и они решают перевестись на политологию, потому что теперь правовая школа кажется им лучшим выбором. Я много раз видел графики отсеивания студентов с курсов CS, и обычно процент выбывших составляет от 40% до 70%. В университетах склонны считать это разбазариванием; я думаю, что это просто необходимая естественная отбраковка людей, которые просто не смогут быть счастливы или успешны в карьере программиста.

Другим сложным для многих студентов был курс, в котором изучалось функциональное программирование, в том числе рекурсивное программирование. В Массачусетском Технологическом Институте была очень высоко поставлена планка по этим курсам, разработан обязательный курс (6.001) и учебник (Абельсон и Сассман, Структуры и Интерпретация Компьютерных Программ (Abelson & Sussman"s Structure and Interpretation of Computer Programs) ) которые используются десятками или даже сотнями лучших школ CS как стандарт де факто для курсов введения в CS.

Сложность этих курсов просто ошеломляющая. На первой лекции вы целиком изучаете Scheme, и теперь вы можете быть посвящены в работу функций, работающих с неподвижной точкой, которые используют другие функции на входе. Когда я смог побороть такой курс, CSE121 в Университете Пенсильвании, я увидел, как много, если не большинство, студентов так и не смогли это сделать. Материал был слишком сложным. Я послал по электронной почте профессору длинное письмо, полное рыданий, говорящее о том, что Это Просто Нечестно. Кто-то в университете, должно быть, услышал меня (или одного из других жалобщиков), потому что теперь на этом курсе изучают Java.

Теперь я бы предпочёл, чтобы меня не услышали.
Думаете, что вы знаете, что это такое? Проверьте Себя Здесь!

Об этом и ведутся споры. Годы скуления ленивых студентов, подобных мне, в сочетании с жалобами индустрии программного обеспечения на то, как мало американские университеты выпускают специалистов по CS, сделали своё дело, и за последнее десятилетие множество безупречных в остальном школ на 100% перешли на Java. И это приветствовалось: рекрутёрам, которые используют «grep» для оценки резюме (прим.: grep - это программа в Unix, позволяющая выбирать строки, в которых есть нужное слово ), это, кажется, нравится, и, что лучше всего, в Java нет ничего достаточно сложного, чтобы реально отсеять программистов без той части мозга, которая отвечает за указатели или рекурсии, соответственно уровень отсеивания в университетах понижается, факультеты CS выпускают больше студентов, за это получают больше денег, и всем становится хорошо.

Счастливые ученики Java-школ никогда не столкнутся с ужасными segfault (прим.: Segmentation Fault - типичная ошибка при обращении по некорректному адресу ) при попытках реализовать основанные на указателях хеш-таблицы. Они никогда не будут делать безумных, сумасшедших попыток упаковать что-то в биты. Они никогда не будут загружать свои головы мыслями о том, как в полностью функциональных программах значение переменной никогда не изменяется, и все-таки оно постоянно изменяется! Парадокс!

Им не нужна эта часть мозгов, чтобы получить красный диплом.

Неужели я всего лишь один из тех старомодных ворчунов, вроде Четырёх Йоркширцев, которые хвастаются тем, как тяжело было жить в суровые старые времена?

Эй, в 1900 г. латынь и греческий были обязательными предметами в колледже, не потому, что они были как-то необходимы в жизни, но потому, что их знание было одним из обязательных признаков образованного человека. В некотором смысле мои аргументы не отличаются от тех аргументов, которые приводили сторонники латыни (все четыре). «[Латынь] тренирует ваш ум. Тренирует вашу память. Распутывание предложений на латыни - это отличное упражнение для ума, настоящая интеллектуальная головоломка, и хорошее введение в логическое мышление», писал Скотт Баркер (Scott Barker). Но я не смог найти ни одного университета, который до сих пор преподаёт латынь в обязательном порядке. Неужели указатели и рекурсия - это латынь и греческий компьютерных наук?

Итак, я легко соглашусь с тем, что программирование указателями сегодня не является необходимым в 90% разработки кода, и даже представляет опасность в промышленном коде. Да. Прекрасно. И функциональное программирование не так уж часто используется на практике. Согласен.

Но это все ещё важно для некоторых из самых восхитительных программных разработок. Например, без указателей вы никогда не сможете работать над ядром Linux. Вы не сможете понять ни строки кода Linux или любой операционной системы без реального понимания указателей.

Без понимания функционального программирования вы не сможете придумать MapReduce - алгоритма, который делает Google столь хорошо масштабируемым. Термины Map и Reduce пришли из Lisp и функционального программирования. MapReduce понятен любому, кто помнит из своего курса, эквивалентного 6.001, что истинно функциональные программы не имеют побочных эффектов и поэтому легко распараллеливаемы. Очень показателен тот факт, что в Google изобрели MapReduce, а в Microsoft нет, и это говорит кое-что о том, почему Microsoft до сих пор играет в догонялки, пытаясь заставить работать основные функции поисковой машины, в то время как в Google перешли к следующей проблеме: построению Skynet величайшего в мире параллельного суперкомпьютера. Я не думаю, что Microsoft действительно понимает, насколько они отстали на этом пути.

Но даже вдали от задач, где важность указателей и рекурсии очевидна, их реальная значимость в том, что создание больших систем требует той гибкости мозга, которую вы получаете при их изучении, и тех способностей мозга, которые были вам необходимы для того, чтобы не вылететь с курса во время обучения. Указатели и рекурсия требуют от человека определённых способностей: рассуждать, абстрактно мыслить, и, что особенно важно, видеть проблему на нескольких уровнях абстракции одновременно. Поэтому способность понимать указатели и рекурсию напрямую связана со способностью быть великим программистом.

Ничто в образовании, построенном полностью на Java, не отсеивает студентов из-за недостаточной гибкости их мозгов для понимания этих концепций. Как работодатель, я вижу, что 100%-Java школы начали штамповать выпускников курсов CS, некоторые из которых просто недостаточно умны для того, чтобы работать программистами с чем-то более замысловатым, чем Ещё Одно Бухгалтерское Приложение На Java, хотя они и управились со скрипом с «современной-упрощённой-для-тупиц» курсовой работой. Эти студенты никогда не справились бы с курсом 6.001 в Массачусетском Технологическом, или с CS 323 в Йеле, и, честно говоря, это и есть причина, почему, с точки зрения работодателя, диплом Массачусетского Технологического или Йеля имеет больший вес, чем диплом Дюка, который недавно стал Полностью-На-Java, или Penn University, который заменил Scheme и ML на Java, пытаясь преподавать на ней курс, который когда-то почти убил меня и моих друзей, CSE121. Дело не в том, что я не хочу нанимать умных ребят из Duke или Penn - я нанимаю их - просто мне гораздо сложнее понять, кто они. Раньше я мог сказать, что парень действительно умён, если он за несколько секунд может разобраться в рекурсивном алгоритме, или реализует функции, манипулирующие связными списками на основе указателей, с такой скоростью, с которой он может писать на листе бумаги. Но в случае выпускников школ Java я не могу сказать, имеет ли претендент проблемы с этими задачами, потому что у него просто не хватает соответствующего образования, или потому, что у него нет соответствующей части мозгов, необходимой для отличной работы в качестве программиста. Пол Грэхэм называет их Горе-Программистами.

Достаточно плохо уже то, что Школы-на-Java не отсеивают тех, кто никогда не сможет стать великими программистами, но на это школы вполне обоснованно могут сказать, что это не их проблема. Индустрия, или, по крайней мере, «рекрутёры-использующие-grep», действительно требуют, чтобы школы преподавали Java.

Но «школы-только-на-Java» также перестали тренировать мозги студентов для того, чтобы они стали знающими, проворными, и гибкими достаточно, чтобы могли хорошо проектировать программы (и я не имею в виду объектно-ориентированное «проектирование», когда вы тратите несчётное количество часов, переписывая собственный код при перестройке вашей объектной иерархии, или мучаетесь такими фальшивыми «проблемами», как выбор «содержит» или «является» (прим.: has-a vs. is-a, выбор между наследованием и композицией классов )). Необходимы тренировки, чтобы научиться думать на нескольких уровнях абстракции одновременно, что является абсолютно необходимым для проектирования отличной архитектуры программного обеспечения.

Вам может быть интересно, может ли обучение объектно-ориентированному программированию (ООП) быть хорошим заменителем указателей и рекурсии как вычищающих курсов. Короткий ответ - нет. Не обсуждая достоинства ООП, можно просто сказать, что оно недостаточно сложно для отсеивания посредственных программистов. Преподавание ООП состоит в основном в запоминании нескольких словарных терминов, таких как «инкапсуляция» и «наследование» и заучивании ответов на множество вопросов о разнице между полиморфизмом и перегрузкой операций. Не сложнее заучивания знаменательных дат и имён на уроках истории, ООП ставит неадекватно простую задачу для того, чтобы отпугнуть первокурсников. Когда у вас проблемы с ООП, ваша программа все-таки работает, она просто становится сложной для поддержки. Якобы. Но когда у вас проблемы с указателями, ваша программа выдаёт Segmentation Fault, и вы понятия не имеете, что происходит, до тех пор пока вы не остановитесь, не сделаете глубокий вдох и не попытаетесь на самом деле заставить свой ум работать на двух уровнях абстракции одновременно.

Рекрутёры-использующие-grep, кстати, высмеиваются здесь, и для этого есть веские доводы. Я никогда не был знаком с человеком, который бы понимал Scheme, Haskell и указатели С, и не мог бы освоить Java за пару дней, и после этого писать код на Java лучше, чем люди, имеющие пятилетний опыт работы с Java, но попробуйте объяснить это среднему HR-биороботу.

А что насчёт миссии CS-факультетов? Это не ПТУ! Их работа не состоит в том, чтобы подготовить людей к работе в промышленности. Это только для общинных колледжей, скажут вам, (прим.: в США двухгодичный колледж, готовящий специалистов средней квалификации для работы на территории местного сообщества ) и государственных программ переобучения для уволенных рабочих. Предполагается, что они дают студентам фундаментальные инструменты для того, чтобы те жили своей жизни, а не готовят их к первым дням работы. Правильно?

Всё же. CS это доказательства (рекурсия), алгоритмы (рекурсия), языки (лямбда-исчисление), операционные системы (указатели), компиляторы (лямбда-исчисление) - и в результате получаем, что школы-на-Java, которые не учат С и не учат Scheme, в действительности не учат компьютерной науке. Насколько бесполезно в реальном мире понимание концепции каррирования (прим.: в функциональном программировании порождения из одной функции другой функции с меньшим числом аргументов; например из f(x,y) = x*y получение функции f3(x) = f(x,3) = 3*x) , настолько же это необходимая предпосылка для высшего образования в области CS. Я не понимаю, почему профессора в комитетах, утверждающих программы обучения в колледжах, позволяют их программам тупеть до такой степени, что они не только не могут готовить программистов, готовых к работе, они даже не могут подготовить выпускников, которые могли бы получить степень PhD (прим.: аналог кандидата наук ) и соперничать с ними за рабочие места. Хотя нет, подождите. Забудьте. Может быть я всё-таки понимаю.

Действительно, если вы вернётесь и изучите дискуссии, которые имели место в академических кругах во время Великого Перехода На Java, вы заметите, какой большой интерес вызывал вопрос, явяется ли Java достаточно простым для использования его в качестве учебного языка.

«Боже мой», - подумал я, - «они пытались отупить курс ещё сильнее!» Почему бы не кормить всех студентов с ложечки? Почему бы преподавателям самим не делать и тесты за них - тогда точно никто не будет переходить на гуманитарные специальности! Как предполагается научить кого-то чему-то, если курс обучения заботливо сконструирован так, чтобы стать ещё проще, чем он есть сейчас? Кажется, ставится задача приложить усилия (PDF) по разработке простого подмножества Java, предназначенного для изучения студентами, выпуск упрощённой документации, которая заботливо прячет весь этот EJB/J2EE-мусор от их нежных мозгов так, чтобы они не беспокоили свои крохотные головки какими-то другими классами кроме тех, которые необходимы для того, чтобы решать стандартный простейший набор заданий по курсу.

Наиболее сочувственное объяснение, почему факультеты CS с таким энтузиазмом отупляют свои курсы, это то, что у них будет значительно больше времени для обучения актуальным концепциям CS, если только они не будут вынуждены тратить две лекции на то, чтобы объяснить разницу между, скажем, int и Integer в Java. Хорошо, если дело только в этом, 6.001 будет для вас отличным ответом: учебный язык Scheme так прост, что весь язык может быть рассказан смышлёным студентам примерно за десять минут; после этого вы можете потратить остаток семестра на неподвижные точки.

Я возвращаюсь обратно к единицам и нулям.

(У вас есть единицы? Везучий ублюдок! Всё, что было у нас - это нули.)

Конец
Переводчик: Илья Болодурин

Cтатья давнишняя, но «зацепило».

Upd
В комментариях многие просили озвучить собственное мнение, а не тупой копипаст статьи.

Общие сведения о программировании

Программирование- это процесс создания кода на каком-либо языке программирования, переводимого в файлы разных типов с помощью особой программы - транслятора.

8 крутых Youtube-каналов, которые помогут изучить Java

Существуют два типа трансляторов: компиляторы и интерпретаторы. Компилятор- это программа, переводящая текст, написанный на языке программирования, в какой-либо файл. Интерпретатор - это программа, способная переводить текст какой-либо программы в машинный код и одновременно выполнять ее.

Программирование на Java (он является компилирующим языком) имеет то преимущество, что код, написанный на данном языке программирования, переводится с помощью соответствующей программы-транслятора в так называемый байт-код, а он, в свою очередь, - в машинный код с помощью виртуальной машины Java (Java Virtual Machine, или просто JVM). Поэтому написанная на Java программа выполняема на любом компьютере с любой системой, лишь бы на нем была установлена виртуальная машина Java. Таким образом и обеспечивается одно из главных преимуществ языка Java - переносимость создаваемых на нем программ на компьютеры разных типов.

Программирование бывает двух типов: системное и прикладное .
Системное программирование позволяет нам программировать в системе, например в Windows, с целью решения глобальных задач.
Прикладное программирование направлено на создание прикладных программ, т.е. программ, выполняющих какую-то определенную функцию, например Microsoft Word, WordPad, Calculator и т.д. В этой книге мы будем заниматься прикладным программированием.

Основы программирования

Введение. Что такое JDK?

Введение. Что такое JRE?

Введение. Как установить JDK?

Введение. Как использовать JDK?

1. Типы программирования. Первые листинги.

2. Переменные и идентификаторы

3. Переменные и константы в Java

4. Литералы в Java

Все курсы программирования

5. Изучаем типы данных

6. Преобразовываем типы данных

7. Какие бывают операторы в языке Java

8. Массивы в Java

9. Управляющие структуры. Общие сведения о циклах

10. Конструкции выбора в языке Java

11. Инструкции выхода в Java

12. ООП, создание объектов

13. Конструкторы и блоки инициализации

14. Методы в Java

15. Наследование в Java

16. Интерфейсы

17. Вложенные классы и вопросы

18. Исключения в Java

19. Документирование кода

20. Полезные методы и контрольные вопросы

21. Пакеты в Java

22. Пакет java.lang

23. Пакет Java.util и вопросы

Поступить на факультет «Java-разработки»

24. Знакомимся с JBuilder

25. Настраиваем параметры программы

26. Создаем сами аплет на Java

27. Работа с палитрой компонентов в JBuilder 2005

28. Класс JButton из пакета javax. swing

29. Создание меню с помощью пакета java

30. Компоненты для работы с текстом в Java

31. Ползунок JSIider и индикатор в Java

32. Списки в Java

33. Работаем в в JBuilder 2005: компонент JScrollPane

34. Компонент JSplitPane и JTabbedPane

35. Формы и диалоговые окна в Java

36. Компоновки в Java и создание сервлетов

37. Мастера в JBuilder, а также вопросы к теме

38. Немного об HTML

39. Основы языка программирования JavaScript 1.5

40. Синтаксис языка JavaScript 1.5

41. Цикл for…in и функции в JavaScript

42. Работа с объектами в JavaScript

43. Встроенные объекты JavaScript

44. Подобъекты объекта document

45. Математический объект Math

46. Рисунки в HTML

47. Таблицы в HTML

48.Слои в HTML

49. Таблицы стилей CSS

Полезные сайты для java-программиста

Как научиться программировать на Java - полное руководство

Доброго времени суток всем!

В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.

Задача:

Я планирую создать игру, напоминающую шутер с видом от 3 лица.

Начало:

Ну что, приступим!

Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:

Теперь разберемся, что мы сделали.

мы создаем рамку, которая и будет отображаться при запуске нашей игры

устанавливаем операцию, которая будет происходить при нажатии на крестик. EXIT_ON_CLOSE - выйти из программы

устанавливаем нашей рамке максимальные размеры, убираем декорации(кнопки свернуть, закрыть, уменьшить/увеличить и т.п.), т.е. делаем игру на весь экран. Если вы хотите, чтобы игра не была бы на весь экран, то используйте:

Делаем рамку видимой

Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой

Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.

Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.

Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)

Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:

Вы спросите - «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.

Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:

Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:

Даааааа, не густо…

Давайте отрисуем какую-нибудь картинку. Например эту:

Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:

(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)

После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:

Разберемся поближе с методом drawImage, так как мы будем часто его затрагивать.

drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);

Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.

Теперь запускаем программу, и видим:

Чего-то она маленькая, не правда ли? Давайте научимся увеличивать её размеры. Добавляем к drawImage() параметры так, чтобы вышло:

Получается:

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод paint вызывается только один раз. И как же его обновлять постоянно? Для этого существует очень полезная вещь - таймер. Давайте создадим его.

Для этого пишем:

(20 это частота с которой обновляется таймер, this- где выполнять метод при обновлении таймера
Это мы должны вписать сразу после строки определения класса, т.е. после:

Также, надо дополнить строку определения класса таким образом:

После прописывания этой строки, у вас название класса должно подчеркнуться красным. Чтобы это исправить, в самом конце класса добавьте метод:

Этот метод будет выполняться при обновлении таймера. В него мы должны написать repaint(); чтобы при каждом обновлении таймера у нас все элементы бы стирались, и нарисовывались заново.

Изучаем Java

Для этого, создаем конструктор класса Main и в него пишем:

После этого, можете не запускать программу, ведь в ней ничего не изменится. Давайте заменим текстуру домика на нормальную текстуру карты. Её вы можете нарисовать сами, либо скопировать у меня пробную:

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка в конструктор такие вещи:

И перед конструктором добавим:

И сходим еще в класс Display.java и там немного изменяем метод frame.add:

Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:

Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:

На сегодня все. Оставляю код, для тех, кто запутался:

Display.java

Main.java

Как создать java-игру?

Для написания игр существует достаточное количество языков программирования. Уровень сложности их разный. Специалисты считают, что для написания мобильных приложений больше всего подходит язык Java. В освоении он достаточно прост. Поэтому для того, чтобы научиться делать игры для мобильных телефонов, нужно просто набраться терпения и приложить немного усилий. А в этой статье мы подскажем, как написать игру на Java.

Создание игр для мобильного телефона

  1. Для начала необходимо установить необходимые компоненты:
  2. Набор эмуляторов, при помощи которых будет проводиться тестирование написанных модулей. Это J2ME Wireless Toolkit.
  3. Компилятор, который используется для создания архивов. Это J2SE.
  4. Текстовый редактор.
  5. Далее нужно запустить приложение WTK Toolbar
  6. Создать новый проект, воспользовавшись меню «Файл», «Новый проект».
  7. Заполнить поля: наименование проекта и класс. Нажать Ok. Новый проект будет находиться в программе WTK в папке apps. Папки каталога будут содержать следующее:
  8. папка bin – исполняемые файлы;
  9. папка res – ресурсы;
  10. папка lib – библиотеки;
  11. папка src – исходные файлы.
  12. Необходимо тщательно продумать сюжетную линию и графику.
  13. В соответствии с выбранной тематикой написать программу для java-игры.
  14. Обязательно ее протестировать, сначала с помощью эмулятора, а потом запустить на телефоне.
  15. Для этого нужно откомпеллировать проект через редактор WTK пункт Build.

    Материалы для изучения Java

    Нажать кнопку Run

  16. Если проблем с запуском нет, для загрузки на телефон нужно запаковать приложение в 2 архива (.jad и.jar).
  17. Для этого выбрать пункт Project. Далее Package. Архивы, которые появились в папке bin нужно загрузить на телефон.

Основные трудности

Для того чтобы понять, как сделать java-игру, нужно знать с какими трудностями приходится сталкиваться каждому начинающему программисту java-игр. Это:

  • Возможности аппаратных ресурсов.
  • Удовлетворенность пользователей.
  • Отладка игры.

Аппаратные ресурсы. Процессоры мобильных устройств, как правило, маломощны в сравнении с находящимися в десктопах или PDA. Плюс к этому, довольно часто в мобильных устройствах нет графических ускорителей. В связи с этим, необходимо проанализировать, на что программа тратит времени больше всего. Но полностью отдаваться попытке предупредить различные задержки в игре не следует.

При написании программ, для которых основной причиной головной боли является производительность, существует проверенный подход: сначала необходимо сделать так, чтобы работало, после этого так, чтобы правильно работало, а уже после этого, нужно сделать так, чтобы работало быстро.

Удовлетворенность пользователей. При создании java-игр для мобильных устройств, есть факторы, которые способны повлиять негативно на мнение об игре:

  • Во-первых, из-за того, что экран маленький, на нем не просто уместить все, как было задумано;
  • Маленькие клавиши не очень удобны в использовании, иногда это мешает игроку добиться высоких результатов в игре;
  • Очень ограниченные звуковые возможности.

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

Отладка. Это самый трудоемкий процесс. Для этого удобнее всего использовать эмулятор, например, WTK. Еще один неплохой способ отладки – демонстрационный режим игры. В идеале, в демонстрационном режиме должна быть задействована вся функциональность игры. Теперь, если у вас возникнет желание сделать игру для мобильного телефона, вы знаете, как создать java-игру

Внимание, только СЕГОДНЯ!

Наверняка многие из вас, кто задумывается о выборе языка программирования для изучения, много раз слышали тезис, что Java программисты получают более высокую зарплату, чем другие программисты, потому что конкуренции практически нет.

Так это или нет, я постараюсь подтвердить или опровергнуть в этой статье. Начну с того, что меня всегда смущают простые ответы на сложные вопросы. Для принятия столь важного решения, а стоит ли изучать язык программирования Java , зададим себе несколько логичных вопросов, ответим на них и на основании этого анализа сделаем выводы.

Какова цель изучать язык программирования Java?

Зачем нужна цель? Цель – это главный мотиватор, вы должны видеть, к чему нужно стремиться. А если цель определена неверно, то и двигаетесь вы в неправильном направлении и не достигнете того результата, на который рассчитывали.

Конечная цель изучать язык Java – это получить работу.

Вы изучаете программирование для того, чтобы потом обменивать свои знания на деньги, другой цели быть не может. Если вы решили начать обучение ради написания одного единственного приложения, то забудьте об этом, потому что только пройдя все уровни обычного разработчика, вы можете воплощать свои идеи, которые будут потом продаваться и быть востребованными другими людьми.

Цель есть, теперь переходим к средствам её осуществления. Крайне не желательно кидаться от одного источника обучения к другому, будь то Youtube каналы или авторские блоги, практикующие Java обучение .

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

А в худшем случае, вы найдете уроки написанные "незнайками" или монотонно зачитанные тексты, зарабатывающими на рекламе "горе видео-блогерами". Вы ходите по кругу, теряете время, а после потерянного времени, пропадает и интерес. Уверяю вас, что именно по этой причине из всех начинающих обучаться программированию по материалам, найденными в интернете, до финиша доходит лишь 5%.

Почему не доходят до финиша 95% начинающих?

Используют не структурированный материал

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

Нерегулярный процесс обучения

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

Ошибки начинающих

Зацикленность на теории

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

Перфекционизм

Часто начинающие ученики занимаются перфекционизмом. В чем заключается эта проблем? Получив задание, ученик пытается выполнить его сразу идеально. Это априори невозможно, у новичка нет такого опыта. При решении задач, мы ставим цель, чтобы наш код работал. На втором этапе уже оптимизируем код.

Почему вредно, когда ученик хочет решить задачу сразу оптимально? Он смотрит на задачу и не знает, как ее решить идеально и в результате тратит много времени. В итоге он ничего не делает, а задача так и остается нерешенной.

Выводы

Не надо далеко ходить в поисках ответов. На любой фриланс бирже, вы не увидите десятки ответов от соискателей, в созданных проектах с заданиями для Java программистов , по сравнению с количеством ответов на задания для PHP программистов. Конкуренция явно меньше, а значит и заработок Java программиста выше.

И это неудивительно, Java более сложный язык программирования и начинать учить его желательно сразу с премиум видео-курсов. Если вы совсем новичок, тогда смело выбирайте мой новый видео-курс .

В этой статье я постараюсь максимально просто и понятно изложить основы программирования на языке Delphi

Java для чайников. Урок 1. Программа Hello World!

Для начала я расскажу, что может Java. Во первых, на этом языке можно написать апплеты - программки, внедряемые в web- страницу сайта. Например, это может быть игра, система бизнес графики и многое другое. Во вторых, на Java можно писать и полноценные приложения, не обязательно связанные с Web. А можно и сервлеты - программы, которые в отличии от апплетов, выполняются не на стороне клиента, а на стороне сервера.

Начнем с самых самых основ. Отдадим дань традиции и напишем простейшую программу, которая выводит на экран приветствие Hello World. Если у вас нет Java, то ее можно скачать с официального сайта http://www.java.com/ru. Затем установите его.

Если Java у вас установлен, то наберите в каком нибудь редакторе вот такой текст:

Public class HellowWorld {

Public static void main ( String args ) {

System . out . print ( "Hellow , world!" );

}

}

И обязательно сохраните его под именем HellowWorld. java - имя исполняемого класса должно совпадать с именем файла. Для компиляции используйте программу javac.exe, входящую в стандартный пакет Java. Вот как может выглядеть батник компиляции этого java файла:

"c:\Program Files\Java\jdk1.7.0\bin\javac" HellowWorld.java

pause

Если при компиляции никаких ошибок не выскочило:

то, скорее всего, компиляция прошла успешно и у вас в том же каталоге, где лежал HellowWorld. java появился еще и HellowWorld .class:

Теперь запустим другой батник, который вызовет интерпретатор Java вместе с нашим скомпилированным файлом:

"c:\Program Files\Java\jdk1.7.0\bin\java" HellowWorld

pause

Если все сделано правильно, то у вас должен получиться вот такой результат:

Если вы его получили, то могу вас поздравить - вы написали свою первую программу на Java. В дальнейшем мы научимся писать Java- апплеты, и много другое. А сейчас несколько слов о самой программе. Как вы заметили, она начинается со слова public. Это модификатор, который обозначает, что мы объявляем что ли общедоступное: класс, метод класса или переменную. Бывают и другие модификаторы, например: private, protected, friendly, final, abstract, static. Некоторые из них можно комбинировать между собой. Например, private обозначает, что к переменная, которую мы хотим объявить, закрыта для других классов. Но до модификатор мы еще доберемся. А сейчас рассмотрим следующее ключевое слово class. Оно обозначает, что мы объявляем класс. В java все строиться на классах. Один из классов обязательно является базовым. И базовый класс обязательно должен быть public. В данном примере это класса HelloWord. Пока он у нас единственный.

Теперь попытаюсь объяснить простыми словами, что же такое класс и что такое объект .

Вспомним школьный курс зоологии. Как классифицируется живой мир? Сначала вводиться понятие «царство».

1. Царство одноклеточных,

2. Царство растения

3. Царство животные.

Возьмем животных. Их можно разделить по типам. Например:

1. Тип кишечнополостные.

2. Тип плоские черви.

3. Тип моллюски.

4. Тип хордовые.

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

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

Стоп стоп! – скажете Вы, - а зачем классифицировать эти объекты?

Представить себе, что Вы, подобно некому демиургу (творцу, богу), создаете жизнь на Земле. Сперва Вы разработали простейшие органические соединения. Так, ради эксперимента, что же получиться. Затем объединили их в сложные молекулы, из которых, как из кирпичиков, собрали простейшие микроорганизмы. Но Ваша конечная цель – создание разумной жизни. Поэтому вы не остановились на достигнутом, А сотворили многоклеточные организмы. Затем стали улучшать их, развивать. Некоторые виды оказались жизнеспособные, некоторые вымерли (динозавры). И вот наконец цель достигнута – появился Homo Sapiens – человек разумный.

А теперь опустимся с небес на землю и представим программирование как творение, где вы свою программу заставляете эволюционировать до какого то определенного состояние, когда ее можно использовать, а затем и дальше, постепенно наращивая и улучшая функционал.

А теперь представим, что атом – это простейшая команда программы или единица информации (что друг от друга, согласитесь, не отделимы, ибо программа работает с чем – правильно, с информацией).

Тогда молекула – это подпрограмма. Или объект.

Вот мы создали в своей программе кучу объектов. Надо же их как то классифицировать, что бы не запутаться. Вот для этого в Java и предусмотрены классы (class ). С помощью них мы описываем класс объектов (общее понятие, например птицы), а потом, имея описанный класс можем создать объект – экземпляр этого класса. То есть, класс – это само слово Птицы, а объект – это какая то конкретная птица, если продолжать нашу аналогию.

Далее, птицы бывают разных видов. Но все они имеют какие общие признаки, унаследованные от понятия «Птицы». Так и в Java , от класса можно создать другой класс, который наследует его свойства и методы (признаки). Это называется наследование.

У разных птиц разный окрас перьев, форма клюва и крыльев. Так и у классов, при создании нового класса, унаследованные признаки можно менять. Это называется полиморфизм .

Так, с основными понятиями Java разобрались. Теперь пройдемся по программе.

Вот таким вот образом мы объявляем класс:

public class HellowWorld {

В данном случае в нашей программе класс единственный, и это базовый класс, тоесть, класс, ответственный за запуск программы. Именно поэтому его имя должно совпадать с именем файла, что бы интерпретатор "знал", с чего же начать выполнение программы.

Базовый класс (HelloWorld )имеет базовый метод: main. Он у нас объявлен как public и static. Первый обозначает, что этот метод общедоступный. Если бы это было не так, то программа у нас просто не запустилась бы. Бывают еще и методы не общедоступные, но они мы поговорим в следующих уроках, пока просто запомните, что базовый метод (который у нас запускается при старте программы) должен быть public. И его имя должно быть main, что бы интерпретатор знал, с чего начать выполнения программы.

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

Каждый метод может иметь или не иметь возвращаемого значения. Если имеет, то это функция. Тип возвращаемого значения так же ставиться в объявлении метода. Если нет то ставиться void (как в нашем примере).

Обращение к полям и методам объекта идет через точку. Есть так же встроенные объекты, например, System, который мы и используем в нашем примере:

System . out . print ( "Hellow, world!" );

в данном случае мы обращаемся к полю out, которое тоже является объектом, предназначенным для вывода данных и вызываем его метод print, который выводить тектс на экран (как в старом добром Бэйсике команда PRINT).

(С) Шуравин Александр