26 可以按按钮出牌才算出牌

出牌

出牌跟之前的游戏准备按钮一样
帮一个元件加上 phx-clixk 再绑上对应的动作,
唯一的差别是这次要使用 phx-value-card 来帮他辨识这次传的卡片

更改一下 hand 方法
多加一个 button 元素来包住卡片
并在 button 上面使用 phx-click="play_card"phx-value-card={card}

  def hand(assigns) do
    ~H"""
    <div class="flex w-full justify-center">
      <div class="grid grid-cols-6">
        <%= for card <- @player.hand do %>
          <button phx-click="play_card" phx-value-card={card}>
            <.card name={card}/>
          </button>
        <% end %>
      </div>
    </div>
    """
  end

ok 後就是要写一个对应的 handle_event 来接

收到出牌的 event 後,
我们需要 游戏的 pid, 出牌的人, 与要出的卡
来用在 Card.Game.play_card/3 上面

  def handle_event(
        "play_card",
        %{"card" => card},
        %{assigns: %{current_player: current_player, pid: pid}} = socket
      ) do
    Game.play_card(pid, current_player, transform_card(card))

    {:noreply, socket}
  end

  defp transform_card("reverse"), do: :reverse
  defp transform_card(number), do: String.to_integer(number)

这边另外要注意的是形态的问题,网页传过来的都会是字串
但是我们游戏里面用的是 integer, 另外 reverse 卡是用 atom
要确定喂给 play_card 的是他要的,在上面我写一个 transform_card/1 来转换

动起来长这样

https://ppt.cc/f81m2x@.gif

在测试出牌的时候我才想到,
同一回合如果只有我出牌,对方应该是要看不到我出什麽牌才对
这个明天来弄吧

剩下还有显示游戏状态
还有获胜讯息


<<:  Decorator 装饰器模式

>>:  语义检索 Semantic Search NLP ( BM25 +wordcloud+LSA summary )

[Day. 29] Codeigniter 底底底底底霸个

现在来测试一下我们写出来的网页~ Bug1 发现注册之後只会看到"success"...

IT铁人DAY 8-Singleton 单例模式

Design Pattern大致分成三种模式: Creational Patterns(创建型模式)...

防毒软件侦测篇

今天算是以病毒与防毒软件为主的方向。 这篇不在原本的安排之内, 不过昨天恶意程序分析之後, 发现有些...

Day 21 UICollectionView的练习(1/2)

今天我们使用XIB来练习CollectionView,还不知道XIB怎麽使用的,可以看这边: 连结 ...

【IntelliJ IDEA 入门指南】Java 开发者的神兵利器

天下武功 唯快不破 目录 前言 IntelliJ 特点 Android 与 Python 下载与安装...