ZZT-oop

**ZZT-oop** adalah bahasa pengaturcaraan bahasa skrip awal, direka olehTim Sweeney, bagi permainan komputernya ZZT.

### Kelebihan
Bahasa ini mempunyai kelebihan, ringkas dan intuitif, ia ketiadaan operator mathematik dan integrasi dalam permainan menjadikannya tidak mengancam kepada pengaturcara baru pada semua usia. Ia mudah dibayangkan berbanding data abstrak, dan reka bentuk operasi selari pelabagai laras (*multi-Thread*) adalah mudah dibayangkan seseorang yang berfikir dari segi persekitaran dinamik.

## Sintak
Sintak bahasa ini amat mudah. Ia berasaskan baris, dan huruf pertama setiap baris menentukan kesan baris tersebut.
*Baris pertama aturcara boleh ditetapkan dengan `@`, yang memberikan objel *nama*. Objek tanpa nama tidak boleh menerima pesanan dari objek lain melalui perintah `#SEND` (kecuali bagi `#SEND ALL:label`), kerana tiada cara merujuk kepadanya.
*Arahan tanpa permulaan, atau arahan ditetapkan dengan `$` atau `!`, menyebabkan objek membuka tetingkap pesanan dan mempaparkan teks kepada pemain.
*Arahan ditetapkan dengan `'` menunjukkan ulasan.
*Arahan bermula dengan `/` atau `?` mengarah objek untuk cuba bergerak kearah khusus. Arah yang mungkin termasuk `N`(Utara), `S`(Selatan), `E`(Timur), dan `W`(Barat), termasuk juga `SEEK` (untuk bergerak kearah pemain) dan awalan seperti `CW` (bererti arah jam, juga `CW N` bererti timur).
**Perutusan* sama dengan arahan perintah goto dalam bahasa pengistiharan (*declarative languages*); perbezaannya hanyalah ia boleh diberi pilihan untuk dihantar kepada objek lain dan menyebabkan laluan perlaksanaan objek itu melompat kepada titik ini dalam skrip. Titik di mana boleh dilompat, dikenali sebagai *label*, dengan awalan `:` dan digunakan sebagai nama pesanan itu, dan di mana kawalan objek perlu lompat apabila pesanan diterima.
**Bendera* adalah pengubah boolean sejagat yang digunakan bagi syarat uang hanya boleh di set atau diterangkan dengan perintah. Sekiranya perintah `#IF` digunakan bagi bendera yang diberikan, kemudian bendera akan dinilai; sekiranya ia diset sebagai benar, pesanan akan disenarai selepas dihantar, menyebabkan skrip melompat kepada titik ini.
*Arahan awalan dengan `#` bererti *arahan*, yang mengawal semua interaksi dengan sekeliling, samaada menembak, set bendera, menghantar pesanan atau memproses syarat (*conditional*). Terdapat sedozen perintah primitif ZZT-oop, termasuk 
**`#SEND`, yang menghantar perutusan kepada objek lain
**`#SET` dan `#CLEAR`, yang mengubahsuai nilai bendera
**`#LOCK`, yang menjadikan objek pekak kepada pesanan yang masuk, dan `#UNLOCK`, yang membalikkan operasi
**`#PUT`, yang mencipta objek baru jenis khas dan meletakkannya disebelah objek kini
**`#BECOME`, yang menyebabkan objek kini menjadi benda tau makhluk, denganitu mengakhiri tempoh hayat boleh program
**`#ZAP`, yang menggantikan `:` awalan label dengan `'` (dengan itu menukar label kepada ulasan), dan `#RESTORE`, yang membalikkan operasi

## Contoh

Aturcara di bawah menunjukkan objek "tembak" mudah yang bergerak kedepan dan kebelakang secara mendatar (barat ke timur), kadang-kala menembak kebawah (ke selatan). (Sekiranya pemain ditembak, pemain kehilangan kesihatan.) Sekiranya pemain menyentuh penembak, penembak akan musnah.

 @Shooter
 #GO WEST
 :TurnAround
 #GO OPP FLOW
 :KeepMoving
 ?FLOW
 #IF BLOCKED FLOW THEN TurnAround
 #SEND KeepMoving
 :Touch
 'No need to keep the timer around anymore
 #SEND InvisibleTimer:Die
 #DIE
 :ShootDownward
 #SHOOT SOUTH
 #SEND KeepMoving

 @InvisibleTimer
 'The #CYCLE command sets the rate at which this object is updated.
 #CYCLE 40
 :Loop
 #SEND Shooter:ShootDownward
 #SEND Loop
 :Die
 'Turn into a red wall
 #BECOME RED SOLID

## Pautan luar
*Online version of the ZZT-oop reference included with the game