- 算法超簡單:趣味游戲帶你輕松入門與實踐
- 童晶
- 577字
- 2024-09-10 17:14:27
2.2 小球的自由落體
本節講解如何實現小球的自由落體運動效果,完整代碼參見配套資源中的2-2.cpp,掃描右側二維碼觀看視頻效果“2.2 小球的自由落體”。下面對2-2.cpp中的一些關鍵內容進行講解,代碼對應的行號是它們在2-2.cpp中的行號。

2.2 小球的自由落體
首先用一個小球表示游戲中的小鳥,定義結構體記錄小球圓心的橫、縱坐標x、y,縱軸方向的速度vy,半徑radius,代碼如下。
2-2.cpp
8 struct Bird // 小鳥結構體 9 { 10 float x, y, vy, radius; // 小球圓心坐標(x,y)、y軸方向的速度vy、半徑 radius 11 };
在程序開頭,使用宏定義的形式設定畫面的寬度WIDTH、高度HEIGHT、重力加速度G,代碼如下。
2-2.cpp
4 #define WIDTH 800 // 游戲畫面寬度 5 #define HEIGHT 600 // 游戲畫面高度 6 #define G 0.3 // 重力加速度
在while循環語句中,首先根據重力加速度G計算速度vy,然后利用vy更新小球圓心的縱坐標y,從而實現小球加速下落的效果,代碼如下。
2-2.cpp
24 while (1) // 一直循環 25 { 26 bird.vy = bird.vy + G; // 根據重力加速度更新小球在y方向的速度 27 bird.y = bird.y + bird.vy; // 根據小球在y方向的速度更新其圓心 的縱坐標
當小球碰到畫面的下邊界時,重新設置小球圓心的縱坐標y,代碼如下。
2-2.cpp
29 if (bird.y >= HEIGHT - bird.radius) // 如果小球碰到畫面的下邊界 30 { 31 bird.y = HEIGHT / 6; // 重新設置小球圓心的縱坐標 32 bird.vy = 0; // 小球在y方向的初始速度設為0 33 }
更新小球的速度和位置后,依次執行清空畫面、繪制新位置的小球、暫停10毫秒,即可實現小球重復加速下落的動畫效果,代碼如下。
2-2.cpp
35 cleardevice(); // 清空畫面 36 fillcircle(bird.x, bird.y, bird.radius); // 繪制小球 37 Sleep(10); // 暫停10毫秒
推薦閱讀
- 深入核心的敏捷開發:ThoughtWorks五大關鍵實踐
- JavaScript百煉成仙
- Oracle 11g從入門到精通(第2版) (軟件開發視頻大講堂)
- Learning Spring 5.0
- DevOps Automation Cookbook
- PostgreSQL 11從入門到精通(視頻教學版)
- Python機器學習:手把手教你掌握150個精彩案例(微課視頻版)
- INSTANT Passbook App Development for iOS How-to
- INSTANT Yii 1.1 Application Development Starter
- SQL Server 2008 R2數據庫技術及應用(第3版)
- Troubleshooting Citrix XenApp?
- 3D Printing Designs:Octopus Pencil Holder
- Visual C#(學習筆記)
- Implementing Domain:Specific Languages with Xtext and Xtend
- C/C++程序設計教程