| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 2주차
- 미니프로젝트
- 알고리즘
- 가상환경
- Commpot
- WHERE절
- 정보처리기사실기
- 프로젝트
- WebSocket
- channels
- 정보처리기사
- 채팅
- 1주차
- 백준
- Class
- js
- sql
- github
- poetry
- re-id
- WIL
- 개발일지
- vscode
- resnet50
- 마스킹
- 장고
- 프로그래머스
- Git
- 파이썬
- REDIS
Archives
- Today
- Total
개발일기
좀비 턴제 게임 만들기 #2 제거할 캐릭터 선택하기(리스트 활용) 본문
이 역시.. 3/29일의 TIL입니다..ㅎㅎ
총 6개의 캐릭터 중 2개의 캐릭터를 선택해 제거하는 기능을 어떻게 구현할까..?
처음에는 딕셔너리를 활용해서 제거하는 건 어떨까 싶다가.. (왜냐면 키 값을 입력하여 정확하게 없앨 수 있으니까!!)
그럼 정확한 키 값을 알아야하는데.. 총 15가지의 경우의 수가 나오고.. 그걸 코드로 구현한다면 너무 길이가 길어지고 오류가 생길 가능성도 커지기 때문에 좋은 생각은 아닌 것 같았다.
그래서 내가 떠올린 생각은 리스트를 활용하자!!
#캐릭터 생성
character = [PEteacher('술을 마시지 못하지만 항상 얼굴이 빨갛게 달아올라 술고래로 오해받는 체육선생님', 1100, 0, 0, 170, 0, 200, 0.15, 60, 0, 0, 1, 0),
AgentP('구청에서 메이플거래하다가 사기당하고 전재산 날려먹은 공익근무요원', 1200, 0, 100, 150, 0, 180, 0.1, 20, 10, 0, 1, 0),
Barista('낮에는 바리스타, 밤에는 발이STAR인 커피를 잘 못만드는 바리스타', 1000, 0, 0, 150, 0, 150, 0.1, 30, 0, 0, 1, 0),
KnowledgeYoutuber('평소에 공부를 하지 않았지만 인터넷에서 줏어들은 정보로만 채널을 운영하는 지식유튜버', 900, 0, 100, 150, 0, 140, 0.12, 25, 10, 0, 1, 0),
Teacher('학교가 너무 가기싫어서 일도 대충하는 이세계학교의 담임선생님', 1000, 0, 100, 150, 0, 150, 0.1, 20, 10, 0, 1, 0),
HandsomeThief('얼굴이 정말 잘생겼지만 손버릇이 좋지않아 여자들에게 퇴짜를 맞는 좀도둑', 899, 0, 100, 150, 0, 120, 0.3, 20, 10, 0, 1, 0)
]
먼저 리스트를 활용해서 캐릭터 리스트를 만들었다..!
(여기서 PEteacher, AgenP 등등은 캐릭터 클래스명입니당~~ )
사용자에게 input으로 리스트의 인덱스를 적게하고.. del list[index]를 하면 되지 않을까..!!
여기서 문제는..!! 리스트는 하나를 빼면 재배열이 된다는 것..!ㅋㅋㅋ
리스트 자료구조의 성질을 고려하여.. 코드를 짜야한다..ㅎㅎ
while True:
# 버릴 캐릭터 선택
print('첫번째로 버릴 사람은?', f'0: {character[0].name}', f'1: {character[1].name}', f'2: {character[2].name}',
f'3: {character[3].name}', f'4: {character[4].name}', f'5: {character[5].name}', sep='\n')
x = int(input(
"당신의 선택은? :"))
print('두번째로 버릴 사람은?', f'0: {character[0].name}', f'1: {character[1].name}', f'2: {character[2].name}',
f'3: {character[3].name}', f'4: {character[4].name}', f'5: {character[5].name}', sep='\n')
y = int(input(
"당신의 선택은? :"))
# 리스트 요소 제거
if x == y:
print("다시 입력하세요.")
elif x > y:
del character[x]
del character[y]
break
else:
del character[x] # 만약에 x = 2, y = 3이면 리스트가 재배열되는 것을 생각해야하므로
del character[y-1] # del character[y]를 하면 안 된다!! 왜냐면 하나씩 앞으로 오기 때문~
break
버릴 캐릭터에 대해 선택하도록 해서 x, y에 각각 몇 번째 캐릭터를 버릴지 정보를 담고, del character[x]로 캐릭터를 없앴다. 리스트 자료구조의 성질을 고려하여 x<y일 때는, del character[y-1] 코드가 구현되도록 하였다.
느낀점 :
코드를 구현할 때, 자료구조의 성질과 알고리즘을 고려하는 것에 대한 중요성을 다시 한 번 느꼈다. 리스트 자료구조의 성질을 알고 있었기 때문에 코드를 제대로 구현할 수 있었다. 또 플레이어의 수가 많아지니까 그만큼 경우의 수가 늘어나서.. 어떻게 하면 효율적인 코드를.. 가독성이 좋은 코드를 짤 수 있을 것인가에 대한 고민을 계속 했다. 이런 고민들은 앞으로도 자주 해야 할 필요가 있는 것 같다. 이런 고민이 있기에 코드를 더 깔끔히 정리할 수 있는 것 같다. 반복적으로 들어가는 코드나 변수의 경우.. 이렇게 리스트로 받거나 함수로 설정을 해주면 코드의 길이가 훨씬 짧아지고 그만큼 오류도 줄고 가독성은 높아진다.
앞으로 구현하고자 하는 코드에 자료구조가 있다면, 자료구조의 성질을 이해하고 있는지 확인하고, 잘 모른다면 공부하도록 하자..!! 자료구조의 성질을 이해하고 있을 때, 올바른 코드를 구현할 수 있음을 명심하도록 하자!
그리고 효율적인 코드를 어떻게 하면 만들 수 있을까, 가독성을 높을 수 있을까에 대한 고민도 꾸준히 하도록 하자!!
'Project Portfolio' 카테고리의 다른 글
| 장고 팀프로젝트 #1 Commpot 기획 (0) | 2023.04.11 |
|---|---|
| 좀비 턴제 게임 만들기 #3 1대 다수 플레이 구현하기 (0) | 2023.04.02 |
| 좀비 턴제 게임 만들기 #1 게임 계획 (0) | 2023.03.30 |
| 떠나보조) 추천여행지 글쓰기 기능 만들기 (1) | 2023.03.17 |
| #2 프로젝트 - 떠나보조 소개 및 애니메이션 기능, Css (0) | 2023.03.16 |