2012-11-14 33 views
0

目前我正在考慮以下問題,也許有人可以幫助我:「保存」在福爾迴路電流狀態,繼續後

對於我的世界我想換了很多塊,並防止滯後我想在同一時間只改變幾個街區。要改變一個長方體我通常使用這樣一個循環:

for(int x=t.x; x<t.X; x++) 
    for(int y=t.y; y<t.Y; y++) 
    for(int z=t.z; z<t.Z; z++) { 
     // .. 
    } 

其中t保存來自和來自座標。

現在我想保存當前的進度以便稍後繼續。

請幫我累即時思考它的..

+0

你的意思是你想在最外層循環的每次迭代結束時存儲狀態嗎? – crnlx

+0

例如,我想更改立方體中的所有塊。我知道我想在300次更改後停止,現在我需要繼續填充魔方。 我想我找到了使用while循環的解決方案,但我現在還不確定 –

回答

1

你的代碼看起來像C.在C語言中,一個過程不能離開調用函數後返回給定的疊加狀態。所以留下一個循環,然後返回到它是不可能在語言級別。在其他語言中,事情是不同的。例如。在Python語言的Pypy實現中,可以使用continuelets來實現您所描述的內容。

但是,您可以通過使用自己的對象來存儲最後的計數器來實現類似的方法。

struct counters { int x, y, z; }; 

bool continueLoops(struct counters *ctrs) { 
    for (; ctrs->x < t.X; ctrs->x++) { 
    for (; ctrs->y < t.Y; ctrs->y++) { 
     for (; ctrs->z < t.Z; ctrs->z++) { 
     // .. 
     if (weWantToInterruptTheLoop) 
      return true; 
     } 
     ctrs->z = t.z; 
    } 
    ctrs->y = t.y; 
    } 
    return false; 
} 

void startLoops() { 
    struct counters ctrs; 
    ctrs.x = t.x; 
    ctrs.y = t.y; 
    ctrs.z = t.z; 
    while (continueLoops(&ctrs)) { 
    // do whatever you want to do between loops 
    } 
} 

不過,我沒有看到上面的方法多少好處,而不是直接在內部循環中執行相關操作。所以我不確定這對你是否有用。