Кубок верблюдів 2k18
У цьому виклику ми будемо грати в напівпопулярну настільну гру Camel Up.
Верблюд вгору! це настільна гра, в якій гравці роблять ставку на верблюдів, щоб виграти раунди, виграти гру або програти гру, встановити пастки для впливу на рух або переміщення верблюда. Кожне з цих рішень нагороджує вас шансом отримати трохи грошей, саме це визначає переможця. Для прийняття своїх рішень гравці повинні використовувати ймовірність, умови гри та стан оренди суперника. Ось коротке відео, яке показує гравцям, як грати .
Як грати
Ось приблизне уявлення про те, як грати. Перегляд одного з відео може бути кориснішим, оскільки вони мають візуальні зображення :)
На черзі у вас є 4 варіанти.
- Перемістіть верблюда. Це вибирає верблюда з тих, хто не перемістився, і переміщує його між 1-3 пробілами. Ви отримуєте 1 монету. Раунди закінчуються, коли всі п’ять верблюдів перемістилися, вони потім можуть усі рухатися
- Поставте пастку. Це залишається на дошці до кінця раунду. Ви обираєте + 1 / -1 пастка. Якщо верблюд чи стек верблюда приземлиться на ньому, вони рухаються + 1 / -1, і ви отримуєте монету. Ви не можете розмістити пастку на площі 0. Можна поставити пастку там, де є верблюди, хоча це вплине лише на верблюдів, які висаджуються на неї після.
- Ставка на перемогу в турі. Ви приймаєте ставку на переможця туру. Вони виграють, ви отримуєте 5/3/2/1 залежно від того, чи був ви 1/2/3-й, який зробив ставку на цього верблюда.
- Переможець / програв гра. Ви робите ставку на того, хто буде першим чи останнім наприкінці гри. ви отримуєте 8/5/3/1/1 (я думаю) на основі, якщо ви були 1/2/3 / і т. д., щоб зробити ставку на цього верблюда
Примітки:
- Є 5 верблюдів. Вони починаються на позиції випадковим чином від 0-2.
- При переміщенні верблюда (див. Вище, що викликає це) вони переміщують 1-3 квадрати. Якщо їх розміщуватимуть на площі з іншим верблюдом, їх кладуть «зверху» на іншого, створюючи верблюжий стек. Якщо верблюд повинен рухатися, він переміщує всіх верблюдів над ним на верблюдовій стеці. Верблюд у верхній частині штабеля вважається веденим
- Якщо ви посадите на пастку +1 (див. Вище, що викликає це), ви рухаєтеся на один квадрат далі. Діють стандартні правила укладання.
- Однак якщо ви потрапили в пастку -1, ви перемістите один квадрат назад. Ви йдете під стоп верблюдів, що на тій площі, якщо такі є.
- Гра закінчується, коли верблюд потрапляє в квадрат 16. Це негайно викликає триггери в кінці та кінці гри
- Ставки на переможець гри / програш можна робити лише один раз на верблюда. Тобто ви не можете зробити ставку на верблюда, щоб виграти і програти гру
Виклик
У цьому виклику ви напишете програму Python 3, щоб грати чотирьох гравців, переможець приймає всю гру слави Camel Up
Ваша програма отримає іграму, що містить:
- camel_track : з розташуванням верблюдів
- trap_track : з розташуванням пасток (запис форми [trap_type (-1,1), гравець])
- player_has_placed_trap : масив, який повідомляє вам, чи гравці поставили пастку в цей раунд
- round_bets : масив ставок, розміщених у цьому раунді. З форми [верблюд, гравець]
- game_winner_bets / game_loser_bets : масиви гравців, які роблять ставку на верблюдів, щоб виграти чи програти гру. Ви зможете побачити лише вартість гравців, які зробили ставки, а не на кого вони роблять ставку. Ви можете знати, на кого ставите. # форми (верблюд, гравець)
- player_game_bets : ще одне представлення гри_winner_bets / game_loser_bets. Знову ж таки, подивіться лише на ставки, які зробив ваш бот.
- player_money_values : масив, який показує кількість грошей, які має кожен гравець.
- camel_yet_to_move : масив, що показує, чи верблюд перемістився в цей раунд.
Крім ігор, ви також отримаєте:
- Гравець : ціле число, яке повідомляє, який ви номер гравця (0-3).
Синтаксис того, що гравці повинні повернути:
- [0]: Переміщення верблюда
- [1, trap_type, trap_location]: Поставити пастку
- [2, проектований_round_winner]: зробіть ставку переможця в турі
- [3, projected_game_winner]: Зробіть ставку на переможця гри
- [4, projected_game_loser]: Зробіть гру в програші
Це має бути завершено методом ходу (гравця, ігор)
Наприклад, ось гравець, який зробить ставку на перемогу в раунді, якщо він буде на останньому місці. Якщо їх немає, вони поставлять пастку на випадковий квадрат.
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), ігри короткі і є елемент удачі (робить це тому навіть «погані» боти можуть виграти).
Ігровий процес
Турнір-турнір можна знайти тут: Кубок верблюда . Виконати camelup.py
для запуску турніру або функції PlayGame для запуску ігор. Я буду постійно оновлювати це сховище новими поданнями. Приклади програм можна знайти в players.py
.
Турнір складається з 100 ігор на 10 гравців (округлюються, тому 14 гравців означають 200 ігор). У кожній грі будуть чотири випадкові гравці, вибрані з пулу гравців, щоб заповнити чотири позиції. Гравці не зможуть двічі бути в грі.
Оцінка балів
Переможець кожної гри - гравець, який в кінці гри отримає найбільше грошей. У разі вирівнювання гри в кінці гри всім гравцям з максимальною грошовою сумою присуджується бал. Гравець з найбільшою кількістю очок в кінці турніру виграє. Я буду публікувати результати, коли я запускаю ігри.
Представлені гравці будуть додані до пулу. Я додав три справді німі боти і одну, яку я запустив для початку.
Коваджі
Не змінюйте входи. Не намагайтеся вплинути на виконання будь-якої іншої програми, за винятком співпраці чи дефектів. Не робіть жертвоприношення, яке намагається визнати інше підпорядкування та виграти цього опонента за власні кошти. Стандартні лазівки заборонені.
Обмежте час, який зайняв ваш бот, - 10 секунд за оборот.
Подання можуть не дублювати попередні подання.
Не переглядайте ставки game_winner або game_loser від інших гравців. Це досить просто зробити, але все ж обман.
Якщо у вас є якісь питання, не соромтеся задавати питання.
Перемога
Конкурс залишатиметься відкритим нескінченно, оскільки публікуються нові матеріали. Однак я оголошу переможця (прийму відповідь) за результатами через місяць після опублікування цього питання (20 липня).
Результати
Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87