2015-12-23 112 views
0

我正在製作「戰列艦」遊戲,放置所有的船隻,開始遊戲等後,用戶將輸入「座標攻擊」,如果他擊中了一艘船,那麼如果在那裏沒有任何船隻,董事會將在他擊中的座標中顯示'V',並顯示'X'。戰艦遊戲,溺水船C

嗯,我做了這個部分,這裏沒有問題,我有4艘不同尺寸的船,要淹沒船隻,你必須擊中所有部件(其大小)。

例子:

4|* 
3| * 
2| * 
1| 
0|* * * * 
    - - - - - 
    0 1 2 3 4 
Enter coordinates for attack 
(0,4) 

4|V 
3| * 
2| * 
1| 
0|* * * * 
    - - - - - 
    0 1 2 3 4 
Enter coordinates for attack 
(1,3) 

4|V 
3| V 
2| * 
1| 
0|* * * * 
    - - - - - 
    0 1 2 3 4 
Enter coordinates for attack 
(2,2) 

4|V 
3| V 
2| V 
1| 
0|* * * * 
    - - - - - 
    0 1 2 3 4 

the battleship of size 3 has drowned! 

而且如果4艘戰列艦被淹死了,然後它的遊戲!我所做的是檢查 所有的船舶座標都是'V',如果是這樣的話戰列艦已經淹死了,但我認爲我的問題是有不止一艘船,如果我每次檢查它都會說第一艘戰艦淹死了。

我提出,包含船舶的位置處的兩個陣列:

posX[] = {1,2,3,4} 
posY[] = {1,2,3,4} 

(指船舶上的位置(1,1)(2,2)(3,3)(4, 4)大小爲4)

我所做的就是這樣的:

for (int i = 0 l i < 4 ; i++) 
{ 
if (board[posX[i]][posY[i] == 'V') 
{ 
count++; 
} 
} 
if (count == 4) printf("the battleship of size 4 has drowned\n"); 

我試着熟悉的東西,檢查所有的座標是「V」中的printf,但它是相同的。

+0

最好的,如果你能在這一問題提出過代碼 – Ian

+2

這是絕對不可能說沒有看到你的代碼,這可能是錯誤的。 – JJJ

+0

歡迎來到SO。請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic)和[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask )。 –

回答

1

您需要爲每個戰列艦保持一個狀態,如isDead [4]等。初始化爲0.一旦戰列艦宣佈死亡,你通知它已經死亡,將狀態更改爲1,並在以後停止檢查

1

此外,你不需要經常檢查。如果玩家每遇到一艘船,就檢查船是否被淹死(所有座標都被擊中),您只需增加一個drowned_ships計數器並檢查該值是否已經等於停止/終止條件(drowned_ships = = 4)。

#define DROWNED_SHIPS_STOP 4 

bool ship::isDrowned(){ 
    for (int i = 0 ; i < size() ; i++){ 
     //size() here would return 4 for your example -> it is the size of the ship 
     if (board[posX[i]][posY[i] == 'V'){ 
      count++; 
     } 
    } 
    return (count == size()) ? true:false; 
} 

(...) 

//Receive a x and y 
coordinates = get_player_input(); 

Ship * ship; 
if (ship = isShip(coordinates.x,coordinates.y)){ 
    //test if a ship has been hit 
    if(ship.isDrowned()){ 
     //every position of that ship has been hit 
     ships_drowned++; 
     if (ships_drowned == DROWNED_SHIPS_STOP) 
      DisplayGameTermination(); 
    } 
}