2012-01-08 55 views
0

結構創建數組我想知道的過程中創建一組字母,分配點值到他們(用遊戲「拼字遊戲」作爲參考),並能夠通過索引來訪問它們數量,所以我可以隨機洗牌和操縱瓷磚的順序....所有在Objective-C中。用Objective-C的

我使用XCode4,我試圖編程鬆散的基礎上的拼字遊戲一個簡單的文字遊戲。

我能夠通過創建一個結構來保持一個字母塊的不同變量做這在C。

struct singleTile { 
char letter; 
int value; 
}; 

另一種結構,它保存一個數組,存儲每個字母的數據。

struct singleTile set[] = 
{ 
    {"A", 1}, 
    {"B", 4}, 
    {"C", 4}, 
    {"D", 2}, ...etc. 
} 

我可以通過索引號顯示每個字母的信息。

printf("The second letter is %s and is worth %d points\n", set[2].letter, set[2].value); 

如何翻譯成Objective-C的呢?我已經閱讀了關於NSArrays和NSMutableArrays的一些教程,但是我還沒有找到這些數組的例子,它們持有多於一條信息,就像我上面(特別是一個字母和一個值)。

請不要輸入所有內容,除非您願意這樣做。如果你向我解釋過程和/或邏輯,並指出我朝着正確的方向,我應該能夠弄清楚如何編程它。

在未來,我想有每個區塊擁有超越一個字母和值的詳細信息,所以這基本的教訓,我不能關是對我很重要。

我感謝你的時間和慷慨。

預先感謝您。 -Jeff

回答

2
NSMutableDictionary *letterPoints = [[NSMutableDictionary alloc] init]; 
[letterPoints setObject:[NSNumber numberWithInt:1] forKey:@"A"]; 
... 
... 
[letterPoints setObject:[NSNumber numberWithInt:26] forKey:@"Z"]; 

這是你的陣列結構的一個原生的Objective-C的字典一個非常基本的轉換。這個想法是,你可以根據字母查找你的點值,而不是字母到索引的映射。

您可以通過爲每個字母存儲不同的對象來擴展此概念。也就是說,不是簡單地存儲點值,而是可以存儲包含與該字母關聯的屬性/方法的對象。

1

取決於你想要什麼,有幾種方法。

首先,大多數情況下,您可以在Objective-C中使用常規的C概念和構造。如果您製作模塊.mm而不是.m,則可以使用C++。

其次,你可以定義包含一個char和一個int一個簡單的Objective-C類,並插入的多個實例到一個NSArray。

第三,你可以使用一個NSDictionary映射的NSString的NSNumber,雖然來自焦炭價值爲int這只是地圖,而不是相反。

還有一堆其他的組合。

1

你想研究自己編寫的Tile類,以便可以將一堆Tile對象存儲在NSArrayNSMutableArray中。類別Tile至少包含字母值的NSString和分數值的NSNumber

您可以添加@property屬性,以便您可以輕鬆地設置和訪問Tile,實例中的變量。letterQTile.score給你Q瓷磚的得分,letterYTile.color介紹了瓷磚的外觀等。Tile類可以與其他屬性進行擴展,或子類,用於創建「特殊」的各種瓷磚(,雙字母,雙等等)。

作爲jsumnerssuggests,代替的陣列,您的Tile對象可以各自與一個鍵在NSDictionary相關聯,用於快速查找。

面向對象編程的概述超出了我可以適用於某個段落的範圍,但是有幾個在線教程(example)。