JavaRush /Java Blog /Random-KO /태초에는 JavaRush가 있었습니다.
Марат Каджаев
레벨 20
Санкт-Петербург

태초에는 JavaRush가 있었습니다.

Random-KO 그룹에 게시되었습니다
첫 번째 수습기간이 3년 전에 끝났는데, 이제서야 글을 쓸 시간이 생겼습니다. 저는 대학에서 다양한 학부에서 1년을 보냈습니다. 첫 학기에는 관리자가 되기 위해 공부했고, 두 번째 학기에는 소프트웨어 공학으로 편입했습니다. 프로그래밍 방법을 가르쳐 주길 바랐지만 착각이어서 문서를 가져 와서 모든 것을 스스로 배우기로 결정했습니다. 제가 선생님께 감사하는 유일한 점은 Stephen Prat의 책 "The C 프로그래밍 언어"부터 시작하라고 조언해주신 것입니다. 실무적인 문제가 많은 정말 좋은 책입니다. 책을 집필하는 데 약 2개월이 걸렸고, 그 후 친구 그룹에서 JR을 만났고 여행을 떠났습니다. 처음에는 안드로이드 개발자가 되려고 계획했지만, 학습 과정에서 백엔드가 더 흥미로워 보였습니다. 그건 그렇고, 훈련은 3 개월이 걸렸고 그 동안 레벨 20에 도달 한 후 일자리를 찾기로 결정했습니다. 우선 다른 도시로 이사했어요. 내 주니어 Java 개발자에 대한 공석이 없었습니다. 나는 회사를 찾고, 응답하고, 테스트 작업을 받았는데, 완료하는 데 일주일이 걸렸습니다. Hibernate, Servlet\JSP 및 MySQL을 사용하여 간단한 웹 애플리케이션을 작성하는 것이 필요했습니다. 이 모든 단어 중에서 저는 MySQL이 데이터베이스라는 것만 알았습니다. 처음에는 매우 화가 났고 지금은 일부 KFC에서 공석을 찾기로 결정했지만 마침내 기술 사양을 충족하려고 노력하기로 결정했습니다. 항상 KFC에서 일자리를 구할 시간이 있습니다. 일주일 내내 쉬지 않고 테스트를 했고 성공했어요. 솔루션을 보냈으나 “보기 흉”해서 4번 더 다시 만들었습니다. 지난번 결정이 옳았으나, 이미 개발자를 모집했고, 다음 모집은 3개월 뒤인 것으로 드러났다. 슈토쉬, 알았어. 다음 3개월 동안 저는 html, css, js, sql, php를 배웠습니다. PHP는 여기서 무엇을 하고 있나요? 나는 요청과 그 모든 것에 응답할 서버 측 언어가 필요했습니다. 그 당시에는 서블릿과 jsp가 너무 복잡해 보였습니다. 그 결과 끔찍한 인터페이스를 갖춘 본격적인 웹 애플리케이션이 탄생했고, 그 코드는 내 포트폴리오용으로 github에 게시되었습니다. 이때쯤 3개월이 지났고 같은 회사에서 저에게 편지를 보내 인터뷰를 요청했고 또 다른 간단한 SQL 지식 테스트 과제를 줬고 저는 몇 시간 만에 완료했습니다. 내가 직업에 대해 이야기 한 사람은 알고리즘과 데이터 구조에 대해 물어볼 것이라고 암시했습니다. 저는 아직이 주제를 마스터하지 않았지만 인터뷰까지 15 일이 남았습니다. 우리 레이서들. Robert Laforet의 저서 "Data Structures and Algorithms in Java"가 도움이 되었습니다. 2주 만에 다 읽고 이해할 시간은 없었지만, 그래도 새로운 것을 많이 배웠습니다. 그리고 면접 당일이 다가오고, 약속된 시간에 맞춰 도착했는데, 남자 2명이 만나 면접이 시작되었습니다. 걱정스럽다고 하기에는 절제된 표현이라 목소리가 떨리기까지 했다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, GC 작동 방식에 대해 물었습니다. 저는 이러한 질문에 전혀 대답하지 않았습니다. Java Core(컬렉션, 예외, OOP 등). 이미 면접에서 떨어졌다는 걸 깨달았지만, 그래도 아무런 피드백을 받지 못해 아쉬웠어요. 그러나 나는 지식의 격차를 확인하고 부지런히 그 격차를 메우기 시작했습니다. 면접에 실패한 지 한 달 만에 일자리를 찾았습니다. 그런데 JavaRush 토론에서 공석을 발견했습니다. 먼저 채용담당자와 스카이프 인터뷰를 진행했습니다. (약 2시간 소요) 그들은 Java Core, GC(이제 어떻게 작동하는지 알았습니다), 데이터베이스, 데이터 구조에 대해 물었습니다. 그러자 면접관이 나에게 화면을 공유하고 계산기를 쓰라고 하더군요. 일주일 전에 문자 그대로 계산기를 썼기 때문에 기뻐서 비명을 질 뻔했습니다. 나는 나 자신에 대해 확신을 갖고 작업을 시작했지만 흥분해서였거나 다른 이유로 알고리즘의 일부를 잊어버렸습니다. 화면이 공유됩니다. Google로 이동하는 것이 무섭습니다. 다행히 나에게는 내 엉덩이를 구해줄 휴대폰이 있었다. 다음날 그들은 직접 인터뷰를 위해 저에게 전화를 걸었고 며칠 후 저는 제안을 받았습니다.
처음에는 JavaRush가 있었습니다 - 1
그 일은 공식적인 것이 아니었고 나는 개인 기업가의 견습생 역할을 맡았습니다. 우리는 이벤트 생성, 티켓 판매 등을 위한 서비스를 작성했습니다. 나는 직장에서의 첫날을 기억합니다. 개인 기업가는 해야 할 일을 설명하는 데 15분을 보냈습니다. - 음, 모든 게 명확해졌나요? - IP에게 물었습니다. - 음, 아니, 한 번 더 해도 될까요? — 나는 걱정스럽게 물었다. IP는 모든 것을 다시 설명했습니다. -이제 분명해졌나요? - 이제 그렇습니다. 사실 저는 아무것도 이해하지 못했습니다. 하지만 다시 설명을 요청하는 것이 두려웠습니다. 취직 한 사람은 누구나 저를 이해할 것이라고 생각합니다. 작업의 핵심은 thymeleaf에서 AngularJS로 다시 작성하는 것이었습니다. 다행히 미리 만들어진 코드의 일부를 찾아서 예제를 그대로 따라해봤습니다. 당시에는 그것이 어떻게 작동하는지 이해하지 못했지만 작업에 대처할 수있었습니다. 그런 다음 백엔드 부분과 직접 관련된 작업이 나왔습니다. 나는 Spring을 실제로 경험한 후에야 "Spring for Professionals"라는 책에 쓰여진 내용을 이해하기 시작했습니다. 그곳에서 8개월 동안 일한 후 다른 도시로 이사하여 빨리 공식 일자리를 구하고 2년 동안 일하면서 직함을 '주니어'에서 '중간'으로 변경했습니다. 이제 나는 일이 일상으로 바뀌었고 아무런 즐거움도 얻지 못한다는 사실에 직면했습니다. 그래서 잠시 쉬는 시간에 손가락이 위축되는 것을 방지하기 위해 다른 분야, 즉 게임 개발에 도전하기로 결정했습니다. 즉, 모바일 게임 개발은 우선 Android이기 때문에... 나는 자바를 안다. 이제 이에 대해 자세히 말씀 드리겠습니다. 회사 소개 짧은 시간 안에 개발자 2명, 게임 디자이너 1명, 사운드 엔지니어 1명 등 4명(저 포함)으로 구성된 소규모 팀이 모였습니다. 왜냐하면 팀에는 게임 개발 분야에 경험이 있는 사람이 없었고 휴가 시간도 제한되어 있었기 때문에 우리는 반드시 끝까지 해낼 수 있는 간단한 프로젝트를 구현하기로 결정했습니다. 그들은 그것을했다! 원래 마감일은 11월 15일이었지만, 아시다시피 원래 마감일에 프로젝트를 마치는 것은 죄악입니다. 그래서 우리는 2주 뒤에 그 일을 끝냈습니다. 그에 따르면 스택은 Java 8 및 libGDX입니다.

개발에 대해

개발 시작일은 10월 17일로 볼 수 있습니다. 총 45일 동안 우리는 다음과 같은 시간을 보냈습니다.
  1. libGDX로 작업하는 법을 배웠습니다.
  2. 코드를 작성했습니다.
  3. 그래픽을 그렸습니다.
  4. 음악을 만들었습니다.
이미 게임을 본 사람들은 질문이 있을 수 있습니다. 게임이 간단한데 왜 이렇게 오래 걸리는 걸까요? 예, 이것은 사실입니다. 완전히 정확하게 말하면 개발 자체(코드 작성)에는 약 일주일 반이 걸렸습니다. 나머지 시간은 다음과 같이 나눌 수 있습니다.
  1. 엔진 마스터링;
  2. 그림을 그린 다음 다시 그립니다.
  3. 음악 쓰기;
  4. https://freesound.org 에서 소리를 검색합니다 .
  5. 게임 홍보 방법에 관한 여러 기사를 읽고 있습니다.
게다가 시험을 본 사람, 재시험을 본 사람 등 다양한 이유로 "다운타임"이 발생하는 경우도 있었습니다. "다운타임"에 일주일 반 또는 그 이상을 안전하게 보낼 수 있습니다. 시간의 또 다른 부분은 "토론"에 소비되었습니다. 게임에 무엇을 추가할지에 대한 아이디어가 거의 매일 나왔기 때문에 "이것은 불필요할 것입니다", "이것은 적합하지 않을 것입니다" 등에 대한 논쟁이 있었습니다. 따라서 우리는 예를 들어, 으깨서 추가로 얻을 수 있는 달리는 바퀴벌레를 추가하는 등 많은 아이디어를 포기했습니다. 포인트: 처음에는 JavaRush - 2가 있었습니다.일반적으로 가장 어려운 일 중 하나는 게임에 무엇이 포함될지 미리 결정하고 "다른" 기능을 추가하지 않고 이 계획을 고수하는 것입니다. 이렇게 우리는 45일을 축적했습니다. 게임 프로토타입은 일주일 반 후에 준비되었습니다. 이 기간 동안에는 아직 그래픽이 없었기 때문에 공개 도메인에서 일부 항목을 가져왔고(예: Doodle Jump에서 배경 종이를 빌렸음) 일부는 페인트로 직접 만들었습니다. 처음에는 JavaRush - 3이 있었습니다.이 게임은 기술적으로 매우 간단합니다. box2d(물리 엔진)를 사용할 필요도 없었고 충돌을 처리하고 빗변을 직접 계산할 수 있었습니다. 가장 흥미로운 점 중 다음 사항을 강조하겠습니다.
  1. 처음에는 게임의 모든 요소가 무작위로 생성되었습니다. 저것들. 블랙홀, 가위, 수리검, 막대, 하트의 공급자가 있습니다. 이를 배열에 넣은 다음 임의의 공급자를 선택하고 임의의 좌표가 있는 요소를 얻습니다. 아주 빨리 이 접근 방식이 "별로 좋지 않다"는 것이 분명해졌습니다. 테스트에 참여한 친구들도 우리에게 같은 말을 하며 템플릿을 사용하라고 조언했습니다. 물론 게임 개발에 종사하는 사람들에게는 이것이 당연한 해결책이지만... 우리는 이 분야를 처음 접했고 이는 우리에게 매우 좋은 조언이었습니다.

    따라서 몇 가지 패턴이 나타났습니다. 대각선 막대 - 고속으로 조립하는 것은 매우 재미있습니다(손가락으로 휙휙휙). 그리고 템플릿이 하나 더 있는데, 뭐라고 불러야 할지 모르겠습니다. 코드에서 클래스가 호출되는 대로 StraightForwardPattern이라고 부르겠습니다.

    처음에는 JavaRush - 4가 있었습니다.

    템플릿이 있어서 더 편해졌는데, 너무 예측 가능했거나 뭔가요. 따라서 동일한 무작위가 또 다른 템플릿이 되었습니다. 저것들. 이제 우리는 "정적" 템플릿과 하나의 무작위 템플릿을 갖게 되었습니다. (여기 완벽한 균형에 관한 밈이 있습니다).

  2. 우리가 직면한 주요 문제는 이것이었습니다. LibGDX는 요소의 모든 렌더링이 실제로 발생하는 무한 루프에서 render(float delta) 메서드를 호출합니다. 다음과 같은 방법으로 연필 선을 그립니다. 손가락의 좌표를 가져와 거기에 텍스처를 배치합니다. 따라서 화면에서 손가락을 매우 빠르게 움직이면 "구멍"이 형성됩니다. 왜냐하면 render(delta) 메서드가 이미 작동하고 아직 다시 호출되지 않은 밀리초 내에 끝나기 때문입니다. 문제는 매우 간단하게 해결되었습니다. 텍스처가 그려진 마지막 좌표를 기억하고 다음 좌표를 얻은 다음, 두 좌표 사이의 거리가 X보다 크고 손가락을 떼지 않은 경우 이 간격을 채웁니다. 처음에 우리는 이 옵션이 작동하지 않을 수도 있다고 생각했습니다. 선은 각이 져 있었지만 두려움은 헛된 것이었습니다. 모든 것이 제대로 작동했습니다.

    사실 게임에 대해서

    게임 플레이는 독특한 척하지 않지만 꽤 훌륭하고 중독성이 있습니다. 연필을 조종하고 말 그대로 종이에 그림을 그리며 가위, 수리검, 블랙홀 등의 장애물을 피합니다. 이 경우 연필심이 끝나므로 작은 연필을 집어야 합니다. 막대가 끝났는데 아직 연필이 없으면 거울 조각을 집을 수 있습니다. 몇 초 동안 효과가 있습니다. 막대를 낭비하는 대신 복원되지만 동시에 컨트롤이 미러링됩니다. 왼쪽으로 이동하면 연필이 오른쪽으로 그려집니다. 장애물을 한 번 만나도 살아남을 수 있게 해주는 하트를 얻을 수도 있습니다. 화면에서 손가락을 떼지 않고 오래 누르고 있을수록 콤보가 높아져 포인트 획득 속도가 빨라집니다. 게다가 게임 속도도 점차 증가합니다. Korovans를 강탈할 수 없다면 말이죠. 처음에는 JavaRush - 5가 있었습니다.처음에 우리는 게임 이름을 Karan Dash(연필, 아하하, 알았죠?)라고 부르려고 계획했지만 나중에 마음을 바꿔 Pencil Dash로 결정했습니다. 동기는 이 우아한 (내 말은) 말장난이 러시아어를 사용하는 청중에게만 이해될 수 있다는 것이었습니다. 우리는 며칠 전에 게임을 출시했고 지금은 홍보 중입니다. 팀원 중 누구도 이에 대한 경험이 없으며 다양한 기사를 통해 프로모션에 대한 모든 지식을 수집했습니다. 우리는 다양한 웹사이트/포럼에 게임에 대한 정보를 무료로 게시했습니다. 유료 채널의 경우 한 블로거의 4PD 광고, VK 및 AdMob 공개 페이지의 여러 게시물을 주문했습니다. 그런데, 이 게시물도 프로모션의 일부이므로 운영진의 허가를 받아 여기에 게임 링크를 남깁니다. Google Play의 게임 페이지: 클릭하세요 . 또한 리뷰/제안을 남길 수 있고 업데이트를 놓치지 않을 수 있는 VK 그룹에 대한 링크도 남길 것입니다. 클릭해 설치해 주시면 감사하겠습니다(마음에 드시면 어떻게 됩니까?). 그리고 평점이 있는 리뷰를 위해 여러분의 건강을 위해 촛불을 켤 것을 약속드립니다! 질문하시고, 있으면 답변해드리겠습니다.처음에는 JavaRush - 6이 있었습니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION