第13回 基礎プログラミング I レポート課題 氏名:久保田 瑛一郎 学籍番号:c109058 語学クラス:英語1 コース:社会福祉 チーム名:イナゴ食べないの? チームホームページアドレス:http://roy/~c109001/inago/inagotabenaino.html プロジェクト名:世界タイピング 1 今回(第13回期間)は絵を作成し、世界地図プログラム本体の地図を出す実行文 の作成、前回まではタイピングの本体ソフトの作成、プレゼンのスライド作成作 業、ロゴ作成を行いほぼ終わった。 2 全体的にはプレゼンの練習を残すのみとなっている。 gg 3 http://roy/~c109001/inago/inagotabenaino.html みんな大好き!!イナゴ食べないの?のページ。 2つの製品(プロジェクトのこと)を 通じてあなたの世界を広げてみませんか? 4 世界地図プロジェクト http://roy/~c109001/inago/sekaichizu.html これは教育プログラムです。知っておけば得をする世界の国・首都を知っちゃっ てください 世界タイピングプロジェクト http://roy/~c109001/inago/sekaitiping.html これは教育プログラムです。みなさんは英語が書けますか? えっと思ったそこのあなた! 英語が書けないと恥ずかしいですよ… 5 作成(変更)したプログラム 世界地図プログラム #!/usr/koeki/bin/ruby n = Array.new #番号 t = Array.new #地域名 c = Array.new #国名 s = Array.new #首都(県庁所在地)名 m = Array.new i =0 #配列番号 chizu = 0 #firefoxで表示するときに、配列m[i]だと都合が悪いので、別の変数に移し替えるときに使用 print("検索する前に、平仮名入力にしてください。[Ctrl-o]または、[Shift+ スペースキー]\n")#平仮名入力にするよう指示する文 print("番号を入力して下さい。\n")#番号を入力させる文 print("日本なら00、北海道地方ならa、東北地方ならb、関東地方ならc、中部地方ならd 近畿地方ならe、中国地方ならf、四国地方ならg、九州地方ならh、アジア東部なら01 アジア西部なら02、ヨーロッパなら03、アフリカなら04、北アメリカなら05、 中央アメリカなら06、南アメリカなら07、オセアニアなら08を入力して下さい。\n") #指定された番号を入力させるよう指示する文 STDERR.print("番号:") kensaku = STDIN.gets.chomp #与えられた番号を1行毎読み込む。 shuto = Regexp.new(kensaku, true, "e")#前の行で読み込んだものを、正規表現に変更 する。 #trueは大文字・小文字の区別を無くす。 #eは日本語で検索するようにする。 open("sekaichizu.dat","r")do |world| #sekaichizu.datを読み込み、worldという名前 に変換する。 while capitalcity = world.gets #繰り返しを行う作業文 if shuto =~ capitalcity if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ capitalcity #print capitalcity n[i] = $1 t[i] = $2 c[i] = $3 s[i] = $4 m[i] = $5 printf("%sを検索しました。\n",c[i]) #検索結果を表示させる文 end end i += 1 #次の読み込ませるために+1を行う。 end end print("次に首都(県庁所在地)を検索します。検索された中から1つ選んで入力して下さい。\n") #国名(都道府県名)を入力させるよう指示する文。 STDERR.print("国名(都道府県名):") #国名(都道府県名)を入力させる文 kensaku = STDIN.gets.chomp shuto = Regexp.new(kensaku,true, "e") #前の行で読み込んだものを、正規表現に変更 する。 #trueは大文字・小文字の区別を無くす。 #eは日本語で検索するようにする。 open("sekaichizu.dat","r")do |world| #sekaichizu.datを読み込み、worldに変換す る。 while capitalcity = world.gets #繰り返しを表示させる文 if shuto =~ capitalcity if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ capitalcity # print capitalcity n[i] = $1 t[i] = $2 c[i] = $3 s[i] = $4 m[i] = $5 chizu = m[i] #とったきたm[i](地図のデータ名の配列)を変数chizuに移し替える printf("%sの首都(県庁所在地)は%sです。\n",c[i],s[i])#検索結果を表示さ せる文 end end i += 1 #次のものを読み込ませるために+1を行う。 end end system "firefox -remote 'OpenURL(http://roy.e.koeki-u.ac.jp/~c109001/inago/#{chizu}.png)'" #変数chizuのなかにある、国名のデータ名を使いfirefoxで表示 私は主にホームページを表示させる部分を作成した 世界タイピング #!/usr/koeki/bin/ruby #インタプリタ宣言文 $KCODE ="e" #文字化け防止 s =0 a = 0 k=0 e_name =Array.new #あとで外部データから新しくデータをとってくる j_name =Array.new #あとで外部データから新しくデータをとってくる kaisuu = 0 #問題数を数えるのに使用 time = 0 #タイム計算に使用 point = 0 #スコア計算に使用 seikai = 0 #正解数計算に使用 start = 0 #スコア計算時に際し、スタート時間を記録するときに使用 finish = 0 #スコア計算時に際し、スタート時間を記録するときに使用 usrname = 0 #ユーザー名を入れてもらうときに使用 open("tiping.dat","r") do |tehon| #外部からデータをとってくるが、そのデータをsekai.datと定義し、tehonに集める while type = tehon.gets #tehoに取りこむことをデータの終わりまで繰り返す if /(\S+)\s+(\S+)/ =~ type #もし外部のデータ配列が文字→空白→文字だったら j_name[s] =$1 #j_nameという配列は外部データの2つ目の配列とする e_name[s] =$2 #e_nameという配列は外部データの2つ目の配列とする s +=1 #次の行に進むためにsにひとつ足すことにより、進む end #ifのおわり end #whileのおわり end #openのおわり print("タイピングを始めます! sを押して下さい!:") #主旨説明 sigh=gets.chomp #そのコマンドをsighに取り入れる if sigh =="s" #もしsighにsと入力されたら先の処理に進む else #それ以外の文字が入力されたら exit(0) #異常終了 end #ifのおわり STDERR.print("あなたの学籍番号を入れて下さい。例 c1×××××:") studentnumber= gets.chomp STDERR.print("ユーザー名を入れて下さい。リターンキーで確定後、2秒後にスタート:") #ユーザ名の入力を指示 usrname = gets.chomp #その文字の改行文字をとり、取りこむ sleep (2) #ktremの動き2秒間を止める(スリープさせる) print(`banner "Start"`) #Ktremにバナーを出す start=Time.now.to_i #時間を整数化することに、タイムを計算できるようにする while a < 20 #a(問題数)が20になるまで繰り返す srand s = rand(439) #s(配列番号)を乱数化(ランダムにする)することにより、ランダムに問題を出す printf("入力単語和訳:%s\n",j_name[s]) #入力してほしい単語の和訳を表示 printf("入力単語:%s\n",e_name[s]) #入力してほしい単語を表示 STDERR.print("入力欄:") #入力欄を表示 nyuuryoku = gets.chomp #そこに入った文字の改行文字を取り除き、取りこむ if nyuuryoku ==e_name[s] #もし入力してほしい単語と、入力された単語が同じだったら print("正解\n\n") #結果表示 seikai+=1 #正解数を1つふやす point+=10 #ポイントを10点ふやす else #それ以外の単語が入力されたら(間違っていたら) print("不正解\n\n") #結果表示 point -= 5 #ポイントを5点減らす end #ifのおわり a += 1 #aに1を足すことによって 問題数を進める end #open(読みこみ)のおわり finish = Time.now.to_i #時間を整数化することにより、タイムを計算できるようにする print(`banner "Stop"\n`) #バナーを出す time=finish-start #先に求めた、フィニッシュの時間からスタートの時間を引くことにより、タイムを求める if time < 65 #もしそのタイムが65(秒)以下だったら point +=50 #pointに50を足す elsif time < 74 #もしそのタイムが74(秒)以下だったら point +=40 #pointに40を足す elsif time < 80 #もしそのタイムが80(秒)以下だったら point +=30 #pointに40を足す elsif time < 100 #もしそのタイムが80(秒)以下だったら point +=20 #pointに20を足す elsif time < 123 #もしそのタイムが123(秒)以下だったら point +=10 #pointに10を足す end #ifのおわり printf("タイム:%d秒\n",time) #結果表示 printf("正解数:%d問\n",seikai) #結果表示 printf("得点:%d点\n",point) #結果表示 day=Time.now #あとでホームページに結果を表示する際のプレイした日付を表示するための記録をする open("score.html","a") do |score| #外部データのscore.htmlに書きこむ score.print("\n") #htmlであることを宣言する score.print("\n") score.print("\n") score.print("\n") #本文であることを宣言 score.print("

タイピングスコアカード

\n") #タイトル表示 score.print("\n") #表の始まりであることを宣言する score.print("\n") #表の行の始まりであることを宣言する score.printf("\n",usrname) #結果表示 score.print("\n") #表の1行のおわりであることを宣言する score.print("\n") #表の1行のはじまりであることを宣言する score.printf("\n",day) #結果表示 score.print("\n") #表の1行のおわりであることを宣言する score.print("\n") #表の1行のはじまりであることを宣言する score.printf("\n",time) #結果表示 score.print("\n") #表の1行のおわりであることを宣言する score.print("\n") #表の1行のはじまりであることを宣言する score.printf("\n",seikai) #結果表示 score.print("\n") #表の1行のおわりであることを宣言する score.print("\n") #表の1行のはじまりであることを宣言する score.printf("",point) #結果表示 score.print("\n") #表の1行のおわりであることを宣言する score.print("
ユーザー名:%s
実施日/時間:%s
タイム:%d秒
正解数:%d問
得点:%d点\n
\n") #表のおわりであることを宣言する score.print("
\n") #横線(仕切り線)をひく score.print("\n") #本文のおわりであることを宣言 score.print("\n") score.print("\n") #htmlのおわりであることを宣言する end #open(書込み)の終わり system "firefox -remote 'OpenURL(http://roy.e.koeki-u.ac.jp/~#{studentnumber}/score.html,new-tab)'" #最初に入力してもらった学籍番号{studentnumber}をURLに代入し表示させる 今回の変更点はfirefoxを表示させるためにsystemコマンドを追加したことであ る 世界タイピングの取り扱い説明書と世界地図の取り扱い説明書はfirefoxが systemコマンドで開けるようになった。よって説明書も変更した 世界地図 --------------------------------------- 使用方法 --------------------------------------- ◯プレイの準備◯ はじめる前に「必ず」firefoxを起動しておいて下さい! 1.まずプログラムをダウンロードしたら、Ktermの画面上で cd Ruby と入力します。 2.次に ls と入力します。入力したら、ダウンロードした sekaichizu.rb と sekaichizu.dat があることを確認して下さい。 3.確認したら、chmod +x sekaichizu.rb と入力します。 4.次に ./sekaichizu.rb と入力します。 上記の通りに行なうと、ソフトが起動します。 ◯プレイの仕方◯ 1.ソフトが起動したら、検索をする前に、平仮名入力にするよう 指示されます。指示どおりに行なって下さい。 2.地域・地方別に番号が指定されています。あなたが知りたい 国の首都または、都道府県の県庁所在地がある地域・地方 の番号を入力して下さい。 3.入力したら、検索した地域・地方の国名または都道府県名が検索されます。 検索された中から、あなたが知りたいと思う国・都道府県名を入力してくださ い。 4.入力すると、その国・都道府県の首都または県庁所在地が検索されます。 さぁ!早速、ソフトを使って、もっと世界のことを知りましょう! 世界タイピング --------------------------------------------------------------- 世界タイピング --------------------------------------------------------------- このプログラムは世界に関する国名、地名、人名などを題材に、タイピングの練 習をしてもらうことで、あなたのタイピング力の向上を図ってもらい、且つ、楽 しみながらあなたの「英語力」を図ってもらおうというソフトです。 このソフトでは、自分のタイピングスコアをホームページ上で確認できるように なっていますので、ダウンロードしたプログラムをpublic_htmlの下に必ずおい てください。 ダウンロードしてほしいもの 注意! 必ずpublic_htmlのしたに「直接」いれて下さい 新しいディレクトリの中には入れたりしないで下さい! tiping.rb(必ずダウンロードしてください。) tiping.css(必ずダウンロードしてください。) tiping.dat(必ずダウンロードしてください。) settei.rb(背景が黒の、大きい文字で表示されるktermを起動させるためのプロ グラムなので、ダウンロードは必須ではありません。) 使い方 はじめる前に「必ず」firefoxを起動させて下さい。起動しないとスコアカードが表示されま せん。 1 まず、プログラムをダウロードしたら、ktermで chmod +x settei.rb をしてください。 2 ./settei.rb を実行してください →なお、ここまでの手順はタイピングをプレイしやすくなるために、新規の黒い、 大きい文字で表示されるktermを開くための手順です。したがって、現在あなた のPCで設定されているktermの色で実行する場合は、次の3番から手順を進めて下さい。 3 chmod +x tiping.rb をしてください。 4 ./tiping.rb を実行してください。 5 ktermに従って、タイピングソフトで思う存分遊んで下さい!! なお、途中に出てくる学籍番号はCを除いて6桁の数字を、間違えないように入力 して下さい。正しく入力しないとスコアが表示されません。 →なお、このソフトでは、自動であなたのタイピングスコアをホームページで確認する ことができます。 7 個人で作った写真集はhttp://roy/~c109058/team_1.html である なおページ下部にある