Age of Empires 2
description
Transcript of Age of Empires 2
Age of Empires 2
Age of Empires 2
• Το θυμάστε;
• Αν η απάντησή σας είναι «1», τότε τα παρακάτω θα σας αρέσουν!
• Για λίγη ώρα ας μείνουμε στο κομμάτι της τεχνητής νοημοσύνης
Computer players
• Ωραίο το Multiplayer! (www.igzones.com)
• Οι computer players οδηγούνται από τεχνητή νοημοσύνη
• Για την ακρίβεια παίζουν βασισμένοι σε κανόνες (αν …. τότε ….)!
Age of Empires 2 – What’s more?
• Οι κατασκευαστές φρόντισαν να αφήσουν τη δυνατότητα να φτιάχνουμε δικά μας Artificial Intelligence scripts
• Ελέγχουν τη στρατηγική και ως ένα όριο τις επιλογές του computer player
• Και το καλύτερο: Μπορούμε να τα βάζουμε να παίζουν μεταξύ τους! => Τουρνουά
Φτιάχνουμε AI scripts
• Δημιουργούμε ένα κενό αρχείο .ai
• Και ένα αρχείο .per με το ίδιο όνομα που περιέχει τον κώδικα
• Τα τοποθετούμε στο φάκελο AI του παιχνιδιού
Και τα επιλέγουμε…
Γενική λειτουργία
• Η στρατηγική ενός computer player είναι ένα σύνολο από κανόνες
• Κάθε κανόνας αποτελείται από ένα ή περισσότερα FACTS και ένα ή περισσότερα ACTIONS
• Όταν ικανοποιούνται όλα τα Facts, τότε ο κανόνας ενεργοποιείται και εκτελούνται όλα τα Actions.
Παράδειγμα κανόνα
(defrule(food-amount > 75)(unit-type-count villager < 20)=>(train villager)
)
Facts
• Συνθήκες που μπορεί να ικανοποιούνται ή όχι• Μεταξύ των Facts:– Options του παιχνιδιού (πχ map-size, civ-selected)– Συνθήκες του παιχνιδιού (πχ player-resigned,
game-time)– Συνθήκες που αφορούν τον παίκτη (πχ food-
amount, population, town-under-attack)– Συνθήκες που αφορούν άλλους παίκτες (πχ
players-current-age, players-unit-count)
Facts
• Παραδείγματα:– cheats-enabled– civ-selected mongol– research-completed ri-town-watch– can-train champion– military-population >= 30– idle-farm-count < 3
Actions
• Εντολές δράσης του computer player• Μεταξύ των Actions:
- Άμεσες εντολές τύπου «φτιάξε», «χτίσε» κλπ (πχ train, research, build, chat)- Στρατηγικός σχεδιασμός (πχ enable-timer, set-goal, set-strategic-number) - Χειρισμός του ίδιου του script (πχ generate-random-number, disable-self)
Actions
• Παραδείγματα:– train man-at-arms– chat-to-allies “I am a computer and I talk haha”– build stable– resign– research imperial-age– enable-timer 1 300
Επίδειξη απλού AI script
(defrule(civilian-population < 4)=>(train villager)
)
(defrule(civilian-population >= 4)=>(research ri-loom)
)
(defrule(true)=>(build house)(disable-self)
)(defrule
(resource-found food)=>(build mill)
)
Περιορισμοί
• Οι παράμετροι πρέπει να είναι σταθεροί αριθμοί, δεν υπάρχουν μεταβλητές
– military-population >= 30– military-population >= civilian-population
– x=food-amount – wood-amount
Περιορισμοί
• Μη πλήρης έλεγχος του computer player
– Τοποθέτηση κτιρίου– Επιλογή πηγής φαγητού– Αλγόριθμος εξερεύνησης (scouting)– κ.α.
Εσωτερικός κώδικας
• Πολύπλοκες διαδικασίες ελέγχονται από κώδικα που δεν μπορούμε να αλλάξουμε
• Πώς θα μπορούσαμε να ορίσουμε τη διαδρομή που θα ακολουθήσει ο scout;
• Θα μπορούσαμε όμως να δώσουμε κατευθυντήριες γραμμές
• Η επικοινωνία με τον εσωτερικό κώδικα γίνεται μέσω των Strategic numbers
Strategic numbers
• set-strategic-number ...– sn-minimum-attack-group-size– sn-mill-max-distance– sn-wood-dropsite-distance– sn-number-forward-builders
• πχ:set-strategic-number sn-minimum-attack-group-size 20
Villager tasking• Τα υλικά που επιλέγουμε να μαζεύουμε ελέγχονται από strategic
numbers– sn-food-gatherer-percentage– sn-wood-gatherer-percentage– sn-gold-gatherer-percentage– sn-stone-gatherer-percentage
(defrule (current-age == dark-age)(wood-amount > 400)(food-amount < 100)=>(set-strategic-number sn-food-gatherer-percentage 90)(set-strategic-number sn-wood-gatherer-percentage 10)
)
Goals
• Δεν υπάρχουν μεταβλητές => καμιά επικοινωνία μεταξύ κανόνων
• Η κατάσταση διορθώνεται κάπως με κάποιες «μεταβλητές κατάστασης»
• Action: set-goal <goal-id> <value>• Fact: goal <goal-id> <value>• goal-id από 1 έως 40• Ο operator σύγκρισης του Fact είναι “==“
Goals - παράδειγμα(defrule
(game-time > 2400)(current-age != imperial-age)=>(set-goal 1 1)
)
(defrule(civilian-population < 100) (not (goal 1 1))=>(train villager)
)
Constants(defconst AGE-ADVANCEMENT 1)(defconst YES 1)(defconst NO 2)
(defrule(game-time > 2400)(current-age != imperial-age)=>(set-goal AGE-ADVANCEMENT YES)
)(defrule
(civilian-population < 100)(not (goal AGE-ADVANCEMENT YES)) =>(train villager)
)
Μεταβλητή συμπεριφορά (1)
• Για διαφορετικούς τύπους παιχνιδιού θέλουμε να έχουμε διαφορετικούς κανόνες– game-type-specific κανόνες (πχ deathmatch)– map-specific κανόνες– civilization-specific κανόνες
• Εντολή load-if-defined <συνθήκη>• Γρηγορότερη επεξεργασία κατά τη διάρκεια του
παιχνιδιού• Έλεγχος λιγότερων συνθηκών στο εσωτερικό των
κανόνων
Μεταβλητή συμπεριφορά (2)
• Random αριθμοί• Τυχαία επιλογή συμπεριφοράς• Action: generate-random-number <max>• Fact: random-number <operator> <value>• Όχι και τόσο απαραίτητο στην πράξη…
Cheating
• 1ος τρόπος cheating:– Action: cc-add-resource food 300
• Οσοδήποτε-οποτεδήποτε
• difficulty = Hardest => CHEATER!!
Cheating
• 2ος τρόπος cheating:– Fact: cc-players-unit-count– Fact: cc-players-building-count
• Πληροφορίες για τους αντιπάλους, μη προσβάσιμες φυσιολογικά
• Όχι cheating:– Fact: players-unit-count– Fact: players-building-count
Που να βρείτε
• CPSB.doc στο φάκελο DOCS του CD– Το επίσημο manual του AI scripting
• www.aiscripters.com– Πολλά AI scripts,άρθρα και τουρνουά μεταξύ
computer players ακόμα και τώρα
• www.aok.heavengames.com– Άρθρα, forum, υλικό για το AOE 2 γενικά
• www.igzones.com– Το σημερινό “zone” για online games