我正在學習基礎知識,並正在使用我的uni提供的基本圖形庫進行簡單的遊戲。while循環不能在C中使用bool語句(初學者!)
- 有甩彈(其路徑的繪製)
- 障礙物(牆) - 這彈丸不能通過所以必須越過
和目標(絕還出現固體所以當它擊中行停止正在繪製)
現在我的彈丸被穿牆右側拋出
問題是與while循環
我添加的任何條件((y_displacement < FLOOR_HEIGHT)之後)有任何作用
(這個彈丸自身停止繪圖時y_displacement => FLOOR_HEIGHT(Y軸反轉),但任何添加bool語句或試圖使用bool(在#including之後)停止被繪製的彈道線不做任何改變。
受審BOOL FOR WALL(不會改變任何東西):
bool hit_wall = false;
while ((y_displacement < FLOOR_HEIGHT) && (hit_wall == false))
{
time = (x_displacement - X_HAND)/x_velocity; //speed = distance/time
y_displacement = (Y_HAND - y_velocity * time) - (GRAVITY * pow(time, 2)/2);
GFX_DrawLineTo(x_displacement, y_displacement, 3);
x_displacement += 1;
if ((x_displacement == (X_MAX/2.5)) && ((y_displacement > (Y_MAX/2))))
{
hit_wall = true;
}
}
}
如果我能設法排序了這一點那麼我應該能爲我的目標做同樣的..
我在做什麼有什麼問題?
背景:
完整的功能是這樣的:
void throwBall(int(x_position), int(y_position))
{
GFX_SetColour(YELLOW);
int x_mouse;
int y_mouse;
int x_distance;
int y_distance;
double angle;
float initial_velocity;
float x_velocity;
float y_velocity;
float time;
GFX_MoveTo(X_HAND, Y_HAND);
GFX_GetMouseCoordinates(&x_mouse, &y_mouse);
x_distance = x_mouse - X_HAND;
y_distance = y_mouse - Y_HAND;
angle = getAngle(x_distance, y_distance);
initial_velocity = sqrt(pow(x_distance, 2) + pow(y_distance, 2));
//these have been divided by 5 as the magnitude was too large for the window
y_velocity = (initial_velocity * sin (angle) - GRAVITY * time)/(X_MAX/256);
x_velocity = (initial_velocity * cos (angle))/(X_MAX/256);
float y_displacement;
float x_displacement;
x_displacement = X_HAND;
y_displacement = Y_HAND;
bool hit_wall = false;
while ((y_displacement < FLOOR_HEIGHT) && (hit_wall == false))
{
time = (x_displacement - X_HAND)/x_velocity; //speed = distance/time
y_displacement = (Y_HAND - y_velocity * time) - (GRAVITY * pow(time, 2)/2);
GFX_DrawLineTo(x_displacement, y_displacement, 3);
x_displacement += 1;
if ((x_displacement == (X_MAX/2.5)) && ((y_displacement > (Y_MAX/2))))
{
hit_wall = true;
}
}
}
注:不要直接比較的布爾類型使用。自我記錄的名字(通常是形容詞),只是測試,例如'if(!hit_wall)'Wrt你的問題:閱讀[問]並提供[mcve] – Olaf
我不認爲我完全理解你在問什麼。你寫的是「仍然有效」,那麼什麼是行不通的?你的程序的預期行爲和觀察行爲是什麼? –
這是一個可能的問題:'x_displacement ==(X_MAX/2.5)'。計算浮點數(或浮點數和整數)以獲得相等性。請不要這樣做。使用epsilon或使用> =/<= – Arkadiy