私は簡単なドミノゲームを作り始めました。 (同じ番号のタイルを並べて配置したもの)。私はそれをモデル化し始めました、そして、私は今、厳しい場所に着陸したようです。実際のドミノ(「骨」と呼ばれます)をモデル化したIm:ドミノのゲームを構築する - モデリングとレイアウトする
namespace DominoCore
{
public enum BoneOrientation { Horizontal, Vertical }
public interface IBone
{
int FirstValue { get; }
int SecondValue { get; }
BoneOrientation Orientation { get; set; }
}
}
このタイプの後、私は競技場にそれらをレイアウトする必要があります。私はそれに正方形のタイルで活躍の場を作った:
namespace DominoCore
{
public interface IField
{
IPlayer FirstPlayer { get; }
IPlayer SecondPlayer { get; }
IBoneYard BoneYard { get; }
List<ITile> Tiles { get; }
void PlaceBone(IPlayer player, IBone bone, int startX);
}
}
競技場が2人の選手とBoneyard(ドミノがプレイヤーに与えられていない)、その後、タイルのリストを持っています。
namespace DominoCore
{
public enum BoneExpandDirection { Up, Down, Right, Left }
public interface ITile
{
int X { get; }
int Y { get; }
IBone Bone { get; set; }
BoneExpandDirection ExpandDirection { get; set; }
}
}
は今、私は(1,3)の値を持つドミノ(ボーン)を取得し、フィールド上に配置したい場合は、私の問題:,
- は、どのように私は表現しない来ますそれが配置された場所(例えば、5,5の座標のタイル)
- ドミノのタイルは、5,5から右に拡張されますか?
- 私はそれを90度回転させて、向きを上にし、180度回転させて左に回し、値は(3,1)になります。
- レイアウト、ドミノ、タイルの区別はどのようにしてできますか?
プレイヤーがタイルを置いたときに、その正当な(タイル/ボーンのフィールドを検索する)かどうかを計算する必要があると思います。同じドミノ/ボーンのさまざまなプレースメントが下の画像に示されています。
次の問題は、ドミノ/ボーンをレイアウトすることです。私はグリッドを作ることを考えていますが、それは他のドミノ/ボーンとの間にタイルを置くことには合いません。タイルを配置するとき、私は最初の問題に戻ります:それを法的に検証する方法?それが国境を接するドミノを見つける方法?
これは意味をなさないと思っています。レイアウトと検証の問題が直面していることを説明することは難しいです。
EDIT ゲームに劇中骨を起動すると、次のとおりです。各タイルを逆にすることができる
[6,6] [6,5] [6,4] [6,3] [6,2] [6,1] [6,0]
[5,5] [5,4] [5,3] [5,2] [5,1] [5,0]
[4,4] [4,3] [4,2] [4,1] [4,0]
[3,3] [3,2] [3,1] [3,0]
[2,2] [2,1] [2,0]
[1,1] [1,0]
[0,0]
これはタイルが[6,3]も180度反転することを意味[3,6]
は法的な動きシナリオAですか?私はあなたがコードしようとしているルールを理解しようとしています。 –
私の怠惰で申し訳ありませんが、ペイントでうまくいきませんので、私は単なる骨を描くことができませんでした。同じ最終値を持つドミノの隣にBone/dominoを置くことしかできないというルールがあります。これは、シナリオaの私の例が間違っていて、ドミノのうちの1つが逆転して、3または1のいずれかが一致することを意味する。隣接する数字が等しい値の(1,3)(3,2)(2,4)(4,5)(5,6)などのようなシーケンスを作成したいと思うでしょう。 –