2014-03-25 52 views
0
if(isEventMoveRight() == true) 
    { 
    if((playerX != 70) && (playerX+11 != 'T')) 
    { 
     playerX = playerX+1; 
    } 
} 

'T'是來自玩家的不同字符塊。當然,我並沒有使用數組作爲'T's或背景我只使用一個球員,我想。我不確定它是否使用我爲玩家正確設置的陣列。事實上......我不知道如何使用一個數組作爲gameMap句號。試圖阻止一個字符塊移動到另一個字符塊

我會告訴你我必須做的事。在控制檯內部,我必須使用字符來創建遊戲。我打算讓一個像小精靈一樣的東西像一個能夠繞着屏幕跑動的人,當他像塞爾達那樣到達邊緣時移動窗口。很明顯,我並不是在製作整個遊戲,而只是做出其中​​的一小部分,但這對我來說都證明太多了。我使用的是Visual Studio 2010,但我必須使用他所做的一些代碼來幫助我們,但說實話,這看起來更像是一種障礙而不是幫助,因爲所有關於此的教程都是從頭開始在VS2010中使用C++而不是從他的代碼。

我首先想到我可以創建一個名爲gameMap的數組,並使用兩個for循環來填充背景空間。然後最重要的是有一個玩家陣列,一個障礙物陣列和使用相同策略的敵人陣列。但由於一些奇怪的原因,我必須設置char類型,兩個for循環將打印到數組[i] [j] 裏面這兩個for循環,即使事先在代碼中我已明確設置了數組中的內容。 例,

char array[2][2] = { 
{ '*', '*',}, 
{ '*', '*',}, 
}; 

但正如我所說,當我試圖剛剛打印出它的陣列像它完全忽略了什麼我已經設置該數組已經和剛打印出一堆「星號」。對背景來說很好,但是當我想打印播放器而不是在一個正方形中打印一串星號時,它會將它們打印成一長排,然後唯一的方法就是在打印出播放器陣列時,我在下面的另一個for循環打印出剩下的控制檯窗口的X值,所以在這種情況下,有70個字符的空格,但這當然是完全錯誤的,甚至不是一個合適的解決方案。

任何幫助將不勝感激。

回答

0

雖然我不是你的問題,我有一些想法完全清楚......

if(isEventMoveRight() == true) 
{ 
    if((playerX != 70) && (playerX+11 != 'T')) 
    { 
     playerX = playerX+1; 
    } 
} 

你的意思是playerX+1?無論哪種方式,看起來你沒有比較一個數組,但是數組內的值表示你不能去的空間。現在看來似乎應該是這樣的:

if(isEventMoveRight() == true) 
{ 
    if((playerX < maximumX) && worldGrid(playerX+1, playerY).isWalkable) 
    { 
     playerX = playerX+1; 
    } 
} 

其中worldGrid()是返回到一個結構,它告訴我們定格空間的屬性的參考作用。

至於你的打印/調試問題,請注意很多char值不打印字母或數字。例如,您可能會打印退格字符或製表符,這會改變光標的位置,可能會或可能不會覆蓋您想要查看的內容。因此,簡單地打印字符可能不是調試char值的最佳方法,您可能需要將char的值打印爲int。除非你專門使用字母字符或其他可打印的字符。

可以字符轉換爲一個無符號短這樣的:

(unsigned short)(0x00FF & charVariable); 

其他的想法基於我從問題... 這聽起來像你想一個二維數組基本上是地圖,瞭解陣列中的某些字符表示不同的遊戲資產,例如磚塊(不能穿過它)和地板(可以穿過它)。這些可能存儲爲char,因此您最多可以獲得256種不同類型的面板/牆壁/樓梯/等。這些東西不會在現場移動,只能確定地板在所有資產/項目/字符下的樣子。 (你可以使用一個std :: map以及一個結構體或一個16位int或其他可以用作標誌的int類型,基本上你希望能夠快速查找每個塊的屬性世界上的空間,比如你是否可以步行穿過它,或者是否很滑,是否是水等等)

然後,你可能會想要第二個數組來表示項目的位置和類型。這些可能是寶箱,可破壞的門/洞穴或可移動的磚塊。這些是玩家可以互動,拾取和/或用於解謎的物品。

我不認爲你會希望角色(英雄和惡棍)在二維數組中。特別是你不想遍歷一個龐大的數組,只是爲了弄清楚角色的位置。您可能也不希望任何字符鎖定到網格空間,除非您正在進行文本冒險,您可能希望它們能夠位於地圖上的塊之間(如塞爾達)。有了英雄,你可能只是有變數,說明位置和方向是什麼,以及其他人物屬性,如黃金和健康。不需要2D數組。

對敵人來說,使用std::vector或類似的容器可能會很好,因爲如果死亡或產生它們,它們的數量將會改變。因爲你可以遍歷一個類似於數組的方法,你可以在每次更新所有敵人時相對容易地進行更新,如果它們被殺死,可以在它們上面設置一個標記,這樣你就可以在更新循環後將它們從向量中刪除。

如果你想能夠擁有超過1個英雄,比如在本地多人遊戲中,你也可以使用std::vector作爲英雄。

相關問題