Làm cách nào để tôi tạo ID trò chơi duy nhất thân thiện với người dùng - để một người dùng có thể dễ dàng cung cấp ID trò chơi đó cho người khác tham gia trò chơi.
Tôi đang tạo trò chơi của mình trong Silverlight với C #.
Làm cách nào để tôi tạo ID trò chơi duy nhất thân thiện với người dùng - để một người dùng có thể dễ dàng cung cấp ID trò chơi đó cho người khác tham gia trò chơi.
Tôi đang tạo trò chơi của mình trong Silverlight với C #.
Câu trả lời:
Nếu bạn có một nguồn có thẩm quyền, vấn đề đó rất dễ dàng (mà tôi giả sử nếu người dùng đang đặt ID để kết nối với trò chơi thì điều đó sẽ được chuyển hướng bằng một số máy chủ trung tâm). Chỉ cần sử dụng một thuật toán như http://www.safepasswd.com/ để tạo UID về cơ bản là các từ trong từ điển + số nhỏ. Nếu số lượng máy chủ tương đối ít, bạn thậm chí có thể thực hiện một thuật toán ngây thơ chỉ chọn một cái gì đó ngẫu nhiên cho đến khi nó không được sử dụng.
Nếu bạn muốn khách hàng của mình là nguồn của UID, bạn sẽ phải vứt bỏ phần thân thiện với người dùng của những ID đó. Nhưng nó dễ thực hiện hơn về mặt mã hóa vì bạn chỉ đang sử dụng System.Guid.NewGuid (). ToString (). Đó là cho tất cả các ý định và mục đích được đảm bảo là duy nhất 100% thời gian. nguồn
Sau đó, một lần nữa, GUID là một chút quá mức cần thiết. Sẽ dễ nhớ IP hơn hoặc tên người dùng b
Một cách tiếp cận sẽ là sử dụng từ điển và chọn từ dựa trên sơ đồ đánh số. Có lẽ sử dụng số nguyên 32 bit duy nhất để xác định từng người dùng và với mỗi từ 16 bit, lập chỉ mục một từ điển (mảng từ). Bằng cách này, bạn có thể thể hiện id của họ bằng các từ thực tế và mỗi mã định danh sẽ là duy nhất.
Một cách tiếp cận khác là triển khai một cái gì đó tương tự như những gì Steam sử dụng: cho phép người dùng đăng nhập bằng id mà họ tự chọn và sau đó cho phép họ chỉ định bất kỳ id hiển thị nào họ muốn. Ví dụ: id đăng nhập của họ có thể là email của họ và tên hiển thị của họ có thể là tên của họ. Bằng cách này, người dùng có thể chia sẻ định danh duy nhất của họ nhưng cũng được xác định bằng tên mà họ chọn.
Câu trả lời của FuzzYspo0N trong các bình luận là một câu trả lời rất hay. Về cơ bản, vấn đề này giúp làm cho ID trò chơi đủ độc đáo để tránh va chạm, mà không làm cho chúng phức tạp một cách tùy tiện. GUID 128 bit tiêu chuẩn có được tính duy nhất của chúng bằng cách sử dụng thông tin cục bộ (như MAC của bạn và các yếu tố khác) để làm cho khả năng xảy ra va chạm giữa các máy rất nhỏ, sau đó thêm yếu tố ngẫu nhiên và dựa trên thời gian để tạo khả năng va chạm trong máy đó rất nhỏ.
Bạn có thể theo cùng một chiến lược để tạo ID của riêng bạn. Bắt đầu với một cái gì đó đáng nhớ với người dùng nhưng tương đối độc đáo (nếu người dùng có tên người dùng toàn cầu đó là một khởi đầu tốt hoặc tên máy / IP) và thêm các yếu tố khác cho đến khi bạn tạo ra thứ gì đó độc đáo. Bằng cách chọn một cái gì đó cục bộ như tên máy, bạn hạn chế tập hợp các xung đột tiềm năng đủ để bạn có thể bắt đầu truy vấn nếu có. Ví dụ: một khi bạn đã giới hạn nó cho chỉ người dùng đó hoặc chỉ máy đó, bạn sẽ biết chính xác nơi bạn cần đến để kiểm tra xem UID đó đã được sử dụng hay chưa.
Ví dụ: nếu tôi biết tên người dùng của mình là một hệ thống duy nhất, thì MrCranky: 1 là một UID hợp lệ. Nếu tôi có thể kiểm tra xem MrCranky: 1 đã được sử dụng chưa (bằng một số phương pháp khác), thì tôi có thể tiếp tục thử số cho đến khi tìm thấy một số duy nhất.
Bằng cách sử dụng một số yếu tố khác (như ngẫu nhiên hoặc thời gian), tôi có thể tăng khả năng tôi chọn ID không sử dụng lần đầu tiên. Ví dụ: Nếu bạn biết rằng bạn không thể tạo nhiều hơn một phiên một giây, thì sử dụng MrCranky: 122730 (thời điểm hiện tại, đến lần thứ hai) sẽ giúp tôi có một ID duy nhất tương đối dễ nhớ với người dùng.
Miễn là bạn có một số thông tin tương đối độc đáo (không nhất thiết phải hoàn hảo, hầu như là duy nhất), bạn có thể sử dụng đó làm khối bắt đầu và điều đó có nghĩa là phần thực sự duy nhất (một mã số nguyên loại nào đó) có thể ngắn hơn nhiều, và do đó UID dễ nhớ hơn.
Bạn có thể sử dụng địa chỉ email của người chơi làm định danh duy nhất. Tôi chắc rằng họ có thể nhớ điều đó :)