此博客鏈接:https://www.cnblogs.com/ping2yingshi/p/12164369.html
一、問題描述
1、問題描述
用c語言實現一個彈球游戲,實現小球在控制台的一定范圍內(可自行定義范圍,此博客小球的橫坐標范圍在(5,15),小球的縱坐標在(0,19)做拋物線運動。
二、解決問題的物理模型
2.1、沒有大小的小球。
2.2、運動軌跡。
小球合運動軌跡是一個拋物線,把小球運動分解,分為水平方向運動和豎直方向運動。小球在水平方向是勻速直線運動,在豎直方向是加速度向下的變速運動。
2.3.小球的運動學方程。
小球合運動軌跡是一個拋物線,把小球運動速度分解,分為水平方向速度和豎直方向速度。小球在水平方向是勻速直線運動,水平方向速度不變;小球在豎直方向是加速度向下的變速運動,速度的運動學方程:velocity_y(豎直方向的速度)=v0(初速度)-g*t。
2.4.小球由上一位置移動到下一個位置時,速度改變。
2.5. 位移是速度在時間上的累積,速度是加速度在時間上的累積。
2.6.小球在設定的范圍內運動。
三、物理模型對應的技術原型
3.1 在指定位置顯示小球。
3.1.1 原理(包含公式)
以字母o代表小球。
3.1.2 函數
void Show(int x,int y);
函數作用:在控制台打印輸出小球每次移動的位置
Ø 函數參數說明:
參數名1:x
參數類型:int
參數意義:小球在控制台位置的縱坐標(豎直方向)
參數名2:y
參數類型:int
參數意義:小球在控制台位置的橫坐標(水平方向)
Ø 返回值說明:
返回值類型:void
3.1.3 舉例說明/解釋函數實現的功能
使用雙重for循環,以換行為x豎直方向,空格為y水平方向。例如當x=5,y=6時,會在(5,6)位置顯示一個小球o。
3.2 一段時間后,小球的新位置計算
3.2.1 原理(2.5節物理模型對應的代碼模型,以及時間在代碼中如何實現)
循環每執行一次,小球的新縱坐標y=y(小球上一次移動后的縱坐標)+delta(y)( delta(y)代表y的增量),橫坐標x=0.1*(y-20)*y+15。
3.2.2 函數
Adrress Getnext_y(struct Adrress A,int y)
結構體Adrress定義:
struct Adrress { int x;//小球豎直方向坐標 int y;//小球水平方向坐標 };
函數作用:根據小球上一次橫縱坐標的位置,得到小球新的橫縱坐標位置
Ø 函數參數說明:
參數名1:A
參數類型:struct Adrress
參數意義:保存小球新的橫縱坐標位置
參數名2:y
參數類型:int
參數意義:小球在控制台上一次位置的橫坐標(水平方向)
Ø 返回值說明:
返回值類型:Address
3.2.3 舉例說明/解釋函數實現的功能
小球從初始坐標x=13,y=1開始移動,每次執行Getnext_y(struct Adrress A,int y)函數,y都加上y方向位移,x=f(y),然后用新得到的x,y更新結構體中的A.x和A.y。檢測小球x是否等於15的邊界條件,如果小球坐標滿足x=15,小球重新從x=13,y=1位置按照上述規則開始移動。
3.3 小球的移動
3.3.1 原理
視覺暫留原理:人眼在觀察景物時,光的作用結束后,視覺形象並不立即消失,這種殘留的視覺稱“后像”,視覺的這一現象則被稱為“視覺暫留”。
3.3.2 函數
在main() 中調用了system("cls") ;
Adrress Getnext_y(struct Adrress A,int y);
void Show(int x,int y);
3.3.3 舉例說明/解釋函數實現的功能
使用system("cls") 清除顯示過的小球。我們看到小球消失后,雖然小球消失了,但是小球影像還存在於我們大腦中,把消失的小球坐標y傳入Adrress Getnext_y(struct Adrress A,int y);函數中,得到新小球x,y的坐標,使用void Show(int x,int y)函數,新小球會在新的位置再次顯示,我們腦中的小球影像會和看到的新小球有一個連接,這讓我們感覺小球像是在移動。
3.4、小球在設定的范圍內運動的技術原型
3.4.1 函數
bool Isrepeat (int x)
函數作用:對小球運動界定范圍。
Ø 函數參數說明:
參數名:x
參數類型:int
參數意義:小球在控制台上位置的縱坐標(豎直方向)
Ø 返回值說明:
返回值類型:bool
3.4.2舉例說明/解釋函數實現的功能
小球坐標每改變一次,都在Adrress Getnext_y(struct Adrress A,int y)中判斷Isrepeat (int x)函數是否為當小球坐標到達x=15時,Isrepeat (int x)函數為真,使小球從初始位置x=13,y=1重新開始運動。
四、運行結果
代碼git地址: https://e.coding.net/SpringSun/Ball_parabolic.git 。
致謝
感謝小霞師姐前期搭建此博客的目錄草稿以及后期對此博客鏈接的建議,感謝彩虹師兄前期對此博客內容的指導以及后期代碼的指導,感謝佑蓉師姐對此博客內容,代碼以及排版的指導,感謝位軍營對此博客代碼的指導,感謝華哥對此博客后期出現bug的指導,感謝老師對此博客的全程指導和建議,感謝河海大學童老師的課程。