<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秒たったら「負け」。メッセージボックスを出して、タイマ間隔をゼロにしています。


まず、フォーム内に「タイマー」という名前のテキストボックスを作ります。上の画面では、色を透明にしているので目立ちませんが、という数値が、「タイマー」というテキストボックスにあたります。

フォームを開くとき、このテキストボックスに「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


単語集にお好きな言葉を追加して、遊んでみてください。