Давайте рассмотрим концепции ваших занятий. PokerPlayer
является одним из игроков. Этот игрок отвечает за отслеживание, если он жив, какие у него карты и сколько у него денег. Похоже ли это на точную симуляцию игры, в которой нельзя обманывать?
Нет? Почему бы нет? Во-первых, дилер / дом решает, кто какие карты получит. Игроки могут просматривать карты, но не менять их. Так что ваш класс должен быть похожим. (Деньги - интересный аспект для анализа, поскольку реальный игрок может принести карту банкомата ...;)) Игроки покупают свои фишки, садятся и делают ходы. Все остальное контролируется (или, по крайней мере, контролируется) домом. Игрок приносит только стартовые деньги и мозги (т.е. как play()
).
Давайте посмотрим, сможем ли мы смоделировать игру в покер более точно. За столом сидит кучка людей. На столе есть несколько карт, некоторые из которых могут просматривать некоторые игроки. Так что ... возможно, то, что вы называете "игроком", следует более точно считать "стулом" после того, как вы уберете метод play
. Стол владеет стульями, дает каждому карточку стула и обрабатывает движущиеся фишки для покера в / из стула (из / в банк).
Каждый игрок может быть уменьшен до вида стола (используется для ставки, фолд и т. д. c.), const
вид их стула (используется для просмотра их карт и статуса), плюс виртуальный метод play
. Игрок присоединяется к игре, покупая фишки у table
, затем table
назначает им chair
. player
может влиять на игру только с помощью методов, предусмотренных table
.
По общему признанию, обман все еще возможен (например, выбрасывать const
из chair
). Язык C ++ не касается безопасности в исходном коде. Существующие ограждения предназначены для предотвращения случайных нарушений; они не остановят злонамеренность от кого-то, кто работает над той же программой. Тем не менее, вы можете ввести уровень косвенности, чтобы сделать вещи немного более безопасными. chair
, предоставленный игрокам для просмотра, может быть копией chair
, поддерживаемой table
. Злонамеренный программист, манипулирующий своей копией стула, не изменит то, что отслеживает table
.