Newer
Older
Ruby / s4-world-j2021.cgi
<!DOCTYPE html>
<html>
<!-- Default style for pretty-print of text files -->
<head><title>typing_game.rb</title>
<style type="text/css">
pre {margin-left: 6ex;}
pre span {counter-increment: linenum; text-align: right; position: relative;}
pre span:before {
    position: absolute; right: 0px;
    background: #ddd; text-align: right; padding: 0 0.2ex;
    width: 5.5ex; margin-right: 0.5ex;
    content: counter(linenum) ":";
}
</style>
</head>
<body>
<p>[[ <a href="?showattc+article_m+672+raw">RAW TEXT</a>(DOWNLOAD here) ]]</p>
<pre lang="en">
<span></span>#!/usr/bin/env ruby
<span></span># -*- coding: utf-8 -*-
<span></span>
<span></span>require&quot;curses&quot;
<span></span>require&quot;csv&quot;
<span></span>
<span></span>include Curses
<span></span>
<span></span>def loding&#040;ld,lu)
<span></span>  printf&#040;&quot;\e[0;1m&quot;)
<span></span>  clear
<span></span>  curs_set&#040;0)
<span></span>  lx = 0
<span></span>  srand&#040;)
<span></span>  ly = rand&#040;ld..lu)
<span></span>  while not lx == ly
<span></span>    setpos&#040;lines - 1,cols - 13)
<span></span>    addstr&quot;読み込み中&quot;
<span></span>    refresh
<span></span>    ldot = 0
<span></span>    lx += 1
<span></span>    sleep&#040;0.6)
<span></span>    while not ldot == 3
<span></span>      addch&quot;.&quot;
<span></span>      refresh
<span></span>      ldot += 1
<span></span>      sleep&#040;0.5)
<span></span>    end
<span></span>    clear
<span></span>    refresh
<span></span>  end    
<span></span>end
<span></span>
<span></span>
<span></span>def cprint&#040;cc,cy,cx,ct)
<span></span>  printf&#040;&quot;\e[m&quot;)
<span></span>  printf&#040;cc)
<span></span>  setpos&#040;cy,cols / 2 + cx)
<span></span>  addstr&#040;sprintf&#040;&quot;%s&quot;,ct))
<span></span>  refresh
<span></span>end
<span></span>
<span></span>init_screen
<span></span>begin
<span></span>  while 1
<span></span>    clear
<span></span>    curs_set&#040;0)
<span></span>    noecho
<span></span>    stdscr.keypad&#040;true)
<span></span>    cprint&#040;&quot;\e[0;1;21;33m&quot;,1,-8,&quot;タイピング ゲーム&quot;)
<span></span>    cprint&#040;&quot;\e[0;1;31m&quot;,4,-2,&quot;遊ぶ&quot;)
<span></span>    cprint&#040;&quot;\e[0;1;34m&quot;,6,-2,&quot;設定&quot;)
<span></span>    cprint&#040;&quot;\e[0;1;32m&quot;,8,-2,&quot;終了&quot;)
<span></span>    x = cols / 2 - 4
<span></span>    y = 4
<span></span>    sentaku = 1
<span></span>    while 1
<span></span>      printf&#040;&quot;\e[1;31m&quot;)
<span></span>      setpos&#040;y,x)
<span></span>      addstr&#040;&quot;&gt;&quot;)
<span></span>      refresh
<span></span>      input = getch
<span></span>      setpos&#040;y,x)
<span></span>      addch&#040;&quot; &quot;)
<span></span>      refresh
<span></span>      case input
<span></span>      when Curses::KEY_UP
<span></span>        if y != 4
<span></span>          y -= 2
<span></span>          sentaku -= 1
<span></span>        end
<span></span>      when Curses::KEY_DOWN
<span></span>        if y != 8
<span></span>          y += 2
<span></span>          sentaku += 1
<span></span>        end
<span></span>      when Curses::KEY_RIGHT
<span></span>        break
<span></span>      end
<span></span>    end
<span></span>    if sentaku == 1
<span></span>      loding&#040;1,2)
<span></span>      while 1
<span></span>        clear
<span></span>        refresh
<span></span>        cprint&#040;&quot;\e[1;4;31m&quot;,1,-5,&quot;&gt;-=遊ぶ=-&lt;&quot;)
<span></span>        cprint&#040;&quot;\e[1;33m&quot;,4,-2,&quot;初級  2~7文字&quot;)
<span></span>        cprint&#040;&quot;\e[1;33m&quot;,6,-2,&quot;中級 5~10文字&quot;)
<span></span>        cprint&#040;&quot;\e[1;33m&quot;,8,-2,&quot;上級 9~14文字&quot;)
<span></span>        cprint&#040;&quot;\e[1;32m&quot;,10,-2,&quot;戻る&quot;)
<span></span>        x = cols / 2 - 4
<span></span>        y = 4
<span></span>        sentaku = 1
<span></span>        while 1
<span></span>          printf&#040;&quot;\e[1;31m&quot;)
<span></span>          setpos&#040;y,x)
<span></span>          addch&#040;&quot;&gt;&quot;)
<span></span>          input = getch
<span></span>          setpos&#040;y,x)
<span></span>          addch&#040;&quot; &quot;)
<span></span>          refresh
<span></span>          case input
<span></span>          when Curses::KEY_UP
<span></span>            if y != 4
<span></span>              y -= 2
<span></span>              sentaku -= 1
<span></span>            end
<span></span>          when Curses::KEY_DOWN
<span></span>            if y != 10
<span></span>              y += 2
<span></span>              sentaku += 1
<span></span>            end
<span></span>          when Curses::KEY_RIGHT
<span></span>            break
<span></span>          end
<span></span>        end
<span></span>        clear
<span></span>        if sentaku == 4
<span></span>          break
<span></span>        end        
<span></span>        cprint&#040;&quot;\e[1;37m&quot;,lines / 2,-14,&quot;どれかのキーを押してスタート&quot;)
<span></span>        getch
<span></span>        clear
<span></span>        if sentaku == 1
<span></span>        elsif sentaku == 2
<span></span>        elsif sentaku == 3
<span></span>        end
<span></span>      end
<span></span>      loding&#040;1,2)
<span></span>      redo
<span></span>    elsif sentaku == 2
<span></span>      loding&#040;1,1)
<span></span>      while 1
<span></span>        clear
<span></span>        cprint&#040;&quot;\e[1;4;34m&quot;,1,-5,&quot;&gt;-=設定=-&lt;&quot;)
<span></span>        cprint&#040;&quot;\e[1;32m&quot;,4,-2,&quot;戻る&quot;)
<span></span>        x = cols / 2 - 4
<span></span>        y = 4
<span></span>        sentaku = 1
<span></span>        while 1
<span></span>          print&#040;&quot;\e[1;31m&quot;)
<span></span>          setpos&#040;y,x)
<span></span>          addstr&#040;&quot;&gt;&quot;)
<span></span>          refresh
<span></span>          input = getch
<span></span>          setpos&#040;y,x)
<span></span>          addch&#040;&quot; &quot;)
<span></span>          refresh
<span></span>          case input
<span></span>          when Curses::KEY_UP
<span></span>            if y != 4
<span></span>              y -= 2
<span></span>              sentaku -= 1
<span></span>            end
<span></span>          when Curses::KEY_DOWN
<span></span>            if y != 4
<span></span>              y += 2
<span></span>              sentaku += 1
<span></span>            end
<span></span>          when Curses::KEY_RIGHT
<span></span>            break
<span></span>          end
<span></span>        end
<span></span>        break
<span></span>      end
<span></span>      loding&#040;1,1)
<span></span>      redo
<span></span>    elsif sentaku == 3
<span></span>      clear
<span></span>      refresh
<span></span>      break
<span></span>    end
<span></span>  end
<span></span>  clear
<span></span>  ensure
<span></span>  close_screen
<span></span>end

</pre>
</body>
</html>