2018年08月27日

スマホで手軽に音楽を聴こう!『音楽フォルダプレイヤー』

※予定と記事の内容が変わってしまったことをお詫びいたします。(平伏

さてさて、B-Magaの読者の皆さんの中には、スマホに音楽を入れて聞いている人もいると思います。

私、裏編も、以前は携帯音楽プレイヤーに音楽ファイルを入れていたのですが、スマホを買ってからは、スマホに入れて、聞いています。(あ、歩きながら聞くときは、車や他の歩行者には気を付けてくださいね)

その時に裏編が使っているのが、この『音楽フォルダプレイヤー』です。そこで、今回は、この『音楽フォルダプレイヤー』を紹介しようと思います。

~ダウンロードについて

さて、ダウンロードについては、特に悩むことはありません。Playストアで、『音楽フォルダプレイヤー』と検索すれば、すぐに見つかります。

media-1808-01.png

なお、フリー版と有償版の二種類がありますが、違いは広告があるかどうかで、機能に違いはありません。
お金を払う余裕があって、広告が嫌という人は有償版にするのも手だと思います。

~対応形式は?

さて、この『音楽フォルダプレイヤー』で演奏できる音声ファイルの種類ですが、MP3、MP4、WAV、OGGと、一通りの形式は聞くことができます。MP4が聞けるのはとても嬉しいですね。

~操作方法

操作方法もとても簡単。
アプリを開くと、フォルダと音楽ファイルのリストが現れるので、そこからフォルダやファイルをクリックするだけです。
フォルダを開くと、そのフォルダの中に進むことができ、ファイルをクリックするとそのファイルを演奏することができます。
アーティストやジャンル別に分類されることはありませんが、自分で色々と分類することができるので、このやり方もありだと思います。

media-1808-02.png

また、イコライザも標準搭載しており、こだわり派の人にも納得です。


media1808-03.png

~最後に

このように、無料ながらもとても使いやすい『音楽フォルダプレイヤー』、いかがでしょうか?
手軽に扱いたい人、自分なりの分類をしたい人には、とてもお勧めのプレイヤーだと思いますよ。

なお、この音楽フォルダプレイヤーは、ZorillaSoftの作品です。



※次の更新は9月3日、特集『実録・職業プログラマの一日』の予定です。お楽しみに!
posted by 裏編 at 09:12| PCメディア情報 | 更新情報をチェックする

2018年08月23日

フリーゲームレビュー:たまには息抜きにこんなゲームはいかが? 『野球ペンデュラム』

free1808-00.JPG
※このゲーム、および使われている素材の著作権は、作者のgobori 氏にあります。レビュー中の画像や、ゲーム中の素材の二次使用を禁じます。

やってまいりました。古今東西のフリーゲームをレビューするこのコーナー。
今回紹介するゲームは、gobori 氏が作られた『野球ペンデュラム』です。

このゲームは、どちらかというと、クソゲーではなく、バカゲーと呼ばれる部類に入るだろうと思われます。
バカゲーは、クソゲーと似たようなものですが、『ゲームシステムや演出、あるいはバグなどでプレイヤーの「もう笑うしかない」という感情を買ってしまうような「バカらしいコンピュータゲーム」の俗称である』とのことで(Wikipediaより)、このゲームはまさにそれにぴったりではないかと思います。
とはいえ、否定的な意味ではなく、その骨董無形なシステムや、力の抜けたキャラクターがとても面白く、いい意味でのバカゲーであると感じました。

それではかるーく、このゲームのバカゲーっぷりを説明していきましょう。

~どんなゲーム?

このゲームがどんなゲームか、というのは、下のスクリーンショットを見れば、すぐにわかるかと思います。

free1808-01.JPG

照準、ライフゲージ、ボール、突き刺さってる矢、これでわかるでしょう? え、わからない? 笑
つまり、これは『飛んでくる矢をかわしながら、敵にボールをぶつけて倒していく』というゲームなのです。
ボールは、照準の位置に発射され、落ちたボールは拾いなおして、また投げることもできます。
操作は、W、A、Dで移動、マウス移動で照準の移動、クリックでボール発射です。FPSみたいな感じですね。
FPSは、どれもシリアスとかリアルとかいった感じのゲームが多いようなので、たまにはこんなものを楽しむのもよいのではないかと。

~どこがバカゲー?

では、いよいよこのゲームのバカゲーっぷりについて説明していきましょう。
それはやはり、キャラクターにあると思います。タイトル画面の主人公のかっこいい感じに比べ、本編に出てくる敵キャラはいずれも、バカっぽ……もとい、てぬ……もといっ、ほどよく力の抜けた感じのものばかり。
見てて、笑ってしまうこと間違いなしです。

free1808-02.JPG

free1808-03.JPG
▲ 見よ! このほどよく力の抜けた敵キャラをっ!

そして、マイキャラの動きもまたいい意味でバカらしい、というか面白いものです。

free1808-04.JPG
▲ かつて、旧ベーマガに投稿されていた四コマにも、こんなものがありましたよね。
 大きく背中をのけぞらせて、アーケードゲームをする、っていうのが

あと、起動すると表示される注意書きにも、なんか面白いものを感じました。
何も言わずごらんあれ 笑

free1808-05.JPG
▲ ストレッチしないと、痛めてしまうかもしれませんもんね(^^

~感想

プレイしてみて、なかなか面白いものでした。先ほど話した、敵キャラや、マイキャラの動きの面白さはもちろんなのですが、ゲーム自体も、ある程度ダメージを与えると、テレポートしたりと攻撃パターンが変わったりと、なかなか練りこまれています。
ゲームを一杯やりこんで疲れてきたら、こんなゲームで軽く楽しむのも、またいいものだと思いますよ。



※次の更新は、8月27日。『MP4 Creatorを使ってみました!』の予定です。お楽しみに!
posted by 裏編 at 08:23| フリーゲーム情報 | 更新情報をチェックする

2018年08月20日

VB.NETでDirectX~第3回・DrawGraphのバリエーションについて学ぼう!

博士:うむ、わしが博士である。

助手:助手です。よろしくお願いします。それで博士。今月は何をするんでしょうか?

博士:うむ。今月は、先月教えたDrawGraph関数のバリエーションについて説明するぞ! しっかりとついてくるがよい!

助手:おぉ! 博士がやる気いっぱいだ! よろしくお願いします!

[DrawTurnGraph]

博士:さて、今回は、前回とは違う画像を使って学んでいくとするぞ。下の画像をダウンロードして、プロジェクトのDebugフォルダの中に入れておくのだ。

rocket.bmp

助手:はい、できましたよ。

博士:では始めていくとするぞい。

----------
hChara = LoadGraph("chara.bmp")
----------

博士:この部分を……

----------
hChara = LoadGraph("rocket.bmp")
----------

博士:こう書き換え……さらに……

----------
DrawGraph(50, 50, hChara, 1)
----------

博士:この部分を……

----------
DrawGraph(50, 150, hChara, 1)
DrawTurnGraph(50, 250, hChara, 1)
----------

博士:このように書きなおしてみるのじゃ。

助手:かたかた……できました、博士。

博士:では、実行してみよう。どうじゃ?

助手:はい……あっ!

vbdx1808-01.JPG

助手:下のロケットが、ちょうど上のロケットとは逆向きに書かれています!

博士:うむ、この通り、DrawTurnGraphは、画像を左右逆向きに書く関数なのじゃ。例えば、キャラクターを左右両方の向きに書く必要があるときに便利じゃぞ。

[DrawExtendGraph]

博士:さて、次はDrawExtendGraphじゃ。先ほど追加した文の二行目。

----------
DrawTurnGraph(50, 250, hChara, 1)
----------

博士:ここを……

----------
DrawExtendGraph(50, 250, 90, 290, hChara, 1)
----------

博士:このように書きなおすのじゃ。

助手:はい、できました。実行してみますね……おぉっ!!

vbdx1808-02.JPG

助手:下のロケットが小さくなっています!

博士:これだけではないぞ。今度は同じところを……

----------
DrawExtendGraph(170, 150, 370, 350, hChara, 1)
----------

博士:このように書きなおしてみるのじゃ。どうかな?

vbdx1808-03.JPG

助手:今度は、右のほうに、大きいロケットが表示されました!

博士:このように、DrawExtendGraphは、画像を拡大・縮小して表示する関数なのじゃ。元となる画像を、(1番目の引数,2番目の引数)と(3番目の引数,4番目の引数)を対角線とする四角形の領域に拡大・縮小して表示するのじゃ。

助手:なるほど。

博士:ちょっとややこしいが、使いこなせるようになると、例えば大きさの変わるキャラクターを出す時に便利じゃぞ。

助手:そうですね。

[DrawRotaGraph]

博士:では最後は、画像を回転させてみるとしよう。さっきと同じように、

----------
DrawExtendGraph(170, 150, 370, 350, hChara, 1)
----------

博士:と書いたところを……

----------
DrawRotaGraph(250, 200, 1, 3.14 / 4, hChara, 1, 0)
----------

博士:このように書き替えて、実行してみるのじゃ。

vbdx1808-04.JPG

助手:今度は、右のほうに、ロケットが少し傾いて表示されてますよ!

博士:うむ。このDrawRotaGraphは、画像を回転させて表示する関数なのじゃ。この関数は引数の内容が、これまでのものとは違っておるので、一つずつ説明していくとするぞ。

助手:はい。

博士:まず最初の二つは描く位置じゃが、DrawGraph、DrawTurnGraph、DrawExtendGraphの三つが、ここが画像の『左上に』なるように表示するのに対して、DrawRotaGraphでは、ここで指定した位置が、画像の『中心に』なるように表示するのじゃ。間違えないように気を付けるのじゃぞ。

助手:はい、わかりました。

博士:そして次の数字は、画像の拡大・縮小の倍率じゃ。この数字を1より小さくすれば縮小し、1より大きくすれば拡大するのだ。例えば、0.4と指定すれば、元の画像の40%の大きさで書くわけじゃな。

助手:はい。そして四つ目は?

博士:これは、画像を回転させる角度じゃ。これはラジアンという特別な角度で指定する。

助手:ラジアン、ですか……少し難しいですね。

博士:心配はいらん。通常の角度とラジアンとは、次の式で変換できるからな。

----------
角度→ラジアン:角度×円周率÷180
ラジアン→角度:ラジアン×180÷円周率
----------

博士:これを基に、計算する関数を作ればなおよしじゃな。

助手:わかりました。そしてその次は、画像のハンドルですね。

博士:その通り。そして、6つ目は毎度おなじみの、背景を透過するかどうかを指定するものじゃ。そして7つ目は、画像を左右反転して表示するかどうか。1を指定すると、左右反転して表示するのじゃ。

助手:なるほど、わかりました。

博士:この他にも、バリエーションはいくつかあるが、ここにある3つのバリエーションと、基本であるDrawGraphがあれば、ゲームを作るには問題……問題……問題ない……ない……

助手:?

博士:うっ!!(ばた

助手:は、博士?

おーちゃん:どうやら、頑張りすぎて燃え尽きたようじゃのう。少し眠ればすぐに目を覚ますじゃろう。

助手:は、はぁ……。

おーちゃん:さて、次回はキーボードやジョイパッドを使って、キャラクターを移動させる方法について説明するぞ。また次回じゃ。

博士:また来月じゃ~(寝言

助手:………。



※次の更新は、8月23日、『たまには息抜きにこんなゲームはいかが?『野球ペンデュラム』』の予定です。お楽しみに!
posted by 裏編 at 15:17| VB.NETでDirectX | 更新情報をチェックする

2018年08月16日

師匠TのチャレンジARSゲーム!~第九回:『サラダの国のトマト姫』(その3) 【1984年・ハドソン】

うむ、師匠Tじゃ! 今回も、かの名作『サラダの国のトマト姫』、通称サラトマを攻略していくぞ。
苦難の末、巨大ロボ・ダイコーンを手に入れたキュウリ戦士。じゃが、冒険はこの後、さらに激しく厳しくなっていくぞ!
このわしの腕もなるわい! では、いざ、いざ!

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

~本編(続き)

ARS1808-00.JPG
ダイコーンを手に入れたことだし、さぁ、どんどん進もう……と言いたくなるが、ちょっと待て。急がば回れ、一歩進んで二歩下がる、という言葉もあるぞ。

ARS1808-01.JPG
進んでいくと、何やら怪しいものが、こ、これはもしや……

ARS1808-02.JPG
出た! カボチャ大王側のロボ、ウォーメロンじゃ! こいつの倒し方は、ここに来るまでの間に聞いておるはず。後は、そのための武器じゃが……。

ARS1808-03.JPG
ウォーメロンを倒したものの、ダイコーンも、さっきの戦いのせいか、ガタが来てしもうた。ここからは、自分の足が歩くしかないようじゃな。迷わないよう注意していくべし。

ARS1808-04.JPG
進むと、今度は怪物・やまたのバナナが出現じゃ! 戦いを挑む前にちょっと待て。武器の準備はしておるか?

ARS1808-05.JPG
さてさて。武器の準備をして挑んだものの、こやつはなかなか手ごわい。『斬っても』倒せないのじゃ。斬ってダメなら……?

ARS1808-06.JPG
やった、倒したぞ!! ……むむ、こいつは何かに使えそうじゃな。

ARS1808-07.JPG
そしてさらに進んで……ついに到達したぞ! ここが、あのにっくきカボチャ大王の城じゃ!! いよいよキュウリ戦士の冒険も佳境!
さて、この先は……

次回に続くのじゃっ!!



※次の更新は、8月20日。『VB.NETでDirectXプログラミング』の予定です。お楽しみに!
posted by 裏編 at 07:48| チャレンジARS | 更新情報をチェックする

2018年08月14日

師匠のJava道場~第12回・師匠、例外とはなんぞや!?

師匠T:ジャッ、ヴァッ!!

弟子D:ドゥッ! ジョウッ!!

師匠T:うむ、いい汗をかいたのう、弟子よ。ということで、師匠Tである。

弟子D:弟子Dだぜっ! 今回は俺がしゅや……ぐはぁっ(師匠の飛び蹴り炸裂

師匠T:おぬしが主役など、2365年早いと何度も言っておるであろうが。さて、今回は、例外について説明する。準備はよいか?

弟子D:は、はい、師匠……

▽まず、例外とは?▽

弟子D:いきなりですが師匠。例外とはなんぞや。

師匠T:うむ。例外とは、いわゆるエラーのようなものじゃ。

弟子D:エラーのようなもの……ですか。

師匠T:うむ。Java……に限らず、他の言語でもそうだが、わしらが良く使う広義のエラーの概念は、昔の言語とは大きく違っておるのだ。

弟子D:それは一体?

師匠T:Javaでは、いわゆるエラーは二つに分かれておる。それが、例外とエラーじゃ。

弟子D:例外とエラー……ですか。それは、どう違うのですか?

師匠T:エラーとは、Javaでは手に負えない異常な出来事をさす。対して、例外とはJavaで扱える異常なことをさすのじゃ。

弟子D:ふむふむ。

師匠T:そして、この例外も二つにわかれておる。ランタイム系例外と、非ランタイム系例外じゃ。

弟子D:ランタイム系と、非ランタイム系……。ランタイムと、そうでないもの、という感じですか?

師匠T:そんな感じじゃな。具体的に言うと、ランタイム系は、コンパイルによってチェックされないもの、非ランタイム系は逆に、コンパイルによってチェックされる例外なのじゃ。

弟子D:なるほど。ちょっとややこしいですね。

師匠T:そんなときには、『いわゆる異常には、エラーと例外の二つがある』と覚えておけばよい。これでも、さほど問題はないからの。

弟子D:はい!

▽エラーの扱い方は……ない!▽

師匠T:エラーが出たときの対処法だが……

弟子D:ごくり。

師匠T:そんなものは、ない!!

弟子D:えええええええ!?

師匠T:エラーを、後述するtry~catchでとらえることはできる。じゃが、とらえたところでどうしようもないから、エラーが起きたら仕方ないと諦めるのが定例となっておる。

弟子D:そ、そうなのですか……。

▽例外を捕らえるtry~catchじゃ!▽

師匠T:そして例外の対処法じゃが……。

弟子D:まさか、そんなものはない、とかいうつもりじゃ……。

師匠T:安心するがよい。Javaには例外の発生が、プログラムの強制終了につながらないようにするための仕組みがある。それが、try~catch構文じゃ。

弟子D:try~catchですか。

師匠T:うむ。これは、発生した例外を捕らえ、そのときに処理を分岐させる構文なのじゃ。このようにして使う。

----------
try {
例外が発生するかもしれない処理
} catch (〇〇〇 e) {
〇〇〇例外が発生した時の処理
}
----------

師匠T:この構文では、まずtryとcatchの間の処理を行う。そして、〇〇〇に指定された例外が発生したときに、catchの下の処理を行うようになっておるのじゃ。

弟子D:なるほど。あの師匠、一つ質問が。

師匠T:なんじゃ?

弟子D:複数の種類の例外を捕らえたいときはどうするのですか?

師匠T:そのときには、catchの下に、さらに続けてcatchを書くのじゃ。このようにの。

----------
try {
〇〇〇

} catch (aaaException e) {
△△△

} catch (bbbException e) {
□□□

}
----------

弟子D:aaaExceptionが発生したら△△△の処理が、bbbExceptionが発生したら□□□の処理が実行されるわけですね?

師匠T:うむ。また、finallyというのもある。これは、例外が発生した、しないに関わらず、必ずその処理が終わったあと必ず実行する処理を書くものじゃ。このように使う。

----------
try {
〇〇〇

} catch (aaaException e) {
△△△

} catch (bbbException e) {
□□□

} finally {
×××
}
----------

師匠T:この例だと、例外が起こらなかった場合は、〇〇〇の処理を実行した後に×××の処理が実行され、例えばbbbExceptionが発生した後は、□□□の処理を実行した後に×××の処理が実行されるのじゃ。

弟子D:なるほど。

師匠T:なお、一度例外が発生して、catchの下に処理が移った場合、元のtryの下の処理に戻す方法はないので注意するのだ。

弟子D:はい!

▽例外のクラス構造じゃ!▽

師匠T:さて、ではここで例外のクラス構造について説明しておくとしようぞ。さて、例外のクラスの大本はExceptionだが、これのスーパークラスはThrowableクラスという。さらにこのThrowableの大本、スーパークラスは、わかるかな?

弟子D:むむむ……。

師匠T:第9回の講義を思い返すがよい。Throwableのスーパークラスは、全てのクラスの大本じゃ。それは何であった?

弟子D:あ! Objectクラスですね!

師匠T:うむ、そのとおりじゃ。さて、Throwableから派生したサブクラスとして、例外を表すExceptionクラスと、Errorクラスの二つがある。

弟子D:ふむふむ。

師匠T:そして、このExceptionクラスのサブクラスに、ランタイム系例外を表すRuntimeExceptionクラスがあるのじゃ。

弟子D:なるほど。あれ? 師匠、非ランタイム系例外は? ははーん、もうボケ……いてっ。

師匠T:たわけが。わしはまだ若い。非ランタイム系例外もちゃんと、Exceptionクラスのサブクラスとして存在しておる。

弟子D:な、なるほど……。

師匠T:このクラス構造は、この先のことについて重要となる。頭の片隅にでも入れておくがよい。

▽eとはなんぞや?▽

師匠T:さて、次はこの部分に注目じゃ。

----------
catch (aaaException e)
----------

師匠T:このeは、aaaExceptionで指定したExceptionクラスのインスタンスじゃ。いわば、発生した例外についての情報が入ったインスタンスなのじゃ。

弟子D:ふむふむ。

師匠T:なお、別に名前はeである必要はない。e1でもabcでもOKじゃ。さて、このインスタンスにはprintStackTraceメソッドが備え付けられておる。これを実行することで、例外が発生したメソッドに至るまでの、実行したメソッドの順番を表示することが可能じゃ。デバッグに役立つであろう。

弟子D:そうですね。覚えておくとします。

師匠T:うむ。

▽スーパークラス側の例外を補足じゃ!▽

師匠T:さて。

----------
catch (aaaException e)
----------

師匠T:この部分の、aaaExceptionのところには、普通はそれぞれの例外の型を書くものじゃが、その例外のスーパークラスを書くことも可能じゃ。例えば、ランタイム系例外を補足するときに、その例外の型ではなく、RuntimeExceptionクラスを指定する、という感じじゃな。

弟子D:ふむふむ。そうすることで、どんなメソッド……じゃなかったメリットがあるのでしょうか?

師匠T:うむ。これを利用することで、複数の例外を一つのcatchで捕らえ、処理することが可能じゃ。

弟子D:おぉっ!!

師匠T:ただし、その例外がどんな例外なのかがわかりにくくなるので、そこは気を付ける必要があるぞ。

弟子D:使い分けが大事、ということですね。わかりました!

▽throwsじゃ!▽

師匠T:さて、クラスを宣言する部分じゃが、これにはthrowsという言葉をつけることができる。

弟子D:それはどのようなもので?

師匠T:うむ。これは、『このメソッドで、これこれの例外が発生する可能性がある』が、『このメソッドでは、その例外の処理はしない』というのを表すものじゃ。これを利用する場合は、その例外は、別のメソッド(たいていは発生したメソッドの呼び出し元)で処理することになる。このような感じじゃな。

----------
void 〇〇〇() {
try {
△△△();
} catch (xxxException e) {
□□□

}
}

void △△△() throws xxxException {
×××

}
----------

弟子D:なるほど。

▽例外を投げるのじゃ!▽

師匠T:さて。Javaでは、発生した例外を捕らえ、処理するだけではない。オリジナルの例外を作り、発生させることができるのじゃ。なお、これを『例外を投げる』ともいう。

弟子D:なるほど。そのプログラム独自の例外を発生するのに使えそうですね。どのようにするのですか?

師匠T:うむ。それには、throwを使うのじゃ。このように使う。

----------
throw new [例外のクラス]

例:throw new MalformedURLException
----------

師匠T:例のように、既存の例外を投げることもできるぞ。他方、オリジナルの例外を作る場合は……
・ランタイム系例外を投げる→RuntimeExceptionクラスを継承するクラスを作り、投げる
・非ランタイム系例外を投げる→Exceptionクラス、またはRuntimeException以外の、Exceptionのサブクラスを継承するクラスを作り、それを投げる
のじゃ。例としては、このような感じじゃ。

----------
public class SisyoException extends RuntimeException {

}

public class Sisyo1 {
private static void abc() {
throw new SisyoException();
}
}
----------

弟子D:なるほど!

師匠T:ランタイム系例外を投げる場合、特段、コードを記述しなくても処理することができるが、プログラムが強制終了するリスクを負う。非ランタイム系を投げた場合は、そのようなリスクはないが、処理するためのコードを書く必要がある。
throwsで、そこでは処理しないことを明示するか、try~catchを書くか、ということじゃな。どっちを利用したほうがいいか、ケースバイケースなのでよく考えることが必要じゃ。

弟子D:はい、考えません、師匠!

師匠T:……(無言で弟子に飛び蹴り)さて、次回はいよいよ最終回。インターフェイスについて説明する。予習、復習はしっかりの。



※次の更新は、8月16日、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!
posted by 裏編 at 09:26| 師匠のJava道場 | 更新情報をチェックする