안녕하세요? 뜻밖의 행운입니다.
패스트 캠퍼스 도전 36일차
파이썬 중급 클래스 최종 입니다.
다음에 또 고급 클래스가 있을까요?
오늘은 좀 뜻깊은 실습을 했습니다.
바로 고전 게임 스타크래프트 ㅎ
민속놀이라고도 하죠 그런 전략 시뮬레이션 게임
유닛 생성과 관련된 실습 문제를 풀어봤는데 재미 있었습니다.
무엇보다 이제는 외계어 같은 개발언어를 읽고 이해 할 수 있는 수준까지는
되어서 ㅎ
재미가 있네요
문제는 아래와 같습니다.
1) Player 클래스를 구현
속성 : 닉네임, 미네랄, 가스, 유닛리스트
2) 메서드 : 생산하기 구현
produce(이름, 미네랄, 가스, 체력, 방어막, 공격력)
Player의 미네랄과 가스가 충분한 경우
-> 유닛 객체를 생성하고 유닛리스트에 추가한다.
Player의 미네랄이 부족한 경우
-> "미네랄이 부족합니다"를 출력
Player의 가스가 부족한 경우
-> "가스가 부족합니다"를 출력
그렇다면 이것을 구현한다면?
우선 클래스는 2개를 정의 해야 합니다.
Player와 Plaer가 생산한 unit 클래스
그전부터 unit 클래스는 구현 했으니
상속이 아닌 이런 관계를 has-a 관계라고 한다고 합니다.
# 유닛 클래스
class Unit:
"""
속성 : 이름, 체력, 방어막, 공격력
"""
def __init__(self, name, hp, shield, demage):
self.name = name
self.hp = hp
self.shield = shield
self.demage = demage
# 플레이어 클래스
class Player:
"""
속성 : 닉네임, 미네랄, 가스, 유닛리스트
메서드 : 유닛 생산 하기
"""
def __init__(self, nickname, mineral, gas, unit_list=[]):
self.nickname = nickname
self.mineral = mineral
self.gas = gas
self.unit_list = unit_list
# 생산 하기
def produce(self, name, mineral, gas, hp, shield, demage):
if self.mineral - mineral < 0:
print("미네랄이 부족합니다.")
elif self.gas - gas < 0:
print("가스가 부족합니다.")
else:
self.mineral -= mineral
self.gas -= gas
unit = Unit(name, hp, shield, demage)
self.unit_list.append(unit)
print(f"[{name}]을(를) 생산합니다.")
클래스 구현은 위처럼 합니다.
Unit은 별 다를거 없구요 Player는 이번에 처음 구현 한거니까 살펴보면
nickname은 유저 ID로 보시면 되고
생산을 해야 하니까 미네랄과 가스가 있어야 겠죠?
그리고 unit 리스트의 경우는 생성할 unit 리스트를 받아 오는 것입니다.
여기서 눈여겨 볼부분은 생산 매서드죠
self.mineral - mineral이 핵심입니다. self는 Player 객체가 가지고 있는것
그리고 - mineral은 유닛 생성시에 필요한 mineral 입니다.
아래 gas도 마찬가지구요 이것으로 생산이 가능한지 여부를 판단해야 하니까요
그리고 생성할 유닛 정보는
# 유닛 정보
unit_info = {
"probe" : {
"name" : "프로브",
"mineral" : 50,
"gas" : 0,
"hp" : 20,
"shield" : 20,
"demage" : 5
},
"zealot" : {
"name" : "질럿",
"mineral" : 100,
"gas" : 0,
"hp" : 100,
"shield" : 60,
"demage" : 16
},
"dragoon" : {
"name" : "드라군",
"mineral" : 125,
"gas" : 50,
"hp" : 100,
"shield" : 80,
"demage" : 20
}
}
그렇다면 잘동작하는지 봐야겠죠?
내 플레이어가 가지고 있는 미네랄 400, 가스 50으로
유닛들이 잘 생산되는 것이 보입니다.
저는 몇번 계속 복습하면서 완전히 제것으로 만들어야 겠네요
'IT > 프로그래밍' 카테고리의 다른 글
[파이썬] 파이썬에서 SQLite3 사용하기 [패스트 캠퍼스 챌린지 41일] (0) | 2022.03.05 |
---|---|
[파이썬] 데이터베이스 파트 SQL DML [패스트 캠퍼스 챌린지 40일] (0) | 2022.03.04 |
[파이썬] 데이터베이스 파트 SQL DML [패스트 캠퍼스 챌린지 39일] (0) | 2022.03.03 |
[파이썬] 파이썬 / SQL DDL(create, alter, drop) [패스트 캠퍼스 챌린지 38일] (0) | 2022.03.02 |
[파이썬] 파이썬 데이터 베이스 [패스트 캠퍼스 챌린지 37일] (0) | 2022.03.01 |
[파이썬] 파이썬 클래스 상속 [패스트 캠퍼스 챌린지 35일] (0) | 2022.02.27 |
[파이썬] 파이썬 클래스의 속성 [패스트 캠퍼스 챌린지 34일] (0) | 2022.02.26 |
[파이썬] 파이썬 클래스의 속성 [패스트 캠퍼스 챌린지 33일] (0) | 2022.02.25 |
[파이썬] 파이썬 클래스와 객체 [패스트 캠퍼스 챌린지 32일] (0) | 2022.02.24 |
[파이썬] 파이썬 람다함수 [패스트 캠퍼스 챌린지 31일] (0) | 2022.02.23 |