DAVID Malan: Mari kita menulis sebuah program melibatkan jendela dan lingkaran dengan lingkaran memantul bolak-balik off kiri dan kanan tepi jendela itu. Untuk melakukannya, mari kita gunakan The Stanford Perpustakaan Portable, dan mari kita pertama termasuk gevents.h sehingga kita dapat mendengarkan gerakan mouse. Mari kita kemudian termasuk gobjects.h sehingga kita dapat mendeklarasikan hal-hal seperti oval atau lingkaran, benar-benar. Dan kemudian mari kita termasuk gwindow.h sehingga kita memiliki jendela grafis untuk semuanya. Mari kita mendeklarasikan utama dengan cara yang biasa. Dan mari kita menyatakan dan instantiate atau membuat jendela, GWindow - dan kami akan memanggil window variabel - mendapat newGWindow. Dan kita akan sewenang-wenang membuat 320 piksel oleh 240 piksel. Mari kita berikutnya instantiate lingkaran. Tetapi untuk instantiate lingkaran ini, kita perlu melakukan sedikit lebih banyak pekerjaan. Secara khusus, mari kita mengisi lingkaran ini sehingga seluruh hal yang hitam dan bukan hanya garis besar daripadanya. GOval - kita akan menyebutnya lingkaran - mendapat newGOval. Kami akan menempatkan oval ini pada 0, 110, dan kita akan membuat oval 20 pixel dan lebar 20 piksel tinggi - dengan kata lain, diameter 20 atau radius 10. Sekarang mari kita mengatur warna lingkaran yang menjadi kutipan, tanda kutip, "hitam." Mari sekarang mengaturnya diisi dengan menentukan benar. Dan sekarang yang terakhir, mari kita tambahkan lingkaran untuk jendela sebagai berikut, dimana yang terakhir ditambahkan ke mantan. Mari kita sekarang menyatakan ganda. Kita akan menyebutnya kecepatan. Dan agak sewenang-wenang, katakanlah kecepatan lingkaran ini akan 2.0, dengan kata lain, 2 piksel untuk setiap unit waktu. Dan sekarang mari kita sengaja menginduksi infinite loop. Jadi bagaimana membuat lingkaran ini bangkit kembali dan sebagainya? Nah mari kita asumsikan dalam lingkaran ini yang untuk setiap unit waktu, kami akan memindahkan lingkaran hanya sedikit bit berdasarkan kecepatannya dari 2 piksel per unit waktu. Tapi terus-menerus, kita akan harus memeriksa apakah lingkaran menyentuh tepi kanan layar atau kiri tepi layar, karena jika demikian, kita membutuhkannya untuk bangkit, sehingga untuk berbicara. Bagaimana menerapkan gagasan memantul? Nah jika kita akan pada 2 pixel ke tepat per unit waktu, terpental tepi kanan, kita hanya bisa membalikkan bahwa untuk menjadi negatif 2 pixel per unit waktu, sehingga meniadakan kecepatan. Jadi sebenarnya, memantul relatif mudah. Mari kita pertama memindahkan lingkaran dengan ini banyak piksel sepanjang sumbu x, dengan ini banyak piksel sepanjang sumbu y. Dengan kata lain, kita tidak ingin bergerak sepanjang sumbu y sama sekali. Kami hanya ingin untuk bangkit kembali dan sebagainya kiri dan kanan. Dan sekarang mari kita periksa dalam loop ini jika x-koordinat lingkaran ditambah lebar lingkaran lebih besar dari atau sama dengan lebar jendela - dengan kata lain, jika lokasi lingkaran ditambah lebar lingkaran sendiri kini melewati tepi jendela, kita lebih lebih baik membalikkan kecepatan kami - kecepatan mendapatkan kecepatan negatif, sehingga membalik positif untuk negatif atau negatif ke positif. Tapi bagaimana jika lingkaran bergerak dari kanan ke kiri sehingga hits tepi kiri? Dengan kata lain, jika x-koordinat lingkaran sekarang kurang dari atau sama ke 0, mari kita pergi ke depan dan lagi membalikkan kecepatan kami. Jadi mengapa saya belum ditambahkan dalam lebar lingkaran ini waktu, seperti yang saya lakukan sebelumnya? Nah, perlu diingat bahwa koordinat suatu objek didefinisikan oleh sudut kiri puncaknya, bukan oleh tengahnya. Dan jadi ketika lingkaran bergerak dari kiri ke kanan, kita perlu memeriksa apakah tepi kanan lingkaran telah lulus tepi kanan jendela. Jadi untuk mencari tahu apa itu, kita harus untuk mendapatkan x-koordinat lingkaran ditambah lebar lingkaran bergerak diri dari atas kiri sudut, efektif, dengan pojok kanan. Ketika lingkaran bergerak dari kanan ke kiri, sementara itu, kita tidak perlu repot-repot dengan penambahan tersebut, karena sudut kiri atas lingkaran adalah sudah nilai kita akan dapatkan dari get x. Mari kita sekarang pindah bola. Sekarang mari kita simpan, kompilasi, dan menjalankan ini Program, membuat bounce,. / bouncing. Dan di sana kita memiliki program. Tapi lingkaran bergerak begitu darn cepat, itu hampir mustahil untuk melihat apa yang sebenarnya terjadi. Jadi mari kita cukup program secara paksa oleh mengklik X di kanan atas sudut sini. Sekarang mari kita kembali ke kode sumber dan memperlambat segalanya sedikit. Dengan kata lain, dalam hal ini tak terbatas lingkaran, bukan hanya dan bergerak dan bergerak dan lagi, nauseum iklan, mari kita berlama-lama untuk hanya beberapa milidetik sebelum melanjutkan bergerak lagi. Secara khusus, mari kita pergi ke bawah loop tak terbatas di sini dan hanya jeda untuk, katakanlah, 10 milidetik pada setiap iterasi. Sekarang mari kita ulang dan re-run bouncing. Dan sekarang kita melihat jauh lebih masuk akal implementasi, di mana kita bisa melihat lingkaran yang benar-benar memantul pada kiri dan tepi kanan.