Ben mem allocation olaylarını konsept olarak bilsem de, c 'de pointer konusuna bile hakim değilim. Amos 'un bu nedenle faydalı olacağı kanısına varmıştım. Tabi işin optimizasyonunu hiç düşünmedim. 48 saatlik bir maraton için sanırım AMOS bana istediğimi verecektir. Peki AMOS 'un assembly konusunda kendimi geliştirmem açısından bir faydası olur mu?
Aslında oyun yazacaksan, dinamik allokasyon çok da ihtiyaç duyacağın bir şey değil. Hatta belki de kaçınman gereken bir şey, oyunun orta yerinde Not Enough Memory hatası görmek istemezsin. O yüzden bunu bir tarafa bırakalım, Amos sana bu konuda sıkıntı vermeyecek gibi görünüyor. Bunu hiç söylemedim varsay.

Peki AMOS 'un assembly konusunda kendimi geliştirmem açısından bir faydası olur mu?
Amos bir BASIC dialektidir. Yani Yüksek-Seviye dillerin doruk noktası gibi bir yerde. Assembly ise en Alçak-Seviye dil olduğuna göre... ı-ıh faydası dokunmaz.
Tabi Amos'ta dilediğin yerde Assembly'ye geçiş yapabiliyorsun. Amos'un komut ve yönergelerinin yetersiz kaldığı, düşük seviye çağrılar için yapılıyor bu genelde. Ya da AmigaOS kütüphanelerindeki fonksiyonlardan faydalanmak istiyorsan...
Gel gör ki bu 48 saatlik bir maratonda kalkışmak istemeyeceğin kadar riskli bir şey. Kısa zamanda çözemeyeceğin hatalara düşebilirsin. O yüzden kodunu olabildiğince Amos rutinleri çerçevesinde tutsan iyi olacaktır.
Amiga'da Copper adlı bir çip var biliyorsun, bu çip kullanılarak renk paletindeki tek bir renge, yumuşak renk geçişi atayabiliyorsun. Platform oyunlarındaki açık maviden, koyu maviye geçiş yapan gökyüzü efektini bu çiple yaparlar genellikle. Şimdi mesela Amos'ta bu çip satır arası Assembly yönergeleriyle kodlanabildiği gibi, doğrudan bir Amos komutu olan "Rainbow" ile de çok basitçe (ancak daha sınırlı olarak) ayarlanabiliyor.
Sonra... Amos, bir BASIC dialekti olduğu için, aslında prosedürel kodlaman gereken bir dil. Bununla birlikte, fonksiyonel kodlamak isteyenler için de Procedure anahtar sözcüğü eklemişler.
Örn: C'de şöyle bir fonksiyon tanımladık diyelim:
int topla(int a, int b)
{
return(a + b);
}
Bunun Amos versiyonu şöyle bir şey oluyor:
Procedure _TOPLA[A, B]
End Proc[A+B]
Ha Procedure'den dönen sonucu Param'diye bir anahtar sözcükle okuyorsun bu arada.
_TOPLA[2, 3]
RESULT = Param
Print RESULT
Yani fonksiyonel programlama mümkün, ancak yavaş. Procedure çağrılarının CPU yükü Amos'ta çok fazla (Assembly veya C'deki gibi hızlı değiller). Otomatik değişken çevrimleri ve kopyalamaları yüzünden sanırım.
O nedenle döngüler içinde Procedure çağrısı yapmak Amos'ta pahalı (haliyle oyunun gerçek Amiga'da çalışacak ve bunlar çok hızlı makineler değiller). Ben kodunun modüler olmasını istediğin yerlerde Gosub / Return çiftini kullanmanı tavsiye ederim. Procedure'leri döngüsel olmayan rutinler için kullanmanı tavsiye ederim, örneğin açılış ekranını çizdirmek için bir Procedure yazılabilir. Sonuçta bu oyun açılırken bir kere çağrılacak vs...
Sonra SubTask olayı. Amos'ta kolayca SubTask oluşturmak mümkün değil. Örneğin ana kodun oyun mantığını işlerken, oluşturacağın bir SubTask arkaplanda müzik çalsın, ya da karakter sprite'larını anime etsin istersen bu mümkün değil (Assembly'ye düşüp exec.library rutinleri çağırmazsan tabi)...
Gel gör ki, adamlar bunu da düşünmüş. Müzik çalacaksan Music diye bir komut var. Mod dosyalarını Memory Bank'lara yüklüyorsun. Sonra "Music 1" diye çağırıyorsun, o arka planda 1nci bank'taki Modu çalıyor.
Benzer şekilde çalışan bir de Anim komutu var.
Bunları öğrenmek zamanını alacaktır. Bence AmosPro kurup, çalışmaya başla yavaş yavaş.
