Skip to content

eensungkim/mirror-ios-rock-scissor-paper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 

Repository files navigation

Project 01. 묵찌빠 프로그램

목차

1. Overview

2. Key Topics

3. 프로그램 설명

4. 가위바위보(묵찌빠) 승부 평가 로직 설명

5. 프로그램 출력 예

6. 회고

Overview

실제 묵찌빠 프로그램을 콘솔 상에서 구현하여 Swift 언어의 기초적인 내용들을 학습하고 다뤄보는 프로젝트입니다.

Key Topics

  • 여러 타입의 활용법
    • Enumeration 활용
    • Structure 활용
  • Swift의 Optional 안전하게 처리하는 법
    • guard 구문의 이해와 활용
  • repeat-while 문의 사용법
  • 객체지향 프로그래밍 학습
  • 코딩 컨벤션 고민하기
  • Git 커밋 단위 고민하기
  • Git 커밋 로그 형식 학습하기

프로그램 설명

  • GameMaster 구조체
    • 전체 프로그램의 실행과 사용자 입력, 및 종료를 처리
    • gameType에 따라 가위바위보 또는 묵찌빠 실행을 요청
  • RockPaperScissors 구조체
    • 유저 입력에 따라 가위바위보를 선택하고 컴퓨터(랜덤)와 비교하여 승패 또는 무승부 판정
  • MookJjiBba 구조체
    • 유저 입력에 따라 묵찌빠를 선택하고 컴퓨터(랜덤)와 비교하여 승패 판정
  • RPS, MJB 열거형
    • 유저 입력에 따라 가위바위보와 묵찌빠 선택
  • GameType 열거형
    • 가위바위보, 묵찌빠 2 케이스에 따른 게임 실행 요청을 각 구조체로 전달

가위바위보(묵찌빠) 승부 평가 로직 설명

  • 가위바위보(묵찌빠) 열거형의 winningLogic 계산 프로퍼티는 두 핸드의 상성을 key:value 로 나타내는 딕셔너리를 포함
  • 이를 바탕으로 두 핸드가 서로 같을 경우는 별도로 처리, 두 핸드가 서로 다를 경우는 딕셔너리의 키로 핸드를 전달하고 이를 다른 핸드와 비교하여 승부 평가
// enumerations/enumerations.swift
enum RPS: Int {
    case scissors = 1, rock = 2, paper = 3
    
    var winningLogic: [RPS:RPS] {
        get {
            let dictionary: [RPS:RPS] = [
                .rock : .scissors,
                .scissors : .paper,
                .paper : .rock
            ]
            return dictionary
        }
    }
}
// structures/RockPaperScissors.swift
if userHand == computerHand {
    print("비겼습니다.")
    return (.restart, .computer)
}
        
let winningLogic = userHand.winningLogic
turn = winningLogic[userHand] == computerHand ? .user : .computer

프로그램 출력 예

전체 프로그램 예시

스크린샷 2023-12-01 오전 10 04 35

오입력 및 종료 입력 예시

스크린샷 2023-12-01 오전 10 05 03


회고

  • 재사용할 수 있고 기능을 쉽게 추가 또는 변경할 수 있는 프로그램을 작성하는 것이 중요하다는 점을 깨닫게 되었다.
    • Step 1 : 함수형 프로그래밍 방식
    • Step 2 : 객체지향 프로그래밍 방식 적용, (전체 로직 제외) 대부분 새로 작성
  • 커밋 단위는 가능한 세분화하는 것이 좋다.
  • 스위프트에서는 가능한 구조체를 활용할 것을 권장하고 있다.
  • 메서드 명에는 가급적 get 을 쓰지 않는 것이 좋다. (get이 다양한 의미로 활용되기 때문)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages