1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScriptでトランプ遊び part 2

Posted at

part1の続きです。

本当はゲーム部分をもう少し追求したかったのですが、そこはデータの持ち方やIF設計が重要かと思うので、今日は表示部分について少し研究したいと思います。

まずは、前回同様にトランプのカードデッキ cards を準備します。下記をChromeのConsoleで実行してみてください。

let cards={};
"ABCD".split("").forEach((u,i)=>{"123456789ABDE".split("").forEach((l,j)=>{cards["SHDC"[i]+"1234567890JQK"[j]]=String.fromCodePoint(`0x1F0${u}${l}`)})});
cards.J0 = String.fromCodePoint(0x1F0BF); // Red joker
cards.J1 = String.fromCodePoint(0x1F0DF); // White joker

次は表示する部分です。前回はハートやダイヤのカードも黒く表示されてしまっていました。そこで、今回は赤いカードは赤く表示したいと思います。

const clog = (t)=>{
  let memo = {
    color : "",
    text : "",
    styles : [],
    add(color, card){
      if (this.color == color){
        this.text += card;
      }else{
        this.styles.push("font-size:xx-large;color:"+color+";");
        this.text += "%c" + card;
        this.color = color;
      }
    }
  };
  [...`${t}`].forEach((a)=>{
    if (a.match(/\ud83c[\udcb1-\udcce]/)){
      memo.add("red", a);
    }else{
      memo.add("black", a);
    }
  });
  console.log(memo.text, ...memo.styles);
};

console.log の第二引数以降にCSS Styleの配列を展開しています。第一引数のテキストには、Styleを切り替えたいタイミングで %c を挿入します。今回はフォントサイズとテキストカラーを指定していますが、バックグラウンドカラーを指定するなどすれば、ユーザー/デッキ/手札の表示分けに役立つかもしれませんね。

はい。では、カードを10枚引いてみましょう。赤い札は赤く表示されましたか?

clog(Object.keys(cards).sort(()=>{return Math.random()-.5 }).slice(-10).map((c)=>cards[c]).join(""))

ちなみに、console.log で色を付ける方法は、これ以外にANSI Escape Codeを使う方法もあり、実はそちらも試したのですが、その場合font-sizeがキャンセルされてしまったため、挫折してしまいました。何か方法をご存知の方が居れば教えてください。

それでは、今回はここまで。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?