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ゲーム!』の予定です。お楽しみに!

2018年11月08日

パソレクのなく頃に、解・1話

文 裏編/絵 伊地山基之 氏
※この記事は、裏編が習ったりしていた内容をもとに記述されています。
 現在の内容とは若干違っている部分があることをご了承くださいませ(平伏

paso1811_p1.jpg

paso1811_p2.jpg

paso1811_p3.jpg

※次の更新は、11月12日。新連載・『ActiveBasicとDXライブラリでゲームプログラミング!』の予定です。お楽しみに!
posted by 裏編 at 14:17| Comment(0) | パソレクのなく頃に・解 | このブログの読者になる | 更新情報をチェックする

2018年11月04日

色々な言語でDXライブラリ!

C++やC#、VBで簡単にゲームが作れるDXライブラリ。
ですが、DXライブラリが使えるのは、上記の三言語だけではありません。

そこで今回は、DXライブラリが使える言語と、その使い方について説明していこうと思います。

[HSPとDXライブラリ]
フリープログラミング言語の雄・HSPことHot Soup Processer。
そのHSPでも、DXライブラリを使うことができます。
HSPでDXライブラリを使うには、こちらのスクリプト『DXLib For HSP』を使います。
http://tkooler.moe.hm/hsp/img/DxLib.as

これをインクルードすれば、HSPでDXライブラリが使えるようになります。
インクルード方法は、コードの最初に、次の一行を付け加えればOKです。

#include "DxLib.as"

なお、HSPでは言語使用上、戻り値はシステム変数statに入りますので、ご注意を。
目的の関数を実行したあと、statの内容を別の変数に入れて使うか、直接使うことになります。

例:
ProcessMessage
if stat != 0 : break;

あと、一部の関数には、引数は( )で囲まないものがありますので、そこも注意してください。

×GetJoypadInputState(DX_INPUT_KEY_PAD1)
〇GetJoypadInputState DX_INPUT_KEY_PAD1

なお、HSPでDXライブラリを使うには、Visual C#用パッケージの中にある、DXlib.DLLが必要です。
こちらからダウンロードしてください。
http://dxlib.o.oo7.jp/dxdload.html

[ActiveBasicとDXライブラリ]
フリーの本格BASIC言語、ActiveBasicでDXライブラリを使うには、kiyo氏が作ったDxLibDllを使います。
解凍した中にある、Dxlib.sbpとDxLibDll.dllを、ソースファイルと同じフォルダに入れ、ソースファイルの頭に、

#include "Dxlib.sbp"

と書いてインクルードすれば、準備はOKです。

基本的な使い方は、VisualBasicのときと同じですが(2018年5月3日の記事を参照してください)、関数や定数の頭にdxやDXとプリフィックスがつくのは注意してください。

DrawGraph -> dxDrawGraph
PAD_INPUT_DOWN -> DX_PAD_INPUT_DOWN

あと、dxDrawString関数で数字を表示する場合、なぜか小数点まで表示されてしまうことがあるので、そのときはdxDrawFormatString関数を使って表示させるといいでしょう。

[なでしことDXライブラリ]
日本語プログラミング言語『なでしこ』。その『なでしこ』でもDXライブラリは使うことができます。
その場合は、こちらの『DXライブラリ用ライブラリ』を使います。
http://weyk.la.coocan.jp/weyk/nadesiko/dxlib.html

ただ、こちらのライブラリは、抜けている関数がいくつかある(例えば、2Dキャラクタを表示するためのDrawGraph関数がありません)ため、そこは自分で補完する必要があります。

[その他]
携帯ゲーム機『PlayStation Portable(PSP)』でも、DXライブラリを使ったプログラミングをすることができます。
そのためには、PSP版DXライブラリである『DXライブラリPortable』の他に、PSPの開発をするためのライブラリが必要となります。
導入する方法や、プログラミングなどについては、ここでは割愛しますが、『PSP DXライブラリ』でぐぐるといつか解説サイトが見つかりますので、そこを参考にするといいでしょう。

[最後に]
さて、ここまで説明してきましたが、いかがでしたでしょうか?
DXライブラリは、ゲーム作りをさらに広げてくれる嬉しいライブラリです。
自分にあったプログラミング言語で、ゲーム作りを楽しんじゃいましょう!



※次の更新は、11月8日。『パソレクのなく頃に・解』の予定です。お楽しみに!

posted by 裏編 at 09:25| Comment(0) | 特集 | このブログの読者になる | 更新情報をチェックする

2018年10月22日

NIKO NICO CINEMA!~かわいいかわいい♪ 動物特集

さてさて、今月もやってきました『NIKONIKO CINEMA!』のコーナー。
今回は、動物特集でお送りしていこうと思います。
この動画を見て、忙しさに疲れた心をいやしていきましょうー。
でははじまりはじまりー。

~3兄弟ぬこ【成長】


三匹の兄弟の子猫たちがじゃれあう様子です。投稿者さんは動物病院の看護婦さんだそうで。
三匹のじゃれあう様がとてもかわいいですね。これで、まずは癒されポイント1ってところでしょうか(笑

~ぺんぎん行進


どこかの動物園で、ペンギンさんの集団が、係員さん(?)と一緒てこてこ歩く、の図です。
時折、追いつこうとしてるのか、ちょこちょこちょこと早足になるところが、なんともかわいいです。
癒されポイント+1ですね(笑 現在2ポイント)

~こぬこVS夫の指


子猫ちゃんが、指とじゃれあってる動画ですね。本当にじゃれあってるのが、とてもかわいいですよね。本当に、子猫とか子犬とかには癒されます。うんうん。
……説明文は読まないほうが幸せかもしれませぬ。

~最後に
今月のNIKONIKO CINEMAはどうでしたでしょうか?
これで、疲れた心が癒されてくれたら、とても嬉しいです。

それでは、また来月、お会いしまょう。フガクク(某国民的主婦的)



※次の更新は、11月5日。特集『色々な言語でDXライブラリ!』の予定です。お楽しみに!
posted by 裏編 at 18:42| Comment(0) | PCメディア情報 | このブログの読者になる | 更新情報をチェックする

2018年10月18日

フリーゲームレビュー:自爆して点を稼げ!PSPにもなったよ。EveryExtend

今回紹介する『Every Extend』は、裏編の大好きな作品の一つです。
このゲームの特徴を一言で言い表すと、『シンプル、やりこみ』。どんなゲームかを単純に言うと、『はじけろ』。
ただこれだけです。
では、このゲームについて説明していきましょう。

~シンプルに弾けろっ
まず自機は爆弾です。まごうことなき爆弾です。爆弾ですから、爆発しますし、爆発すると爆風も出ます。
さて、ポイントはここから。四方から敵キャラがやってくるのですが、この敵をこの爆風で倒していくわけです。
もちろん、この敵も倒されると爆風を出すので、うまくいけば、多くの敵を一度の爆発で倒すことができます。
とはいえ、スコアが上がると自機がエクステンドされ、さらにそのエクステンドもエクステンドしやすいようになっているのですが、やはり数に限りがあるので、一度の爆発で多くの敵を倒せるようにうまく爆破位置を考えて爆破する必要がありますし、敵にあたっても爆発してしまいますので、うまく敵をよけながら適切に爆破させる必要があるのです。
さて、ゲームを進めていくと、やがて中ボス、そして本ボスが出てきます。中ボスはそれほど強くありませんが(それでも雑魚に比べるとやはり手ごわい)、本ボスは3ウェイショットで攻撃してきたり、バリアを張ってきたりと、一癖もふた癖もある手ごわい奴です。こいつを倒せば、ゲームクリアとなりますよ。

どうでしょう。 このようなシンプルながらも、いやシンプルながらも面白い。それが、この『Every Extend』なのです。

~やりこんで弾けろっ
さて、この『Every Extend』はただこれだけのゲームではなく、やりこみを助ける要素と、二つのモードがあります。まずは要素から。
このゲームでは、倒すとアイテムを出す敵がいます。青い敵が落とす青いキューブを取るとボーナス得点。さらに続けてたくさんとると、どんどん得られるボーナス点も増えていきます。(ただし、自爆したり敵や弾に触れてやられるとリセット)
赤いキューブを取ると、敵の出現速度と、敵の移動スピードが上がります。
つまり、高得点を稼ぐには、青いキューブを立て続けにとってボーナスを稼ぎ、さらに赤キューブで敵をたくさん出現させ、そいつらを一度に爆破するといいわけですね。
そして、二つのゲームモード。
Lightは初心者向けのイージーモード。そしてHeavyは、やりこんだプレイヤー向けのハードモード。敵が撃ち返して来たり、攻撃が激しかったりととても難しいモード(だそう)です。LightをやりこんだらHeavyに挑戦するのも面白いかもしれませんね。
Heavyを楽にクリアできるようになったら、このゲームを極めたといっても過言ではない……かもしれません。

~最後に
シンプルながらも、スコアアタックに思わず夢中になれる『Every Extend』。
「どんなゲームでもクリアしてみせるぜ!」というゲーム自慢のプレイヤーの方は、ぜひプレイしてみてはどうでしょうか? 面白さはB-Magaの保証済みですよ^^

なお、このゲームは( ゜ワ゜)ノ 氏の作品で、こちらからダウンロードすることができますよ。

そうそう、このゲームはPSP用に移植もされたので、そちらもプレイしてみるのもいいかもしれません、と最後に言っておきます(笑



※次の更新は、10月22日、『NIKONIKO-CINEMA』の予定です。お楽しみに!
posted by 裏編 at 10:22| Comment(0) | フリーゲーム情報 | このブログの読者になる | 更新情報をチェックする