Mercurial > hgrepos > hgweb.cgi > skipweb
view minato2014/bacup/Bingo1.rb @ 1735:93632e78829c
audio Êѹ¹11
author | OOTANI Hiroyuki <c115036@g.koeki-u.ac.jp> |
---|---|
date | Fri, 28 Jul 2017 21:10:57 +0900 |
parents | 345b851fea56 |
children |
line wrap: on
line source
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'sqlite3' require 'cgi' require 'date' require './sub.rb' require 'net/http' c = CGI.new(:tag_maker => "html5", :accept_charest => "UTF-8") db = SQLite3::Database.new("sql/stamp.sq3") id = c.cookies["id"][0].to_i magic = c.cookies["magic"][0].to_i err = 0 # ä¸æ£ãªå‹•ãã§ã‚ã‚Œã°è² ã®å€¤ã«ãªã‚‹ sidesize = 3 message = "ã¯ã‚Šãã£ã¦è¡Œãã¾ã—ょã†!<br>" # ビンゴ用テã‚スト print("Content-type: text/html; charset=UTF-8 \n\n") ### DROP TABLE ### getcom = ARGV[0].to_s drop = 'DROP TABLE main ;' if getcom == 'ududlrllba' db.execute(drop) end ###### ### DELETE TABLE ### del = 'DELETE FROM main WHERE id=?' if getcom == 'ududlrlrba' db.execute(del, id) end ###### ##### CHECKING UID ##### sql = "SELECT stamp_status, stamp_img, name, job, sex, exp FROM main WHERE id=? AND magic=?" begin user_data = db.execute(sql, id, magic) rescue user_data = [] end if user_data == [] # ãƒã‚°ã‚¤ãƒ³ã‚¨ãƒ©ãƒ¼(-1) err -= 1 end ### LOGIN ERROR HTML ### if err == -1 print' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="refresh" content="2.5;http://skip.koeki-prj.org/minato2014/account.html"> </head> <title>ãŸã„ã¨ã‚‹</title> <body> ' print' <p> ãƒã‚°ã‚¤ãƒ³ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ </p> <p> アカウント登録ページã¸æŽ¥ç¶šä¸â€¦<br> * 3秒経ã£ã¦ã‚‚移動ã—ãªã„å ´åˆã¯<a href="account.html">ã“ã¡ã‚‰</a>ã‹ã‚‰ç§»å‹•ã—ã¦ä¸‹ã•ã„。 </p> </body> </html> ' exit end ###### ########## ##### RE-ARRAYING STAMP_STATUS AND STAMP_IMG ##### # stamp status stamp_st = user_data[0][0] stamp_st = stamp_st.split(//) # 一文å—ãšã¤åˆ†ã‘ã¦é…列ã«ã™ã‚‹ stamp_st = stamp_st.map {|s| s.to_i} # é…列内ã®æ–‡å—列を数列ã«ãªãŠã™ # stamp img stamp_img = user_data[0][1] stamp_img = stamp_img.split(",") # æ–‡å—列を","ã§åŒºåˆ‡ã£ã¦é…列ã«ã™ã‚‹ ########## ##### STAMPPING ##### ### Making randam number ### def taiou(sidesize) srand(256788901) stamp = Hash.new("n") stamp_name = ["kamo", "kite", "mame", "mo2usa", "inuwasi", "hanabu", "be", "UMIMARU", "pero"] (sidesize**2).times do |n| stamp[rand(10000000)] = stamp_name[n] end stamp end ###### ##### Checking bingo method ##### def bingocheck(start, sidesize, stepon, stamp, decision, bingo) nbox = [] setbox = Hash.new if sidesize == stepon x = sidesize else x = 1 end x.times do |m| start.step(sidesize*sidesize - 1, stepon) do |n| nbox << n + m if nbox.length == sidesize dbox = Array.new(0) # next bingo or reach numbers(bingoed -> nothing) for i in nbox if stamp[i] == 0 dbox << i end end # sidesizeã«decisionã®å€¤ã‚’åŠ ãˆã‚‹ã“ã¨ã§ã€ãƒ“ンゴã€æ¬¡ãƒ“ンゴã€ãƒªãƒ¼ãƒã‚’ãã‚Œãžã‚Œdecisionã«0,1,2ã‚’åŠ ãˆã‚‹ã“ã¨ã§è¡¨ç¾ã€‚ if dbox.length == decision setbox[dbox] = nbox bingo << setbox setbox = Hash.new nbox = [] else nbox = [] end end end end end # bingo[{[ビンゴã¾ãŸã¯ãƒªãƒ¼ãƒã«å¿…è¦ãªç•ªå·] => [ビンゴã¾ãŸã¯ãƒªãƒ¼ãƒã®ãƒ©ã‚¤ãƒ³ã‚’å½¢æˆã™ã‚‹ç•ªå·]}] ########## bingo = # ç¾åœ¨ã®ãƒ“ンゴ数 ### Checking Access Cord(AC) ### getAC = ARGV[0].to_i # URL?以é™ã®å¼•æ•°ã‚’å–å¾— rightAC = taiou(sidesize) # taiouã§ç”Ÿæˆã—ãŸACã®ãƒãƒƒã‚·ãƒ¥ #p rightAC rightAC = rightAC[getAC] # ACãŒæ£ã—ã‘ã‚Œã°ã‚¹ã‚¿ãƒ³ãƒ—åãŒå…¥ã‚Šã€ç•°ãªã‚‹å ´åˆã¯n ##### ACCESS LOG ##### t = Time.now time = (t.hour * 3600) + (t.min * 60) + t.sec ## Checking sql_master table. If sqlite_master don't have tablename, it create. sql_master = "SELECT name FROM sqlite_master WHERE name='logs';" check_master = db.execute(sql_master) sql_logs = 'CREATE TABLE logs( id INTEGER PRIMARY KEY AUTOINCREMENT, uid INTEGER, ac TEXT, time INTEGER); ' if check_master == [] db.execute(sql_logs) end ########## begin get_log = 'SELECT ac, time FROM logs WHERE uid=(SELECT MAX(id) FROM logs WHERE uid=?);' # ユーザーã®æœ€æ–°ã®ãƒã‚°æƒ…å ±ã‚’å–å¾— log_check = db.execute(get_log, id) rescue print'GETTING LOG ERROR!' end begin log = 'INSERT INTO logs(uid, ac, time) VALUES(?, ?, ?)' db.execute(log, id, rightAC, time) rescue print'INSERT LOG ERROR!' end # /* memo: å†åº¦åŒã˜ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ を作る際ã¯ã‚¹ã‚¿ãƒ³ãƒ—用ã®ãƒ†ãƒ¼ãƒ–ルãŒã»ã—ã„。 */ # ########## ### ビンゴã—ãŸãƒ©ã‚¤ãƒ³ã‚’判定(decision = 0) ### bingo = [] # 横 bingocheck(0, sidesize, 1, stamp_st, 0, bingo) # 縦 bingocheck(0, sidesize, sidesize, stamp_st, 0, bingo) # 左斜゠bingocheck(0, sidesize, sidesize+1, stamp_st, 0, bingo) # å³æ–œã‚ bingocheck(sidesize-1, sidesize, sidesize-1, stamp_st, 0, bingo) ####### bingo = bingo.length # ビンゴã®æ•° last_bingo = bingo if rightAC != "n" # rightACãŒæ£ã—ã‘れ㰠### Update Stamp_status And Stamp_img ### # Replacing Image # index_st = [] stamp_st.length.times { |c| if stamp_st[c] == 0 index_st << c end } ### リーãƒï¼ˆdecision = 1)# [{[ビンゴã®ç•ªå·] => [リーãƒã‚’構æˆã™ã‚‹æ•°]}] reach = [] # 横 bingocheck(0, sidesize, 1, stamp_st, 1, reach) # 縦 bingocheck(0, sidesize, sidesize, stamp_st, 1, reach) # 左斜゠bingocheck(0, sidesize, sidesize+1, stamp_st, 1, reach) # å³æ–œã‚ bingocheck(sidesize-1, sidesize, sidesize-1, stamp_st, 1, reach) ####### begin reach = reach[0].flatten(2)[0] # ビンゴã®ç•ªå·ã®ã¿æŠ½å‡º rescue reach = [] end ### ビンゴã—ãŸãƒ©ã‚¤ãƒ³ã‚’判定(decision = 0) ### bingo = [] # 横 bingocheck(0, sidesize, 1, stamp_st, 0, bingo) # 縦 bingocheck(0, sidesize, sidesize, stamp_st, 0, bingo) # 左斜゠bingocheck(0, sidesize, sidesize+1, stamp_st, 0, bingo) # å³æ–œã‚ bingocheck(sidesize-1, sidesize, sidesize-1, stamp_st, 0, bingo) ####### bingo = bingo.length # ビンゴã®æ•° # Updating stamp_st # if stamp_img.include?(rightAC) == true # æ—¢ã«åŒåã®ã‚¹ã‚¿ãƒ³ãƒ—ãŒå…¥ã£ã¦ã„ãŸã‚‰ if stamp_st[stamp_img.index(rightAC)] < 9 stamp_st[stamp_img.index(rightAC)] += 1 # 対応ã™ã‚‹ã‚¹ã‚¿ãƒ³ãƒ—ã®ä½ç½®ã«1足㙠message = "スタンプカウントãŒã€Œ1ã€å¢—ãˆã¾ã—ãŸ!(スタンプカウントã¯ã€Œ9ã€ãŒä¸Šé™ã§ã™)" else message="スタンプカウントMAX!!(※ã“れ以上ã“ã®ã‚¹ã‚¿ãƒ³ãƒ—ã®ã‚«ã‚¦ãƒ³ãƒˆã¯å¢—ãˆã¾ã›ã‚“)" end else if reach != [] && bingo == 0 # ã¯ã˜ã‚ã®ãƒ“ンゴã¯å¿…ãš3回ã§å®Œæˆ stamp_st[reach] += 1# ビンゴã«ãªã‚‹æ•°å—を代入 stamp_img[reach] = rightAC message = "æ–°ã—ã„スタンプをGETã—ã¾ã—ãŸ!" # Top message else randam_number = index_st[rand(index_st.length)] # スタンプã®å…¥ã£ã¦ã„ãªã„個所ã®ãªã‹ã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ã«ã²ã¨ã¤é¸ã¶ stamp_st[randam_number] += 1 # é¸ã°ã‚ŒãŸå€‹æ‰€ã«1足㙠stamp_img[randam_number] = rightAC # stamp_stã¨åŒã˜å€‹æ‰€ã«stamp_imgã«ã‚¹ã‚¿ãƒ³ãƒ—ã®åå‰ã‚’代入 message = "æ–°ã—ã„スタンプをGETã—ã¾ã—ãŸ!" # Top message end end ## ### ビンゴã—ãŸãƒ©ã‚¤ãƒ³ã‚’判定(decision = 0) ### bingo = [] # 横 bingocheck(0, sidesize, 1, stamp_st, 0, bingo) # 縦 bingocheck(0, sidesize, sidesize, stamp_st, 0, bingo) # 左斜゠bingocheck(0, sidesize, sidesize+1, stamp_st, 0, bingo) # å³æ–œã‚ bingocheck(sidesize-1, sidesize, sidesize-1, stamp_st, 0, bingo) ####### bingo = bingo.length # ビンゴã®æ•° ## # Convert to string # stamp_st_string = stamp_st.join stamp_img_string = stamp_img.join(",") ## sql_update = "UPDATE main SET stamp_status=?, stamp_img=? WHERE id=?;" db.execute(sql_update, stamp_st_string, stamp_img_string, id) end ###### ########## ##### HTML ##### print' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>ãŸã„ã¨ã‚‹</title> <link rel="stylesheet" type="text/css" href="Bingo.css"> </head> <body> ' ### TOP ### sql_rank = 'select rank from main where id=?;' rank = db.execute(sql_rank, id).flatten(2)[0].to_i print' <div class="outflam"> ' if rank > 0 print'<div class="top" style="background: red;">' else print'<div class="top">' end # - ãƒ“ãƒ³ã‚´ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹å‡¦ç† - # if rank > 0 printf("<h1>ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™!!<br>☆ %dç‰ â˜†ãŒå½“é¸ã—ã¾ã—ãŸ!!</h1>", rank) # print'<p>抽é¸ã¯çµ‚了ã—ã¾ã—ãŸãŒã€å¼•ç¶šãゆる☆スタをãŠæ¥½ã—ã¿ä¸‹ã•ã„!!</p>' end # End of top print' </div> ' # Top message # bc = bingo.to_i - last_bingo.to_i if bc > 0 message += '<br>ãŠã‚ã§ã¨ã†!' + bc.to_s message += 'ビンゴæƒã„ã¾ã—ãŸ!!<br>' end if rank > 0 printf("<p style=\"background:red; color:white;\">%sãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™!☆ %dç‰ â˜†ãŒå½“é¸ã—ã¾ã—ãŸ!!</p>", message, rank) else printf("<p style=\"background:#136cf9;\">%s</p>", message) end ## ###### ### CENTER ### print' <div class="center"> <table border=1> ' for i in 0..2 print'<tr>' 3.times do |n| if stamp_st[3*i+n].to_i > 0 printf("<td width=170 height=170><img src=\"png/%s.png\" alt=\"stamped\" width=\"160\" height=\"160\"><span style=\"color: green; font-weight: 900;\">%d</span></td>\n", stamp_img[3*i+n], stamp_st[3*i+n]) else print"<td width=170 height=170></td>\n" end end print'<tr>' end # End of center print' </table> </div> ' ###### ### BOTTOM ### print' <div class="bottom"> ' # - RPGã®è¡¨ç¤º - # name = user_data[0][2] job = user_data[0][3] sex = user_data[0][4] exp = user_data[0][5] ## GETTING EXP SUM ## sum_sql = 'SELECT SUM(exp) FROM main WHERE rank=0;' sumexp = db.execute(sum_sql).flatten(2)[0] #### stamp = stamp_st.inject(:+) # é…列内ã®å€¤ã‚’å…¨ã¦è¶³ã™ charST = rpg(job, sex, stamp, bingo, sumexp) # ユーザーã®ã‚ャラクタステータス ## UPDATE EXP ## update_exp = 'UPDATE main SET exp=? WHERE id=?;' db.execute(update_exp, charST[2], id) #### ## GETTING EXP SUM ## sum_sql = 'SELECT SUM(exp) FROM main WHERE rank=0;' sumexp = db.execute(sum_sql).flatten(2)[0] #### stamp = stamp_st.inject(:+) # é…列内ã®å€¤ã‚’å…¨ã¦è¶³ã™ charST = rpg(job, sex, stamp, bingo, sumexp) # ユーザーã®ã‚ャラクタステータス printf(" <!-- ã‚ャラクターイメージã®è¨å®š --> <div class=\"charIMG\"> <img src=\"png/%s.png\"> </div> <div class=\"charSTATUS\"> ID:%04d<br> NAME:%s<br> ã‚ãªãŸã®Lv: %d / 全員ã®Lv: %d<br> 当é¸ç¢ºçŽ‡: %3.3f \% <div> ", charST[0], id-1, name, charST[2],sumexp , charST[1]) # End of bottom print'</div>' # End of outflam print'</div>' ###### print' </body> </html> ' ##########