0
0

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.

Ruby初心者がSinatraでじゃんけんしてみた

Last updated at Posted at 2019-09-29

この記事の目的

パソコンで食っていきたいと思い立ってRubyの勉強をしている。いきなりRailsやるなっていうのは腐るほど言われてるのでSinatraから始めている。
ドットインストールとか入門Sinatra
軽く勉強した上で自分で何か作ってみたいと思い、じゃんけんしてみた。

上述の入門Sinatraでもじゃんけんアプリはやっていたのだが、GETメソッドでurlで出す手を指定して、paramsでクエリ文字列を取得して〜〜という感じだった。
けど、たかがじゃんけんするのにurlどうこうとかはめんどくさいなと思い、ボタンを押したら結果が出るような形にしたかった。

コード

ディレクトの構造はこんな感じ

.
├── janken.rb
└── views/
   ├── index.erb
   ├── layout.erb
   └── result.erb

layout.erbは大したアレじゃないので省略する。

index.erb

<h2>何を出しますか?</h2>


<form action="/result" method="post">
  <button type="submit" name="throw" value="rock">ぐー</button>
  <button type="submit" name="throw" value="sissors">ちょき</button>
  <button type="submit" name="throw" value="paper">ぱー</button>
</form>

出す手のbuttonをクリックすると、result.erbに何を出したのかがPOSTされるようにした

janken.rb

require 'sinatra'
require 'sinatra/reloader'

get '/' do
  @title = "janken"
  erb :index
end


post '/result' do
  @title = "result"
  @throw = params["throw"].to_sym
  @defeat ={rock: :scissors,scissors: :paper, paper: :rock}
  @computer_throw = @defeat.keys.sample
  erb :result
end
  1. index.erbからPOSTされたvalue属性を受け取ってプレイヤーの手を決める
  2. 勝敗を決める相関図をハッシュで作成
  3. 上で作ったハッシュのきーをランダムで抽出することで、コンピュータが出す手を決める
  4. result.erbを表示する

result.erb

<h2>
<% if @throw == @computer_throw %>
  Tied
<% elsif @throw == @defeat[@computer_throw] %>
  You won
<% else %>
  You lost
<% end %>
</h2>
You     : <%= @throw %> <br>
Computer: <%= @computer_throw %>

<br>

<a href="/">again!</a>

勝利条件は以下のようにした。
@defeatから@computer_throw(相手の出す手)で抽出した値が、@throw(自分が出した手)と同じならば勝ち

終わりに

index.erbからポストされた値を取得するのに手間取った。
出来上がってしまった今だと、何をそんなに手間取っていたのかもわからないのだが、@throwが全然うまく行かなかった。
ターミナルのロゴを見たらなぜ想定通りの動きをしていないのかはヒントが落ちていたし、ログ見るって大事なんだなと。
結局なにがダメって、HTTPとかの知識が皆無でログも何が起きてるのかわからなかったのが問題。
Webを支える技術を読んでぼんやりとでも知識をつけられたおかげ化。知識が0と1じゃ大違いだ、
何はともあれ、自分で考えて作ったものが、想定通りに動かせた。嬉しい。

## 参考
ドットインストール Sinatra入門
Sinatra入門
Webを支える技術

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?