我正在使用 ncurses 庫在 C 中重新創建一個名為“Bubble Blast 2”的游戲(可在 Play 商店中找到,您可以在 YT 上觀看)。我已經撰寫了游戲的物理代碼,我需要一個代碼來計算最少的移動來解決游戲。
游戲中的所有內容都保存在一個結構中,我還需要使用它來計算遞回函式中的移動。
隨著游戲的進行,該結構被游戲物理修改。
遞回函式必須(至少我認為)使用相同的游戲物理代碼(修改結構)。
那么,如果結構被游戲物理修改,我該如何在遞回中使用它呢?
這是游戲結構:
struct game;
typedef struct point {
int x;
int y;
} POINT, *POINT_P;
typedef struct bubble {
POINT point;
int state;
} BUBBLE, *BUBBLE_P;
typedef struct bubbles {
BUBBLE* bubbles;
int length;
int allocated;
} BUBBLES, *BUBBLES_P;
typedef struct projectile {
POINT point;
char direction;
int restoreChar;
int restoreColor;
} PROJECTILE, *PROJECTILE_P;
typedef struct projectiles {
PROJECTILE* projectiles;
int length;
int allocated;
} PROJECTILES, *PROJECTILES_P;
typedef struct game {
BUBBLES bubbles;
PROJECTILES projectiles;
int rows;
int columns;
int selected;
int array[6][5];
int moves;
int minMoves;
bool finished;
bool movesCalc;
} GAME, *GAME_P;
我認為不需要其余代碼,因為它只是游戲的物理特性,您只需要知道它會在您玩游戲時修改結構,但我可能錯了,如果您認為更多代碼會幫忙告訴我,我會盡快添加。
uj5u.com熱心網友回復:
我認為問題是如何處理既要保持游戲狀態不變又要執行修改游戲狀態的模擬的情況。在這種情況下,模擬涉及遞回的事實在很大程度上無關緊要。
在問題的一般性層面上,有兩種可能的解決方案:
制作游戲狀態的副本以供模擬使用。此副本可能需要也可能不需要完整,具體取決于模擬和狀態的詳細資訊。在遞回的情況下,您可能需要也可能不需要在遞回時制作額外的副本,這再次取決于模擬和狀態的詳細資訊。(相當于:備份游戲狀態,模擬完成后恢復。)
撰寫模擬以恢復它在回傳之前所做的更改。
uj5u.com熱心網友回復:
那么,如果結構被游戲物理修改,我該如何在遞回中使用它呢?
Astruct是一個物件,就像int是一個物件。您可以以相同的方式使用遞回。
void foo(object bar) {
bar.member = new_value();
if (condition) {
foo(bar);
}
}
復制 a 效率不高struct,但要改進它,我們需要更多的程式細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485815.html
上一篇:我正在嘗試通過使用For回圈而不是最差的時間和空間復雜度來解決Python中的三個數字總和,我想用它來更好地理解
下一篇:最大加權匈牙利法使用最小匈牙利法
