Mercurial > hgrepos > hgweb.cgi > skipweb
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