본문 바로가기
부트캠프TIL, WIL/AI웹개발(스파르타코딩클럽)

[AI 웹개발TIL][13일차 TIL] 턴제 게임 만들기 (개인과제)

by 우지uz 2023. 4. 3.
  • 게임 과제 제공자 :  "스파르타 코딩 캠프"
  • 진행 중인 과정 : AI 웹 개발과정
  • 턴제 게임 만들기 발제! 
더보기
  • 힌트(캐릭터 클래스)

class Character:
    """
    모든 캐릭터의 모체가 되는 클래스
    """
    def __init__(self, name, hp, power):
        self.name = name
        self.max_hp = hp
        self.hp = hp
        self.power = power

    def attack(self, other):
        damage = random.randint(self.power - 2, self.power + 2)
        other.hp = max(other.hp - damage, 0)
        print(f"{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다.")
        if other.hp == 0:
            print(f"{other.name}이(가) 쓰러졌습니다.")

    def show_status(self):
        print(f"{self.name}의 상태: HP {self.hp}/{self.max_hp}")

접은글로 작성해서, 필요에 따라 클릭해서 문제를 읽어보시면 된다. 

  • 부모 클래스를 생성 했으며. 다음의 3개 함수를 생성했다.
  • init 생성자 - 이름, 체력, 기본 공격력 설정
  • 일반 공격 attack - 공격하는 대상을 target으로 저장
  • 플레이어와 몬스터의 상태창 정보를 띄우는 status 함수

부모클래스는 플레이어와 몬스터 모두 갖고 있는 상위 클래스이다. 
부모클래스를 지정 하는 이유는 간단하게
모두가 갖고 있는 성질을, 굳이 따로따로 다 설정할 필요가 없기 때문이다. 

  • 부모클래스의 속성을 상속받은 자녀클래스는 ' 플레이어'와 '몬스터' 이다
  • 플레이어 클래스 (부모클래스상속)

일반 공격은 플레이어와 몬스터가 둘다 갖는 함수이자 공격이지만, 
마법 공격이나 플레이어만 할 수 있는 스킬들은 
플레이어 클래스에서만 선언해야 된다. 

여기서 self의 존재에 대해 의문을 가졌는데, 팀원들에게 질문하고 소통하며 
결론적으로 " 클래스의 존재성"에 대한 의문과 함께 해결되었다. 
self가 존재하기 때문에, 클래스 내에서 이름, 체력, 공격력과 같은 함수를 
클래스 내에 있는 함수들과 서로서로 교류하며 사용할 수 있다. 

여기서 self.name 과 self.hp 과 self.power 와 같은 속성들은 
클래스 내에서만 사용할 수 있다. 그 말은 즉슨 self라는 것은 클래스 내에서만 사용할 수 있는 특수언어와 같은 것이고
클래스 내에서의 약속이자 규칙이다. 

  • 몬스터 클래스 (부모클래스상속)

부모 클래스의 이름, 체력, 공격력을 상속받은 몬스터 클래스는
플레이어를 일반 공격만 하면 되기 때문에
추가적인 속성이 필요가 없다. 
하지만, 스스로 회복하거나 대기하는 스킬을 생성했는데
이 스킬을 생성하면, 자기 자신의 체력을 10씩 회복함과 동시에
체력을 10 회복했다는 것을 프린트로 나타낸다. 
대기하는 함수는 별다른 동작 없이, 그냥 아무런 동작도 하지않고 턴을 넘긴다. 

  • 이제 생성된 부모 클래스, 플레이어 클래스, 몬스터 클래스를 사용해서 "인스턴스를 생성"한다

이 턴제 게임에서는 플레이어 : 몬스터가 1:3 으로 싸우도록 하고 싶기 때문에
플레이어 한명과 몬스터 3마리를 한꺼번에 생성하는 createobjects 함수를 
클래스 밖에서 호출한다

여기서 클래스를 사용해서 인스턴스를 생성할 때에는 
클래스의 속성에 (self, name, hp, power)가 있었기 때문에 
인스턴스를 생성할 때에도 name, hp, power 순서로 값을 입력해야 함을 기억해야 한다. 

name은 문자열로, hp 와 power 는 정수로 선언한다. 

  • 전투 시작시 정보들을 보여준다

  • 첫번 째로 플레이어가 공격을 한다.

  • 첫번째로 입력할 정보는 일반 공격을 할것인지? 마법공격을 할 건인지 ? 이다
  • 이후 어떤 몬스터를 공격할 것인지 정한다
  • if 공격을 입력한다면, 일반 공격을 하도록 
  • elif 마법을 입력한다면, 마법 공격을 하도록
  • 단점이 있다면, 공격 또는 마법이 아닌, 다른 키를 입력하면 공격하지 않고 몬스터 턴으로 넘어간다.
  • 이 점에 대해 아쉬워서, 팀 과제에서 팀들과 함께 구현했다. (tmi : 일주일 뒤에 작성하는 TIL)
  • 이후 몬스터나, 플레이어의 체력이 0 이하이면, 게임이 종료된다. 

  • 이후 반복분 while 문으로 시스템을 정했다. 

 

출처1 : https://no-start.tistory.com/50

 

[스파르타] 파이썬 프로젝트3: 턴제 RPG 게임 만들기 (심화)

게임설명 (1) 턴제 RPG 게임 만들기 [간단설명] 공통속성: 이름 / HP / 공격력 플레이어 행동 종류: 공격 / 마법 몬스터 행동 종류: 공격 / 회복 / 대기 몬스터 종류: 미니고블린 / 고블린 / 슈퍼고블린

no-start.tistory.com

출처2 : https://rlatla626.tistory.com/14

 

파이썬기초 - 파이썬을 이용해 턴제 게임 만들기

클래스를 활용해서 메이플스토리 몬스터와 캐릭터를 만들어서 싸움을 붙여보겠습니다. 클래스를 총 3개 만들어 보겠습니다. class Unit: hp = None normal_attack_dmg = None def attack(self, enemy_hp): return enemy_hp

rlatla626.tistory.com

출처3 : https://velog.io/@thddnjstjr/TIL2021-12-22

 

2021-12-22(파이썬 게임 3 : 간단한 턴방식 RPG)

금주의 계획 : 20일 월요일 ~ 22일 수요일 파이썬 게임 프로젝트 진행 / 23일 목요일 ~ 24일 금요일 카카오톡UI클론, 인스타UI클론 프로젝트 진행, 협업을 위한 GIT 활용 특강(오후2시~4시 예정) / 일주

velog.io

 

오늘 적은 내용들은, 어떤 기능을 썼는가 ?? 에 초점을 두긴 했지만
일주일만에 파이썬 기초 문법, 심화 문법을 배우고 
턴제 게임 과제를 진행하는 것은 나에게 큰 무리였다. 

개인 과제를 하면서 문제를 푸는데에 초점을 두진 않았고
언젠가는 나도 웹이나 앱을 개발해서 나만의 스페이스를 확장해 나갈 텐데 
하나라도 더 배우고 이해하자는 목적으로 과제를 진행했다 

생각보다 강의와 책에서 공부하고, 기본 예제에서 풀어본 문제들보다는 
어려웠고 
특히나 클래서, 상속, self, 터미널에서 가상환경 설정, vs code 세팅하기
함수 이해하고 설정하기, 주어진 조건들을 읽으면서 한줄 한줄 이해하는데에 집중했다.