view event/oasis2016/don/ckgame.rb @ 3273:706c45790b74

rogin
author Minoru Konno <c113069@e.koeki-u.ac.jp>
date Fri, 22 Jul 2016 21:14:15 +0900
parents 857c551a39dc
children a6956619207c
line wrap: on
line source

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'yaml/store'
file = "../db/point.yaml"
bingoword = %w(きゅうり えび どんぶり さーもん まぐろ ほし わさび たまご まる) # 正解キーワード9つ

require 'cgi'
c = CGI.new(:accept_charset => "UTF-8")

# 前回のアクセスで既にcookieが定義されていたら取得
# ブラウザからのcookieは、c.cookies[変数名][0] で受け取る
cookie_id=c.cookies["id"][0]

# 前回のアクセスで入力された値を取得
form_name=c["playname"]        # nameをフォームから取得(もしあれば)
form_kwd=c["keyword"]          # keywordも取得(もしあれば)

#if cookie_id == nil             # (1)もしcookieからのidがなければ新規生成
  # 新規idは、現在時刻を秒(to_i)にした文字列(to_s)と乱数の組み合わせ
  newid = Time.now.to_i.to_s + "/" + rand(99999).to_s
  id=newid                      # 新規idをidとする
#else                            # (2)cookieからのidがあればそれをidとする
  id=cookie_id
#end

# idをすぐcookieで相手ブラウザに送る
# 変数の期限を24時間に設定し、expire変数に入れる
expire = (Time.now+24*3600).gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
printf("Content-type: text/html; charset=UTF-8\n")
printf("Set-Cookie: id=%s; expires=%s\n\n", id, expire)

db = YAML::Store.new(file)
db.transaction do
  info = db["info"] = db.fetch("info", Hash.new)
  if !info[id]              # もしそのユーザ情報が未登録(空)なら
    info[id] = Hash.new     # 新規ハッシュを割り当てる
  end
  if form_name > ""             # formからの名前設定がもしあれば
    info[id]["name"] = form_name # それをユーザ情報に記録
    info[id]["bingo"] = Hash.new # 正解した単語保存用のハッシュも作成
  end
  point = 0# 開始直後は0点
  if !info[id]["name"]      # もしユーザのプレイ名が未設定なら
    umi = '<img src="umi.png" width="800px" height="600px">'
    title = "ようこそ!"
    hello = "まちがいさがしスタート"
    guide = "あなたのプレイ名を決めます"
    input = '<input name="playname">'
    submit = '<input type="submit" value="送信">'
    reset = '<input type="reset" value="リセット">'
  else                          # プレイ名設定済みならキーワード入力
    title = sprintf("%s さんのホーム", info[id]["name"])
    setumei = "海鮮丼の絵から間違いを3個見つけよう!"
    setumei2 = "間違っている絵のパネルは全部で9個あるよ♪"
    seikai = 
         '<img src="kaisendon.jpg" width="600px" height="600px">'
    # プレイ名設定済みで、さらにキーワードが入力されていたら
    if form_kwd > ""
      index = bingoword.index(form_kwd) # 配列から入力単語(form_kwd)を探索
      #hello = sprintf("現在のポイントは %dpt です。", 25*point)
      if index
        # 見付かった! その単語をハッシュのキーとして適当に値(true)を入れておく
        info[id]["bingo"][bingoword[index]] = true
      end
    end
    point = info[id]["bingo"].length # ハッシュの長さで正解数が分かる
    bingos = info[id]["bingo"].keys.collect do |x|
      "「" + x + "」"# collectメソッドで 「 」 で括った単語を集めて
    end.join(", ")# joinメソッドで ,(カンマ) 区切りでつなげる
    kaisen = ""; kaisen2 = ""; kaisen3 = ""; kaisen4 = ""; kaisen5 = ""; kaisen6 = ""; kaisen7 = ""; kaisen8 = ""; kaisen9 = ""
    info[id]["bingo"].keys.each do |f|
      if /きゅうり/ =~ f
        kaisen = '<img src="kaisendon2-0.jpg" width="200px" height="200px">'
      elsif /えび/ =~ f
        kaisen2 = '<img src="kaisendon2-1.jpg" width="200px" height="200px">'
      elsif /どんぶり/ =~ f
        kaisen3 = '<img src="kaisendon2-2.jpg" width="200px" height="200px">'
      elsif /さーもん/ =~ f
        kaisen4 = '<img src="kaisendon2-3.jpg" width="200px" height="200px">'
      elsif /まぐろ/ =~ f
        kaisen5 = '<img src="kaisendon2-4.jpg" width="200px" height="200px">'
      elsif /ほし/ =~ f
        kaisen6 = '<img src="kaisendon2-5.jpg" width="200px" height="200px">'
      elsif /わさび/ =~ f
        kaisen7 = '<img src="kaisendon2-6.jpg" width="200px" height="200px">'
      elsif /たまご/ =~ f
        kaisen8 = '<img src="kaisendon2-7.jpg" width="200px" height="200px">'
      elsif /まる/ =~ f
        kaisen9 = '<img src="kaisendon2-8.jpg" width="200px" height="200px">'
      end
    end
  end
printf(<<-EOF,
<!DOCTYPE html>
<html lang="ja">
<head>
<title>まちがいみつけでみっちゃ</title>
<link rel="stylesheet" type="text/css" href="../attack.css">
</head>

<body>
<img src="../img/logo.png" width="900px" height="100px">
<p>%s</p>
<h1>%s</h1>
<h2>%s</h2>
<h2>%s</h2>
<p>%s</p>
<p>開けたパネル(%d/%d)</p>
<form action="?" method="GET">
<p class=jyama>%s: %s: %s: %s</p>
</form>
<p>%s</p>
<div class="don">
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div>
<div>%s</div></div>
</body></html>
EOF
         umi, title, setumei, setumei2, hello, point, bingoword.length, guide, input, submit, reset, seikai, kaisen, kaisen4, kaisen7, kaisen2, kaisen5, kaisen8, kaisen3, kaisen6, kaisen9,)
end

yatex.org