2016-05-07 16 views
6

Lưu ý: Tôi làm mã javascript theo câu trả lời ajrwhite. Hy vọng nó sẽ giúp ai đó.Xác định vị trí bàn poker - Giải đấu Sit'n Go

Liên kết: http://codepen.io/eMineiro/pen/EKrNBe

Mở bảng điều khiển codepen để xem ví dụ hoạt động.

Trong bài xì phé, chúng tôi xác định vị trí của người chơi theo người chia bài. Như thế này:

enter image description here

Blue: Blind nhỏ và Big Blind vị trí

xanh: Trung vị trí

: Late và vị trí Late

Vàng Đại lý/Màu hồng: Vị trí sớm

Vì vậy, giả sử hai mảng này:

players:[1,2,3,4,5,6,7,8,9,10]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"]; 

Trong trường hợp này, "player1" là "Big Blind", "player2" là "Blind nhỏ", "player3" là nút" ".....

Tôi muốn sắp xếp mảng người chơi, khi changePositions (đại lý) được gọi. Ví dụ:

changePosition(10); //means that "player10" now is the new Dealer 

Và kết quả nên là:

players:[2,1,10,9,8,7,6,5,4,3]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"]; 

Trong trò chơi, người chơi có thể được loại bỏ. Vì vậy, tôi có một chức năng để loại trừ "vị trí cuối cùng" trong "vị trí mảng" và loại trừ các cầu thủ. Sau đó, tôi cần phải gọi lại vị trí thay đổi (X), trong đó X là trình phát không bị loại bỏ tiếp theo ở bên trái của "player10" (đại lý thực tế).

Ví dụ cho loại bỏ "người chơi 1", mảng mới nên là:

players:[2,10,9,8,7,6,5,4,3]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early"]; 

Và tôi cần phải gọi changePosition (X) một lần nữa, để xác định vị trí mới, trong trường hợp này X = 2, vì "player2 "nằm bên trái của các đại lý thực tế "player10"

changePosition(2); 

Và nên kết quả:

players:[4,3,2,10,9,8,7,6,5]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early"]; 

Làm cách nào để tìm đại lý mới khi người chơi bị loại?

Lưu ý: Tôi tạo ra một hàm có tên changeNextDealer(). Chỉ số tiêu cực không phải là vấn đề, bởi vì các đại lý tiếp theo là chiều kim đồng hồ. Nó nằm trong liên kết viết mã.

dealerArrayPosition-1; //But if bigBlind and smallBlind was eliminated simultaneously I get a negative position. 

Làm thế nào tôi có thể ánh xạ một chỉ số tiêu cực như -1, đến vị trí cuối cùng. Hoặc -2 đến LastPosition-1? Có cách nào nhanh chóng không?

Lưu ý: Câu hỏi này vẫn chưa được trả lời, nhưng không phải là câu hỏi chính của cuộc thảo luận này. Tôi nghĩ một người sẽ hỏi trong một bài viết riêng biệt.

Tôi nên làm chức năng changePosition (đại lý) như thế nào?

Tôi đã thử rất nhiều, nhưng không thể tìm ra cách để làm điều đó.

Lưu ý: Tôi đã tạo một hàm có tên changePosition(). Đó là trong liên kết codepen.

+0

Vì vậy, bạn đã triển khai 'changePosition'? – migg

+0

Đó là câu hỏi chính. Tôi đang cố gắng làm. Điều quan trọng nhất đối với tôi là sự kiện đó là một "danh sách vòng tròn", và tôi bị mắc kẹt với các vị trí tiêu cực. Tôi đang làm "nếu điều kiện" để kiểm tra xem vị trí có âm hay không. Nếu vị trí là tiêu cực tôi nhận được điều này: "bbPosition = playersInTable.length + bbPosition" khi bbPosition <0 –

+0

Sau đó hiển thị mã của bạn không hoạt động. – migg

Trả lời

2

Giả sử người chơi luôn được đánh số 1-10. Chúng tôi không cần hai cấu trúc dữ liệu để lưu trữ vị trí và trạng thái của trình phát. Chúng tôi chỉ cần một cấu trúc dữ liệu được lập chỉ mục để lưu trữ máy nghe nhạc nhà nước:

Nhà nước 1

positions:["btn","sb","bb","early","early","early","medium","medium","medium","late"]; 

Nhà nước 2

positions: ["late","btn","sb","bb","early","early","early","medium","medium","medium"] 

Nhà nước 3

positions: ["eliminated","late","btn","sb","bb","early","early","early","medium","medium"]; 

Điều này lưu trữ cùng một lượng thông tin như hai mảng của bạn và phù hợp hơn. Bạn chỉ cần truy cập positions[0] để xem trạng thái của trình phát nào là 1 hoặc positions[9] cho người chơi 10.

Bây giờ với cấu trúc nhất quán hơn, cần phải xử lý các thay đổi trạng thái dễ dàng hơn vào cuối mỗi vòng.

chơi Loại bỏ

Sau mỗi vòng, thay đổi trạng thái một cầu thủ bị loại để "eliminated". Bạn có thể cần phải có một mảng tạm thời tại thời điểm này để bạn có thể kiểm tra những gì đã xảy ra ở vòng trước sẽ vẫn cập nhật thông tin cho vòng tiếp theo.

Làm thế nào để điều trị các mảng như một vòng tròn

Move chip đại lý "btn"-(currentPositionOfBtn+1)%10 - điều này có nghĩa là di chuyển nút 1-2 đến 3, vv, nhưng bằng cách sử dụng các nhà điều hành còn lại và tổng số số lượng người chơi, chúng tôi đảm bảo rằng việc di chuyển từ vị trí 9 (Người chơi 10) quay trở lại vòng 0 (Trình phát 1).

Nếu trình phát trong currentPositionOfBtn+1)%10 đã bị loại bỏ, hãy kiểm tra currentPositionOfBtn+2)%10 và v.v. - đây là một vòng lặp dễ thực hiện.

tính toán lại các vị trí

Bây giờ cho rằng các mô tả về vị trí thay đổi khi người chơi được loại bỏ (bằng cách cuối cùng bạn không có "sớm" hoặc "trung bình"), tôi sẽ đề nghị tính toán lại các vị trí từ Đại lý trở đi vào cuối mỗi vòng, bỏ qua bất kỳ người chơi nào bị đánh dấu là "bị loại".

+0

Cảm ơn bạn rất nhiều vì đã chú ý đến bạn. Vẫn đọc, hiểu và viết mã để xem liệu điều này có hiệu quả 100% hay không. Tôi tin rằng điều này sẽ làm việc. –

+0

http://codepen.io/eMineiro/pen/EKrNBe (Cảm ơn sự giúp đỡ của bạn, xem ví dụ trong bảng điều khiển. –

Các vấn đề liên quan