Newer
Older
Final0205 / ume / ume_happyou.rb
@sakakibara isshin sakakibara isshin on 5 Feb 2022 5 KB ume
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

#ちょっとかっこよくなったhappyou

require"curses"
require"csv"

include Curses

def delete
  dy = 0
  while not dy == cols
    dx = 0
    while not dx == lines
      setpos(dy,dx)
      delch
      dx += 0.03125 / 2
    end
    dy += 1
  end
  refresh
end

def loding(ld,lu)
  printf("\e[0;1m")
  delete
  curs_set(0)
  lx = 0
  srand()
  ly = rand(ld..lu)
  while not lx == ly
    setpos(lines - 1,cols - 13)
    addstr"読み込み中"
    refresh
    ldot = 0
    lx += 1
    sleep(0.6)
    while not ldot == 3
      addch"."
      refresh
      ldot += 1
      sleep(0.5)
    end
    delete
    refresh
  end
end

def cprint(cc,cy,cx,ct)
  setpos(cy,cx)
  printf("\e[m%s",cc)
  addstr(sprintf("%s",ct))
  refresh
end

def choice(cu,cd,cn)
  x = cols / 2 + cn
  y = 4
  sentaku = 1
  while 1 #1
    printf("\e[1;37m")
    setpos(y,x)
    addstr(">")
    refresh
    input = getch
    setpos(y,x)
    addch(" ")
    refresh
    case input
    when Curses::KEY_UP
      if y != cu
        y -= 2
        sentaku -= 1
      end
    when Curses::KEY_DOWN
      if y != cd
        y += 2
        sentaku += 1
      end
    when Curses::KEY_RIGHT
      break
    end
  end
  delete
  return sentaku
end

sentaku = 0
init_screen
begin
  while 1#2
    delete
    curs_set(0)
    noecho
    stdscr.keypad(true)
    cprint("\e[1;21;33m",1,cols / 2 -5,"学習ゲーム")
    cprint("\e[91m", 4,cols / 2 -5,"タイピング")
    cprint("\e[94m", 6,cols / 2 -2,"計算")
    cprint("\e[92m", 8,cols / 2 -5,"豆知識辞典")
    cprint("\e[95m",10,cols / 2 -2,"電卓")
    cprint("\e[96m",12,cols / 2 -5,"理科・社会")
    cprint("\e[m"  ,14,cols / 2 -2,"終了")
    sentaku = choice(4,14,-7)
    if sentaku == 6             # 終了
      break
    end
    loding(1,2)
    if sentaku == 1             # タイピング
      close_screen
      system("ruby chinamini.rb")
      init_screen
=begin
      while 1#3
        delete
        refresh
        cprint("\e[1;4;31m",1,cols / 2 -5,">-=未定=-<")
        cprint("\e[33m",4,cols / 2 -2,"未定")
        cprint("\e[33m",6,cols / 2 -2,"未定")
        cprint("\e[33m",8,cols / 2 -2,"未定")
        cprint("\e[m",10,cols / 2 -2,"戻る")
        sentaku = choice(4,10,-4)
        if sentaku == 4
          break
        end        
        cprint("\e[1;37m",lines / 2,cols / 2 -14,"どれかのキーを押してスタート")
        getch
        delete
        if sentaku == 1
        elsif sentaku == 2
        elsif sentaku == 3
        end
      end
      loding(1,2)
      redo
=end
    elsif sentaku == 2          # 計算
      while 1#4
        delete
        cprint("\e[1;4;34m",1,cols / 2 -5,">-=計算=-<")
        cprint("\e[34m",4,cols / 2 -7,"足し算・引き算")
        cprint("\e[34m",6,cols / 2 -7,"掛け算・割り算")
        cprint("\e[34m",8,cols / 2 -2,"設定")
        cprint("\e[m",10,cols / 2 -2,"戻る")
        sentaku = choice(4,10,-9)
        if sentaku == 3
          redo
        elsif sentaku == 4
          break
        end 
        cprint("\e[1;37m",lines / 2,cols / 2 -14,"どれかのキーを押してスタート")
        getch
        delete
        keisan_kaisi = Time.now
        keisan_mondai = 20
        keisan_toketa = 0
        keisan_tokenai = 0
        while keisan_mondai != keisan_toketa
          cprint("\e[94m",1,1,sprintf("当たった問題数 %-2s問",keisan_toketa))
          if sentaku == 1       # +-
            srand()
            keisan_1 = rand(1..20)
            keisan_2 = rand(1..20)
            keisan_type = rand(1..2)
            if keisan_type == 1
              keisan_ans = keisan_1 + keisan_2
              cprint("\e[1m",lines / 2 - 1,cols / 2 - 3.5,sprintf("%2d + %2d",keisan_1,keisan_2))
            elsif keisan_type == 2
              keisan_ans = keisan_1 - keisan_2
              cprint("\e[1m",lines / 2 - 1,cols / 2 - 3.5,sprintf("%2d - %2d",keisan_1,keisan_2))
            end
            
          elsif sentaku == 2    # */
          end
          setpos(lines / 2 + 1,cols / 2 - 1)
          echo
          player_ans1 = getch
          player_ans2 = getch if keisan_ans.to_s.length >= 2
          player_ans3 = getch if keisan_ans.to_s.length >= 3
          player_ans = [player_ans1,player_ans2,player_ans3].compact.join
          if keisan_ans.to_s == player_ans
            keisan_toketa += 1
          else
            keisan_tokenai += 1
          end
          delete
          player_ans1,player_ans2,player_ans3 = nil,nil,nil
        end
      end
      loding(1,2)
      redo
    elsif sentaku == 3          # 豆知識辞典
      close_screen
      print"\e[m"
      system("ruby j2114_last.rb")
      init_screen
=begin
      while 1#5
        delete
        cprint("\e[1;4;32m",1,cols / 2 - 5,">-=未定=-<")
        cprint("\e[m",4,cols / 2 -2,"戻る")
        sentaku = choice(4,4,-4)
        if sentaku == 1
          break
        end
      end
      loding(1,2)
=end
    elsif sentaku == 4          # 電卓
      close_screen
      print"\e[m"
      system("ruby j2124_last.rb")
      init_screen
    elsif sentaku == 5          # 理科・社会
      close_screen
      print"\e[m"
      system("ruby ume_quiz.rb")
      init_screen
    end
  end
  delete
  ensure
  close_screen
end