2012-01-08 6 views
0

文字セットの作成、ポイント値の割り当て(参考に「スクラブル」ゲームを使用)、インデックスを介してアクセスできるようにするプロセスを知りたいのですが私はタイルの順序をシャッフルして操作することができます.... Objective-Cのすべて。Objective-Cで構造体を構築する

私はXCode4を使用していますが、私はScrabbleに基づいて簡単な単語ゲームをゆるやかにプログラミングしようとしています。

私は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の概念と構造を使用することができます。 .mではなくモジュール.mmを作成する場合は、C++を使用できます。

第2に、charとintを含む単純なObjective-Cクラスを定義し、その複数のインスタンスをNSArrayに挿入できます。

第3にNSStringをNSNumberにマッピングするNSDictionaryを使用することができますが、これはchar値からintにマップするだけですが、それ以外の方法ではありません。

他にもたくさんのコンボがあります。

1

Tileクラスを書いて、Tileの束をNSArrayまたはNSMutableArrayに格納することができます。 Tileクラスには、文字値の場合は少なくともNSString、スコア値の場合はNSNumberが含まれます。

プロパティを追加すると、Tileなどのインスタンスで変数を簡単に設定してアクセスすることができます。letterQTile.scoreTileクラスは、二重タイルの「特別」の種類(例えば、二重の手紙を、作成するための他のプロパティで拡張、またはサブクラス化することができるなど、あなたにletterYTile.colorは、タイルの外観を説明しQタイルのスコアを与えますワードなど)。

としてjsumnerssuggests、代わりの配列は、あなたTileオブジェクトは、それぞれ、高速検索のために、NSDictionaryにキーに関連付けることができます。

オブジェクト指向プログラミングの概要は、私が段落に収めることのできる範囲を超えていますが、オンラインでいくつかのチュートリアルがあります(example)。

関連する問題