일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- placement new
- increment operator
- std::ostream
- virtual function
- member function pointer
- std::cout
- c++ basic practice
- delete function
- base from member
- std::vector
- constructor
- 더 지니어스 양면포커
- this call
- new&delete
- c++ multi chatting room
- dynamic_cast
- operator overloading
- virtual function table
- discord bot
- return by reference
- suffix return type
- vector capacity
- diamond inheritance
- pointer to member data
- conversion constructor
- std::endl
- virtual inheritance
- vector size
- C++
- virtual destructor
- Today
- Total
I'm FanJae.
[EA FC Pro club Draft Bot] 6. Draft Logic 개선 본문
[EA FC Pro club Draft Bot] 6. Draft Logic 개선
FanJae 2024. 9. 19. 20:551. 기존 구현했던 Draft Logic의 문제점
- 기존 Draft Logic을 생각해보면 아래와 같은 문제가 있다.
① 한 팀의 추첨을 위해 설계되었다.
- 이 프로클럽이라는 모드는 보통 2팀(22인)이서 게임을 한다.
- 이 드래프트는 최대 1팀에서 최대 8팀 정도까지도 사용이 가능해야 한다. (필요에 따라서는 그 이상도 가능할 것이다.)
- 이에 따라서 봇을 재설계 하기로 했다.
② 기존 코드의 재사용이 어렵다.
- 기존 로직은 여러 팀으로 나눠서 하기에는 코드가 복잡해질 여지가 높았다.
- 이에 따라서, 로직을 아예 새롭게 구성하기로 하였다.
2. 개선 방향
2-1. 삭제 사항
① pick_and_remove() 삭제
def pick_and_remove(player_list, count):
logging.debug(f"{player_list}") # 디버깅 로그 추가
if len(player_list) < count:
count = len(player_list)
choose_player = random.sample(player_list,count)
for player in choose_player:
player_list.remove(player)
return choose_player
삭제 사유 : 기존 드래프트에서는 선택된 인원을 구분하기 위해 사용하였지만, 로직을 개선하면서 제거하였다.
2-2. 수정 사항 (드래프트 로직 전체 개선)
① 팀 수 변경 조정 및 팀 할당을 위한 데이터 구조 초기화
TEAM_COUNT = none # 팀 수 변경을 위한 처리
teams = {team_number: {} for team_number in range(1, TEAM_COUNT+1)}
- 테스트를 진행할 떄는 임의로 팀의 개수를 2팀으로 처리하였다.
② 슬롯 추가
if key_value in ['CM', 'CB']:
slots_per_team = 2
else:
slots_per_team = 1
# 슬롯 수를 계산한다.
total_slots = TEAM_COUNT * slots_per_team
- 포지션 별로 각각 필요한 인원을 슬롯으로 구분한다.
- 4-3-3 포메이션에서 CM과 CB는 각각 2명씩 필요하여 2명으로 구분하였고, 다른 인원은 팀당 1명만 있다.
③ 슬롯에 팀 번호를 할당
# 슬롯에 각각의 팀 번호라는 개념을 부여한다.
# 예를들어 2팀에 대한 CM을 뽑는다면 [1, 1, 2, 2] 와 같이 만들고 섞는다.
slot_assignments = []
for team_number in range(1, TEAM_COUNT+1):
slot_assignments.extend([team_number] * slots_per_team)
# 슬롯 순서를 랜덤하게 섞는다.
random.shuffle(slot_assignments)
- 각 슬롯에 팀 번호를 할당해준다. 이를 랜덤하게 섞어서 플레이어들을 배정할 때 사용한다.
④ 랜덤 배정
# 플레이어들을 랜덤한 슬롯에 배정
for idx, team_number in enumerate(slot_assignments):
if idx < len(users):
user_id = users[idx]
teams[team_number][key_value].append(user_id)
else:
teams[team_number][key_value].append(None) # 남은 플레이어가 없을때 사용한다.
# 이는 추후, '남은 포지션 출력'에 사용될 예정이다.
if idx < len(users):
user_id = users[idx]
teams[team_number][key_value].append(user_id)
- 플레이어의 수(users)가 슬롯 수 보다 적은 경우에는 남은 플레이어가 없으므로 None을 배정하도록 처리한다.
3. TODO
1) 드래프트시 각 팀 별로 남은 포지션 인원을 한 눈에 볼 수 있도록 처리 작업 필요.
2) 여러 인원이 드래프트를 돌릴때 발생하는 문제점 해결 하기.
'Toy Project > EA FC Pro club Draft Bot [Python]' 카테고리의 다른 글
[EA FC Pro club Draft Bot] 7. 봇 호스팅 (GCP 무료 호스팅 이용) (3) | 2024.09.20 |
---|---|
[EA FC Pro club Draft Bot] 5. Draft Logic 구현 (0) | 2024.09.04 |
[EA FC Pro club Draft Bot] 4. Git 연결 (0) | 2024.09.02 |
[EA FC Pro club Draft Bot] 3. Discord 패키지 추가 및 봇 실행 (4) | 2024.09.01 |
[EA FC Pro club Draft Bot] 2. Python 설정. (3) | 2024.09.01 |