いつもお世話になっております。どうぞご教示ください。
クリックすればカードを置いて、ターン交代、またクリックすれば…と、一人では遊べるようにはできました。
ちなみに、数字1〜Kをx、マーク(スペードやハート)1〜4をyに入れてカードを区別しています。ダイアモンドの7ならCard(6, 2)というような形です。
しかしAIを作るのが初めてで、かなりてこずっています。
置けるカードに、「同じマークで数字の離れたカードを持っている」場合は距離の遠さが遠いほど点数を加算、また、「同じマークで連続したカードを複数枚持っている」場合も点数を加算。のように置けるカードそれぞれに点数を付け、高い点から優先的にカードを置く、という形にしようかとは思っているのですが、Card(x, y)にどうすれば点数をつけることができるのかわかりません。おそらく基本的な事がわかっていないのだとは思うのですが…
手札をマークで分けて、情報を保持させ、マーク毎に何枚所持しているかを確認できるようにしようとしてみました。一応現在のScriptを載せさせていただきます。
わかりづらければすみません。
Class GameManager
//カードの枚数
private const int CardNumber_X = 13; //カードの数字
private const int CardNumber_Y = 4; //カードのマーク
//持っているカード
Cards[,] mPlayerCard = new Cards[CardNumber_X, CardNumber_Y];
//持っているカードを1枚づつ確認して点数をつける
for (int x = 0; x < CardNumber_X; ++x) {
for (int y = 0; y < CardNumber_Y; ++y) {
mGamePlayer [1].AICardCheck (mPlayerCard [x, y], x, y); //mGamePlayer[1]はコンピュータの番
}
}
Class GamePlayer
//マーク毎の持っている枚数
private int count;
//点数
private int mPoint;
//点数を加算していく
public void AddPoint(Cards card, int x, int y){
switch (y) {
//マークがスペードならmSpadeCardsへ
case 0:
mSpadeCards [x, y] = card;
break;
case 1:
mDiamondCards [x, y] = card;
break;
case 2:
mHeartCards [x, y] = card;
break;
case 3:
mSpadeCards [x, y] = card;
break;
}
switch (y) {
//同じマークのカードを複数枚持っている場合は枚数分加算
case 0:
count = mSpadeCards.Length;
mPoint = mPoint + count;
break;
case 1:
count = mDiamondCards.Length;
mPoint = mPoint + count;
break;
case 2:
count = mHeartCards.Length;
mPoint = mPoint + count;
break;
case 3:
count = mCloverCards.Length;
mPoint = mPoint + count;
break;
}
}
上記の方法であっているのでしょうか?考え方、Script、なんでもおかしいところはご指摘いただけると幸いです。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/15 01:43