ฉันจะสร้าง ID เกมที่ใช้งานง่ายและเป็นเอกลักษณ์ได้อย่างไร


11

ฉันจะสร้าง ID เกมที่ไม่ซ้ำซึ่งยังใช้งานง่ายได้อย่างไร - เพื่อให้ผู้ใช้รายหนึ่งสามารถให้ ID เกมนั้นกับคนอื่นเพื่อเข้าร่วมเกมได้อย่างง่ายดาย

ฉันกำลังสร้างเกมของฉันใน Silverlight ด้วย C #


3
นี่เป็นคำตอบที่น้อยกว่าดังนั้นความคิดเห็นที่ไม่ดี ฉันใช้ระบบกุญแจ 2 ปุ่ม ฉันสร้างคีย์เฉพาะ (UUID) ซึ่งฉันเก็บไว้ภายใน เป็นอย่างนี้: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65 หลังจากที่ฉันสร้าง ID ที่ไม่ซ้ำกันเพื่อนของผู้เล่นสามารถค้นหาโปรไฟล์ของเขาโดยค้นหาชื่อเล่นของเขาและใช้ตัวอักษร 4 ตัวแรกโอกาสที่จะมี 2 'microdude: 39d7' นั้นผอมเพรียว ถ้าฉันเห็นการชนฉันสามารถทำให้มันเป็น 5 หรือ 6 ตัวแรกโดยสร้างคีย์เฉพาะของเขา 39d7e เห็นได้ชัดว่าเป็นสาธารณะ (ตัวละคร) เพื่อให้เพื่อนของเขาสามารถเพิ่มเขาโดยตรงและช่วยในการระบุเมื่อทำเกมผ่าน IM หรือแชท
เน้นการค้นพบ

คีย์ต้องใช้งานได้นานเท่าใด สิ่งนี้จะมีผลต่อความต้องการเฉพาะและคุณสามารถนำกุญแจเก่ามาใช้ซ้ำได้
ทิมโฮลท์

@ เวลาแป้นอาจใช้ได้ไม่เกิน 2 ชั่วโมง
Zain Shaikh

คำตอบ:


6

หากคุณมีแหล่งข้อมูลที่เชื่อถือได้ปัญหาดังกล่าวนั้นเป็นเรื่องง่าย (ซึ่งฉันสมมติว่าผู้ใช้ใส่ ID เพื่อเชื่อมต่อกับเกมแล้วจะมีการเปลี่ยนเส้นทางโดยใช้เซิร์ฟเวอร์กลางบางแห่ง) เพียงใช้อัลกอริทึมเช่นhttp://www.safepasswd.com/ทำเพื่อสร้าง UID ซึ่งเป็นคำในพจนานุกรมโดยทั่วไป + ตัวเลขเล็ก ๆ หากจำนวนเซิร์ฟเวอร์มีขนาดค่อนข้างเล็กคุณสามารถทำได้แม้กระทั่งอัลกอริธึมไร้เดียงสาที่เพิ่งเลือกสุ่มจนกว่าจะไม่ได้ใช้งาน

หากคุณต้องการให้ลูกค้าของคุณเป็นแหล่งของ UID คุณจะต้องทิ้งส่วนที่เป็นมิตรกับผู้ใช้ของ ID เหล่านั้น แต่มันง่ายกว่าที่จะทำในด้านการเข้ารหัสเพราะคุณเพิ่งจะใช้ System.Guid.NewGuid (). ToString () นั่นคือสำหรับทุกเจตนาและวัตถุประสงค์รับประกันว่าจะไม่ซ้ำกัน 100% ของเวลา แหล่ง

จากนั้นอีกครั้ง GUID นั้นเกินความจำเป็นเล็กน้อย จะเป็นการง่ายกว่าถ้าจะจำ IP หรือชื่อผู้ใช้ b


ดีฉันคิดว่าฉันควรจะไปกับชื่อผู้ใช้อย่างน้อยพวกเขาจะไม่ซ้ำกันและพวกเขายังใช้งานง่าย ขอบคุณ :)
Zain Shaikh

3

วิธีการหนึ่งที่จะใช้พจนานุกรมและเลือกคำที่ยึดตามโครงร่างลำดับเลข อาจใช้เลขจำนวนเต็ม 32 บิตที่ไม่ซ้ำกันเพื่อระบุผู้ใช้แต่ละคนและสำหรับคำ 16 บิตแต่ละดัชนีดัชนีพจนานุกรม (อาร์เรย์ของคำ) ด้วยวิธีนี้คุณสามารถแสดง ID ของตนโดยใช้คำจริงและตัวระบุแต่ละรายการจะไม่ซ้ำกัน

อีกวิธีคือการใช้บางสิ่งที่คล้ายกับที่ Steam ใช้: อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ด้วยรหัสที่พวกเขาเลือกและหลังจากนั้นให้พวกเขาระบุรหัสที่แสดงที่พวกเขาต้องการ ตัวอย่างเช่น ID สำหรับเข้าสู่ระบบอาจเป็นอีเมลและชื่อที่แสดงอาจเป็นชื่อจริง ด้วยวิธีนี้ผู้ใช้สามารถแบ่งปันตัวระบุที่ไม่ซ้ำกันของพวกเขา แต่ยังระบุด้วยชื่อของการเลือกของพวกเขา


ขอบคุณสำหรับคำแนะนำของคุณตอนนี้ฉันจะใช้ชื่อผู้ใช้เป็นรหัสเฉพาะตามที่ @Tetrad แนะนำ
Zain Shaikh

3

คำตอบของ FuzzYspo0N ในความคิดเห็นเป็นสิ่งที่ดีมาก โดยทั่วไปปัญหานี้จะทำให้เดือดร้อนเพื่อสร้างรหัสเกมที่ไม่ซ้ำกันมากพอที่จะหลีกเลี่ยงการชนโดยไม่ต้องทำให้มันซับซ้อนโดยพลการ GUID มาตรฐาน 128 บิตได้รับความเป็นเอกลักษณ์โดยใช้ข้อมูลท้องถิ่น (เช่น MAC ของคุณและปัจจัยอื่น ๆ ) เพื่อสร้างโอกาสในการชนกันระหว่างเครื่องขนาดเล็กมากจากนั้นเพิ่มปัจจัยแบบสุ่มและเวลาเพื่อให้เกิดความขัดแย้งภายในเครื่องนั้น ขนาดเล็กมาก.

คุณสามารถทำตามกลยุทธ์เดียวกันเพื่อสร้างรหัสของคุณเอง เริ่มต้นด้วยบางสิ่งที่น่าจดจำสำหรับผู้ใช้ แต่ค่อนข้างจะไม่ซ้ำกัน (หากผู้ใช้มีชื่อผู้ใช้ทั่วโลกซึ่งเป็นการเริ่มต้นที่ดีหรือชื่อเครื่อง / IP) และเพิ่มปัจจัยอื่น ๆ จนกว่าคุณจะสร้างสิ่งที่ไม่ซ้ำกัน ด้วยการเลือกชื่อท้องถิ่นบางอย่างเช่นชื่อเครื่องคุณจะ จำกัด ชุดของการชนที่อาจเกิดขึ้นมากพอที่จะเริ่มสืบค้นหากมี ตัวอย่างเช่นเมื่อคุณ จำกัด ให้ผู้ใช้นั้นหรือเพียงแค่คุณรู้ว่าคุณต้องไปที่ใดเพื่อตรวจสอบว่า UID นั้นถูกใช้งานอยู่หรือไม่

ตัวอย่างเช่นถ้าฉันรู้ว่าชื่อผู้ใช้ของฉันเป็นระบบที่ไม่เหมือนใคร MrCranky: 1 เป็น UID ที่ถูกต้อง หากฉันสามารถตรวจสอบว่า MrCranky: 1 ใช้งานอยู่แล้ว (ด้วยวิธีอื่น) จากนั้นฉันก็สามารถลองใช้ตัวเลขจนกว่าฉันจะพบหมายเลขที่ไม่ซ้ำกัน

โดยการใช้ปัจจัยอื่น (เช่นการสุ่มหรือเวลา) ฉันสามารถเพิ่มโอกาสที่ฉันเลือก ID ที่ไม่ได้ใช้ในครั้งแรก เช่นถ้าคุณรู้ว่าคุณไม่สามารถสร้างมากกว่าหนึ่งเซสชันต่อวินาทีจากนั้นใช้ MrCranky: 122730 (เวลาปัจจุบันจนถึงที่สอง) จะได้รับ ID ที่ไม่ซ้ำซึ่งค่อนข้างน่าจดจำสำหรับผู้ใช้

ตราบใดที่คุณมีข้อมูลที่ค่อนข้างไม่ซ้ำใคร (ไม่จำเป็นต้องสมบูรณ์แบบเพียงส่วนใหญ่เท่านั้น) คุณสามารถใช้มันเป็นบล็อกเริ่มต้นและนั่นหมายถึงส่วนที่ไม่ซ้ำกันอย่างแท้จริง (รหัสจำนวนเต็มบางชนิด) สามารถ สั้นกว่ามากและทำให้ UID เป็นที่น่าจดจำมากขึ้น


ขอบคุณสำหรับคำแนะนำของคุณตอนนี้ฉันจะใช้ชื่อผู้ใช้เป็นรหัสเฉพาะตามที่ @Tetrad แนะนำ
Zain Shaikh

0

คุณสามารถใช้ที่อยู่อีเมลของผู้เล่นเป็นตัวระบุที่ไม่ซ้ำกัน ฉันแน่ใจว่าพวกเขาสามารถจำได้ :)


ขอบคุณสำหรับคำแนะนำของคุณตอนนี้ฉันจะใช้ชื่อผู้ใช้เป็นรหัสเฉพาะตามที่ @Tetrad แนะนำ
Zain Shaikh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.