見出し画像

#8 【解答編】山札からランダムに一枚引く

プログラミング・プラモデル Vol.2 「Border7」 

この記事は、#6 の解答例です。
この記事で紹介するコードは、あくまで一例です。
ご自身で作成されて、すでに問題なく動いているようであれば何も問題ありません。

src/Border7.js

function getDeck() {
 const suits = ["♠", "♣", "❤", "♦"];
 const ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
 const deck = [];

 suits.forEach((suit) => ranks.forEach((rank) => deck.push({ suit: suit, rank: rank })));
 return deck;
}
export default function Border7() {
 const classes = useStyles();
 const [deck, setDeck] = useState(getDeck);
 const [card, setCard] = useState(getCard);
 
 /**
  * 省略
  */
 function getCard() {
   const index = Math.floor(Math.random() * deck.length);
   const cardObj = deck[index];

   const newDeck = deck.slice();
   newDeck.splice(index, 1);
   setDeck(newDeck);
   return cardObj;
 }
  return (
   <Box>
     <PlayArea card={card} />
     <Box /* className={classes.messageArea} */>
       {/* getMessage() から返却されるコンポーネント */}
       {/* getButtons() から返却されるコンポーネント */}
     </Box>
   </Box>
 );

完成イメージ

上記のように作成すると、画面にランダムなカードが表示されるようになります。プレビュー画面の上にあるリロードボタンを押して、何度か画面をリロードして確認してください。

次回

次回は【出題編】です。
画面に「トランプの数が 7 より大きいか小さいか、または等しいか」を選択するボタンを表示します。

この記事があなたのお役に立ちましたら、よろしければサポートをお願いいたします! より良い記事をお届けできるよう、活動費に充てさせていただきます。