242 第二部 石 0 迷いの森の召 0 source. lndex bangol itemCLS Unload form bag Exit Sub End If hit Case EIse Exit Sub End Select Unload form bag ' モンスターを倒した ! p(mi) = mp(mi) ー damage If mp(mi) < = 0 Then msg = dare 十”は”十 m(mi) . Caption 十 form msg. Text 1. Text = msg Unload m (mi) sitai 十 1 sitai Select Case dare Case ”フーリガン” special" Then If source. Tag - fg(6) = fg(6) ー Abs(mp(mi)) If fg(6) < = 0 Then bango = 0 swordCLS End If End If Case ”レズリ” special" Then If source. Tag - rz(6) = rz(6) ー Abs(mp(mi)) If rz(6) < = 0 Then bango = 0 swordCLS End If End If Case ”ティーン” special" Then If source. Tag ー End If End If swordCLS bango = 0 If dn(6) < = 0 Then dn(6) = dn(6) ー Abs(mp(mi)) ”を倒した ! ”
146 第二部 ツアラーム時計 断続的なアラーム 3 D オプションホタンの名称の適時変更 日時に対応する曜日の表示 プロバティを数値として計算に使う プログラムで使う主な変数 変数名 データ型 文字列型 inifile 内容 使う人の環境によって置き場の 異なる、「 tokei. ini 」の正確な パス付きファイル名 前回の処理時の分の値 時計の上部の位置 時計の左端の位置 アラームを鳴らした回数 何番目の定期日時を選択してい るのか 設定中の定期条件 タイマーアラームを鳴らす年 タイマーアラームを鳴らす月 タイマーアラームを鳴らす日 タイマーアラームを鳴らす時 タイマーアラームを鳴らす分 定期タイマーの種類 定期タイマーに設定されている 年 定期タイマーに設定されている 月 定期タイマーに設定されている 定期タイマーの設定されている 曜日 レ イ フ バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型 tokei. bas バリアント型 tOkei. bas バリアント型 tokei . bas バリアント型 tokei . bas バリアント型の tokei . bas 配列変数 バリアント型の tokei . bas 配列変数 バリアント型の tokei . bas 配列変数 バリアント型の tokei . bas 配列変数 バリアント型の tokei . bas 配列変数 hunhun ue hidari beru teiki syu ru 1 timeyear timemonth timeday timehour timeminute teikisyurui teikiyear ( ) teikimonth teikiday() teikiyoubi ( )
210 第二部 5 テキスト整形美男 使用したコントロール コモンダイアログ スピンボタン 3 D チェックポックス 3 D コマンドボタン ラ / ヾノレ テキストボックス コントロール名 所属 標準のコントロール 標準のコントロール threed. vbx ( カスタムコントロール ) threed. vbx ( カスタムコントロール ) spin. vbx ( カスタムコントロール ) cmdialog. vbx ( カスタムコントロール ) 5. 1 . 2 cmdialog. vbx には commdlg. d11 が必要ですが、添付 FD には収録してあります。 プログラムで使う主な変数 作業用としてのテキストボックスの使い方 コモンダイアログを使った印刷 ウインドウの自由なサイズ変更 オリジナル関数の利用法 チェックホックスの使い方 主なプログラミング技法 変数名 keta onbiki md namae st 10 be 1 データ型 バリアント型 バリアント型 バリアント型 バリアント型 数値型 数値型 数値型 亘言ファイノレ plastic. bas plastic. bas plastic. plastic. plastic. plastic. bas plastic. bas bas bas bas 内容 使う人が設定する改行桁数 音引きを禁則処理するか否か 現在のモード 編集中のテキストを持っファイ ルの名前 文字を取り出す場合の開始桁 文字を取り出す場合の文字数 本来なら行末に来るはすの文字 が禁則文字かどうか
233 dokuD nml bossP namae monster dare msg mp() fg() rz() dn() 数値型 数値型 数値型 文字列型 文字列型 文字列型 文字列型 フォーム配列 数値型 長整数型 長整数型 長整数型 ろ : 3 bas b as bas bas b as b as b as bas b as bas woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. bas woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. bas 使用するフォームとコントロール ディーンは毒に冒されているか 戦闘中かどうか ポスキャラの耐久値 データファイルの名前 出現したモンスターの名前 ディーンに関する情報 レズリに関する情報 フーリガンに関する情報 増殖したモンスターの耐久値 増殖するモンスターのフォーム 表示するメッセージ 内の誰か 対象になっているのは主人公達の つ 2 迷いの森の RPG のプログラミングをするときに考えたこと RPG を作ろうと考えたのは、とても自然なことです。それは筆者自身がゲームを好き たからです。 さらに操作性。 Visual Basic では、マウスによる操作をあたりまえに実現できます。 きます。 次にビジュアル。これもさまざまなコントロールを使うことで、簡単に魅せることがで まず Rnd 関数。これはゲームに意外性と偶然性をもたせるのに利用できます。 Basic にはゲームを作るための要素も十分にあるのです。 VisuaI Basic に触れていくうちに、その考えは少しすっ固まっていきました。 VisuaI 介します。 迷いの森の RPG で使う 11 種類のフォームと、それに配置してあるコントロールを紹 3 使用するフォームとコントロール これたけ条件が揃っていれば、あとは発想だけです。 キーポードによるものよりも、マウスの方がはるかに親しみやすいのは事実です。
テキスト整形美男のプログラミングをするときに考えたこと 2 be 2 af 1 af 2 nextline nowline linesformfile alllines be af 数値型 数値型 数値型 文字列型 文字列型 文字列型 文字列型 文字列型 文字列型 plastic. bas plastic. plastic. bas plastic. bas plastic. bas plastic. bas plastic. bas plastic. plastic. bas b as b as 本来なら行末に来るはすの文字 の直前文字が禁則文字かどうか 本来なら次行の頭に来るはすの 文字が禁則文字かどうか 本来なら次行の 2 文字目に来る はすの文字が禁則文字かどうか テキストファイルから読み込ん だ、改行を含まない 1 行分の文 字列データ 本来なら指定桁数で改行され て、テキストボックスで 1 行に なるはずの文字列 nextline を指定桁数で改行し た後のデータ テキストファイルから取り出し た文字列データすべてを指定桁 数で改行したもの 本来なら 1 行になるはずの文字 列の末尾 2 文字 本来なら次行に来るはずの文字 列の頭 2 文字 5. 2 テキスト整形美男のプログラミングをするときに考えたこと Windows 環境でも MS ー DOS 用のプログラムを使えば良いのですが、 Windows に慣 た。筆者もそうしたプログラムにすいぶんお世話になったものです。 MS-DOS のツールには、指定した桁数で自動的に改行を入れものがいくつもありまし のものをうまく送れなくなってしまう場合もあります。 常に読みにくいものになってしまいがちです。また、ネットワークによっては、データそ が一般的です。改行を入れておかなくてもとりあえず送信は行えるのですが、結果的に非 しかし、 1 行の長さに制限があるものも多く、あらかじめ 1 行ずつ改行を入れておくの うもので、手軽でとても便利なものです。 は、ネットワークの会員同士が、文章 ( テキストデータ ) を直接他の会員と送受信するとい ほとんどのパソコン通信ネットワークには、電子メールという機能があります。これ
232 第二部 石迷いの森の召 0 主なプログラミング技法 任意の位置へのフォームの表示 ドラッグ & ドロップ 乱数の利用 フォームに表示した画像のアニメー 故意にフォームを揺らす オープニングタイトルの表示 プログラムで使う主な変数 ション 宣言ファイル 変数名 damage kogeki keiken kane n11 act kazu sugata sitai bagT bagL bango bangol bangoA mge dokuF dokuR データ型 長整数型 長整数型 長整数型 数値型 長整数型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 数値型 form form form fO rm fO rm form form form bos. frm mon . frm bos. frm fie. frm mon . frm fie. frm fie. frm mon. frm woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. woodrpg. bas b as b as bas bas bas b as b as b as b as bas bas 内容 ポスキャラの受けたダメージ値 モンスターの受けたダメージ値 ポスキャラの受けた攻撃値 ポスキャラやモンスターの攻撃値 モンスターの受けた攻撃値 主人公達が得た経験値 主人公達が得た金 モンスターの lndex 番号 レズリは毒に冒されているか フーリガンは毒に冒されているか 敵を煙に巻いたかどうか 指定された鎧の番号 指定されたアイテムの番号 指定された剣の番号 バッグウインドウの左端の位置 バッグウインドウの上部の位置 倒したモンスターの数 モンスターの種類 出現したモンスターの数十 1 ステージ番号
ノ . ノ 概要 9 ドライプリストボックス ディレクトリリストボックス ファイルリストボックス 3 D コマンドボタン 3 D フレーム 3 D パネル スピンボタン 主なプログラミング技法 ファイルの移動 標準のコントロ 標準のコントロ 標準のコントロ 標準のコントロ ーノレ ーノレ ーノレ ーノレ threed. vbx ( カスタムコントロール ) threed. vbx ( カスタムコントロール ) threed. vbx ( カスタムコントロール ) spin. vbx ( カスタムコントロール ) プログラム情報の書き出しと読み込み 不測の事態に備えたエラー処理 状況に応したコマンドボタンの選択可・不可の切り替え リストホックスへのアイテムの登録と削除 ティレクトリの新規作成 プログラムで使う主な変数 起動時のアイコン化 Windows ティレクトリ名の取得 日時の計算と確認 配列フォームの表示と削除 変数名 inifile trushdir trushtime データ型 文字列型 文字列型 バリアント型 バリアント型 フォーム配列変数 型 宣言ファイル garb age. garbage. garbage. garb age. garbage. bas bas bas b as bas 内容 めに使用 家フォームをいくつも表示するた フォーム配列変数 f ( ) の lndex 番 削除対象経過時間の設定値 のノヾス ゴミ置場ドライプ & ディレクトリ ル名 「 garbage. ini 」のパス付きファイ
147 2 ツアラーム時計のプログラミングをするときに考えたこと teikihour() 定期タイマーに設定されている バリアント型の tokei. bas 配列変数 時 定期タイマーに設定されている バリアント型の tokei. bas 配列変数 分 定期タイマーに設定されている バリアント型の tokei . bas 配列変数 メッセージ 2. 2 アラーム時計のプログラミングをするときに考えたこと 具体的なアラーム時計のイメージは、やはりアクセサリなのですからコンパクトでなく てはかえって邪魔になるでしよう。また、アラームを鳴らすには、 Windows というのは 意外にやっかいな環境です。さまざまなアプリケーションが共存するので、他のプログラ ムのことも考えなくてはいけません。そんなところから、アラーム時計の基本設計を練っ てみました。 コンバクトな時計を作りたいけれど・・・ Windows でコンパクトなサイズというと、 Windows に標準添付されているような時 十が代表的でしよう。あのサイズでアナログの針が動いてしまいますから。しかし、ディ スプレイのサイズによってはちょっと小さすぎるかもしれません。 そこで、一目で日付や曜日、時刻などを少し大きめにすることを前提にフォームを設計 してみました。 ー最初に考えた時計の形 引 0 地 teikiminute teikimsg ( ) 一三ロ アラー■ テキストを 2 行表示して、上の行に時刻を、下の行に日付と曜日を表示しています。べ ースは 3 D パネルです。中央にあるのは言わすと知れたタイマーのコントロールです。 パソコン内蔵時計の時刻を一定時間ごとに調べるにはこれを使うしかありません。プログ ラム実行時には消えてなくなるのですから、邪魔にはなりません。 でも、なんとなく何かが邪魔で見苦しい、そう感じました。そう、タイトルバーとウィ ンドウ枠です。 そこで、思い切ってフォームの BorderStyle プロバティを「 0 ーなし」にしてみること にしました。
134 第二部 ノ ゴミ収集車 = trushyear And Month (FileDateTime EIseIf Year(FiIeDateTime (misyufile) ) → isyufile ) ) = trushmonth And Day ( FileDateTime ( misyufile ) ) く trushday ~ Then Kill misyufile ElseIf Year(FiIeDateTime (misyufile) ) = trushyear And Month (FileDateTime = trushmonth And Day (FileDateTime (misyufile) ) ~ (misyufile) ) = trushday And ' 未収集ファイルの有無に応じて、未収集ボタンの有効・無効を切り替える Next i End If KiII misyufile Hour(FiIeDateTime(misyufile) ) < trushhour Then End Sub End If Else command 3 d mikaisyu. Enabled command 3 d mikaisyu. Enabled = False If file misyu. ListCount = 0 Then True bage. bas 」で宣言してあるグローノヾル変数を含めて、ます整理しておきましよう。 この処理にはいくつかの変数が登場します。混乱しないよう、コードモジュ trushyear = Year (Now) trushmonth = Month(Now) trushday = Day (Now) trushhour = Hour (Now) 〇この Sub プロシージャに登場する変数 trushdir ゴミ置場ディレクトリです。グローバル変数として、コードモジュ bage. bas 」で宣言しています。 trushtime 削除時間が代入されている変数です。 「 garbage. bas 」で宣言しています。 trushyear 除時刻の年になります。 trushmonth ーノレ「 gar- ーノレ「 gar- グローバル変数として、 コ ドモジュール はじめは、現在の年が代入されます。その後削除時間 ( trushtime ) が引かれ、削 はしめは、現在の月が代入されます。その後削除時間 ( trushtime ) が引かれ、削
付録 7 サンプルプログラムプロシーシャー覧 257 Sub harituke—CIick ( ) Sub hiraku—Click() Sub insatu—Click() Sub kopi—Click ( ) Sub mnu—edit—Click() Sub mnu—figer—Click() Sub mnu—file—Click() Sub mnu—mode—Click() Sub modo—CIick (index As lnteger) Sub nahozon—Click() Sub sinki—Click ( ) syuryo—CIick ( ) Sub uwagaki—Click() Sub FO 「 m-Ket. f 「 m Sub Command 3 D—settei—Click ( ) Sub Command 3 D—tyusi—Click ( ) Sub Form—Load ( ) Sub Spin—keta—SpinDown() Sub Spin—keta—SpinUp ( ) Wood 「 pg. bas Sub armorCLS ( ) Sub hueruEP() Sub itemCLS() Sub swordCLS ( ) Sub zokusei() FO 「 m-Bag. f 「 m Sub armor—DblCIick (lndex As lnteger) Sub Command 3 D—taiki—Click ( ) Sub Form—QueryUnload(Cancel As lnteger, 迷いの森の RPG クリップポードのテキストをコピーする キャラクターの情報を form_bag に表示する 剣を一つ失ったときの処理 アイテムを一つ失ったときの処理 体力と気力の回復 鎧を一つ失ったときの処理 内容 桁数を 2 ずっ増やす 桁数を 2 すっ減らす 現在の状態を反映する フォームを終了する 新しい桁に変更する 内容 ファイルの保存 プログラムの終了 テキストボックスのデータを初期化する ファイル名を指定しての保存 モードの変更 チェックマークの位置を決める 状態に応してメニュー表示を変える form—keta を表示する クリップポードの状態に応じてメニュー表示を変える 選択中のテキストをクリップポードに転送する テキストボックスのデータの印刷 ファイルを開くためのダイアログボックスを表示する Mode As lnteger) Sub lmage I—DblClick() Sub item—DbICIick(Index As lnteger) Sub sword—DbICIick (lndex As lnteger) F 「 Om-BOS. f 「 m Sub Form—DragDrop (source As ControI , Y As SingIe) Sub Form—Load ( ) Sub hitB() FO 「 m—Dee. f 「 m Sub Form—DblCIick ( ) Sub Form—DragDrop (source As Control , Unload- X As Single, 鎧を捨てる 戦闘中の小休止 現在位置を変数に記録 プログラムの強制終了 アイテムを捨てる 剣を捨てる キャラクターの攻撃 表示位置の設定 キャラクターの攻撃はポスにダメージを与えたか ? 内容 内容 X As Single, 情報の表示 内容 Y As SingIe) Sub Form—Load ( ) FO 「 m-Fie . f 「 m Sub Command 3 1)—arr ℃ w—Click (lndex As lnteger) Sub daimaou ( ) Sub Form—Load ( ) Sub Form—QuerYUnload(Cancel As lnteger, Unload- Mode As lnteger) 仲間から物を受け取る、 表示位置の設定 森の中を 1 歩ずっ進む 大魔王との決着 二つ以上の起動を防ぐ 内容 プログラムの終了 もしくは商人からの買い物