2018年11月26日

Radikoをさらに楽しもう!ツール紹介

 皆さん、Radiko楽しんでますか? 電波が届かないところでもPCやスマホで聞け、さらにAMラジオでもFMラジオ並みの音質でラジオを楽しめるRadiko。
 そのRadikoをさらに楽しむのに役立つツールを三本紹介しようと思います。

~どがらじ
me1811-01.JPG

裏編の一番のおすすめがこれです! これのすごいところは、タイムフリーの番組も録音できることです!
録音の方法も、目的の番組のところのボタンを押すだけと、とっても簡単!
録音寺の音質、ビットレートの設定はもちろん、Youtubeやニコニコも視聴が可能と、とにかく嬉しい機能が満載のソフトです!

このどがらじは、こちらからダウンロードすることができます!→download

~Radika
me1811-02.JPG

どがらじを知るまでは、このRadikaが裏編の一番のおすすめでした。
なんといっても、録音ができるのがうれしい。さらに、番組表からタイマー録音することも可能、ファイル名の形式も設定できるといたれりつくせり。
録音形式は、PCM(WAVE)からFLV、MP3、そしてM4A(MP3)と幅広くサポートしています。
タスクトレイに入れることもできるので、作業の邪魔になることもありません。

そうそう、このツールを使うには、
Microsoft .NET Framework 3.5 Service Pack 1
DirectX
の二つの環境が必要なので、別途ご用意くださいませ。

なお、このツールは、山元司 氏が開発したもので、こちらからダウンロードすることができます。→download

~radiko Tray Player
こちらは、タスクトレイに格納すること前提のツールです。ファイルサイズも88KBと、Radikaやradiroに比べると格段に小さいのも魅力。
ただ、東京エリアと大阪エリアしかサポートしていないのが弱点ですね。もっと広いエリアをサポートしてくれることを希望です。

 radiko Tray PlayerはERES 氏の開発されたツールで、こちらからダウンロードできます。→download

 ここまで三つ紹介してきましたが、どうでしょうか?
 これらのツールを使えば、あなたのRadikoライフがさらに豊かになること間違いなし!……と思います。ぜひぜひ導入してみてはどうでしょうか?

=-=-=-=-=-=-=-=-=-=-

※次の更新は、12月3日。『無料で年賀状!』の予定です。お楽しみに!
posted by 裏編 at 09:58| PCメディア情報 | 更新情報をチェックする

2018年11月22日

ゲームむかしがたり『チャンピオンシップ・ロードランナー』 ~その隠された道標~

enta1811-02-00.png
※本記事では、ゲームの紹介のために、ゲームの画像を引用させていただいております。
 ここに掲載されている画像は、問題があれば削除いたします。
 また、ここに掲載されている画像の二次使用を禁じます。

【 まずは問題から 】
 まずは問題である。下のスクリーンショットを見ていただきたい。

enta1811-02-01.png

 これは、チャンピオンシップロードランナー1面序盤のワンシーンなのだが、このシーンには親切なガイドが隠されている。さて、それはどこだろう?
 よく考えたら、下を読んでいただきたい。

【 正解は…… 】
 正解は、右側の金塊の下のコンクリートである。
 もしここがコンクリではなく、レンガだったと考えていただきたい。きっとプレイヤーは、「この金塊の下は落とし穴かもしれない!」と、そこに一縷の希望をかけてそのまま落ちようとするだろう。筆者もおそらくそうする。
 逆にここがコンクリであることでプレイヤーに、「ここに落ちても出られませんよ」と教えているのだ。
 「希望を奪う」? いやいやさにあらず。ゲームはここで、「そのまま落ちて取るのは正解ではありませんよ」と教えてくれているのだ。多分、きっと。
 前回紹介したゼビウスもそうだったが、このチャンピオンシップ・ロードランナーでも、プレイを通して、ゲームの基本テクニックなどを教えたり、正解間違いをさりげなく教えてくれたりと、そんなレクチャー要素を取り入れている。それをこれから説明していこう。
 なお、その観点からというと、チャンピオンシップ・ロードランナー(以下チャンピオンシップ)の基本テクの一つである『時間差掘り』の初舞台となる、左上の金塊のところは……と思われるだろう。 だが、そこも巧妙なところで、画面を見ればわかる通り、もし金塊の底が落とし穴だとしても、落ちたところから右には戻れないので、ここもさりげなく、「ここの下は落とし穴ではありませんよー」と教えてくれているのだ。

【 この先は…… 】
enta1811-02-02.png

 正解の手順をふんで上の金塊を取り終えると、次にはここにたどりつく。ここもうまいもので、右から取ろうとしても、今度は金塊の下が落とし穴なのでとることができない。金塊の上のレンガを掘って、上から飛び降りるのが正解。うまいひっかけだ。しかもうまいひっかけなだけでなく、先ほどとは違い、もし間違いの方法でしてしまっても、すぐ横のはしごから脱出することができる親切設計。

enta1811-02-03.png

 もうおわかりだろう。下がコンクリートになっている。「何も考えずに上から落ちればOKという考えは捨てろ」という警告だ。ここの攻略で重要なポイントは、
・上から飛び降りてとる必要がある
・取った後は、左右のどちらかから脱出しなければならない(=脱出口を作る必要がある)
・ぽつんと1キャラ分のはしごが2x2の空間の右上にある
これを考えれば、正解はおのずとわかると思う。

 いかがだろうか? 前回のゼビウスもそうだが、このチャンピオンシップも、一面の中に、プレイしているうちにテクニックなどが身に着くレクチャー要素が取り入れられているのだ。

 そしてもう一つ、パスワードが必要な面は、11面からということも重要なポイントだと思う。
 これはおそらく、10面まではいわば基本テクニックを身に着ける練習面で、本番は11面ということだろう。
 それを暗示しているのと同時に、1~9面で基本テクニックを練習して身に着け、10面で最後の試験を行い、その試験をクリアした者だけが、本番である11面に進める、というユーザーフレンドリーな趣向だろう。(もし2面以降からパスワードが必要だったら、入力が面倒で、とても繰り返し練習する気にはならないのではないかと思う)

 チャンピオンシップ・ロードランナー。このゲームもまた、実にユーザーフレンドリーなゲームであった。

※引用元:ファミコン版『チャンピオンシップ・ロードランナー』より。
=-=-=-=-=-=-=-=-=-=-

※次の更新は、11月26日。『あのWinAmpがついにスマホに!』の予定です。お楽しみに!
posted by 裏編 at 13:55| その他のゲーム情報 | 更新情報をチェックする

2018年11月19日

プチコンゲームプログラミング講座~第一回「すごく簡単なゲームを打ち込んでみよう」

文 プチ太郎 氏
=-=-=-=-=-=-=-=-=-=-
 前回は自己紹介程度だったので、今回からゲームと言えるプログラムを掲載し、それを解説・学習していきます。

 「命令文の入力方法も知らない人向け」から、「テキストエディタぐらいや簡単な命令文は使えるが、命令文を組み合わせてプログラムを完成させるまでは無理」まで、どれくらいの学習度の人を対象にするのか、なかなか迷うところなんですが…このブログの他の講座を見るとだいたい後者ぐらいなので、この連載も後者にあわせます。

 「最低限簡単なプログラムで、最低限何度か遊びたくなるゲームは何だ?」と聞かれたら、いろんな回答が多いかしら? 私は今回ここで、2作品を挙げようと思ったのですが…実は力が入り過ぎて、前回やここのブログの他の内容に比べ、大幅に容量が増えてしまいました(^^;どうしようか悩んだのですが、一回目から量が多いと引かれそうなので、今回は1作品のみとしました。

 色は白黒のみ、使用キャラもスプライトは無しで文字グラフィックだけ、サウンドも最小限です。この辺は次回以降、機会を見てさらに加えた演出を説明予定です。

教材プログラム 1-1 「スクロールスキーゲーム」(ファイル名「KOZA01-1」)

PGP01_1.jpg

★ ゲームの概要 ★

 皆さんはコンピュータに表示される文字が多すぎて、下まで行ききったら、どうなると思いますか? 現代のコンピュータプログラムはそこまでちゃんと考えているので、「絶対文字がはみ出さない」か「画面が上下左右にスクロールする」どっちかだと思います。

 昔のコンピュータ、特にホビーマイコンや高級言語では「ラリーX」や「ドラクエ」のように画面をスクロールさせる事が難しく、スクロールするゲームは、機械語を使わねばなりませんでした。

 ところが文字が下に行ってしまうと、今でも多くのパソコンの機能やアプリは、強制スクロールします。これをうまく使って下にスクロールし続けながら、障害物を避けるゲームというのが、昔から今でも結構存在します。「最低限何度か遊びたくなるゲーム」の中では、もっとも短い行数と言えましょう。

★ ゲームの内容 ★

 一口に一方向スクロールゲームと言っても、障害物を避けるもの、目標物に当てると得点になるもの、両側に壁が出るもの、横に進むものなど、いろいろあります。今回は前述通り、一番簡単に作れる内容でかためました。

1.画面中央の人型が、あなたの操るプレイヤーキャラクターです。十字ボタンで左右に動かして、迫ってくるゲートの中(「アンダーバー」と呼ばれる下線"_"の部分)を通ってください。通ると点数が入ります。
2.10点ごとにスピードが上がります。
3.ゲートの横の四角"■"にぶつかったらゲームオーバーです。Yを押すとまたゲームができますが、Xを押すとプログラムを終了します(Y=Yes、X=バツ、と覚えて下さい)

★ プログラムの説明 ★

PGP01_1B.jpg

 "@"から始まる文字は「ラベル」(Label)と言って、GOTOやGOSUBでジャンプ先、またはデータの読み込み先を指定すると、そのラベルのすぐ下からプログラム実行やデータ読み込みを開始します。言語によっては"*"を使うものもあります。

★2行目
 ACLSは"All CLear Screen"の略で、訳としては「画面要素全削除」となります。プチコンを構成する画面要素のほとんどがリセットされます。スプライトなどもリセットされてしまうので、一般にプログラムの一番最初、および終了して元の一般的な画面に戻る時(このプログラムでは22行目)だけ書きます。だが今回は簡単なゲームなので、リプレイのたびにACLSをしても問題ないので、リプレイ時には一番最初にGOTOしています。

 ACLSの後は、ゲームで使う変数の初期設定です。一般的なゲームの場合、実行後の一回だけ設定、面クリアごとに設定など、設定のタイミングが何種類かありますが、今回は前述通り簡単なゲームなので、全て初期設定だけです。一通り説明しましょう。

 ・X - プレイヤーキャラクターの初期位置。プチコン3号の上画面は50字幅なので、左端が0で右端が49。つまり24は真ん中です。このゲームではキャラの高さがずっと同じなので、縦位置を表す"Y"は使っていません。
 ・S - "Score"のS、つまりプレイヤーが取得したスコア。
 ・S2 - スコアが上がるたびに、レベルアップする基準。
 ・W - ゲーム全体の待ち時間。これもレベルアップすると少なく、つまり速くなります。

★4行目、15行目
 @LOOPは名前通りメインループです。ゲームに何か変化があってGOTOで外に飛び出さない限り、15行目の"GOTO @LOOP"で、また7行目に戻ります。

★5~6行目
 BUTTON()は後ろにカッコが付いていますが、プチコンでは関数は全て、後ろにカッコが付いています。これはDSのボタンが現在押されているかを返す関数で、何も押さないとゼロを返すが、どこかのボタンが何個押すかで、返す数値が変わります。返す数値の中身については、また次回以降に詳しく解説します。

 頭にシャープ(#)を付けた文字は、ツイッターのハッシュタグ…でわなくてwプチコン3号のバージョンアップで追加された「定数リテラル」と言います。定数という通り、一つの名前に必ず同じ数字しか入っていないのですが、名前を見ればどういう存在かわかるので、リストが少し読みやすくなります。「IF BUTTON()==4」より「IF BUTTON()==#LEFT」のほうが、「左」だとわかりますね? つまりこの行は

・5行目「もしボタンが左に押され、かつキャラの座標がゼロ未満であれば、座標変数Xを一歩左に動かせ」
・6行目「もしボタンが右に押され、かつキャラの座標が49を超えないなら、座標変数Xを一歩右に動かせ」

 です。第0回の教材プログラム0-2(ファイル名「KOZA00-2」)とよく似ていますね。

★7~8行目
 LOCATEは文字表示の場所を指定する命令で、ドラマや映画の「ロケ」とい同じ語源です。昔は"CURSOR"と書くBASICもありましたが、マイクロソフトBASICが出てきてからは、ほとんどLOCATEです。

 それから、"?"という記述がありますね。実はこれ、文字を表示するPRINT命令が面倒で、省略して書けるようにしたものです。普通のBASICは"?"と入力しても、PRINTに自動変換されていたのですが、初代プチコンではこれをうっかり忘れてしまい、"?"とPRINTが同じ働きをする別々の命令として存在しています。その"?"で、文字キャラクタの中からキャラクタグラフィックの、「上向き人形」を出しています。これは1978年に発売されたMZ-80K/Cで登場した文字キャラで、使いやすいため、多くのゲームにも使われました。

 BEEPは一番簡単なサウンド「ブッ」を出して、全く音のないゲームの遊びにくさをフォローしています。

 RND関数はRANDOMの略、つまり乱数を返します。現代では「最少はゼロ~最大はカッコ内の数マイナス1」がランダムで出るので、RND(45)は横座標の0~44が出るという事ですね。画面座標は49まであるので、45~49文字目には出さないか?と思いますが、それは"?"で書いている、”■___■”を書く事で、49文字目まで使っています。ここで一番下の29行目に表示する文字列に「改行しない」という意味の”;”(セミコロン。命令文の間の”:”はコロン)を書いていないので、何が何でもここで画面がスクロールします。

 なお四角い"■"はプチコンに二種類あり、わかりにくいのですが、ここでは小さめで隙間の有るほう(キーボードでハートマークを押して、画面上部の”(”のあたり)を入力しています。大きめで隙間の無いほう(画面右下の”.”のあたり)ではありません。8行目と13行目両方で同じ文字を入力すればいいが、それぞれ違うとゲーム進行がおかしくなるので、注意して下さい。

★9行目
 9~12行目は微妙に違う処理を二つ並行しているので、判らない人には判りにくくなるかも知れません(簡単なゲームでも、そうしないとゲームが完成出来ない部分があります!)CHKCHR関数は「カッコ内の座標にある文字の文字コードを返す」、CHR$関数は「カッコ内の文字コードに文字を返す」。これが文字変数"C$"に入ります。本当はCHR$を使わずに「C=CHKCHR(X,10)」のほうが簡単なのですが、そうすると条件判断が「IF C==数字 THEN…」で初心者に読みにくいので、わざとCHR$を挟みました。

★10行目、12行目
 9行目のC$が”_”、つまりゲートだったら、ポイントを通過したという事で、得点の変数Sに一つ追加しています。得点はその時取っても取らなくても、12行目で表示し続けています。これは8行目で強制スクロールするので、ここで再度書かないと、得点が見えなくなるからです。

★11行目、14行目
 「現在の得点Sが次のレベルアップ基準S2に並んだなら」、待ち時間Wを1つ減らし、レベルアップのS2を10増やしています。ただしそのまま続けると、Wがゼロになったら待ち時間が無くなってメチャクチャ速くなり、-1だと文法エラーで止まってしまうので、最初のIFの時に「… AND W>0」も入れて、Wは絶対1以下には減らないようにしています。変数Wによる時間待ちは14行目。待ち時間は原則として一番最後に書きます。

★13行目、17行目~
 9行目とほぼ同じ処理で、C$が”■”、つまり柱だったらゲームオーバー。IF文の後の処理は、そんなに数が多くなかったり(今回はここ以外のIFはみんなそうしている)、ENDIF(今回は使っていない)でまとめられるならそこで書きますが、ここは量が多いのと、その後@LOOPには戻らないので、@GAMEOVERに飛ばしています。

PGP01_1C.jpg

★18行目~19行目
 ここはまた文字表示ですね。

★20行目
 BEEP 108はプチコン3号から追加された、通称「大爆発」で、結構凄い音がします。よく使うBEEP番号として、108は覚えておいて損はないです。

 WAIT 60ですが、1fpsは60分の1秒、つまりちょうど1秒待ちます。これは画面演出をゆっくり見せたいという理由もありますが、WAITを入れておかないと、遊んでいる人がボタンを押したままで、すぐ次の画面に行っちゃって、「え?今どうなったの?」と迷う事があるからです(ミーバースのプチコン3号コミュを読んでいたのですが、初めての人は結構ハマるミスのようでした)

★21行目~
 REPEATとUNTILは、FOR文(今回出てきませんでしたね。詳しくは後日!)やIF文の変形みたいなもので、UNTILの後の条件が「YES」になるまで、繰り返し処理をするというものです。つまり「IF 条件 THEN その後の処理…」と「REPEAT:途中の処理:UNTIL 条件:その後の処理…」は、同じようなものです。

 変数Bで何をやっているかは、もう判りますね。押されたボタンが「#X」ならACLSして、ENDでプログラム終了。「#Y」ならまた@INITからやり直しです。

★ 最後に ★

 次回からは、徐々に複雑にしたいろいろなゲームを挙げて、プログラムのスキルを上げて行きます。また「こんなジャンルのゲームを扱ってほしい!」というリクエストもお待ちしています。ANDとOR、BEEPとBGMPLAYなど、今回簡単な解説で済ませた命令や関数については、後日また解説予定です。

(第二回につづく)

★今回の教材プログラムがうまく打ち込めなかった方のために、同じ教材プログラムを、サーバにアップしてあります。必要な方はサーバからダウンロードして、どこが間違っているかなどを、見比べてみて下さい。

公開キー  :XK2NEDC1(連載が進んで新しい教材プログラムが追加されると、公開キーも変わります。この公開キーでダウンロード出来ない場合は、連載の一番新しい回の公開キーをご利用下さい)
プロジェクト:KOZA
ファイル名 :上の教材プログラムの見出しをご覧下さい。

=-=-=-=-=-=-=-=-=-=-

次の更新は、11月22日。『ゲームむかしがたり『チャンピオンシップ・ロードランナー』』の予定です。お楽しみに!

2018年11月15日

師匠TのチャレンジARSゲーム!~第拾壱回・STAR GAZER【2004年・Rxo Inverse 氏】

ch1811-00.jpg
※ここに掲載された画像は、問題があれば削除いたします。

 うむ、師匠Tである! 今月は久しぶりにRPGを紹介するぞ!
 今月のお題は、『STAR GAZER』。なんと、あのファミコンの伝説のクソゲーと謳われた(?)『ほしをみるひと』のリメイクじゃ。
 はたして、クソゲーがどこまで生まれ変わったか、この目で確かめてみるとしようぞ。

 それじゃ行くぞ。

どんなゲームも、完全制覇じゃ!

 なお、この作品はRxo Inverse氏によるもので、こちらからダウンロードできるぞ!

【本編】
ch1811-01.jpg
いきなりフィールド画面からスタートじゃ。
ここでどうするかと迷う者もいると思うが、マニュアルを見ればあっというまにわかるぞ。

ch1811-02.jpg
最初の町じゃ。
木のふもとを調べると、アイテムが得られることがある。試してみるとよいぞ。

ch1811-03.jpg
薬局では、このように薬を調合してもらえるぞ。
レシピは、町の人に聞くことでわかることがある。もちろん、適当にやってみてもOKじゃ!

ch1811-04.jpg
むむ、この壁は破れそうじゃな。じゃが、ただ調べただけでは破ることはできぬ。
主人公は超能力者じゃから……

ch1811-05.jpg
このゲームのアイテムのシステムはSaGa方式じゃ。手に入れた装備やアイテムは、装備しておくのを忘れずにな。

ch1811-06.jpg
町の外を歩くと、しばらくしてバトルがはじまった!
手ごわいが、がんばって倒すのじゃ!

ch1811-07.jpg
次なる町には、病気に苦しむ人たちがいた。
むむぅ、なんとか助けてやりたいのじゃが……

ch1811-08.jpg
次なる町から先に進むと洞窟があった。
いったい、この洞窟には何があるのか?

この先は……



ここから先は君の目で確かめるのじゃ!!
健闘を祈っておるぞ!


※ここに掲載されている画像の二次使用を禁じます。



※次の更新は、11月19日。『プチコンゲームプログラミング講座』の予定です。お楽しみに!
posted by 裏編 at 10:11| チャレンジARS | 更新情報をチェックする

2018年11月12日

ActiveBasicとDXライブラリでゲームプログラミング!~第1回・メッセージを表示させてみよう!

※使っているアイコンは、以前、伊地山基之さんが描いてくれたものを使わせていただいております。
 ありがとうございます!

n88_reon.gif
玲音:どうもはじめまして! 玲音です!

n88_kaede.gif
楓:どうもこんにちは! 玲音先輩にこの講座に引きずり込まれちゃった、後輩の楓ですっ。
 よろしくお願いしますっ!

n88_reon.gif
引きずりこんだなんて、人聞きが悪いなぁ……。

n88_kaede.gif
えへへ。さて、この講座は、BASIC言語『ActiveBasic』と、ゲーム開発用ライブラリ『DXライブラリ』を使って、ゲームを作ってみよう、という講座、だそうですっ。それで先輩っ。今月は何をするんですか?

n88_reon.gif
うん。今月はまず初歩の初歩、文字を表示させるところから始めるよ。さぁ、スタート!

~これが骨格!

n88_reon.gif
まず最初に、DXライブラリを使ったプログラムの骨格を教えちゃうよ。これです!

ab1811-01.jpg

n88_reon.gif
このように、DXライブラリを使ったプログラムでは、画面をクリアして、何かの処理を行い、描画して、それを反映させる、という流れになるんだよ。

n88_kaede.gif
なるほどなるほどっ。それで、これをActiveBasicにするとどうなるんですか?

n88_reon.gif
うん、お待たせしました。ActiveBasicでの骨格がこれです!

----------
#include "Dxlib.sbp"

Dim white As Long

''初期処理
dxChangeWindowMode(1)
dxDxLib_Init()
dxSetDrawScreen(DX_SCREEN_BACK)

Do
  ''画面をクリア
  dxClearDrawScreen()

  ''何等かの処理

  ''画面に反映
  dxScreenFlip()
  ''メッセージ処理
  If dxProcessMessage() = -1 Then
    Exit Do
  End If
Loop

''後処理
dxDxLib_End()
End
----------

n88_reon.gif
dxClearDrawScreen()が、画面をクリアするところ。dxScreenFlip()が、画面に反映させるところに当たるよ。

n88_kaede.gif
この二つの関数の間、『何等かの処理』ってコメントがついているところに、処理などを書いていくわけですねっ。

n88_reon.gif
その通りだよ。さぁ、これをいじって、メッセージを表示させてみよーう!

n88_kaede.gif
はーい!

~dxDrawStringを使ってみよう!

n88_reon.gif
さてさて。文字を表示させるには、dxDrawStringという関数を使うよ。

n88_kaede.gif
それって、どう使うんですかっ?

n88_reon.gif
習うより慣れろ。さっそく使ってみちゃおう! まず、#include "Dxlib.sbp"の次の行に、こう書いてみて。

----------
Dim white As Long
----------

n88_kaede.gif
はい、できましたよー。

n88_reon.gif
そして、ここからが本番。『何等かの処理』ってコメントの後ろにこれを書いてね。

----------
white = dxGetColor(255, 255, 255)
dxDrawString(50, 40, "DXLIB!", white)
----------

n88_reon.gif
できたら、ソース(簡単に言うとプログラムのこと)を保存して実行してみてね。あ、そうそう。今月の特集にもあるけど、Dxlib.sbpとDxLibDll.dllを、ソースを保存したのと同じフォルダにコピーしておくのを忘れないでね。

n88_kaede.gif
はーい。それじゃこの、ビックリマークのボタンを押せばいいんですよね? えいっ。

ab1811-02.JPG

n88_kaede.gif
おー。ウィンドウの左上に、DXLIB!ってメッセージが表示されましたよ!

n88_reon.gif
それじゃ、dxDrawString関数の使い方について説明するよ。まず、最初の二つの数字は、メッセージを書く座標。一つ目がX位置、二つ目がY位置だよ。つまり、例でいえば、(X:50, Y:40)の位置に書いているわけだね。

n88_kaede.gif
ふむふむ。その次のは、書くメッセージの内容ですよね。その次のは何ですか?

n88_reon.gif
うん。ここは、何色で書くかを入れるんだよ。色の数字は、この例にある通り、dxGetColor関数を使って得ることができるよ。ちなみに、そのdxGetColor関数の使い方はこちら。

----------
dxGetColor(赤成分, 緑成分, 青成分)
----------

n88_reon.gif
成分の値を指定してやると、その成分でできる色を返してくれるの。

n88_kaede.gif
なるほどっ。

~数字はdxDrawFormatStringで

n88_kaede.gif
あの先輩。数字を書くことはできないんですか?

n88_reon.gif
うん。数そのものを書くことはできないよ。だから、数は、Str$関数で、文字列にしてあげる必要があるの。

----------
Str$(数値)
----------

n88_reon.gif
これがStr$関数の使い方なんだけど……。

n88_kaede.gif
なるほどっ。さっそくやってみまーすっ。

----------
#include "Dxlib.sbp"

Dim white As Long
Dim num As Integer
Dim numstr As String

''初期処理
dxChangeWindowMode(1)
dxDxLib_Init()
dxSetDrawScreen(DX_SCREEN_BACK)

Do
  ''画面をクリア
  dxClearDrawScreen()

  ''何等かの処理
  num = 50
  numstr = Str$(num)
  white = dxGetColor(255, 255, 255)
  dxDrawString(50, 50, numstr, white)

  ''画面に反映
  dxScreenFlip()
  ''メッセージ処理
  If dxProcessMessage() = -1 Then
    Exit Do
  End If
Loop

''後処理
dxDxLib_End()
End
----------

ab1811-03.JPG

n88_kaede.gif
うん、ちゃんとできましたっ。それじゃ今度は計算の答えを表示させてみようかな。それっと。

----------
#include "Dxlib.sbp"

Dim white As Long
Dim num1 As Integer
Dim num2 As Integer
Dim num3 As Integer
Dim numstr As String

''初期処理
dxChangeWindowMode(1)
dxDxLib_Init()
dxSetDrawScreen(DX_SCREEN_BACK)

Do
  ''画面をクリア
  dxClearDrawScreen()

  ''何等かの処理
  num1 = 10
  num2 = 3
  num3 = num1 + num2
  numstr = Str$(num3)
  white = dxGetColor(255, 255, 255)
  dxDrawString(50, 50, numstr, white)

  ''画面に反映
  dxScreenFlip()
  ''メッセージ処理
  If dxProcessMessage() = -1 Then
    Exit Do
  End If
Loop

''後処理
dxDxLib_End()
End
----------

n88_reon.gif
うん。あ、そうだ、計算結果を表示させるにはちょっと問題が……って、ちょっと待ってっ……。

ab1811-04.JPG

n88_kaede.gif
あれー? 小数点まで表示されているうえに、計算結果が違ってるんですけど。玲音せんぱーい。どうなってるんですか?

n88_reon.gif
あああ、だから待ってって言ったのに……。うん。ActiveBasicの問題か、それともDXライブラリの問題かわからないんだけど、特定の計算をさせて、それをdxDrawStringで表示させると、このようにおかしくなることがあるの。

n88_kaede.gif
そうなんですかぁ……。そしたら、どうしたらいいんですか?

n88_reon.gif
そこで出てくるのが、dxDrawFormatString関数でーすっ。これは、数値を決められた形式で書いてくれるものなの。使い方は次の通りだよ。

----------
dxDrawFormatString(Xの位置, Yの位置, 色, 形式の文字列, 数)
----------

n88_kaede.gif
Xの位置、Yの位置、そして色というのは、dxDrawString関数のと同じですよね?

n88_reon.gif
うん、その通りだよ。そしてその次の『形式の文字列』というのは、数値をどのような形式で書くのか、というもの。これはちょっと難しいけど、例として、このような書き方があるよ。

----------
"%d"→十進数の整数で表示する
"%05d"→十進数の整数で表示する。そのさい、5桁で表示し、空いているところは0で埋める
----------

n88_reon.gif
このほかにもいっぱいあるけど、それはC言語関係の解説サイトか本を読んでね。

n88_kaede.gif
はーいっ。その次の数は、表示させる数ですよね。

n88_reon.gif
そうだよ。例えば、変数aの内容を6桁表示で、開いている桁は0で埋める形式で表示させたいときは、こう書けばいいの。

----------
dxDrawFormatString(100, 100, white, "%05d", a)
----------

n88_kaede.gif
なるほどーっ。あ、そうだ。複数の数値を表示させることもできるんですか?

n88_reon.gif
うん。その場合は"%d"とか"%05d"とかの表示を複数書いて、その後の数の指定も複数書けばいいの。こんな風にね。

----------
dxDrawFormatString(100, 100, white, "%d %05d", a, b)
※この場合、変数aが5、変数bが13なら、このように表示される。
→5 00013
----------

n88_reon.gif
そうそう。メッセージも一緒に書くことができるよ。こんな感じ。

----------
dxDrawFormatString(100, 100, white, "変数Aは %d。変数Bは %d", a, b)
→変数Aは 5。変数Bは 13 と表示される。
----------

n88_reon.gif
さて。それじゃ、これを踏まえたうえで、さっきのプログラムを、dxDrawFormatStringで書きなおしてみよう!

n88_kaede.gif
はーいっ。

n88_reon.gif
とはいっても、さっきのプログラムのdxDrawStringの行を、こう書きなおすだけ。やってみて?

----------
dxDrawFormatString(100, 100, white, "%d", num3)
----------

n88_kaede.gif
はーい、できました。実行してみますね。

ab1811-05.JPG

n88_kaede.gif
わーい、できたーっ。

n88_reon.gif
このように、基本的にはdxDrawString関数でOKだけど、数の表示が変になるときは、dxDrawFormatStringを使うことも考えてみてね。

n88_kaede.gif
わかりましたっ。

n88_reon.gif
それじゃ、次回は、いよいよキャラクタの表示をやってみるよ。お楽しみにね。

n88_kaede.gif
また次回ですっ。



※次の更新は、11月15日。『師匠Tのチャレンジ・ARSゲーム!』の予定です。お楽しみに!