3

私は Dart の初心者です。そして、Deck というトランプ オブジェクトのリストを作成しました。ランダムなカードを選択して、そのカードをデッキから削除しようとしています。デッキが減る前に次のカードがピックされているように見えるため、重複しています。デッキから 10 枚のユニークなランダム カードを選ぶ一連のイベントを今後どのように処理しますか?

class Card{
String face;
String suit;
String rank;
String imgSrc;
String holdImgSrc;

Card(
 this.face,
 this.suit,
 this.rank,
 this.imgSrc,
 this.holdImgSrc
 );
}
import 'dart:math' show Random;
Random indexGen = new Random();


getCard1(){
  card1 = deck[indexGen.nextInt(deck.length)];
  deck.removeWhere((item) => item == card1);
  return card1;  
}         

getCard2(){
  card2 = deck[indexGen.nextInt(deck.length)];
  deck.removeWhere((item) => item == card2);
  return card2;
}

Card オブジェクトを Future として返そうとすると、次のようになります。

new Future((getCard1()))
  .then((getCard2()))
  .then((getCard3()));

タイプ 'Card' はタイプ '() => dynamic' の 'computation' のサブタイプではありません。

デッキ リストを返そうとすると、次のようになります。

型 'List' は 'computation' の型 '() => dynamic' のサブタイプではありません。

正しい構文、ロジックの欠陥がありませんか、それとも、おそらく変更を監視して、リストを別の方法で処理する必要がありますか?

編集して追加: futures 構文は機能しますが、削除が正しく行われていないようです。2 番目の名前付きコンストラクターを使用して List から新しい Card オブジェクトをプリロードすることを除いて、以下の Jim-Y によって提案されたコードにコードを変更しました。修正されたコードと出力は次のとおりです。

fullDeck[
...
var tenC  = new Card.full(17,'10_of_clubs','c','10','10_of_clubs.png','10_of_clubs_h.png');
var tenD  = new Card.full(18,'10_of_diamonds','d','10','10_of_diamonds.png','10_of_diamonds_h.png');
var tenS  = new Card.full(19,'10_of_spades','s','10','10_of_spades.png','10_of_spades_h.png');
var tenH  = new Card.full(20,'10_of_clubs','c','10','10_of_clubs.png','10_of_clubs_h.png');
...]

Deck<Card> deck = new Deck<Card>();
  Random indexGen = new Random();

   for(var c = 0; c < 20; ++c) {
     var card = new Card(c);
     deck.add(fullDeck[c]);//List of 52 full card objects

           }

   for(var i = 0; i < 10; ++i) {
     var rnd = indexGen.nextInt(deck.size());
     print('${deck.get(rnd).face} Deck size: ${deck.size()}');           
           }

         }

4_of_clubs Deck size: 19
10_of_diamonds Deck size: 18
5_of_clubs Deck size: 17
4_of_spades Deck size: 16
5_of_spades Deck size: 15
10_of_clubs Deck size: 14
10_of_clubs Deck size: 13
3_of_spades Deck size: 12
5_of_diamonds Deck size: 11
3_of_diamonds Deck size: 10

ご覧のとおり、クラブの 10 が 2 回印刷されています。では、パス 6 で 10 が削除された場合、なぜパス 7 に残っているのでしょうか?

4

2 に答える 2