見出し画像

#10 【React.jsで、BlackJackを作る】:プレイヤーの処理を実装する① ハンドのスコアを表示する

これまで

前回は、ディーラーがカードを引く処理を実装しました。

BlackJack アプリの sandbox

BlackJack アプリの sandbox は以下です。

この sandbox は、連載が進むのと同時に更新されていきます
「私も作りたい!」という方は、フォークして一緒に作り始めることができます。

はじめから作りたい方はこちら

プレイヤーのハンドのスコアを表示する

自分のハンドのスコアが表示されていた方がゲームとして親切ですよね。
プレイヤーのハンドの下に吹き出しを作り、そこにスコアを表示してみます。

今回は、Material-UI の Tooltip を使用してみます。

吹き出しにするために arrow の設定をして、スタイルを少しカスタマイズします。

src/components/PlayArea.js

const useTooltipStyles = makeStyles({
 tooltip: {
   fontSize: "1em"
 }
})
export default function PlayArea(props) {
 const classes = useStyles();
 const tooltipClasses = useTooltipStyles()
 
	省略

	<Grid item>
	  <Tooltip title="6 | 16" open={true} classes={tooltipClasses} arrow>
	    <Grid container direction="row">
	      {props.playersHand.map((card, index) => {
	        let marginLeft = index === 0 ? "0px" : "-50px";
	        return (
	          <Grid item key={index} style={{ marginLeft: marginLeft }}>
	            <Card card={card} hide={false} />
	          </Grid>
	        );
	      })}
	    </Grid>
	  </Tooltip>
	</Grid>

ハンドの計算処理などを utility ファイルに抽出する

さて、ハンドの計算をする関数 getTotal() があるのでそれを使いたいところですね。
BlackJack.js にあるので、utility ファイルを作ってそこに移動しましょう。

src/utilities/BlackJackUtilities.js

見出しのように作成しました。

「複数形ってどうなの?」
「BlackJack って付ける必要ある?」

のように、賛否が分かれるところだと思います。

このようにしたのは、以下のような理由があります。
・フォルダ名が複数形なのは、複数ファイルが入る可能性があるから
・BlackJack が付いているのも上に同じ
・ファイル名が複数形なのは、中に複数の処理が入るから

ただ移動しただけなので、コードは載せません。
別ファイルに移動したので、export は忘れないようにしましょう。

使う側

import * as BlackJackUtilities from "../utilities/BlackJackUtilities";
<Tooltip
 title={BlackJackUtilities.getTotal(props.playersHand)}
 open={true}
 classes={tooltipClasses}
 arrow
>

現在の画面

画像1

詳しい変更はこちら

Codesandbox は GitHub連携ができます。
以下は今回のコミットによる差分です。

次回

次回は、プレイヤーのハンドのスコアが 21 を超えたときにバーストするようにします。

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