Referensi: Gunakan pengurutan eksplisit untuk menemukan kecocokan terbaik - Amazon GameLift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Referensi: Gunakan pengurutan eksplisit untuk menemukan kecocokan terbaik

Contoh ini mengatur kecocokan sederhana dengan dua tim yang terdiri dari tiga pemain. Ini menggambarkan cara menggunakan aturan penyortiran eksplisit untuk membantu menemukan kecocokan terbaik secepat mungkin. Aturan ini menyortir semua tiket pencocokan aktif untuk membuat kecocokan terbaik berdasarkan persyaratan utama tertentu. Contoh ini diimplementasikan dengan instruksi berikut:

  • Buat dua tim pemain.

  • Sertakan tepat tiga pemain di setiap tim.

  • Sertakan atribut pemain berikut:

    • Level pengalaman (jika tidak disediakan, default ke 50).

    • Mode game pilihan (dapat mencantumkan beberapa nilai) (jika tidak disediakan, default ke "coop" dan "deathmatch").

    • Peta game pilihan, termasuk nama peta dan bobot preferensi (jika tidak disediakan, default ke "defaultMap" dengan bobot 100).

  • Menyiapkan penyortiran:

    • Urutkan pemain berdasarkan preferensi mereka untuk peta game yang sama dengan pemain jangkar. Pemain dapat memiliki beberapa peta game favorit, jadi contoh ini menggunakan nilai preferensi.

    • Urutkan pemain berdasarkan seberapa dekat level pengalaman mereka dengan pemain jangkar. Dengan penyortiran ini, semua pemain di semua tim akan memiliki level pengalaman yang sedekat mungkin.

  • Semua pemain di semua tim harus memilih setidaknya satu mode game yang sama.

  • Semua pemain di semua tim harus memilih setidaknya satu peta game yang sama.

Catatan tentang penggunaan set aturan ini:

  • Penyortiran peta permainan menggunakan pengurutan absolut yang membandingkan nilai mapPreference atribut. Karena penyortiran tersebut merupakan yang pertama dalam kumpulan aturan, penyortiran ini dilakukan terlebih dahulu.

  • Penyortira pengalaman menggunakan penyortiran jarak untuk membandingkan level keterampilan calon pemain dengan keterampilan pemain jangkar.

  • Penyortiran dilakukan sesuai urutan yang tercantum dalam set aturan. Dalam skenario ini, pemain disortir berdasarkan preferensi peta game, dan kemudian berdasarkan level pengalaman.

{ "name": "multi_map_game", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "experience", "type": "number", "default": 50 }, { "name": "gameMode", "type": "string_list", "default": [ "deathmatch", "coop" ] }, { "name": "mapPreference", "type": "string_number_map", "default": { "defaultMap": 100 } }, { "name": "acceptableMaps", "type": "string_list", "default": [ "defaultMap" ] }], "teams": [{ "name": "red", "maxPlayers": 3, "minPlayers": 3 }, { "name": "blue", "maxPlayers": 3, "minPlayers": 3 }], "rules": [{ // We placed this rule first since we want to prioritize players preferring the same map "name": "MapPreference", "description": "Favor grouping players that have the highest map preference aligned with the anchor's favorite", // This rule is just for sorting potential matches. We sort by the absolute value of a field. "type": "absoluteSort", // Highest values go first "sortDirection": "descending", // Sort is based on the mapPreference attribute. "sortAttribute": "mapPreference", // We find the key in the anchor's mapPreference attribute that has the highest value. // That's the key that we use for all players when sorting. "mapKey": "maxValue" }, { // This rule is second because any tie-breakers should be ordered by similar experience values "name": "ExperienceAffinity", "description": "Favor players with similar experience", // This rule is just for sorting potential matches. We sort by the distance from the anchor. "type": "distanceSort", // Lowest distance goes first "sortDirection": "ascending", "sortAttribute": "experience" }, { "name": "SharedMode", "description": "The players must have at least one game mode in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[gameMode])"], "minCount": 1 }, { "name": "MapOverlap", "description": "The players must have at least one map in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[acceptableMaps])"], "minCount": 1 }] }