이 페이지는 강의 외 추가 강의예요. I단원에서 배운 진법·리스트를 게임에서 실제로 쓰는 방식(비트 플래그, 인벤토리, 세이브 데이터)으로 확장합니다. 각 주제마다 자료구조 복기 → 사용 API → 실제 구현 활용 순으로 짚어요.
1. 진법 — 게임 시스템에서의 실제 활용
단순히 "10진수를 2진수로 표기한다"는 것만으로는 자료구조와의 연결이 약해요. 게임에서는 한 숫자에 여러 상태를 비트로 담는 플래그, 슬롯 개수가 2^n일 때 인덱스 표현, 세이브/네트워크에서 숫자 압축 등에 진법·비트가 쓰입니다.
📌 복기: 진법·비트
- 개념 진법은 "몇 개씩 묶어 자릿수를 올리느냐". 2진 한 자리 = 비트 하나(0/1). 16진은 0–9, A–F로 한 자리에 16가지 값.
- 진법 변환: 10진 → 2진은 2로 나눈 나머지를 아래→위로 읽기. 2진수 한 자리는 0 또는 1 한 비트.
- 자료구조와의 연결: "여러 개의 참/거짓(불리언)"을 한 개의 정수로 묶어 저장할 때, 각 비트가 하나의 플래그가 됩니다. (비트마스크)
📌 사용하는 파이썬 API
bin(정수),hex(정수)- 정수를 2진·16진 문자열로 바꿔요. 디버깅·확인용.
int("11001", 2)- 2진수 문자열을 10진 정수로 변환. 두 번째 인자가 밑(2, 8, 16 등).
1 << n- 1을 왼쪽으로 n비트 시프트 → n번 비트만 1인 값. 예:
1 << 2→ 4 (0b100). a | b(OR),a & b(AND)- 비트 OR로 "해당 비트 켜기", AND로 "해당 비트가 켜져 있는지 확인".
🎮 실제 구현에서 쓰는 곳
- 업적·맵 열림 플래그: "업적 1, 2, 3 달성"을 각각 비트 0, 1, 2로 두고, 한 정수(예: 0b101)에 담아요. OR로 달성 추가, AND로 확인.
- 옵션/상태 조합: "소리 ON, 진동 OFF, 자막 ON"처럼 여러 on/off를 한 숫자로 저장할 때 비트 플래그를 씁니다.
- 2^n 슬롯 인덱스: 인벤토리 슬롯이 8개(2³)일 때 인덱스 0~7은 3비트로 표현 가능. 메모리/패킷 크기 절약에 활용.
🐍 실습: 비트 플래그
2. 리스트 — 인벤토리·퀘스트 목록
리스트는 순서가 있는 자료라서 게임의 인벤토리(몇 번째 슬롯에 뭐가 있는지), 퀘스트 목록, 대사 줄 등에 그대로 대응해요.
📌 복기: 리스트(배열)
- 연산: 맨 뒤에 넣기(append), 지정 인덱스 제거·반환(pop(인덱스)), i번째 값 접근(리스트[i]).
- 배열은 "몇 번째 칸"으로 바로 접근 가능해서, "n번 슬롯 아이템 보기"에 적합해요.
📌 사용하는 파이썬 API
리스트.append(값)- 맨 뒤에 한 칸 추가. 아이템 획득 시 인벤에 넣는 것에 대응.
리스트.pop(인덱스)- 해당 인덱스 값을 제거하고 반환. "n번 슬롯 아이템 사용 후 제거"에 대응.
리스트[i],len(리스트)- i번째 슬롯 접근, 슬롯 개수(길이).
🎮 실제 구현에서 쓰는 곳
- 인벤토리: 슬롯 번호 = 리스트 인덱스. append로 획득, pop(i)로 사용/버리기, inv[i]로 툴팁 표시.
- 퀘스트 목록: 진행 중 퀘스트 ID나 이름을 리스트에 넣고, 완료 시 pop 또는 별도 "완료 리스트"로 이동.
- 대사 한 줄씩: 대사 문자열을 리스트에 순서대로 넣고, 인덱스를 올려가며 "다음 대사" 표시 (다음 단원 큐와 연결).
🐍 실습: 인벤토리
3. 세이브 데이터처럼 묶기
HP, 골드, 인벤토리 리스트를 한 덩어리로 묶으면 "세이브 스냅샷"처럼 다룰 수 있어요. 파이썬에서는 dict(딕셔너리)로 키–값 쌍을 저장합니다.
📌 복기
자료구조는 "어떤 순서·형태로 담을지"를 정하는 것. 게임 세이브는 "HP, 골드, 인벤, 플래그" 등을 이름(키)으로 구분해 묶는 구조예요.
📌 사용하는 파이썬 API
{"키": 값, ...}- 딕셔너리: 키로 값을 찾음.
save["hp"],save["inv"]처럼 접근.
🐍 실습: 세이브 흉내