All/Project
- 구글 인디게임 페스티벌 2017.04.25
- 튜토리얼 완료 2017.04.17
- 9XD 개발자모임 2017.04.15
- 튜토리얼 2017.04.13
- 그림 2017.04.11
- 그림 2017.04.09
- 지금까지 개발된 내용 2017.04.08
- Laviah 2017.04.08
- 매주 일요일 랭킹 초기화 2017.04.05
- UI_ HealthBarUI 2016.04.12
구글 인디게임 페스티벌
튜토리얼 완료
9XD 개발자모임
오늘은 9XD 개발자모임에 참가했다.
무려 선착순 2등을 하며 참가자격을 얻었다!!
생각했던 것 보다 더 고퀄의 강연이었어서 좀 놀랐고 서포터가 데브여서 한번 더 놀랐다.
강연 중 생각나는 것이 데브 서버개발자 분께서 발표하신 GraphQL에 대한 내용이었는데
페이스북 SDK를 작업하면서도 그래프 API에 대한 편함을 경험한 바 있어서 크게 공감했던 것 같다.
시간을 내어서 지금 구글에 저장하고 있는 유저데이터를 AWS의 DynamoDB 에 사용하면서 GraphQL을 이용하면 좋은 것같다.
그때를 위해 검색해본 URL을 남긴다.
GraphQL 설명 : http://blog.sapzil.org/2015/09/01/graphql-rfc/
GraphQL Parser github : https://github.com/graphql/libgraphqlparser
GraphQL Serverless framework github : https://github.com/serverless/serverless-graphql-blog
GraphQL Explorer : https://graphql-tryout.herokuapp.com/graphql?query=&operationName=undefined
튜토리얼
이번에 작업한 것은 튜토리얼이다.
일전에 회사에서 튜토리얼 관련된 코드를 본적이 있었는데
아무런 생각과 대책없이 튜토리얼을 구현하면 이렇게도 구현할 수 있구나 싶었다.
온갖 조건문과 예외처리 코드가 스파게티처럼 꼬여있어서 새로운 스텝을 추가하기도 수정하기도 쉽지 않았던 기억이 있다.
아무튼 이런 저런 이유로 알기 쉽고 수정과 관리가 용이하게 구현하려 노력했다.
또 비디오나 스프라이트가 아닌, 사용자 반응형 튜토리얼을 구현하려 했다.
완벽하게 끝이 난것은 아니지만 정리해서 포스팅 해보겠다. ( 원래 리펙토링은 끝이 없기에.. )
먼저 관련 클래스는 3 가지로 나뉜다.
- TutorialManager
- TutorialStep
- TutorialHelper
간단하게 설명하자면 TutorialStep 이 모여 하나의 Tutorial이 된다.
예를들어 처음 플레이 하는 유저가 게임 방법에 대한 튜토리얼을 진행한다면
"BEGINER_TUTORIAL"이라는 Key를 사용하는 TUTORIAL 아래 1 ~ 3의 STEP이 추가된다.
Step 1. "시작버튼을 누르세요" 라는 메시지 박스 출력
Step 2. "화면을 터치하면 캐릭터가 움직입니다."라는 메시지 박스 출력
Step 3. 유저가 화면을 터치하면 캐릭터가 움직이고 "잘하셨습니다!!"라는 메시지 박스 출력
위와같은 방식으로 총 59 STEP으로 이루어진 BEGINER 튜토리얼을 구성했다.
또 설정 팝업에 추가하여 언제든 튜토리얼을 다시 할 수 있도록 하였다.
그림
그림
오늘은 그림을 그려보았다.
처음에는 어색했던 포토샵도 이제는 제법 다룰줄 알게 되었다.
물론 결과물이 만족스럽지는 않지만 점점 나아질 것으로 기대된다.
기본행성이 될 듯 하며 이제 총알과 미사일을 그리면 될 듯하다.
'All > Project' 카테고리의 다른 글
튜토리얼 (0) | 2017.04.13 |
---|---|
그림 (0) | 2017.04.11 |
지금까지 개발된 내용 (0) | 2017.04.08 |
Laviah (0) | 2017.04.08 |
매주 일요일 랭킹 초기화 (0) | 2017.04.05 |
지금까지 개발된 내용
1. 메뉴 화면
아이콘 부터 그림까지 하나하나 다 혼자 하려니 별거 아닌 일도 오래 걸렸다.
2. 캐릭터 선택창
일반 캐릭터의 경우 어둡게 보이고 레어 캐릭터의 경우엔 검은 음영으로 처리되어 있다.
3. 페이스북 랭킹 창
랭킹은 일주일에 한번 초기화 되는데 어디에 표시할 지 고민중이다.
4. 아이템의 기본 스텟을 올릴수 있는 창
유아이들도 다 더미라서 바꿔야하는데... 그래픽은 다 돈이다.
5. 옵션 창
옵션창에는 오디오, 데이터 저장, 언어 선택, 획득한 타이틀 등을 확인 할 수 있다.
6. 게임을 진행하고 있는 화면이다.
좌측상단에 점수와 코인 UI가 있다.
우측상단에는 페이스북을 연동한 경우에만 플레이어의 다음 목표가 되는 친구의 점수가 위치해 있다.
7. 일시정지 화면
게임 중 달성할 수 있는 작은 목표가 중앙에 위치하며 좌측 상단에 홈으로 가기, 다시하기 버튼이 위치한다.
아래에는 게임을 종료할수 있는 버튼과 게임으로 돌아가기 버튼이 있다.
8. 결과 화면
최종 점수와 나의 최고 점수를 보여 준다.
여기까지가 지금까지 개발된 화면 구성이다.
게임 플레이도 영상으로 올리고 싶지만..
안타깝게도 동영상을 찍을 수 있는 형편이 되질 않아 다음을 기약 해야겠다.
'All > Project' 카테고리의 다른 글
그림 (0) | 2017.04.11 |
---|---|
그림 (0) | 2017.04.09 |
Laviah (0) | 2017.04.08 |
매주 일요일 랭킹 초기화 (0) | 2017.04.05 |
UI_ HealthBarUI (0) | 2016.04.12 |
Laviah
앞으로 남은 계획을 한번 나열해보자.
1. 게임 중에 깜짝 캐릭터를 얻는 시스템이 있었으면 좋겠다.
2. 캐릭터를 뽑는 연출이 필요하다.
3. 타이틀을 얻었을 때 보상을 주는 연출이 필요하다.
4. 게임안에서 스크린샷을 찍고 카톡 등으로 공유할 수 있어야 한다.
5. 최고기록을 냈을 때 연출이 필요하다.
6. 유저데이터를 암호화 해야 한다.
7. 네트워크가 연결되지 않았을 경우에 유니티 광고를 보려고 할때의 처리가 필요하다.
8. 인앱결제가 필요하다.
9. 구글 로그인시 유저 데이터를 받아오는데 로컬에 저장되어있는 정보와 다른 계정일 경우 처리가 필요하다.
10. BGM 및 효과음이 필요하다.
11. 피버 및 연속 피버가 들어가면 재밌지 않을까 생각중이다.
12. 행성마다 다른 스테이지가 존재하면 각각 클리어 하는 재미가 있지 않을까 생각중이다.
여기까지가 그동안 Wunderlist로 관리하던 남은 일정이고 이외에도 아직 더미로 사용하고 있는 데이터들이 많이 있다.
이것들도 차츰 실데이터로 변경해야 할 것 같다.
여기까지 하고 내일은 지금까지 개발한 게임의 동영상이나 스크린샷 정도는 올려도 좋을 것 같다.
'All > Project' 카테고리의 다른 글
그림 (0) | 2017.04.09 |
---|---|
지금까지 개발된 내용 (0) | 2017.04.08 |
매주 일요일 랭킹 초기화 (0) | 2017.04.05 |
UI_ HealthBarUI (0) | 2016.04.12 |
UI_ MyButton (0) | 2016.04.12 |
매주 일요일 랭킹 초기화
access_token
으로 /APP_ID/scores
에 대한 HTTP DELETE
요청을 실행하여 앱의 모든 점수를 삭제할 수 있습니다.
응답은 다음과 같습니다.
설명 | 유형 |
---|---|
삭제 성공 여부에 따라 |
|
Crontab
[분] [시] [일] [월] [요일] [실행하고자 하는 명령어]
분(0~59), 시(0~23), 일(1~31), 요일 (1~7{월~일})
위와 같은 구조로 실행하고자 하는 명령어를 예약할 수 가 있으며, crontab 을 사용하는 방법에는 두가지가 있습니다.
vim /etc/crontab 을 이용해서 예약하기
위 명령어는 매일 새벽 1시에 sync.php 파일이 실행되도록 한 것입니다.
:wq 명령어를 이용해서 저장하고 나오시면 끝!
해당 방법은 별도의 추가 작업이 필요없으며 그냥 저장하고 나오시면 자동으로 적용이 됩니다.
crontab -e 를 이용해서 예약하기
위 명령어는 월요일 새벽 1시에 sync.php 파일이 실행되도록 한 것입니다.
:wq 명령어를 이용해서 저장하고 나오시면 끝!
해당 방법은 아래와 같은 실행 및 재 시작의 명령어를 추가로 수행해야 합니다.
실행, 종료, 재 시작 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once __DIR__ . '/php-graph-sdk-5.0.0/src/Facebook/autoload.php';
$fb = new Facebook\Facebook(['app_id' => ‘xxx',
'app_secret' => ‘xxx',
'default_graph_version' => ‘xxx']);
$fbApp = $fb->getApp(); $fb->delete('/app/scores/', [], $fbApp->getAccessToken());
| cs |
'All > Project' 카테고리의 다른 글
지금까지 개발된 내용 (0) | 2017.04.08 |
---|---|
Laviah (0) | 2017.04.08 |
UI_ HealthBarUI (0) | 2016.04.12 |
UI_ MyButton (0) | 2016.04.12 |
별게임의 상태트리 (0) | 2016.04.12 |
UI_ HealthBarUI
개요
체력 계산 함수를 외부에 구현하고 CHealthBarUI에서는 함수포인터만 전달하여 호출하는 식으로 구현했습니다.
처음엔 체력계산 함수를 Player의 virtual function으로 구현 하였습니다.
하지만 이후 캐릭터마다 체력계산 함수의 종류나 계산 방식 등이 다를 수 있을 것이라 생각하였고
Strategy Pattern을 적용하게 되었습니다.
또 계산식에서 필요한 private변수들이 많아질 것으로 예상하였습니다.
때문에 클래스나 구조체로 구현하여 Player의 인스턴스를 전달하는 Strategy Pattern의 전형적인 방식을 사용하기보다는
Player의 함수 포인터를 사용하는 식으로 변형하였습니다.
추상클래스로 인터페이스를 제공하는 장점을 버리게 되었지만 private변수 참조 용이, 은닉화의 장점을 취할 수 있었습니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /*-----------------------CHealthBarUI-------------------------- * strategy pattern * 같은 캐릭터라도 다른 체력계산함수를 사용할 수 있도록 구현 * 때문에 캐릭터에서 virtual 함수로 구현하지 않고 strategy pattern을 이용 * 차후에 다른캐릭터로 이어달리기 등의 기능을 구현할때 용이함 * (자세한 것은 player클래스 참조) * Lambda혹은 함수포인터, 함수객체를 인자로 받는다. * CHealthBarUI는 철저히 UI만 표현한다. * ------------------------------------------------------------*/ /* 캐릭터마다의 체력계산함수 포인터 전달 */ static CHealthBarUI* create(HealthCalculatorFunc healthCalFunc); /* 플레이중 버프나 보너스 타임때 계산 함수 변경가능위해 */ void ChangeHealthCalFunc(HealthCalculatorFunc healthCalFunc); /* ProgressBar Update * m_HealthCalculatorFunction에 들어있는 함수 호출 */ void UpdateHealthUI(float delta); { float percent = m_HealthCalculatorFunction(delta); m_HealthBar->setPercentage(percent); } /* HealthFunc 타입 정의 */ typedef std::function<float(float delta)> HealthCalculatorFunc; /* HealthBarUI 생성 시 캐릭터의 원하는 체력계산함수 호출을 위해 * 체력계산함수 포인터 전달 */ HealthCalculatorFunc m_HealthCalculatorFunction; | cs |
CHealthBarUI 클래스의 주요 함수 및 동작원리 설명
1. UI생성 시 캐릭터의 체력계산 함수포인터를 전달합니다.
2. 때문에 사용자는 캐릭터의 종류에 따라 원하는 체력계산 함수를 모두 정의 할 수 있습니다.
3. ChangeHealthCalFunc함수를 통해 호출되는 함수를 변경할 수 있습니다.
사용 예
1 2 3 4 | auto healthBar = CHealthBarUI::create( std::bind(&CPlayer::HealthCalculatorInNormal, CObjectManager::Instance()->getPlayer(), std::placeholders::_1)); | cs |
1. 체력 계산 함수로써 Player의 HealthCalculatorInNormal()함수를 호출하는 HealthBarUI를 생성
2. std::placeholders::_1 : 함수 호출 시 전달하는 매개변수는 함수를 호출하는 장소에서 전달하는 값으로 사용한다는 의미입니다.
3. 여기서는 deltaTime을 전달합니다.
귀차니즘을 위한 2줄 요약
1. HealthBarUI는 UI만 표현하고 계산 함수는 캐릭터가 가지고 있다.
2. HealthBarUI를 생성할 때 캐릭터의 함수를 인자로 전달하면된다.
3. ChangeHealthCarFunc()로 계산 함수를 변경할 수 있습니다.
'All > Project' 카테고리의 다른 글
Laviah (0) | 2017.04.08 |
---|---|
매주 일요일 랭킹 초기화 (0) | 2017.04.05 |
UI_ MyButton (0) | 2016.04.12 |
별게임의 상태트리 (0) | 2016.04.12 |
AI_ FSM / State (0) | 2016.04.12 |