[TIL] 끝나지 않는 프로젝트 및 github활용
내 담당이었던 부분을 고쳐서 적용하지 못한 것이 아쉬워 나머지 공부를 했다.
오늘 공부한 것 정리 및 복습ㅜㅜ
1. github 충돌 난 파일 문제 해결
github에 들어가보니 지난 파일에 덮어쓰기가 되면서 이전 변경사항과 새로운 변경사항이 충돌오류가 나있었다.
main.py code에서 변경할 부분이 무엇인지 하나씩 확인 및 변경 설정을 하였다..
2. autoenv 로 자동으로 venv activate시키기.
- https://github.com/hyperupcall/autoenv
```
brew install autoenv
```
>> 이 부분은 적용 후 터미널에 뭔가 오류가 나서 지웠음,,
터미널사용이랑 언어가 익숙해지면 다시 시도해봐야지
3. 필요한 클래스나 함수만 가져오기
from unit_set import equipitem
equipitem = EquipItem()
클래스로 인스턴스를 만들고, (붕어빵 틀로 팥붕어빵을 만들고,)
equipitem라는 변수에 인스턴스를 할당 (팥붕어빵)
from unit_set import equipitem
unit_set파일에 있는 equipitem을 import한 것 (팥붕어빵만 import봉투에 담아옴)
4. 협업을 위한 github활용
git clone 하기
- git clone할땐 https 방식이 있고, ssh방식이 있다.
- ssh로 하니 permission denied가 떴다.
- ssh public key가 github에 등록되어있지않거나 기존에 등록된 키로 로그인할 수 없는 문제이므로
ssh key를 새로만들고 public key를 github > setting > ssh and gpg key에 등록한다
- md파일은 markdown 파일이다. git은 물론이고 파일들 문법도 익숙해지면 좋을 듯,,
git checkout -b 새로만들브랜치이름
현재 브랜치에서 -b(새 브랜치)를 분기
브랜치에 커밋&푸쉬하고 팀원에게 피드백을 받을 수 있다.
> Files changed
어떤 파일의 어떤 내용이 변경되었는지 확인가능 (전후도 볼수있다)
> Files changed > Review Changes
여기에 피드백 내용 넣을 수 있음
Pull requests 에서 변경사항 피드백 확인, 적용 후에 merge를 하면 branch내용이 main branch로 합쳐진다.
git switch main
이후 main branch로 바꾸고,
git pull
merge된 변경 내용을 로컬로 받아오기
5. item 팀프 코드에 적용하기
일단 새로 짠 코드의 item, itemeffect를 주는 부분 자체는 로직에 문제가 없다....
그래서 랜덤 선택하는 부분과
적용하여야하는 dict value를 어떻게 가져와서 적용해야하는지에 대해 공부했다.
해결하고 싶었던 점
1) dict내에서 random 선택하기.
2) 선택한 random속성이 가져와졌는지 어떻게 보아야하지?.?
3) 나머지 부분(effect가 주어지는 부분)을 가져와 적용하기
내가 만든 item 적용을 어떤 부분에 해야하는 지 자체를 잘 모르겠다..
4) 디버깅 방법.........ㅠㅠ (여전히 어려워..)
과정
0) 문제해결을 시작하기 전에, 협업에서 중요한 것!
만든 class마다의 적절한 위치를 찾아야한다
코드가 어떤 부분에 있느냐에 따라
import하여 가져올 수 있는 파일이 달라지고(import가 서로 겹치면 오류발생위험이 커지니까)
적용하는 함수를 짤 때 굉장히 코드가 지저분해지고,
코드 자체가 꼬일 수 있기 때문이다.
- 현업에서는 애초에 파트를 나누거나 파일을 나누어 코딩하기때문에 문제가 생길 일이 별로 없지만
병아리들의 코딩에서는 적용하는 부분에 대해 생각하는 것이 부족하기때문에
아예 적용이 안되거나 오류가 마구 터져나올 수 있다...그러니까 제발 대화를 많이해라
item.py를 다시 만들어서 Tools같은 기능을 옮기고, item효과는 player에 적용해야하니 player가 있는파일에,
그리고 item_list를 받아와서 또 랜덤선택하고하는 것은 너무 복잡해지니까
list 밑에 바로 랜덤선택 코드를 짜서 효과로 받아 넣는 것이 깔끔한 로직이었다... 휴...
이건 정말 많은 알고리즘풀이와 경험에 의해 얻어지는 생각이어서 태초의 알인 스스로에게는 어려웠을 부분이었다ㅜ.ㅜ
1) 랜덤선택
차근차근 로직에 대해 다시 생각해보았다
아직 스스로의 이해도가 낮은 dict를 활용하는 것보다 list를 활용하여 랜덤 선택을 해보라는 추천을 받았다
그래서 equipment_dict의 key를 지우고 list화 했다
랜덤으로 선택하기위해 필요한 index는 list의 길이를 range에 넣어 고를 수 있기 때문.
대신 사용자가 0 ~ 3 안에서 고르는 것은 어색하니까 사용자에게는 1부터의 선택지를 주고,
idx에는 list길이 -1 을 적용하여 index값을 적용했다
input(f"1 부터 {len(item_list)}을 고르시오 : ") #fstring으로 자동으로 숫자 조절 = 휴먼에러줄이기
def get_random_item(self):
idx = random.randint(0, len(item_list) - 1) #0 ~ list의 길이 -1 만큼 뽑아주기
return item_list[idx] # 뽑은 번호를 list에서 호출할 수 있도록 return으로 반환해주기
2) 아이템 list를 잘 가져왔는지.. 확인 겸 이름 출력하기
"다른 파일에서 list를 받아왔는지 확인할 수 있는 부분이 어디일까?"
이 질문을 받으면 머리가 멍해지면서 전체 코드를 훑는다... 그리고 대답할 수 없는 자신이 미워진다.....
하지만! 반대로 생각해보자
"list를 적용하려는 class"라는 것이 아주 명확하다! 제발 생각을 해! 끊임없이 keep going keep going
내 경우 item_list를 ItemEffect라는 효과 적용 class에 넣은 것이니까
class 안에서 아래 함수를 만들어 출력하면 확인 가능
def __str__(self):
return f'ItemEffect({self.name})'
그렇게 고민했는데 이게 다라니........ 다였다니.....
아무리 생각해도 출력해보기 쉬운 절차지향 코딩이 아니다보니 생긴 머릿 속 오류탓이다ㅠㅠ
이래서 휴먼에러가 무서운거구나 생각이 안 들면 고칠수가 없어
3) 아이템 효과 플레이어에게 적용하기
이것은 적용하고자 하는 위치에 대한 생각이 중요했다
"item을 어디에 적용할 것인가?"
라는 생각을 했어야 했다. 그리고 진짜로 거기다가 갖다놔보았어야했다
더 자세히 표현하자면 item을 적용하는 방법은 2가지가 있는데,
player코드에 직접 넣어 내부 코드로 만드는 방법과 외부에서 짜서 인풋만 하는 방법이 있다
현재 만든 item은 플레이어의 밖에 있는 코드이기 때문에, 플레이어에게 인풋 해줄 수 있는 플레이어 class안의 함수가 필요했다.
def get_item_effect(self, item):
print(f"{self.name}이(가) {item.name}을(를) 얻었습니다.")
item.item_power(self)
#player.get_equipitem(적용하고자하는 플레이어 넣기)
그리고 ItemEffect class안에 있는 item_power를 적용하면 된다.
def item_power(self, player):
player.power_item += self.power_up
player.mpower_item += self.magic_power_up
#power_item, mpower_item은 Player class __init__ 부분에 선언되어있다.
#self.power_item = 0
#self.mpower_item = 0
+ 플레이어가 아이템으로 추가된 능력치를 확인할 수 있도록 stat_check부분에 잘... 넣으면 된다
현재 power (기본power + item power) 이런 식으로 보기 좋게 추가함
4) 디버깅.. 이거 매우 중요.
그냥 뭐 하나 만들때마다 잘 되는지 출력해보면 된다..
그리고 오류메세지랑 찐하게 친해지면 된다.....ㅋㅋㅋㅋㅋ
신기하게도 이번 팀프를 진행하면서 오류메세지 보는 눈이 늘었다^^..
def test_equipment():
equipitem.show_equipitem_list()
item = equipitem.select_equipitem()
print(f'{item}을 얻었다!')
print(f'{equipitem.get_random_equipitem()}를 랜덤하게 얻었습니다.')
if __name__ == "__main__":
test_equipment()
요런식으로,, 적어두고 계속 참고하자.
아이템 적용 해★결
아직 수정할게 한참 남았지만.. 이 메세지를 본 오늘은 매우 만족^.^♥︎
+++ 아직 해결해야할 숙제
__init__ << 이렇게 __언더바 가진거 공부해야함
무의식적으로 쓰긴 했는데 대체 정체가 뭡니까...
언더바와 언더스코어? 라고 부르던데 내일 공부해야지
+++ 팀프 코드에서의 숙제
1. 분명 스킬 공격 썻는데 mp가 안 줄어.....
2. 2명이상의 플레이시
플레이어가 같은 직업을 선택하면 오류가 발생..
3. 띄워지는 창 좀더 예쁘게 \n도 넣고 time.sleep도 넣고...... ㅋㅋㅋ 중요
4. 메세지들 사이에 가끔 숫자가 나온다.
어디에서 출력되는지 찾아서 해결해야함
아니 오늘 매우 열심히 한거같은데 문제 왜 또 이렇게 많음? 진챠 알 수가 없따..
+++