view event/oasis2017/ikusei/ikusei.rb @ 3462:bb651eea9b3d

audio Êѹ¹5
author OOTANI Hiroyuki <c115036@g.koeki-u.ac.jp>
date Fri, 28 Jul 2017 20:44:23 +0900
parents 88e1f16d5b95
children 3fd58f67d1a5
line wrap: on
line source

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
#
# 残る課題 [cssã®èª¿æ•´] [他ゲームã¨ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®é€£ç³»]
# ユーザåをクリアã—ãŸã„ã¨ã㯠http:/..../quiz.rb?reset

require 'cgi'
require 'csv'
c = CGI.new(:accept_charset => 'utf-8')

require 'sqlite3'
file = "../db/point.sq3"
myname = File.basename($0)

#cookie関係
cookie_id=c.cookies["id"][0]

form_name	=c["playname"]  # åå‰å…¥åŠ›
form_mode	=c["mode"]	# å•é¡Œç¨®åˆ¥
form_qn		=c["qn"]	# å•é¡Œç•ªå·
form_rd		=c["rd"]	# 解答番å·

if cookie_id == nil
  newid = Time.now.to_i.to_s + "/" + rand(99999).to_s
  id = newid
else
  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))")

################################################################## ユーザ登録
playname = form_name
if form_name > ""		# フォームã§nameãŒé€ã‚‰ã‚ŒãŸãªã‚‰ãれ優先
  now = Time.now.strftime("%F %T")
  db.execute("REPLACE INTO users VALUES(?, ?, ?)", id, form_name, now);
else				# フォームã§nameãªã‘ã‚Œã°dbã‹ã‚‰
  dbn = db.execute("SELECT name from users WHERE id=?", id)[0]
  if dbn != nil &&  dbn[0]
    playname = dbn[0]		# データベースã‹ã‚‰ã®ã®åå‰ã‚’プレイåã¨ã™ã‚‹
  end
end
if playname == "" || ARGV[0] == "reset"
  print(<<-EOF)
<h1>庄内雑学クイズユーザー登録</h1>
	<form action="#{myname}" method="POST">
	<p>プレイåを入れã¦ãã ã•ã„:
	<input type="text" name="playname">
	<input type="submit" value="é€ä¿¡">
	<input type="reset" value="リセット">
	</form>
<h1>注æ„:音ãŒã§ã¾ã™éŸ³é‡ã«æ³¨æ„ã—ã¦ãã ã•ã„</h1>
	EOF
  exit
end
printf("<h1>%sã•ã‚“ã®ãƒãƒ£ãƒ¬ãƒ³ã‚¸</h1>\n", playname)
################################################################## åˆå›žå‡¦ç†

number = c["rd"]
def outinput(value, label)
  printf("<label><input type=\"radio\" name=\"rd\" value=\"%s\">%s</label>", value, label)
end

def imgsrc(img)
  printf("<a href=\"%s.png\"\><img src=\"%s.png\"></a>", img, img)
end

def ongaku(oto)
printf("<audio controls false preload=\"auto\">
<source src=\"%s\"></audio>",oto)
end

## å•é¡Œæƒ…å ±ã®èª­ã¿è¾¼ã¿
question = {}
n_question = 0
CSV.foreach("ikusei.csv", encoding: 'utf-8') do |row|
  mode = row.shift			# 先頭 = モード
  next if /^#/ =~ mode			# 見出ã—è¡Œã¯ã‚¹ã‚­ãƒƒãƒ—
  if question[mode] == nil
    question[mode] = {}
  end
  qn = row.shift			# å•é¡Œç•ªå·
  question[mode][qn] = row		# {1 => [tama, 玉簾, ....]}
  n_question += 1			# 全部ã§ä½•å•ã‚ã‚‹ã‹
end
#print question
 n_question -=1
puts("<!DOCTYPE html>\n<html lang=\"ja\">")

if form_mode > ""
  quiz_mode = form_mode
else
  quiz_mode = ARGV[0] || "kayaku"	# kantan, futsu, muzukashi
end
if not /kayaku|me|daizu|tori|neko/ =~ quiz_mode then
  print(<<-EOF)
	<head><title>ERROR</title></head><body>
	<h1>無効ãªã‚³ãƒ¼ãƒ‰ã§ã™</h1></body></html>
	EOF
  exit 0
end

level = {"kayaku" => "ç«è–¬", "me"=>"芽", "daizu"=>"大豆", "tamago"=>"é³¥", "neko"=>"ã­ã“"}[quiz_mode]

print(<<-EOF)
<!DOCTYPE html>
<html lang="ja">
<head><title>#{level}</title>
<link rel="stylesheet" type="text/css" href="quizpg.css" >
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>

EOF

print"<html><head><title>クイズ</title></head><body>\n"

print"<form method=\"POST\" action=\"./#{myname}\">\n"

q = question[quiz_mode]			# 3種ã®ã†ã¡ã©ã‚Œã‹

if form_qn == nil || form_qn == ""	# å•é¡Œç•ªå·æœªæŒ‡å®šãªã‚‰å•1
  form_qn = "1"
end
ansinfo = q[form_qn]	
		# 今ã®å•ã®é¸æŠžè‚¢ã¨è§£ç­”é…列
# ↑㧠[hiyori,舞鶴公園,日和山公園,飯森山公園,2,skipseikai1.mp4] å„々文字列
mondai,image, s1, s2, s3, ans, movie,movie2 = *ansinfo


###############動画(音)
if number == ans then
  print "<h2>正解!!</h2>"
print("<p>")  
db.execute("REPLACE INTO point VALUES(?, ?)",
             id, "quiz-" + quiz_mode + "-" + form_qn)	# ex. quiz-kantan-1
  printf(<<-EOF, movie, quiz_mode, 1+form_qn.to_i)

<p>
<audio controls autoplay loop false preload=\"auto\"><source src=\"%s\"></audio>   
</p>
	<p><input type="hidden" name="mode" value="%s">
	<input type="hidden" name="qn" value="%d"></p>
	EOF
printf("<audio controls autoplay loop false preload=\"auto\"><source src=\"%s\"></audio>",movie)   
  ################
  
  
  
  # form_qn ã‚’1ãµã‚„ã—㦠hidden ã«ä»•è¾¼ã‚€
  if form_qn.to_i < q.length
    # ã¾ã æ¬¡ã®å•ãŒã‚ã‚‹
    puts('<p><input type="submit" value="次ã®å•é¡Œã¸é€²ã‚€"></p>')
  else					# 用æ„ã—ãŸå•ã™ã¹ã¦çµ‚了        
puts("<p>ãŠã‚ã§ã¨ã†!</p>")

    n_right = db.execute("SELECT count(*) FROM point WHERE id=?", id)[0][0]
   
  

    printf(<<-EOF,n_question, n_right.to_i)
                <p>å…¨%då•ä¸­ %då•æ­£è§£ã—ã¾ã—ãŸã€‚</p>
	EOF
 puts("<p>å†ç”Ÿãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã¤ãªãŒã£ãŸéŸ³æ¥½ã‚’èžã“ã†</p>")    
    printf("<audio controls autoplay loop false preload=\"auto\"><source src=\"%s\"></audio>",movie2)
    
    if n_question == n_right.to_i
      puts("<p>å…¨å•ã‚¯ãƒªã‚¢é”æˆ!")
    end  
  end
  
  
  

  
  
  
  
  

else

  printf("<h1>第%då•</h1>\n", form_qn)
  if /\d/ =~ number
    puts("<h2>残念! ã‚‚ã†ä¸€åº¦!</h2>")
  end
  printf("<h1>%s</h1>\n",mondai )
  printf("<p>")
  
  imgsrc(image)
  
  printf("</p>")
  n=0
  for i in [s1, s2, s3] do    
    outinput((n+=1).to_s, i)			# <input name="rd" ....>
    puts("<br>")
  end
  printf(<<-EOF, quiz_mode, form_qn)
	<input type="hidden" name="mode" value="%s">
	<input type="hidden" name="qn" value="%s">
	<p><input type="submit" value="é€ä¿¡">
	<input type="reset" value="リセット"></p>
	EOF
end
print"</form>\n"
print "</body>\n"
print "</html>\n"

yatex.org