changeset 1649:8c0d18a0fa51

add rogin.rb
author OOTANI Hiroyuki <c115036@g.koeki-u.ac.jp>
date Wed, 26 Jul 2017 23:09:12 +0900
parents 9d91b8855f6e
children d48ab732020e
files event/oasis2017/ikusei/rogin.rb
diffstat 1 files changed, 92 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/event/oasis2017/ikusei/rogin.rb	Wed Jul 26 23:09:12 2017 +0900
@@ -0,0 +1,92 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+require 'sqlite3'
+file = "db/point.sq3"
+#bingoword = %w(もっけ やばち はっこ げっぱ) # 正解キーワード4つ
+
+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も取得(もしあれば)
+form_clr=c["clear"]            # クリアボタン
+
+
+
+
+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 = SQLite3::Database.new(file)
+db.execute("PRAGMA foreign_keys=on")
+db.execute("CREATE TABLE IF NOT EXISTS " +
+           "users(id text primary key, name text, creation text)")
+db.execute("CREATE TABLE IF NOT EXISTS " +
+           "point(id, keyword text, FOREIGN KEY(id) REFERENCES users(id),unique(id, keyword))")
+
+if form_clr > "" && id > ''	# クリアボタンが押されていたら
+  db.execute("DELETE FROM point WHERE id=?", id)
+end
+if form_name > ""             # formからの名前設定がもしあれば
+  db.execute("REPLACE INTO users VALUES(?, ?, ?)", id, form_name, Time.now.to_s)
+end
+point = 0			# 開始直後は0点
+# SELECTの検索結果に値があるかは [0] が nil かどうかで判定できる
+name = db.execute("SELECT name FROM users WHERE id=?", id)[0]
+if !name      # もしユーザのプレイ名が未設定なら
+  title = "庄内雑学クイズゲームへようこそ!"
+  hello = "クイズゲームを始めましょう。"
+  guide = "あなたのプレイ名(なまえ)を決めます"
+  input = '<input name="playname">'
+else                          # プレイ名設定済みならキーワード入力
+  name = name[0]
+  title = sprintf("%s さんのホーム", name)
+  guide = "キーワードを入れてください"
+  input = '<input name="keyword">'
+  # プレイ名設定済みで、さらにキーワードが入力されていたら
+  
+if form_kwd > ""
+    index = bingoword.index(form_kwd) # 配列から入力単語(form_kwd)を探索
+    if index
+      # 見付かった! その単語をdbに入れておく
+      db.execute("REPLACE INTO point VALUES(?, ?)", id, bingoword[index])
+    end
+    r = db.execute("SELECT count(*) FROM point WHERE id=?", id)[0]
+    point = (r ? r[0] : 0)
+    hello = sprintf("現在のポイントは %dpt です。", 25*point)
+  end
+  r = db.execute("SELECT group_concat(keyword, ',')" +
+                 "FROM point WHERE id=?", id)[0]
+  bingos = (r ? r[0] : "")
+end
+
+
+
+
+printf(<<-EOF,
+	<!DOCTYPE html>
+	<html lang="ja">
+	<head><title>庄内雑学ゲーム</title></head>
+	<body>
+	<h1>%s</h1>
+	<p>5ヶ所QRコードがあります。QRコードを読み取ってクイズに答えよう</p>
+
+</body></html>
+	EOF
+       title, )
+db.close

yatex.org