<HOME <お願い事項 <Access2002 TOP <Access2000 TOP <サイト内検索 | ||
MS-Access97大魔法陳列棚>しりとり大戦争 |
【仕 様 な ど】MS-Access97で作成。Windows95でのみ動作確認。
【ダウンロード】←Zip形式
(解凍後、mdb初期状態:およそ222KB)
【主 な 機 能】
しりとりゲームです。なんでしりとりなんか・・・。
【作 り 方 等】
ちょっとだけバージョンアップしました。でもまだVer.0.91。あんまり言葉を知らないです。
フォームのイベントプロパティを見ると、一番下の方に「タイマ時」と「タイマ間隔」というやつがあります。
このふたつを組み合わせると、Accessでも「10秒ごとにマクロを動かす」なんていう感じのイベントのきっかけを作ることができるのです。
「タイマ間隔」の単位はミリ秒。「1秒」と設定したい場合は、1000と半角の数値で入力します。この欄が「0(ゼロ)」のときは、タイマが働いていないことになり、タイマ時のイベントプロシージャやマクロは実行されないことになります。
フツウは「コマンドボタンをクリックしたとき」とか「テキストボックスの中が更新されたとき」とか、いわゆるイベントドリブン型というやつで、操作する人が何か動きを見せないと、マクロとかプロシージャを動かすことってできないんですよね。そういう意味では、ちょっと異質なイベントかもしれないです。
しかし、通常のデータベースの使い方で、こんなイベントを使うことがあるのだろうか・・・。今まで、LAN環境でのデータベースで、10秒おきにリクエリーする、なんていうイベントしか作ったことがなかったので、こういうデータベースは初挑戦です。
さて、で、どんな展開になるかというと、まず下のような画面が出てきます。
左側がAccess、右側が皆さんが入力する欄です。入力後、Enterキーを押して確定すると、相手側に回答権が移ることになります。下のリストボックスには、一応使った単語を表示するようにしています。
あらかじめ、国語辞典から1300語余の単語を拾い出して、「単語集」というテーブルを作ってあります。アイウエオ順に並ぶようにインデックスを設定したテーブルです。左側には、このテーブルから探し出された単語が次々に出るようになっています。
真ん中の数字が、「秒数」です。タイマイベントを利用して、10秒間カウントするようにしています。10秒たったら「負け」。メッセージボックスを出して、タイマ間隔をゼロにしています。
まず、フォーム内に「タイマー」という名前のテキストボックスを作ります。上の画面では、色を透明にしているので目立ちませんが、5という数値が、「タイマー」というテキストボックスにあたります。
フォームを開くとき、このテキストボックスに「10」という数値を代入しておきます。0からはじめてもいいんですが、だんだん数字が減っていく方が、雰囲気が出るかなと思ったもんで・・・。
次に、「タイマ時」のイベントを作ります。下のはイベントプロシージャのサンプルです。
Private Sub Form_Timer()
Me!タイマー = Me!タイマー - 1 'テキストボックスの数字から1を引きます。
If Me!タイマー = 0 Then 'もしテキストボックスの中身がゼロになったら
MsgBox "おそすぎ〜"
Me.TimerInterval = 0 'タイマ間隔にゼロを代入します。
Me!コマンド6.Enabled = True
Else
End If
End Sub
TimerIntervalというのが、タイマ間隔のプロパティ名ですね。ここをゼロにしないと、いつまでも引き算を繰り返してしまいます。
で、再びしりとりを再会するときに、また1000を代入すれば、タイマイベントが再会されることになります。
ただ、ペンション萩さんのページに詳しいレポートがあるのですが、このタイマイベント、マウス操作をしている間、止まってしまうのです。例えばコマンドボタンをクリックしている間とか、ドラッグしている間とか。
これはしりとりなので、秒数が止まるだけなんですが、正確な時間を計りながら何かの入力処理を行いたい場合などは、ちょっと難しいかもしれないですね・・・。
さて、ちょっとだけマイナーチェンジをしまして、一番最初に作ったはんぱなしりとり野郎から、すこーしものわかりのいいしりとり屋さんに生まれ変わりました。
単語集というテーブルの中に入っている単語(いちおう国語辞典から拾いました)を入力したときは10点、入ってない単語を入力したときは1点、と言う具合に、点数制にしてみました。
それがちゃんとした単語かどうか、識別する能力があるといいんですけどね。所詮データベースですから、AIに相当する部分も、自分でこしらえないとならない(笑)。苦肉の策がこれです。
今はまだ単語集の中身がチョットしかないので、なかなか10点入らないんですけれど、それはそれで結構楽しいと思います。
「単語集」というテーブルには、右のように4つのフィールドがあります。「No」が主キー、「先頭文字」にインデックス(重複あり)の指定をしてあります。
「先頭文字」は、「単語」の一番左の1文字を取り出す更新クエリを実行して作ったフィールドです。「Q_先頭文字を作る」という名前のクエリを残してありますので、ぜひ参考にしてください。
「使用済み」というフィールドはYes/No型で、一応、一回使った単語はここをオンにしています。
しりとりとはいえ、テーブルからレコードを拾い出す処理にはかわりアリマセン。
まず、[Start]ボタンをクリックすると、この「単語集」テーブルの中から単語をひとつだけ選び出して、左側のテキストボックスにほうり込むようにしています。ここで、ランダム関数を使っています。
[Start]ボタン(コマンド7)のクリック時のイベントの中で実行させています。
Private Sub コマンド7_Click()
Dim Nbr As Variant
Set db = CurrentDb
Set D1 = db.OpenRecordset("単語集")
Randomize
Nbr = Int((1354 * Rnd) + 1) '1354までの間で、乱数を作ります。整数部分だけ取り出します。
D1.Index = "primarykey" 'インデックスの指定をします。
D1.Seek "=", Nbr 'Nbrと同じインデックスを持つレコードをSeekします。
Me![テキスト2] = D1![単語]
End Sub
単語集にお好きな言葉を追加して、遊んでみてください。