JavaRush /Blog Java /Random-VI /Lúc đầu có JavaRush
Марат Каджаев
Mức độ
Санкт-Петербург

Lúc đầu có JavaRush

Xuất bản trong nhóm
Thời gian thử việc đầu tiên của tôi đã kết thúc cách đây 3 năm nhưng bây giờ tôi mới có thời gian để viết bài. Ở trường đại học, tôi học 1 năm ở các khoa khác nhau: học kỳ đầu tiên tôi học để trở thành quản lý, học kỳ thứ hai tôi chuyển sang ngành công nghệ phần mềm. Tôi hy vọng rằng họ sẽ dạy tôi cách lập trình, nhưng tôi đã nhầm lẫn nên tôi lấy tài liệu và quyết định tự học mọi thứ. Điều duy nhất tôi biết ơn giáo viên là ông đã khuyên tôi nên bắt đầu với cuốn sách “Ngôn ngữ lập trình C” của Stephen Prat. Sách rất hay và có nhiều bài toán thực tế. Cuốn sách kéo dài khoảng 2 tháng, sau đó tôi tình cờ gặp JR trong nhóm bạn và chúng tôi đi. Lúc đầu, tôi dự định trở thành nhà phát triển Android, nhưng trong quá trình học, phần phụ trợ có vẻ thú vị hơn đối với tôi. Nhân tiện, quá trình đào tạo kéo dài 3 tháng, trong thời gian đó tôi đã đạt đến cấp độ 20, sau đó tôi quyết định cố gắng tìm việc làm. Trước hết, tôi chuyển đến một thành phố khác, bởi vì... Không có vị trí tuyển dụng nào dành cho nhà phát triển Java cấp dưới. Tôi tìm thấy một công ty, trả lời, nhận một nhiệm vụ thử nghiệm, có thời hạn một tuần để hoàn thành. Cần phải viết một ứng dụng web đơn giản bằng Hibernate, Servlet\JSP và MySQL. Trong tất cả những từ này, tôi chỉ biết rằng MySQL là một cơ sở dữ liệu. Lúc đầu, tôi rất khó chịu, thậm chí tôi còn quyết định tìm kiếm vị trí tuyển dụng tại một số KFC, nhưng sau đó cuối cùng tôi quyết định cố gắng đáp ứng các yêu cầu kỹ thuật - tôi sẽ luôn có thời gian để kiếm được một công việc tại KFC. Tôi đã làm bài kiểm tra không ngừng nghỉ cả tuần và đã thành công. Mình gửi lời giải nhưng thấy “xấu” nên làm lại 4 lần. Quyết định cuối cùng hóa ra là đúng, nhưng hóa ra các nhà phát triển đã được tuyển dụng và đợt tuyển dụng tiếp theo sẽ diễn ra sau 3 tháng nữa. Chết tiệt, được rồi. Trong 3 tháng tiếp theo, tôi đã học html, css, js, sql và php. PHP đang làm gì ở đây? Tôi cần một ngôn ngữ phía máy chủ có thể đáp ứng các yêu cầu và tất cả những thứ đó - servlet và jsp dường như quá phức tạp đối với tôi vào thời điểm đó. Kết quả là một ứng dụng web hoàn chỉnh với giao diện khủng khiếp, mã mà tôi đã đăng trên github cho danh mục đầu tư của mình. Lúc này, 3 tháng đã trôi qua và họ từ cùng một công ty đã viết thư cho tôi và gọi tôi đến phỏng vấn và giao cho tôi một bài kiểm tra đơn giản khác về kiến ​​thức về SQL, tôi đã hoàn thành bài tập này trong vài giờ. Người mà tôi đã nói chuyện về công việc bóng gió rằng họ sẽ hỏi về thuật toán và cấu trúc dữ liệu - Tôi vẫn chưa nắm vững chủ đề này, nhưng còn 15 ngày trước cuộc phỏng vấn, chết tiệt chúng tôi là những tay đua. Cuốn sách "Cấu trúc dữ liệu và thuật toán trong Java" của Robert Laforet đã giúp tôi. Tôi không có thời gian để đọc và hiểu hết trong hai tuần, nhưng tôi vẫn học được rất nhiều điều mới. Và rồi ngày phỏng vấn cũng đến, tôi đến đúng giờ hẹn, 2 người đàn ông gặp tôi và cuộc phỏng vấn bắt đầu. Nói rằng tôi lo lắng là còn nhẹ, giọng tôi thậm chí còn run rẩy. Họ hỏi về mọi thứ ngoại trừ thuật toán và cấu trúc dữ liệu. Họ hỏi về Spring, DI, IoC, Hibernate, cách JVM hoạt động, cách GC hoạt động - tôi không trả lời bất kỳ câu hỏi nào trong số này. Tôi chỉ giải quyết các câu hỏi về Java Core (các bộ sưu tập, ngoại lệ, OOP, v.v.). Đến buổi phỏng vấn tôi mới nhận ra mình đã trượt nhưng vẫn thất vọng khi không nhận được phản hồi nào. Nhưng tôi đã xác định được những lỗ hổng kiến ​​​​thức và bắt đầu siêng năng lấp đầy chúng. Tôi tìm được việc làm một tháng sau cuộc phỏng vấn thất bại. Nhân tiện, tôi đã tìm thấy vị trí tuyển dụng trong các cuộc thảo luận về JavaRush. Đầu tiên là cuộc phỏng vấn qua Skype với nhà tuyển dụng (kéo dài khoảng 2 giờ). Họ hỏi về Java Core, GC (bây giờ tôi đã biết nó hoạt động như thế nào), cơ sở dữ liệu, cấu trúc dữ liệu. Sau đó người phỏng vấn yêu cầu tôi chia sẻ màn hình và viết máy tính. Tôi gần như hét lên vì hạnh phúc vì tôi đã viết máy tính theo đúng nghĩa đen một tuần trước đó. Tự tin vào bản thân, tôi bắt đầu thực hiện nhiệm vụ, nhưng vì quá phấn khích hoặc vì lý do nào khác mà tôi đã quên một phần thuật toán. Màn hình bị chia sẻ - vào Google thật đáng sợ. May mắn thay, tôi đã có một chiếc điện thoại di động cứu mạng tôi. Ngày hôm sau, họ gọi cho tôi để phỏng vấn trực tiếp và vài ngày sau tôi nhận được lời đề nghị.
Lúc đầu có JavaRush - 1
Công việc không chính thức, tôi vào vai người học việc cho một doanh nhân cá nhân. Chúng tôi đã viết một dịch vụ để tạo sự kiện, bán vé và tất cả những thứ đó. Tôi nhớ ngày đầu tiên đi làm - cá nhân doanh nhân đã dành 15 phút để giải thích những việc cần làm. - Thế mọi chuyện đã rõ ràng chưa? - IP hỏi - Mmm, không hẳn, chúng ta có thể làm lại lần nữa được không? – Tôi hỏi với vẻ lo lắng tột độ. IP đã giải thích lại mọi thứ. - Giờ thì rõ rồi à? - Bây giờ thì có. Thực sự là tôi không hiểu BẤT CỨ ĐIỀU GÌ. Nhưng tôi lại ngại yêu cầu giải thích - tôi nghĩ ai đã đi làm đều sẽ hiểu tôi. Bản chất của nhiệm vụ là viết lại từ thymeleaf sang AngularJS. May mắn thay, tôi đã tìm thấy một phần mã được tạo sẵn và làm theo ví dụ và làm tương tự. Lúc đó tôi không hiểu nó hoạt động như thế nào, nhưng tôi đã hoàn thành được nhiệm vụ. Sau đó đến các nhiệm vụ liên quan trực tiếp đến phần phụ trợ. Chỉ sau khi trải nghiệm thực tế với Spring, tôi mới bắt đầu hiểu những gì được viết trong cuốn sách “Mùa xuân dành cho chuyên gia”. Tôi làm việc ở đó được 8 tháng, sau đó tôi chuyển đến một thành phố khác, nơi tôi nhanh chóng tìm được một công việc chính thức, làm việc được 2 năm, đồng thời đổi chức danh công việc của mình từ “Trung cấp” thành “Trung cấp”. Bây giờ tôi phải đối mặt với thực tế là công việc đã trở thành thói quen và không mang lại chút niềm vui nào. Vì vậy, vào lúc tôi đang tạm nghỉ, và để tránh ngón tay bị teo trong thời gian nghỉ, tôi quyết định thử sức với một lĩnh vực khác - phát triển trò chơi. Cụ thể là phát triển trò chơi di động, dành cho người mới bắt đầu, Android, bởi vì... Tôi biết Java. Bây giờ tôi sẽ kể chi tiết cho bạn về điều này. Về chúng tôi Trong một thời gian ngắn, một nhóm nhỏ gồm 4 người (trong đó có tôi) đã tập hợp lại: 2 nhà phát triển, 1 nhà thiết kế game, 1 kỹ sư âm thanh. Bởi vì Không ai trong nhóm có kinh nghiệm trong lĩnh vực phát triển trò chơi và thời gian nghỉ của tôi có hạn, chúng tôi quyết định thực hiện một dự án đơn giản mà chúng tôi chắc chắn sẽ làm đến cùng. Họ đã làm nó! Ban đầu, thời hạn là ngày 15 tháng 11, nhưng như bạn đã biết, việc hoàn thành dự án đúng thời hạn ban đầu là một tội lỗi. Vì vậy, chúng tôi đã hoàn thành nó hai tuần sau đó. Theo những Ngăn xếp là: Java 8 và libGDX.

Về sự phát triển

Việc bắt đầu phát triển có thể được coi là vào ngày 17 tháng 10. Tổng cộng chúng tôi đã dành 45 ngày, trong đó:
  1. đã học cách làm việc với libGDX;
  2. đã viết mã;
  3. vẽ đồ họa;
  4. tạo ra âm nhạc;
Những ai đã xem trò chơi có thể sẽ thắc mắc - tại sao lại mất nhiều thời gian như vậy, trò chơi lại đơn giản? Vâng, điều này là đúng, và nói chính xác thì quá trình phát triển (viết mã) mất khoảng một tuần rưỡi. Thời gian còn lại có thể được chia cho:
  1. làm chủ động cơ;
  2. vẽ tranh rồi vẽ lại;
  3. viết nhạc;
  4. tìm kiếm âm thanh trên https://freesound.org ;
  5. đọc một loạt bài viết về cách quảng bá trò chơi
Thêm vào đó, có những lúc “không hoạt động” vì nhiều lý do - có người thi, có người thi lại, v.v. Bạn có thể yên tâm dành một tuần rưỡi hoặc thậm chí nhiều hơn cho “thời gian chết”. Một phần thời gian khác được dành cho "tranh luận": ý tưởng về những gì cần thêm vào trò chơi hầu như đến mỗi ngày, vì vậy đã có những tranh cãi về "điều này sẽ không cần thiết", "điều này sẽ không phù hợp", v.v. Vì vậy, chúng tôi đã từ bỏ nhiều ý tưởng, chẳng hạn như thêm những con gián đang chạy mà bạn có thể nghiền nát và nhận thêm tiền từ nó. điểm: Lúc đầu có JavaRush - 2Nói chung, theo tôi, một trong những điều khó khăn nhất là quyết định trước những gì sẽ có trong trò chơi và bám sát kế hoạch này mà không cố gắng thêm tính năng “khác”. Đây là cách chúng tôi tích lũy trong 45 ngày này. Nguyên mẫu trò chơi đã sẵn sàng sau một tuần rưỡi. Trong thời kỳ này, chúng tôi chưa thực sự có đồ họa nên chúng tôi đã lấy một số thứ từ phạm vi công cộng (ví dụ: chúng tôi mượn một tờ giấy nền từ Doodle Jump) và một số thứ chúng tôi tự tạo bằng sơn. Lúc đầu có JavaRush - 3Trò chơi này rất đơn giản về mặt kỹ thuật - chúng tôi thậm chí không cần sử dụng box2d (công cụ vật lý), chúng tôi có thể xử lý các va chạm và tự tính toán cạnh huyền. Trong số những điểm thú vị nhất, tôi sẽ nêu bật những điểm sau.
  1. Ban đầu, tất cả các yếu tố trong trò chơi đều được tạo ngẫu nhiên. Những thứ kia. chúng tôi có các nhà cung cấp lỗ đen, kéo, phi tiêu, que, trái tim - chúng tôi đặt chúng thành một mảng, sau đó chúng tôi chọn một nhà cung cấp ngẫu nhiên và nhận được một phần tử có tọa độ ngẫu nhiên. Rất nhanh chóng, chúng tôi thấy rõ rằng cách tiếp cận này “không tốt lắm”; những người bạn tham gia thử nghiệm cũng nói với chúng tôi điều tương tự và khuyên chúng tôi nên sử dụng các mẫu. Chắc chắn đối với những người tham gia phát triển trò chơi thì đây là một giải pháp hiển nhiên, nhưng... Chúng tôi là người mới trong lĩnh vực này và đây là lời khuyên rất hữu ích cho chúng tôi.

    Do đó, một số mô hình đã xuất hiện: thung lũng kéo; thanh chéo - thật thú vị khi lắp ráp chúng ở tốc độ cao (swish-swish-swish bằng ngón tay của bạn); và một mẫu nữa, tôi không biết gọi nó là gì - tôi sẽ gọi nó là tên lớp trong mã: StraightForwardPattern.

    Lúc đầu có JavaRush - 4

    Nó trở nên dễ chịu hơn với các mẫu, nhưng nó quá dễ đoán hay gì đó. Vì vậy, ngẫu nhiên tương tự đã trở thành một mẫu khác. Những thứ kia. Bây giờ chúng ta có các mẫu “tĩnh” và một mẫu ngẫu nhiên. (đây là một meme về sự cân bằng hoàn hảo).

  2. Основной проблемой, с которой мы столкнулись была вот в чем. LibGDX в бесконечном цикле вызывает метод render(float delta), в котором собственно и происходит вся отрисовка элементов. Линия карандаша у нас рисуется следующим образом: мы берем координаты пальца и помещаем туда текстуру. Так вот, если мы вели пальцем по экрану очень быстро, то образовывались "дыры" потому что мы попадали в те мorсекунды, когда метод render(delta) уже отработал и ещё не вызвался снова. Проблему решor довольно просто — запоминаем последнюю координату, в которой отрисовали текстуру, получаем следующую и если расстояние между ними больше X и палец при этом не отпускался — заполняем этот промежуток. Сначала думали, что этот вариант может не сработать — линии будут угловатыми, но опасения были напрасны — всё работает How надо.

    Собственно, об игре

    Игровой процесс не претендует на уникальность, но вполне неплох и способен затянуть. Вы управляете карандашом, буквально рисуете на бумаге уклоняясь от препятствий — ножниц, сюрикенов, чёрных дыр. При этом стержень карандаша кончается и надо подбирать маленькие карандашики. На случай, когда стержень подходит к концу, а карандашей всё нет можно подобрать осколок зеркала. Он даст эффект на несколько секунд — instead of траты стержень будет восстанавливаться, но при этом управление становится зеркальным — ведёте влево, а карандаш рисует вправо. Ещё можно подобрать сердечко, которое позволит разок столкнуться с препятствием и остаться в живых. Чем дольше вести не отрывая палец от экрана тем выше будет комбо, которое увеличивает speed набора очков. Плюс постепенно увеличивается speed игры. Разве что корованы грабить нельзя. Lúc đầu có JavaRush - 5Изначально игру мы планировали назвать Karan Dash (карандаш, ахах, поняли да?), но позже передумали и остановorсь на Pencil Dash. Мотивацией стало то, что эта изящная (ящетаю) игра слов будет понятна только русскоязычной аудитории. Игру мы выпустor пару дней назад и сейчас занимаемся продвижением. В этом опыта тоже ни у кого в команде нет, все знания о продвижении мы почерпнули из разных статей. Опубликовали информацию об игре на разных сайтах\форумах бесплатно. Из платных же каналов — заказали рекламу на 4пда, у одного блогера, несколько постов в пабликах ВК и AdMob. К слову данный пост тоже является частью продвижения, поэтому с разрешения администрации оставляю здесь ссылку на игру. Страница игры в Google Play: щёлк Также оставлю ссылку на нашу группу ВК, там можно оставить отзывы\пожелания и не пропустить обновление щёлк Буду благодарен, если установите (а вдруг понравится?), а за отзыв с рейтингом обещаю поставить свечку за ваше здоровье! Задавайте вопросы, если есть — отвечу. Lúc đầu có JavaRush - 6

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION