Android 제비뽑기 앱 만들기 (I)
결과물
Source code: https://github.com/chobocho/choose_one
앱의 목적
2명이상의 사용자들 중 한 명을 뽑아 준다 (사다리 타기)
-
사용 예: 커피 쏘기
앱의 기본 동작 설계
앱의 요구 사항 분석
-
앱을 실행 후 2명 이상이 화면에 손가락을 올리면, 3초 뒤에 한 명을 선택해 준다
-
손가락을 올려 둔 상태에서 3초 안에 손가락을 떼거나, 추가하면 다시 3초를 센다
-
손가락을 올려 둔 상태에서 3초 안에 손가락을 모두 떼면, 동작을 멈춘다
-
60초 동안 아무도 손가락을 올리지 않으면 자동으로 앱이 종료 된다
기초 설계
-
앱의 동작을 위하여 내부적으로 IDLE, SELECTING, SELECTED 3개의 State를 가지는 State machie 을 구상하였다.
-
State의 변화는 아래와 같다. (편의 상 시간의 변화를 tick이란 단어로 표시했다.)
State pattern
-
위 State diagram을 코드로 바꾸기 위하여, State pattern을 사용한다.
Code 생성
IState.java
package com.chobocho.chooseone.state;
import com.chobocho.chooseone.manager.ChooseManager;
public abstract class IState {
public static final int IDLE = 0;
public static final int SELECTING = 1;
public static final int SELECTED = 2;
ChooseManager manager;
int mTick;
int mPointNum;
public IState() {
}
public void Init() {
mTick = 0;
}
public void tick() {
// TODO implement here
}
public void updatePointList(int point) {
// TODO implement here
}
}
IdleState.java
package com.chobocho.chooseone.state;
import androidx.annotation.NonNull;
import com.chobocho.chooseone.manager.ChooseManager;
public class IdleState extends IState {
public IdleState(ChooseManager manager) {
this.manager = manager;
super.Init();
mPointNum = 0;
}
@Override
public void updatePointList(int point) {
mPointNum = point;
if (mPointNum >= 2) {
manager.transit(IState.SELECTING);
}
}
@Override
@NonNull
public String toString(){
return "IdleState";
}
}
'Tip > Android' 카테고리의 다른 글
[Termux] Web server 돌리기 (0) | 2020.10.27 |
---|---|
[Termux] ssh 사용하기 (0) | 2020.10.26 |
[Gradle] Version 명 자동 업데이트 (0) | 2020.04.11 |