게임으로 빗대어 보는 파이썬 기초
게임으로 빗대어 보는 파이썬 기초
안녕하세요! 🎮 4시간 동안 파이썬의 필수 개념들을 게임에 빗대어서 학습하는 시간을 가져볼 거예요. 게임을 만드는 건 마치 레고 블록으로 성을 쌓는 것과 같아요. 먼저 기본 블록(파이썬 기초)을 제대로 알아야 멋진 성(게임)을 만들 수 있답니다!
📦 기본 자료형 - 게임의 기본 재료들
🔢 숫자형 (Numbers)
게임에서 숫자는 정말 중요해요! 마치 축구 게임에서 점수판과 같죠.
int (정수): 칼같이 정확한 숫자들
PYTHON3 lines1player_health = 100 # 플레이어 체력 2enemy_count = 5 # 적의 수 3score = 1500 # 게임 점수
float (실수): 소수점이 있는 정밀한 숫자들
PYTHON3 lines1player_speed = 5.5 # 플레이어 이동 속도 2jump_height = 3.2 # 점프 높이 3bullet_damage = 25.5 # 총알 데미지
📝 문자형 (String)
str (문자열): 게임 속 모든 글자들
PYTHON3 lines1player_name = "용사" # 플레이어 이름 2game_title = "슈퍼 어드벤처" # 게임 제목 3status_message = "레벨업!" # 상태 메시지
✅ 논리형 (Boolean)
bool (참/거짓): 게임의 스위치 역할
PYTHON3 lines1is_game_running = True # 게임이 돌아가고 있나? 2player_is_alive = False # 플레이어가 살아있나? 3has_key = True # 열쇠를 가지고 있나?
🗂️ 자료구조 - 데이터를 정리하는 상자들
📋 시퀀스형
list (리스트): 마치 아이템 가방 같아요!
PYTHON8 lines1# 플레이어 가방 속 아이템들 2inventory = ["검", "물약", "열쇠", "방패"] 3 4# 적들의 목록 5enemies = ["고블린", "오크", "드래곤"] 6 7# 점수 기록 8high_scores = [1000, 850, 750, 600]
tuple (튜플): 변하지 않는 좌표나 색깔 정보
PYTHON3 lines1player_position = (100, 200) # x=100, y=200 위치 2red_color = (255, 0, 0) # 빨간색 RGB 값 3screen_size = (800, 600) # 화면 크기
range: 반복할 때 사용하는 숫자 범위
PYTHON3 lines1# 1부터 10까지의 적을 생성 2for i in range(1, 11): 3 print(f"{i}번째 적 생성!")
🗃️ 매핑형
dict (딕셔너리): 게임 설정을 저장하는 서랍장
PYTHON14 lines1# 플레이어 정보 2player_info = { 3 "이름": "전사", 4 "레벨": 15, 5 "체력": 100, 6 "마나": 50 7} 8 9# 게임 설정 10game_settings = { 11 "음량": 80, 12 "화면_크기": "1920x1080", 13 "난이도": "보통" 14}
🎲 집합형
set: 중복 없는 특별한 상자
PYTHON2 lines1# 플레이어가 방문한 지역들 (중복 없이) 2visited_areas = {"숲", "동굴", "성", "마을"}
🎯 제어구조 - 게임의 두뇌
🤔 조건문 (if/elif/else)
게임에서 상황 판단하기! 마치 교통신호등과 같아요.
PYTHON8 lines1player_health = 30 2 3if player_health > 50: 4 print("체력이 충분해요! 💪") 5elif player_health > 20: 6 print("조심하세요! 체력이 부족해요 😰") 7else: 8 print("위험해요! 회복 물약을 사용하세요! 🆘")
🔄 반복문
while: 게임이 계속 돌아가게 하는 엔진
PYTHON7 lines1game_running = True 2while game_running: 3 # 플레이어 입력 받기 4 # 게임 상태 업데이트 5 # 화면 그리기 6 if player_health <= 0: 7game_running = False # 게임 종료
for: 여러 작업을 반복할 때
PYTHON4 lines1# 모든 적들을 움직이기 2enemies = ["고블린1", "고블린2", "오크"] 3for enemy in enemies: 4 print(f"{enemy}이(가) 움직입니다!")
🛠️ 함수 - 재사용 가능한 도구들
함수는 마치 만능 도구상자 같아요! 한 번 만들어두면 계속 사용할 수 있답니다.
PYTHON8 lines1def attack_monster(monster_name, damage): 2 """몬스터를 공격하는 함수""" 3 print(f"{monster_name}에게 {damage}의 데미지!") 4 return f"{monster_name} 처치 완료!" 5 6# 함수 사용하기 7result = attack_monster("고블린", 25) 8print(result) # "고블린 처치 완료!"
PYTHON9 lines1def heal_player(current_health, heal_amount): 2 """플레이어 체력 회복 함수""" 3 new_health = current_health + heal_amount 4 if new_health > 100: 5new_health = 100 # 최대 체력 제한 6 return new_health 7 8# 사용 예시 9player_hp = heal_player(70, 40) # 70 + 40 = 100
👥 클래스와 객체 - 게임 캐릭터 만들기
클래스는 캐릭터를 만드는 설계도이고, 객체는 실제 캐릭터예요!
🏗️ 기본 클래스 만들기
PYTHON27 lines1class Player: 2 """플레이어 캐릭터 클래스""" 3 def __init__(self, name): 4self.name = name # 이름 5self.health = 100 # 체력 6self.level = 1 # 레벨 7self.experience = 0 # 경험치 8 9 def attack(self, target): 10 """공격 메서드""" 11 damage = self.level * 10 12 print(f"{self.name}이(가) {target}을(를) 공격! {damage} 데미지!") 13 return damage 14 15 def level_up(self): 16 """레벨업 메서드""" 17 self.level += 1 18 self.health += 20 19 print(f"🎉 레벨업! 현재 레벨: {self.level}") 20 21# 플레이어 캐릭터 생성 22hero = Player("용사") 23print(f"안녕하세요! {hero.name}님") # "안녕하세요! 용사님" 24 25# 플레이어 행동 26hero.attack("고블린") # "용사이(가) 고블린을(를) 공격! 10 데미지!" 27hero.level_up() # "🎉 레벨업! 현재 레벨: 2"
🧬 상속 - 캐릭터 종류 만들기
PYTHON35 lines1class Warrior(Player): 2 """전사 클래스 (Player를 상속받음)""" 3 def __init__(self, name): 4super().__init__(name) # 부모 클래스 초기화 5self.strength = 15 # 전사만의 특별한 능력 6 7 def power_attack(self, target): 8 """전사의 특수 공격""" 9 damage = self.level * 15 + self.strength 10 print(f"💥 {self.name}의 강력한 일격! {target}에게 {damage} 데미지!") 11 return damage 12 13class Mage(Player): 14 """마법사 클래스""" 15 def __init__(self, name): 16 super().__init__(name) 17 self.mana = 50 18 19 def cast_spell(self, spell_name, target): 20 """마법 시전""" 21 if self.mana >= 10: 22 self.mana -= 10 23 damage = self.level * 12 24 print(f"✨ {self.name}이(가) {spell_name} 시전! {target}에게 {damage} 마법 데미지!") 25 return damage 26 else: 27 print("마나가 부족합니다!") 28 return 0 29 30# 다양한 캐릭터 생성 31warrior = Warrior("강철검사") 32mage = Mage("현자") 33 34warrior.power_attack("드래곤") # 전사의 특수 공격 35mage.cast_spell("파이어볼", "고블린") # 마법사의 마법
📚 모듈과 라이브러리 - 미리 만들어진 도구들
📥 import 문
PYTHON5 lines1import pygame # 게임 만들기용 라이브러리 2import random # 랜덤 요소 만들기 3import math # 수학 계산 4 5from pygame import sprite # 특정 부분만 가져오기
🎲 자주 사용하는 모듈들
PYTHON14 lines1import random 2import math 3 4# 랜덤한 적 생성 위치 5enemy_x = random.randint(0, 800) # 0~800 사이 랜덤 위치 6enemy_y = random.randint(0, 600) 7 8# 두 캐릭터 사이의 거리 계산 9def calculate_distance(x1, y1, x2, y2): 10 return math.sqrt((x2-x1)**2 + (y2-y1)**2) 11 12# 사용 예시 13distance = calculate_distance(100, 100, 200, 200) 14print(f"거리: {distance}")
📁 파일 처리 - 게임 데이터 저장하기
PYTHON19 lines1# 최고 점수 저장하기 2def save_high_score(score): 3 with open('high_score.txt', 'w') as file: 4 file.write(str(score)) 5 print("최고 점수 저장 완료!") 6 7# 최고 점수 불러오기 8def load_high_score(): 9 try: 10 with open('high_score.txt', 'r') as file: 11 score = int(file.read()) 12 return score 13 except FileNotFoundError: 14 print("저장된 점수가 없습니다.") 15 return 0 16 17# 사용 예시 18save_high_score(1500) 19best_score = load_high_score()
🚨 예외 처리 - 오류 대비하기
PYTHON15 lines1def load_player_data(filename): 2 try: 3 with open(filename, 'r') as file: 4 data = file.read() 5 print("플레이어 데이터 로드 성공!") 6 return data 7 except FileNotFoundError: 8 print("⚠️ 세이브 파일을 찾을 수 없습니다!") 9 return None 10 except Exception as e: 11 print(f"❌ 오류 발생: {e}") 12 return None 13 14# 안전한 파일 로드 15player_data = load_player_data("save_game.txt")
⚡ 중요한 파이썬 고급 기법들
🚀 리스트 컴프리헨션
PYTHON9 lines1# 모든 적의 체력이 50 이상인 적들만 필터링 2enemies = [ 3 {"name": "고블린", "hp": 30}, 4 {"name": "오크", "hp": 80}, 5 {"name": "드래곤", "hp": 200} 6] 7 8strong_enemies = [enemy for enemy in enemies if enemy["hp"] >= 50] 9print(strong_enemies) # 오크와 드래곤만 남음
🎯 람다 함수
PYTHON3 lines1# 적들을 체력 순으로 정렬 2enemies.sort(key=lambda enemy: enemy["hp"]) 3print("체력 낮은 순:", enemies)
📦 언패킹
PYTHON3 lines1player_pos = (150, 300) 2x, y = player_pos # 튜플 언패킹 3print(f"플레이어 위치: x={x}, y={y}")
🎯 실습 과제
이제 배운 개념들을 제대로 이해했는지 확인해볼 시간이에요!
과제 1: 기본 RPG 캐릭터 시스템 만들기
다음 조건을 만족하는 RPG 캐릭터 시스템을 만들어보세요:
-
Character 클래스를 만들고 다음 속성을 가지게 하세요:
-
name (이름)
-
health (체력, 기본값 100)
-
attack_power (공격력, 기본값 10)
-
-
Character 클래스에 다음 메서드를 추가하세요:
-
attack(target): 상대방을 공격하는 메서드
-
take_damage(damage): 데미지를 받는 메서드
-
is_alive(): 살아있는지 확인하는 메서드
-
-
Hero와 Monster 클래스를 만들어 Character를 상속받게 하세요
과제 2: 간단한 게임 시뮬레이션
-
영웅과 몬스터가 서로 싸우는 시뮬레이션을 만드세요
-
각 턴마다 공격하고, 누군가 쓰러질 때까지 반복하세요
-
승자를 출력하세요
과제 3: 데이터 처리 연습
-
게임 점수를 파일에 저장하고 불러오는 기능을 만드세요
-
여러 플레이어의 점수를 딕셔너리로 관리하세요
-
최고 점수 순으로 랭킹을 출력하세요
과제 4: 고급 기능 구현
-
리스트 컴프리헨션을 사용해서 체력이 50 이상인 몬스터들만 필터링하세요
-
람다 함수를 사용해서 몬스터들을 공격력 순으로 정렬하세요
-
예외 처리를 사용해서 안전한 파일 입출력을 구현하세요
🎊 마무리
축하해요! 🎉 이제 파이게임으로 게임을 만들 수 있는 모든 파이썬 기초 지식을 갖추셨어요!
기억하세요:
-
클래스와 객체는 게임의 모든 요소를 만드는 핵심이에요
-
자료구조는 게임 데이터를 효율적으로 관리하는 열쇠예요
-
함수는 코드를 깔끔하게 정리하는 마법이에요
-
제어구조는 게임의 흐름을 조절하는 교통신호등이에요
이제 파이게임으로 멋진 게임을 만들러 가볼까요? 여러분의 상상력이 현실이 되는 순간이 곧 올 거예요!