ฉันจะสร้าง ID เกมที่ไม่ซ้ำซึ่งยังใช้งานง่ายได้อย่างไร - เพื่อให้ผู้ใช้รายหนึ่งสามารถให้ ID เกมนั้นกับคนอื่นเพื่อเข้าร่วมเกมได้อย่างง่ายดาย
ฉันกำลังสร้างเกมของฉันใน Silverlight ด้วย C #
ฉันจะสร้าง ID เกมที่ไม่ซ้ำซึ่งยังใช้งานง่ายได้อย่างไร - เพื่อให้ผู้ใช้รายหนึ่งสามารถให้ ID เกมนั้นกับคนอื่นเพื่อเข้าร่วมเกมได้อย่างง่ายดาย
ฉันกำลังสร้างเกมของฉันใน Silverlight ด้วย C #
คำตอบ:
หากคุณมีแหล่งข้อมูลที่เชื่อถือได้ปัญหาดังกล่าวนั้นเป็นเรื่องง่าย (ซึ่งฉันสมมติว่าผู้ใช้ใส่ ID เพื่อเชื่อมต่อกับเกมแล้วจะมีการเปลี่ยนเส้นทางโดยใช้เซิร์ฟเวอร์กลางบางแห่ง) เพียงใช้อัลกอริทึมเช่นhttp://www.safepasswd.com/ทำเพื่อสร้าง UID ซึ่งเป็นคำในพจนานุกรมโดยทั่วไป + ตัวเลขเล็ก ๆ หากจำนวนเซิร์ฟเวอร์มีขนาดค่อนข้างเล็กคุณสามารถทำได้แม้กระทั่งอัลกอริธึมไร้เดียงสาที่เพิ่งเลือกสุ่มจนกว่าจะไม่ได้ใช้งาน
หากคุณต้องการให้ลูกค้าของคุณเป็นแหล่งของ UID คุณจะต้องทิ้งส่วนที่เป็นมิตรกับผู้ใช้ของ ID เหล่านั้น แต่มันง่ายกว่าที่จะทำในด้านการเข้ารหัสเพราะคุณเพิ่งจะใช้ System.Guid.NewGuid (). ToString () นั่นคือสำหรับทุกเจตนาและวัตถุประสงค์รับประกันว่าจะไม่ซ้ำกัน 100% ของเวลา แหล่ง
จากนั้นอีกครั้ง GUID นั้นเกินความจำเป็นเล็กน้อย จะเป็นการง่ายกว่าถ้าจะจำ IP หรือชื่อผู้ใช้ b
วิธีการหนึ่งที่จะใช้พจนานุกรมและเลือกคำที่ยึดตามโครงร่างลำดับเลข อาจใช้เลขจำนวนเต็ม 32 บิตที่ไม่ซ้ำกันเพื่อระบุผู้ใช้แต่ละคนและสำหรับคำ 16 บิตแต่ละดัชนีดัชนีพจนานุกรม (อาร์เรย์ของคำ) ด้วยวิธีนี้คุณสามารถแสดง ID ของตนโดยใช้คำจริงและตัวระบุแต่ละรายการจะไม่ซ้ำกัน
อีกวิธีคือการใช้บางสิ่งที่คล้ายกับที่ Steam ใช้: อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ด้วยรหัสที่พวกเขาเลือกและหลังจากนั้นให้พวกเขาระบุรหัสที่แสดงที่พวกเขาต้องการ ตัวอย่างเช่น ID สำหรับเข้าสู่ระบบอาจเป็นอีเมลและชื่อที่แสดงอาจเป็นชื่อจริง ด้วยวิธีนี้ผู้ใช้สามารถแบ่งปันตัวระบุที่ไม่ซ้ำกันของพวกเขา แต่ยังระบุด้วยชื่อของการเลือกของพวกเขา
คำตอบของ FuzzYspo0N ในความคิดเห็นเป็นสิ่งที่ดีมาก โดยทั่วไปปัญหานี้จะทำให้เดือดร้อนเพื่อสร้างรหัสเกมที่ไม่ซ้ำกันมากพอที่จะหลีกเลี่ยงการชนโดยไม่ต้องทำให้มันซับซ้อนโดยพลการ GUID มาตรฐาน 128 บิตได้รับความเป็นเอกลักษณ์โดยใช้ข้อมูลท้องถิ่น (เช่น MAC ของคุณและปัจจัยอื่น ๆ ) เพื่อสร้างโอกาสในการชนกันระหว่างเครื่องขนาดเล็กมากจากนั้นเพิ่มปัจจัยแบบสุ่มและเวลาเพื่อให้เกิดความขัดแย้งภายในเครื่องนั้น ขนาดเล็กมาก.
คุณสามารถทำตามกลยุทธ์เดียวกันเพื่อสร้างรหัสของคุณเอง เริ่มต้นด้วยบางสิ่งที่น่าจดจำสำหรับผู้ใช้ แต่ค่อนข้างจะไม่ซ้ำกัน (หากผู้ใช้มีชื่อผู้ใช้ทั่วโลกซึ่งเป็นการเริ่มต้นที่ดีหรือชื่อเครื่อง / IP) และเพิ่มปัจจัยอื่น ๆ จนกว่าคุณจะสร้างสิ่งที่ไม่ซ้ำกัน ด้วยการเลือกชื่อท้องถิ่นบางอย่างเช่นชื่อเครื่องคุณจะ จำกัด ชุดของการชนที่อาจเกิดขึ้นมากพอที่จะเริ่มสืบค้นหากมี ตัวอย่างเช่นเมื่อคุณ จำกัด ให้ผู้ใช้นั้นหรือเพียงแค่คุณรู้ว่าคุณต้องไปที่ใดเพื่อตรวจสอบว่า UID นั้นถูกใช้งานอยู่หรือไม่
ตัวอย่างเช่นถ้าฉันรู้ว่าชื่อผู้ใช้ของฉันเป็นระบบที่ไม่เหมือนใคร MrCranky: 1 เป็น UID ที่ถูกต้อง หากฉันสามารถตรวจสอบว่า MrCranky: 1 ใช้งานอยู่แล้ว (ด้วยวิธีอื่น) จากนั้นฉันก็สามารถลองใช้ตัวเลขจนกว่าฉันจะพบหมายเลขที่ไม่ซ้ำกัน
โดยการใช้ปัจจัยอื่น (เช่นการสุ่มหรือเวลา) ฉันสามารถเพิ่มโอกาสที่ฉันเลือก ID ที่ไม่ได้ใช้ในครั้งแรก เช่นถ้าคุณรู้ว่าคุณไม่สามารถสร้างมากกว่าหนึ่งเซสชันต่อวินาทีจากนั้นใช้ MrCranky: 122730 (เวลาปัจจุบันจนถึงที่สอง) จะได้รับ ID ที่ไม่ซ้ำซึ่งค่อนข้างน่าจดจำสำหรับผู้ใช้
ตราบใดที่คุณมีข้อมูลที่ค่อนข้างไม่ซ้ำใคร (ไม่จำเป็นต้องสมบูรณ์แบบเพียงส่วนใหญ่เท่านั้น) คุณสามารถใช้มันเป็นบล็อกเริ่มต้นและนั่นหมายถึงส่วนที่ไม่ซ้ำกันอย่างแท้จริง (รหัสจำนวนเต็มบางชนิด) สามารถ สั้นกว่ามากและทำให้ UID เป็นที่น่าจดจำมากขึ้น
คุณสามารถใช้ที่อยู่อีเมลของผู้เล่นเป็นตัวระบุที่ไม่ซ้ำกัน ฉันแน่ใจว่าพวกเขาสามารถจำได้ :)