낙타 업컵 2k18
이 도전에서 우리는 반 인기 보드 게임 인 Camel Up을 플레이 할 것입니다.
낙타 업! 플레이어가 낙타에 베팅하여 라운드에서이기거나, 게임에서이기거나, 게임을 잃거나, 함정을 설정하여 움직임에 영향을 주거나 낙타를 이동시키는 보드 게임입니다. 이러한 결정은 각각 돈을 벌 수있는 기회를 주는데, 이것이 승자를 결정합니다. 플레이어는 확률, 게임 상태 고려 사항 및 상대 임차를 사용하여 결정을 내려야합니다. 다음은 플레이어에게 게임 방법을 보여주는 짧은 비디오 입니다.
게임 방법
다음은 게임 방법에 대한 대략적인 아이디어입니다. 비디오 중 하나를 보는 것이 시각 자료가 있기 때문에 더 도움이 될 수 있습니다 :)
당신의 차례에는 4 가지 옵션이 있습니다.
- 낙타를 움직입니다. 이것은 움직이지 않은 사람들로부터 낙타를 골라 1-3 칸 사이로 옮깁니다. 동전 1 개를 얻습니다. 5 개의 낙타가 모두 움직이면 라운드가 끝납니다.
- 함정을 설치하십시오. 이것은 라운드가 끝날 때까지 보드에서 진행됩니다. + 1 / -1 트랩을 선택하십시오. 낙타 나 낙타 더미가 떨어지면 + 1 / -1로 움직여 동전을 얻습니다. 정사각형 0에는 트랩을 배치 할 수 없습니다. 낙타가있는 곳에 트랩을 배치 할 수 있습니다. 낙타는 그 뒤에 착륙하는 낙타에만 영향을 미칩니다.
- 라운드 승자 내기. 라운드 승자에게 베팅을합니다. 그들은 낙타에 베팅 한 1/2/2/3인지에 따라 5/3/2/1을 얻습니다.
- 게임 승자 / 손실 자. 게임이 끝날 때 처음 또는 마지막에 누가있을 것인지에 베팅하십시오. 당신은 당신이 그 낙타에 베팅하는 등 1 / 2 / 3 / 등 여부에 따라 8/5/3/1/1 (내 생각에)을 얻을
메모:
- 5 개의 낙타가 있습니다. 그들은 0-2에서 무작위로 시작합니다.
- 낙타가 움직일 때 (이것을 유발하는 것은 위 참조) 1-3 칸 움직입니다. 그들이 다른 낙타와 함께 정사각형 위에 놓이면 다른 낙타의 "위에"놓아 낙타 스택을 만듭니다. 낙타가 움직이면 낙타 더미에서 모든 낙타를 그 위로 이동시킵니다. 스택 상단의 낙타가 리드에서 고려됩니다
- 당신이 +1 함정에 착륙하면 (이것을 일으키는 것은 위 참조) 한 칸 더 앞으로 이동합니다. 표준 스태킹 규칙이 적용됩니다.
- 그러나 -1 트랩을 누르면 한 정사각형 뒤로 이동합니다. 해당 광장에있는 낙타 더미 아래 로갑니다 .
- 낙타가 광장 16에 도달하면 게임이 종료됩니다. 이것은 즉시 라운드 엔드와 게임 종료 트리거를 호출합니다
- 낙타 당 한 번만 게임 승자 / 로저 베팅을 할 수 있습니다. 즉 당신은 이길 낙타에 내기 할 수 및 게임을 잃게
도전
이 도전에서, 당신은 4 명의 플레이어를 플레이하는 Python 3 프로그램을 작성하고, 우승자는 Camel Up의 모든 영광스러운 게임을합니다
귀하의 프로그램은 다음과 같은 게임 상태를받습니다 :
- camel_track : 낙타의 위치
- trap_track : 트랩의 위치 ([trap_type (-1,1), player] 형식으로 입력)
- player_has_placed_trap : 플레이어가 이번 라운드에 트랩을 놓았는지 알려주는 배열
- round_bets :이 라운드에 배팅 한 배팅의 배열입니다. [낙타, 플레이어]
- game_winner_bets / game_loser_bets : 낙타가 게임에서이기거나 잃는 베팅의 배열. 베팅 한 플레이어가 아닌 베팅 한 플레이어의 가치 만 볼 수 있습니다 . 당신은 당신이 내기 사람을 알 수 있습니다. # 도형 [낙타, 플레이어]
- player_game_bets : game_winner_bets / game_loser_bets의 다른 표현입니다. 다시 한번, 당신의 봇이 내기 한 베팅 만보십시오.
- player_money_values : 각 플레이어의 돈을 보여주는 배열.
- camel_yet_to_move : 낙타가이 라운드를 움직 였는지 보여주는 배열.
게임 스테이트 위에 다음과 같은 것들도 있습니다 :
- player : 어떤 플레이어 번호인지 알려주는 정수입니다 (0-3).
플레이어가 반환해야 할 구문은 다음과 같습니다.
- [0] : 낙타 이동
- [1, trap_type, trap_location] : 트랩 배치
- [2, projected_round_winner] : 라운드 우승자를 내기
- [3, projected_game_winner] : 게임 승자를 내기
- [4, projected_game_loser] : 게임 패자를 내기
이것은 move (player, gamestate) 메소드로 감싸 져야합니다
예를 들어, 여기 라운드 플레이어가 마지막 장소에있을 경우 베팅하는 플레이어가 있습니다. 그렇지 않으면 임의의 사각형에 트랩을 배치합니다.
class Player1(PlayerInterface):
def move(player,g):
if min(g.player_money_values) == g.player_money_values[player]:
return [2,random.randint(0,len(g.camels)-1)]
return [1,math.floor(2*random.random())*2-1,random.randint(1,10)]
이 게임은 여러 가지 이유로 선택되었습니다. 선택할 수있는 옵션이 비교적 작습니다 (대략 20 개 선택, 보통 3-4 개로 쉽게 좁혀 짐). 게임은 짧고 행운의 요소가 있습니다. "나쁜"봇도 이길 수 있습니다).
게임 플레이
토너먼트 러너는 camel-up-cup 에서 찾을 수 있습니다 . 실행 camelup.py
대회 또는 게임을 실행하는 기능 PlayGame을 실행합니다. 해당 저장소를 새 제출로 업데이트합니다. 예제 프로그램은에서 찾을 수 있습니다 players.py
.
토너먼트는 10 명당 100 개의 게임으로 구성됩니다 (반올림하여 14 명은 200 게임을 의미 함). 각 게임은 4 명의 포지션을 채우기 위해 플레이어 풀에서 선택된 4 명의 랜덤 플레이어입니다. 플레이어는 게임에 두 번 참여할 수 없습니다.
채점
각 게임의 승자는 게임이 끝날 때 가장 많은 돈을 가진 플레이어입니다. 게임 종료시 동점 인 경우 최대 금액의 모든 플레이어에게 포인트가 부여됩니다. 토너먼트 종료 후 가장 많은 점수를 얻은 플레이어가 승리합니다. 게임을 실행하면서 점수를 게시합니다.
제출 된 플레이어가 풀에 추가됩니다. 나는 정말로 멍청한 봇 3 개와 내가 시작한 봇 하나를 추가했습니다.
경고
입력을 수정하지 마십시오. 협력 또는 결함을 통한 경우를 제외하고 다른 프로그램의 실행에 영향을 미치지 마십시오. 다른 제출물을 인정하고 상대방이 자비로 이익을 얻는 희생적인 제출물을 만들지 마십시오. 표준 허점 은 금지되어 있습니다.
봇이 걸리는 시간을 턴당 ~ 10 초로 제한하십시오.
제출물은 이전 제출물을 복제 할 수 없습니다.
다른 플레이어의 game_winner 또는 game_loser 베팅을 보지 마십시오. 꽤 쉬운 일이지만 여전히 속임수입니다.
궁금한 점이 있으면 언제든지 문의하십시오.
승리
새로운 제출물이 게시되면 경쟁은 무기한 개방됩니다. 그러나이 질문이 게시 된 후 1 개월 (7 월 20 일)의 결과에 따라 승자를 선언합니다 (답변 수락).
결과
Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87