Newer
Older
reroad-test / 2020-ryusei / dra-typ.rb
@ryusei ryusei on 7 Aug 2020 4 KB edit files
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'curses'
include Curses
init_screen
cbreak
noecho

waza = ["孫悟空","かめはめ波","元気玉","ベジータ","ギャリック砲","天津飯","どどん波","クリリン","気円斬","ヤムチャ","狼牙風風拳","ピッコロ","魔貫光殺砲","餃子","さよなら天さん","亀仙人","魔封波","如意棒","ウーロン","ギャルのパンティおくれ"]
rwaza = ["sonngokuu","kamehameha","gennkidama","bezi-ta","gyarikkuhou","tennsinnhann","dodonnpa","kuririnn","kiennzann","yamutya","rougahuuhuukenn","pikkoro","makannkousappou","tyaozu","sayonaratennsann","kamesennninn","mahuuba","nyoibou","u-ron","gyarunopannthiokure"]
vs = 0
ok = 0
bad = 0
point = 0

init_screen
start_color
init_pair(0, COLOR_BLACK, COLOR_WHITE)
init_pair(1, COLOR_RED, COLOR_BLACK)
init_pair(2, COLOR_RED, COLOR_WHITE)

def typ(mi,mvs,mwaza,mrwaza)
  w = stdscr.subwin(10, 40, 8, 12)
  w.attron(color_pair(2)) do
    w.box("|"[0], "+"[0])
  end
  w.setpos(2, 2)
  w.addstr(sprintf("VS %d",mvs+1))
  w.attron(A_BOLD) do
    w.setpos(2, 10)
    w.addstr(sprintf("%s",mwaza[mi]))
    w.setpos(3, 10)
    w.addstr(sprintf("%s",mrwaza[mi]))
  end
  w.setpos(5, 10)
  mat = w.getstr
  w.clear
  return mat
end

def title
  setpos(1,24)
  attron(color_pair(1)) do
    attron(A_BOLD) do
      addstr("ドラゴンタイピング!!")
    end
  end
end

title

begin
  setpos(3,18)
  addstr("これから単語が1つずつ出てくっぞ!")
  setpos(4,14)
  addstr("入力は全部”ローマ字”だから気をつけろよ!※ん→nn")
  setpos(5,3)
  addstr("しっかり打ち込めたら<エンターキー>っちゅうのを押して攻撃してくれ!")
  setpos(6,13)
  addstr("<やりてーモード番号>を押してスタートだ!")
  while true
    setpos(8,10)
    addstr("1:10問必勝!採点モード 2:限界を超えろ!無限モード -> ")
    start = getch
    if start == "1" || start == "2"
      break
    else
      setpos(9,2)
      addstr("1か2を入力してくれ!")
    end
  end
  refresh
  clear

  nocbreak
  echo
  title
  if start == "1"
    setpos(3,22)
    addstr("~10問必勝!採点モード~")
    refresh
    while vs < 10
      i = rand(19)
      at = typ(i,vs,waza,rwaza)
      vs += 1
      if at == rwaza[i]
        ok += 1
        setpos(10, 55)
        addstr(" すげーぞ!")
        point += 10
      else
        bad += 1
        setpos(10,55)
        addstr("ヤベーぞ...")
      end
      setpos(11,57)
      addstr(sprintf("%3d勝 %3d敗",ok,bad))
      refresh
    end

    clear

    attron(A_BOLD) do
      if ok >= 9
        setpos(3,37)
        addstr(sprintf("%d点!!!",point))
        setpos(6,16)
        addstr("オメーすげーやつだな!おら驚れーたぞ!")
      elsif ok >= 5
        setpos(3,37)
        addstr(sprintf("%d点!!",point))
        setpos(6,8)
        addstr("惜しかったなー、まだまだ上手くなれると思うとおらワクワクすっぞ!")
      elsif ok >= 2
        setpos(3,37)
        addstr(sprintf("%d点!",point))
        setpos(6,16)
        addstr("おらと一緒に修行、いっちょやってみっか!")
      else
        setpos(3,37)
        addstr(sprintf("%d点",point))
        setpos(6,16)
        addstr("ふんっ!口ほどにもない奴め")
      end
    end

  elsif start == "2"
    setpos(3,19)
    addstr("~限界を超えろ!無限モード~")
    setpos(4,20)
    addstr("※owariと入力すると終了")
    refresh
    while true
      i = rand(19)
      at = typ(i,vs,waza,rwaza)
      vs += 1
      if at == rwaza[i]
        ok += 1
        setpos(10, 55)
        addstr(" すげーぞ!")
      elsif at == "owari"
        break
      else
        bad += 1
        setpos(10,55)
        addstr("ヤベーぞ...")
      end
      setpos(11,57)
      addstr(sprintf("%3d勝 %3d敗",ok,bad))
      refresh
    end

    clear

    setpos(3,20)
    addstr("今回の結果が出たぞ!")
    setpos(5,25)
    addstr(sprintf("倒した数:%3d / %3d",ok,vs-1))
    rate = ok.to_f / vs.to_f * 100
    setpos(7,25)
    addstr(sprintf("正答率:%5.2f %",rate))
  end
  setpos(9,16)
  addstr("<オメーの好きなキー>を押して終わってくれ!")
  en = getch
  refresh
ensure
  close_screen
end