typescript - Bir nesnenin sınıfını dinamik olarak değiştiremiyorsanız ne yapmalısınız?
Typescript'te küçük bir futbol oyunu yapıyorum ve kullanıcıya bir seferde bir oyuncuyu kontrol etme imkanı vermek istiyorum, ancak başka bir oyuncuyu kontrol etmeye geçebilirler. Oyuncunun sahip olduğu özellikleri ve getNextMove metodunu içeren bir oyuncu sınıfım var; bu metod, oyuncunun kullanıcı tarafından mı yoksa yapay zeka tarafından mı kontrol edildiğine bakılmaksızın gerekli olacak. Ancak, oyuncu kullanıcı tarafından mı yoksa yapay zeka tarafından mı kontrol ediliyorsa, getNextMove metodunun farklı mantık uygulamasını istiyorum.
Bir Kullanıcı sınıfı ve Player sınıfını uygulayan ve ardından getNextMove metodunu gerçekleştiren bir Yapay Zeka sınıfı düşünüyordum.
Bu düşündüğüm şeylere benziyor
interface Player {
...
getNextMove()
}
class User implements Player{
getNextMove(){
// Take user input
}
}
class AI implements Player{
getNextMove(){
// Decide next move automatically
}
}
Ancak, Kullanıcı oyuncuları değiştirdikçe, az önce kontrol ettikleri oyuncunun AI mantığını kullanmak için geri geçmesi gerekecek. Sınıfların dinamik olarak değiştirilebileceğini sanmıyorum ve bu Nesne yapısının dışını düşünemiyorum ya da istediğim şeyi başarabilecek bir şey bulamıyorum. Her türlü tavsiye çok takdir edilir.
Cevap #1
JB Nizet ile aynı fikirdeyim.
Strateji desenini kullan.
class UserState {
// properties
}
class User {
constructor(){
this.state = new UserState();
}
activateUserControl(){
this.moveStrategy = new UserControlStrategy(this.state);
}
activateAI(){
this.moveStrategy = new AIControlStrategy(this.state);
}
getNextMove(){
this.moveStrategy.nextMove();
}
}
