>> DAVID馬蘭：讓我們寫一個程序 涉及一個窗口和一個圓
圓來回彈跳 關閉左和右
該窗口的邊緣。
要做到這一點，讓我們用斯坦福大學 可移植庫，讓我們先
包括gevents.h這樣我們就可以 偵聽鼠標移動。
然後，讓我們的include gobjects.h使 我們可以聲明類的東西橢圓形或
圈子，真的。
然後，讓我們有gwindow.h使 我們有一個圖形窗口
一切。
>> 讓我們宣布主按照通常的方式。
而且我們現在聲明並實例 或者創建窗口，GWindow -
我們會打電話給變量窗口 -
得到newGWindow。
我們會隨便讓 320像素×240像素。
>> 讓我們接下來實例化一個圓圈。
但要實例化這個圈子裡， 我們需要做更多的工作。
尤其是，讓我們填寫這個圈子 這樣，整個的是
黑色，而不僅僅是 其輪廓。
GOval -
我們會打電話給它圈 -
得到newGOval。
我們會把這個橢圓形的0，110，我們將 通過使橢圓20個像素寬
20個像素高 - 換句話說，一個 直徑為20或10的半徑。
>> 現在，讓我們設置圓的顏色 要報價，引文結束，“黑”。讓我們
現在設置它填補 通過指定正確的。
現在最後，讓我們的圈子加入 窗口如下，據此，
後者加入到前者。
>> 現在讓我們來聲明一個雙。
我們會打電話給它的速度。
而有些武斷，讓我們說， 這個圈子的速度將
2.0，換言之，2個像素 對於每一個時間單位。
現在讓我們來故意 導致一個無限循環。
>> 那麼如何讓這個圈子 來回反彈？
那麼讓我們假設這個循環內 對於每一個時間單位，我們是
要移動的圓圈只是一點點 根據2個像素的速度位
每單位時間。
但不斷，我們將不得不 檢查圓接觸
在屏幕或左的右邊緣 屏幕邊緣的，因為如果是這樣，我們
需要反彈，可以這麼說。
>> 如何實現 彈跳的概念？
那麼，如果我們要在2個像素 每單位時間的權利，彈離
右邊緣，我們可以簡單地逆轉 這是每單位負2個像素
的時間，從而否定 速度。
所以，事實上，彈跳比較 簡單。
>> 讓我們首先移動的圓圈這麼多 沿x軸的像素，通過該
許多像素沿y軸。
換句話說，我們不希望它 沿y軸方向移動的。
我們只希望它反彈 前後左右。
>> 而且我們現在這個循環中檢查是否 x坐標的圓的加
圓的寬度大 大於或等於
窗口寬度 -
換句話說，如果圓的位置 加圓圈的寬度
本身現在是過去的邊緣 窗外，我們最好
更好地扭轉我們的速度 -
速度得到負的速度，從而 翻轉了積極的
負或負到正。
但是，如果圓移動 從右到左的，因此它打
左邊緣？
換句話說，如果x坐標的 圈子現在是小於或等於
為0，讓我們繼續前進，再次 顛倒我們的速度。
>> 那麼為什麼我在沒有添加 寬圓的這
時間，因為我以前那樣？
那麼，請記住，坐標 一個對象的定義
通過其頂部的左上角， 未通過其中央。
因此，當該圓從移動 從左到右，我們需要檢查
是否的右邊緣 圈已通過
窗口的右邊緣。
因此，要搞清楚那是什麼，我們有 得到的圓的x坐標
加圓圈的寬度移動 我們從頂部左側
角落，有效，對 右上方角落。
當圓從右邊移動到 左側，同時，我們不需要
懶得這樣此外，由於 圓的左上角是
已經是價值，我們將 從可得x搞定。
>> 現在讓我們轉移球。
現在，讓我們保存，編譯並運行此 程序，使反彈，。/反彈。
我們在那裡有一個程序。
>> 但圓正這麼混賬快， 這幾乎是不可能的，看看有什麼
其實已在進行之中。
因此，讓我們頗為方案強行通過 點擊X在右上角
角落在這裡。
現在讓我們返回到源代碼 慢下來的東西一點點。
>> 換句話說，在這個無限 循環，而不是僅僅與移動和
移動和再次，廣告nauseum，讓我們流連忘返 只需幾毫秒
出發前再次移動。
尤其是，讓我們去底部 這裡簡直是無限循環的
停下來，例如10毫秒 在每次迭代。
現在，讓我們重新編譯並重新運行反彈。
現在我們看到一個更合理 實現，在這裡我們可以看到
圈真正反彈的 左和右邊緣。