많은 (바라건대 수천 명의) 플레이어가 서로 특정 카드 게임을 동시에 진행할 게임 사이트를 설계하고 있습니다. 데크는 standart 52 카드 갑판입니다. 각 카드에는 양복과 계급이 있습니다. 카드는 항상 셔플, 거래, 선택, 주문, 재생됩니다. 내 질문은 Card
열거 형, 구조체 또는 클래스 수 있습니까?카드 사용 : 열거 형 또는 구조체 또는 클래스이어야합니까?
열거 형의 경우 : 각 카드는 0..51 바이트로 두십시오. 그래서 카드는 아주 작은 공간을 차지할 것입니다. 손을 8 바이트의 비트 세트로 나타낼 수 있습니다. 필요한 경우 주어진 카드의 수트와 랭킹을 매우 빠르게 계산할 수 있습니다 (예 : suit (n) = n/13). 이것은 매우 효율적입니다. 카드에 대한 메소드를 작성해야한다면, 확장 메소드를 통해 작성하십시오.
구조체의 경우 : 아니요, 이것은 기계어 작성과 같습니다. 카드는 간단한 구조이며, 거의 데이터를 보유하지 않으며, 불변이며, 작습니다. 많은 동작을하지 않으므로 구조체로 만들어 수동 데이터 구조로 취급하십시오. 필요에 따라 주어진 카드에서 0..51의 색인을 매우 빨리 계산할 수 있습니다.
클래스의 경우 : 아니요, 객체 지향적 인 사고 방식은 아닙니다. Card 클래스를 만듭니다. 불변으로 만드십시오. 정확히 52 개의 인스턴스를 생성하십시오. 카드 풀이 그 인스턴스를 보유하게하십시오. 그래서 스페이드의 여왕이 필요하면 카드 풀에 그 카드를 요청합니다. 계속 진행되는 수천 개의 게임이있을 때에도 오직 하나의 스페이드 여왕이있을 것입니다. 원하는 경우 카드에 0..51의 색인 필드를 저장하십시오.
나는 마지막 옵션 (클래스)을 향하여 기울어지고 있지만 확실하지 않습니다. 나는 성능에 대해별로 걱정하지 않는다. 나는 그 길을 따라 좀 더 심각한 실수를 저 지르게 될 것입니다. 내가 걱정하는 것은 나의 전체 견해가 틀릴 수도 있다는 것이다; 어쩌면 이것은 매우 쉬운 결정이며 다른 모든 사람들이 가지고있는 지식을 부족하기 때문에 망설이지 만.
당신은 어떻게 생각하십니까?
편집 : 카드의 행동에 관하여. 나는 카드가 다른 카드에 대해서만 알 것이라고 생각한다. 예를 들어 "누가 다리에서 누가 우 수"에 대한 부분적인 순서를 정의 할 수 있습니다. 갑판에 대해 아무 것도 알 필요가 없습니다. 그리고 이것은 서버 측 코드가 될 것입니다. 확실히 화면 등에 자신을 그려야 할 필요는 없습니다.
사람들의 의견을 묻는 것처럼 이것은 아마도이 사이트에 대한 건설적인 질문이 아닙니다. 그건 내 본능이 옳다는 것입니다. : P –
'카드'는 어떤 행동을합니까? 얼굴을 뒤집어 놓았는지 또는 그것이 테이블 위에 놓여있는지를 알 수 있습니까? 그 뒤가 어떤 색인지 등을 알기 위해 어느 데크가 왔는지 기억합니까? –
'CardPool'은 좋은 아이디어라고 생각하지 않습니다. 초기 및 불필요한 최적화처럼 보입니다. –