CodeGym /Java Blog /무작위의 /태초에 있었다 ...
John Squirrels
레벨 41
San Francisco

태초에 있었다 ...

무작위의 그룹에 게시되었습니다
처음에는 ... - 1 3년 전 첫 직장 수습기간이 끝났는데 이제서야 글을 쓸 시간이 생겼다. 나는 대학에서 1년을 다른 학과에서 보냈습니다. 첫 학기에는 경영학을 공부했고, 두 번째 학기에는 소프트웨어 엔지니어링으로 전환했습니다. 나는 그들이 나에게 프로그래밍 방법을 가르쳐 주기를 바랐지만, 나는 틀렸습니다. 그래서 자료를 모으고 모든 것을 스스로 배우기로 했습니다. 내가 선생님께 감사하는 유일한 이유는 그가 Stephen Pratt의 전자책 "The C Programming Language"부터 시작하라고 권했기 때문입니다. 정말 실전 연습이 많은 좋은 책입니다. 나는 책에 약 2개월을 보냈고, 그 후 친구의 그룹에서 이 온라인 Java 코스를 발견했고 그렇게 시작되었습니다. 처음에는 Android 개발자가 되려고 했습니다., 하지만 배움이 진행됨에 따라 백엔드가 더 흥미로워 보였습니다. 참고로 레벨 20에 도달하기까지 3개월의 공부가 필요했고 그 후 취업을 시도하기로 결정했습니다. 사업의 첫 번째 순서는 다른 도시로 이사하는 것이 었습니다.광산에는 주니어 Java 개발자를 위한 자리가 없었기 때문입니다. 회사를 찾아서 지원하고 테스트 과제를 받았고 완료하는 데 일주일이 주어졌습니다. Hibernate, Servlet/JSP 및 MySQL을 사용하여 간단한 웹 애플리케이션을 작성해야 했습니다. 이 모든 용어를 보고 저는 MySQL이 데이터베이스라는 것만 알았습니다. 처음에는 매우 실망했습니다. 일부 KFC에서 일자리를 찾기로 결정했지만 테스트 작업을 시작하기로 결심했습니다. 결국, 나는 항상 KFC에서 일자리를 얻을 수 있었습니다. 나는 일주일 내내 쉬지 않고 일했고 그럭저럭 시험을 마칠 수 있었다. 솔루션을 제출했지만 "예쁘지 않아" 4번 더 수정했습니다. 내 마지막 솔루션은 올바른 것으로 판명되었지만 이미 자리가 채워졌고 추가 지원은 3개월 동안 허용되지 않았습니다. 어떡할거야, 그렇지? 앞으로 3개월 동안, HTML, CSS, JS, SQL, PHP를 배웠습니다. 왜 PHP인가? 요청 등에 응답할 서버 언어가 필요했습니다. 당시에는 서블릿과 JSP가 너무 복잡해 보였습니다. 결국 나는 형편없는 인터페이스를 가진 본격적인 웹 애플리케이션을 만들었다. 내 포트폴리오에 대한 코드를 GitHub에 게시했습니다. 이때까지 3개월이 지났고 같은 회사에서 다시 연락하여 인터뷰에 초대했고 SQL에 대한 지식을 테스트하는 또 다른 간단한 작업을 제공하여 몇 시간 만에 완료했습니다. 내가 고용에 대해 이야기하던 사람은 내가 아직 마스터할 시간이 없었던 주제인 알고리즘과 데이터 구조에 대해 물어볼 것이라고 암시했습니다. 즉, 면접이 15일 남았습니다. 알 겠어! Robert Lafore의 저서 "Data Structures & Algorithms in Java"가 도움이 되었습니다. 나는 하지 않았다 2주 동안 모든 것을 읽고 이해할 시간이 없었지만 여전히 많은 것을 배웠습니다. 그리고 면접날이 왔다. 나는 약속된 시간에 도착했다. 두 남자가 나를 반갑게 맞이하고 인터뷰가 시작되었다. 내가 걱정했다고 말하는 것은 거칠게 삼가면서 말하는 것입니다. 내 목소리가 떨렸다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, 가비지 수집기 작동 방식에 대해 물었습니다. 저는 이러한 질문 중 하나에 대답할 수 없었습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. 그리고 면접날이 왔다. 나는 약속된 시간에 도착했다. 두 남자가 나를 반갑게 맞이하고 인터뷰가 시작되었다. 내가 걱정했다고 말하는 것은 거칠게 삼가면서 말하는 것입니다. 내 목소리가 떨렸다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, 가비지 수집기 작동 방식에 대해 물었습니다. 저는 이러한 질문 중 하나에 대답할 수 없었습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. 그리고 면접날이 왔다. 나는 약속된 시간에 도착했다. 두 남자가 나를 반갑게 맞이하고 인터뷰가 시작되었다. 내가 걱정했다고 말하는 것은 거칠게 삼가면서 말하는 것입니다. 내 목소리가 떨렸다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, 가비지 수집기 작동 방식에 대해 물었습니다. 저는 이러한 질문 중 하나에 대답할 수 없었습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. 내가 걱정했다고 말하는 것은 거칠게 삼가면서 말하는 것입니다. 내 목소리가 떨렸다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, 가비지 수집기 작동 방식에 대해 물었습니다. 저는 이러한 질문 중 하나에 대답할 수 없었습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. 내가 걱정했다고 말하는 것은 거칠게 삼가면서 말하는 것입니다. 내 목소리가 떨렸다. 그들은 알고리즘과 데이터 구조를 제외한 모든 것에 대해 질문했습니다. 그들은 Spring, DI, IoC, Hibernate, JVM 작동 방식, 가비지 수집기 작동 방식에 대해 물었습니다. 저는 이러한 질문 중 하나에 대답할 수 없었습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다. Java Core(컬렉션, 예외, OOP 등)에 대한 질문에만 성공적으로 답변했습니다. 면접을 보는 동안 제가 떨어졌다는 것을 알았지만 피드백을 받지 못한 것에 여전히 실망했습니다. 대신, 나는 내 지식의 격차를 파악하고 그것을 좁히기 위해 부지런히 일하기 시작했습니다.면접에 실패한 지 한 달 만에 일자리를 찾았습니다. 그건 그렇고, 저는 CodeGym에 대한 토론에서 채용 공고를 찾았습니다( CodeGym는 CodeGym의 러시아어 버전입니다 — 편집자 주)). 먼저 채용 담당자와 Skype 인터뷰가 있었습니다(약 2시간 동안 진행됨). 그들은 Java Core, 가비지 수집(이제 어떻게 작동하는지 알았습니다), 데이터베이스 및 데이터 구조에 대해 질문했습니다. 면접관이 내 화면을 공유하고 계산기를 작성해달라고 요청했습니다. 불과 일주일 전에 계산기를 썼기 때문에 거의 기뻐서 울 뻔했습니다. 자신감을 갖고 작업을 시작했습니다. 하지만 흥분해서인지 다른 이유로 알고리즘의 일부를 잊어버렸습니다. 내 화면이 공유되었습니다. Google에 문의하는 것이 두려웠습니다. 운 좋게도 내 엉덩이를 구한 휴대폰이있었습니다. 다음날 직접 인터뷰를 요청했고 며칠 후 제안을 받았습니다.. 공식적인 입장은 아니었다. 내 역할은 자영업자의 견습생이었습니다. 우리는 이벤트 기획, 티켓 판매 등을 위한 서비스를 작성했습니다. 첫 출근 날을 기억합니다. 상사는 해야 할 일을 설명하는 데 15분이 걸렸습니다. "모든 것이 명확합니까?" 그는 물었다. "음, 별로. 한 번 더 짚어줄 수 있겠어?" 나는 큰 걱정을 안고 물었다. 사장님이 다시 설명을 해주셨어요. "이제 맑아졌어?" "예, 지금입니다." 사실, 나는 아무것도 이해하지 못했습니다. 그러나 나는 다른 설명을 요구하기가 두려웠다. 직장인이라면 누구나 이해할 수 있을 것 같아요. 이 작업은 Thymeleaf에서 AngularJS로 포팅하는 것으로 귀결되었습니다. 다행스럽게도 완성된 코드 덩어리를 발견하여 수행할 작업의 예로 사용했습니다. 어떻게 작동하는지 이해하지 못했지만 작업을 완료했습니다. 이후 백엔드와 직접 관련된 작업을 할당받았습니다. Spring에 대한 실질적인 경험을 한 후에야 "Spring for Professionals"에서 읽은 내용을 이해하기 시작했습니다. 나는 그곳에서 8개월 동안 일한 다음 다른 도시로 이사했고 그곳에서 빨리 공식적인 일자리를 찾았고 2년 동안 일했고 그 과정에서 내 직함을 "주니어"에서 "중급"으로 바꿨습니다. 그러다가 내 일이 일상이 되었고 기쁨도 한 방울도 주지 않는다는 사실에 직면했다. 그래서 나는 휴식을 취했다. 쉬는 동안 손가락이 위축되는 것을 막기 위해 게임 개발이라는 다른 분야에 손을 대보기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. Spring에 대한 실질적인 경험을 한 후에야 "Spring for Professionals"에서 읽은 내용을 이해하기 시작했습니다. 나는 그곳에서 8개월 동안 일한 다음 다른 도시로 이사했고 그곳에서 빨리 공식적인 일자리를 찾았고 2년 동안 일했고 그 과정에서 내 직함을 "주니어"에서 "중급"으로 바꿨습니다. 그러다가 내 일이 일상이 되었고 기쁨도 한 방울도 주지 않는다는 사실에 직면했다. 그래서 나는 휴식을 취했다. 쉬는 동안 손가락이 위축되는 것을 막기 위해 게임 개발이라는 다른 분야에 손을 대보기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. Spring에 대한 실질적인 경험을 한 후에야 "Spring for Professionals"에서 읽은 내용을 이해하기 시작했습니다. 나는 그곳에서 8개월 동안 일한 다음 다른 도시로 이사했고 그곳에서 빨리 공식적인 일자리를 찾았고 2년 동안 일했고 그 과정에서 내 직함을 "주니어"에서 "중급"으로 바꿨습니다. 그러다가 내 일이 일상이 되었고 기쁨도 한 방울도 주지 않는다는 사실에 직면했다. 그래서 나는 휴식을 취했다. 쉬는 동안 손가락이 위축되는 것을 막기 위해 게임 개발이라는 다른 분야에 손을 대보기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. 그곳에서 나는 빨리 공식적인 일자리를 찾았고, 2년 동안 일했고 그 과정에서 내 직함을 "주니어"에서 "중급"으로 바꿨습니다. 그러다가 내 일이 일상이 되었고 기쁨도 한 방울도 주지 않는다는 사실에 직면했다. 그래서 나는 휴식을 취했다. 쉬는 동안 손가락이 위축되는 것을 막기 위해 게임 개발이라는 다른 분야에 손을 대보기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. 그곳에서 나는 빨리 공식적인 일자리를 찾았고, 2년 동안 일했고 그 과정에서 내 직함을 "주니어"에서 "중급"으로 바꿨습니다. 그러다가 내 일이 일상이 되었고 기쁨도 한 방울도 주지 않는다는 사실에 직면했다. 그래서 나는 휴식을 취했다. 쉬는 동안 손가락이 위축되는 것을 막기 위해 게임 개발이라는 다른 분야에 손을 대보기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. 저는 다른 분야인 게임 개발에 도전하기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다. 저는 다른 분야인 게임 개발에 도전하기로 했습니다. 더 구체적으로 말하자면 모바일 게임 개발, Android 선택, Java를 이미 알고 있었기 때문입니다. 이것이 제가 지금 자세히 이야기할 내용입니다.내 팀. 짧은 순서로 저는 4명(저 포함)으로 구성된 소규모 팀을 구성했습니다. 개발자 2명, 게임 디자이너 1명, 사운드 엔지니어 1명입니다. 팀원 중 게임 개발 경험이 전무한 데다 휴가도 한정되어 있기 때문에 우리가 반드시 끝낼 수 있는 간단한 프로젝트를 구현하기로 했습니다. 그래서 우리는 했습니다! 처음에는 마감일이 11월 15일이었지만, 아시다시피 프로젝트를 일정대로 끝내는 것은 잘못된 것입니다. 그래서 2주 늦게 끝냈습니다. 우리의 기술 스택은 Java 8과 libGDX로 구성되었습니다.

개발

개발은 10월 17일에 시작되었습니다. 총 45일 동안 다음과 같은 시간을 보냈습니다.
  1. libGDX 사용법을 배웠습니다.
  2. 우리는 코드를 작성했습니다.
  3. 우리는 그래픽을 만들었습니다.
  4. 우리는 음악을 만들었습니다.
게임을 본 사람이라면 누구나 "왜 이렇게 오래 걸렸지? 게임이 이렇게 간단해"라고 물을 것이다. 예, 맞습니다. 정확히 말하면 개발 부분(코드 작성)은 약 1주 반이 걸렸습니다. 나머지 시간은 다음과 같이 나누어졌습니다.
  1. 게임 엔진을 사용하는 방법을 마스터합니다.
  2. 아트웍 그리기 및 다시 그리기.
  3. 작곡.
  4. https://freesound.org 에서 소리를 검색합니다 .
  5. 게임을 홍보하는 방법에 대한 많은 기사 읽기.
우리는 또한 여러 가지 이유로 "중단 시간"의 순간을 가졌습니다. 누군가는 시험을 받았고, 다른 누군가는 보충 테스트를 받았습니다. "토론"에도 약간의 시간이 소요되었습니다. 게임에 추가할 항목에 대한 새로운 아이디어가 거의 매일 등장했기 때문에 "그건 불필요합니다", "적합하지 않습니다" 등의 토론을 했습니다. 예를 들어, 추가 점수를 얻기 위해 부술 수 있는 달리는 바퀴벌레를 추가하는 것입니다. 내 생각에 가장 어려운 일 중 하나는 게임에 무엇이 포함될지 미리 결정하고 "한 개만 더"를 추가하지 않고 계획을 고수하는 것이 었습니다. " 특징. 그렇게 45일이 쌓였다. 게임의 프로토타입은 일주일 반 후에 준비되었습니다. 이 기간 동안에는 그래픽이 전혀 없었습니다. 처음에는 ... - 2이 게임은 기술적인 의미에서 매우 간단합니다. 우리는 box2d(물리 엔진)를 사용할 필요조차 없었습니다. 충돌을 처리하고 빗변을 스스로 계산할 수 있습니다. 내가 강조할 가장 흥미로운 점은 다음과 같습니다.
  1. 처음에는 모든 게임 요소가 무작위로 생성되었습니다. 즉, 공급자(블랙홀, 가위, 닌자 별, 연필심, 하트)를 배열에 넣고 임의의 공급자를 얻었고 임의의 좌표를 가진 요소를 얻었습니다. 이 접근 방식이 "정말 좋지 않다"는 것이 꽤 빨리 분명해졌습니다. 테스트에 참여한 친구들도 템플릿 사용을 추천하며 같은 말을 했습니다. 게임 개발에 참여하는 사람들에게 이것은 아마도 분명한 해결책일 것입니다. 하지만 우리는 현장에 처음 온 사람들이었기 때문에 매우 실용적인 조언이었습니다.

    그래서 우리는 몇 가지 템플릿을 만들었습니다. 연필심 - 초고속으로 수집하는 것은 매우 멋진 일입니다(손가락으로 쉿, 쉿, 쉿). 그리고 무엇을 불러야 할지 모르는 템플릿이 하나 더 있습니다. 코드에서 클래스 이름을 무엇으로 지정했는지 알려드리겠습니다 StraightForwardPattern.

    처음에는... - 3

    이러한 템플릿은 그것을 개선했지만 어떻게든 너무 예측 가능해졌습니다. 그래서 임의 템플릿을 하나 더 추가했습니다. 즉, 이제 몇 가지 "정적" 템플릿과 하나의 임의 템플릿이 있습니다(여기에 "완벽하게 균형 잡힌" 밈 삽입).

  2. 여기에 우리가 만난 주요 문제가 있습니다. LibGDX는 무한 루프에서 렌더링(부동 델타) 메서드를 호출합니다. 이것은 모든 요소가 그려지는 곳입니다. 연필 선은 다음과 같이 그려집니다. 손가락 좌표를 얻고 거기에 텍스처를 그립니다. 따라서 화면에서 손가락을 매우 빠르게 움직이면 render(delta) 메서드 호출 사이의 밀리초로 인해 선에 "간격"이 생깁니다.

    해결책은 매우 간단했습니다. 텍스처가 그려진 마지막 좌표를 기억하고 다음 좌표를 얻은 다음 그 사이의 거리가 X보다 크고 손가락이 놓이지 않으면 간격을 채웁니다. 처음에는 이 옵션이 작동하지 않을 수도 있다고 생각했습니다. 선이 각이 지기 때문입니다. 그러나 우리의 두려움은 근거가 없었고 모든 것이 제대로 작동했습니다.

게임 정보

게임 플레이는 독특하다고 주장하지는 않지만 꽤 훌륭하고 사용자를 끌어들일 수 있습니다. 말 그대로 종이에 그림을 그리고 가위, 닌자 별, 블랙홀과 같은 장애물을 피하면서 연필을 제어합니다. 그러는 동안 연필심이 다 떨어지고 작은 연필을 집어들어야 합니다. 작은 연필을 모으기 전에 연필이 다 떨어지면 거울 조각을 집어들 수 있습니다. 몇 초 동안 연필 심을 소모하는 대신 복원되지만 동시에 컨트롤이 미러링됩니다. 손가락이 왼쪽으로 이동하면 연필이 오른쪽으로 그려집니다. 장애물에 한 번 부딪혀도 살아남을 수 있는 심장을 선택할 수도 있습니다. 손가락을 떼지 않고 연필을 오래 움직일수록 콤보가 높아져 포인트가 더 빨리 쌓입니다. 처음에는... - 4게임의 속도도 점차 증가합니다. 빠진 유일한 것은 화난 새들입니다. 처음에 우리는 게임의 이름을 Karan Dash(연필을 뜻하는 러시아어 단어의 음역은 karandash입니다. 하! 알죠?)로 지정할 계획이었지만 나중에 마음을 바꿔 Pencil Dash로 결정했습니다. 이 우아한 말장난은 러시아어를 사용하는 청중만 이해할 수 있기 때문에 이렇게 했습니다. 우리는 며칠 전에 게임을 출시했으며 현재 홍보하고 있습니다. 여기에서도 팀의 어느 누구도 경험이 없습니다. 우리는 다양한 기사에서 게임 프로모션에 대한 모든 지식을 얻었습니다. 다양한 웹사이트/포럼에 게임에 대한 정보를 무료로 게시했습니다. 유료 채널에는 4p 광고, 한 블로거 광고, VKontakte 공개 그룹의 여러 게시물 및 AdMob 광고가 포함되었습니다. 그건 그렇고, 이 게시물도 우리 프로모션의 일부이므로 웹 사이트 관리의 허가를 받아 여기에 게임에 대한 링크를 포함하고 있습니다. 여기에서 Google Play에서 게임을 찾을 수 있습니다 . 설치해 주시면 감사하겠습니다(어쩌면 마음에 드실 겁니다!). 그리고 별점을 남겨주시면 여러분의 이름을 따서 아이의 이름을 지을 것을 약속드립니다! :) 처음에는 ... - 6
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION