スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | page top

絵を描く独り言。



今日ずっと『龍』の絵を描いていまして、描いているウチに『龍ってどんなんだっけ?』と訳がわからなくなってきました。
洋モノ(?)の恐竜っぽいドラゴンじゃなくて東洋の龍。参考になる龍といえばドラゴンボールの神龍(シェンロン)がありますが、それを見てしまうとおそらく模写したのがバレバレになるので空想だけで描いていると全然龍にならないのでちょっとヘコむ。
ネットに転がっている龍を観察。で改めて思うこと。
龍って年寄りですね。ヒゲが結構ある。耳がある。目ン玉があるので結構キュート。体はヘビみたいなもの。
描きたいのは年寄りなんだけどちょっと迫力のある龍なので結局イメージ任せにする。

ここ数年、時間の関係でまともに絵を描いていないので(このブログのトップにある絵も久しぶりに描いてそれ以来になる・・これはテキトーですが)、慣れるところからやり直しです。でも一旦描き始めるとやっぱり夢中になってしまいますね。大人になるとこの描いている時間が素人だと無駄になりがちですが、あくまでも趣味として考えることが出来るなら・・・と思うのですがやっぱり時間がないですね(よく分からん)。
今週中には描き終わらせる予定です。
スポンサーサイト
趣味の世界 | トラックバック(0) | コメント(2) | page top

ゲーム的なこと(3)。

ゲーム的なこと(2)にて、私がゲームを作る場合に使っているツールを紹介しましたが、そのなかで地図を作成するのにMapEditer-Quoyleを使うと言ったのですが、本日はそのマップの読み込み方を紹介しようと思います。とは言っても、MapEditer-Quoyleについているヘルプ(help.htm)の『5.出力データについて』で説明されているフォーマットに基づいて処理をするだけです。プログラムに使う言語はC言語です。C言語なだけにポインタだのが出てきますが、正直手探り状態で自分が作ったものなので(4月くらいかな)、分かり易くなっていると思います(難しいことや効率を知らないので)。重要なキーワードとしては『動的配列しかも2次元』です。

まず、MapEditer-Quoyleで地図(マップ)を作成してそれを保存しますと、"xxxxxx.qmp"という拡張子でファイルが作成されますが、このファイルを同梱されていたConverter.exeで"xxxxxx.map"というデータに変換します。そうすると、ヘルプ『5.出力データについて』のMAPファイルの項のデータフォーマットで保存されます。ではこれを使用します。

プログラムはDXライブラリの関数を使用していますが、C言語が分かるのであれば、fopen,fgets,fcloseに置き換えられることが分かると思います。
以下の例は地図レイヤー2枚を使って作成した場合です。3枚、4枚と増やせばそれだけ変数と処理を増やせばOKです。

#include "DxLib.h"
#include <windows.h>
//----------------------------------------
//変数の宣言
//----------------------------------------

int MAP_W; //ゲーム画面の横幅
int MAP_H; //ゲーム画面の縦幅
int **MAP_L1; //ワールドマップのレイヤー1データ(動的2次元配列)
int **MAP_L2; //ワールドマップのレイヤー2データ(動的2次元配列)
//----------------------------------------
//マップデータの読み込み処理
//引数は文字列を渡します 例"data/xxxxxx.map"とか。
//----------------------------------------

void MapDataLoad(char *loadMapName){ //←ヘッダファイルに宣言しましょう。
int hdl_file;
int i;
int intBig, intLittle;
int intValue;
int idx_Y, idx_X;

// ファイルを開く
hdl_file = FileRead_open(loadMapName);
//マップの縦横サイズを取得(ヘルプのデータフォーマットと見比べてください)
//(ファイルの1,2バイト目=X, 3,4バイト目=Y)
intLittle = FileRead_getc(hdl_file); //0byte目
intBig = FileRead_getc(hdl_file); //1byte目
MAP_W = intLittle|(intBig<<8); //0,1byteでマップの横サイズを取得
intLittle = FileRead_getc(hdl_file); //2byte目
intBig = FileRead_getc(hdl_file); //3byte目
MAP_H = intLittle|(intBig<<8); //2,3byteでマップの縦サイズを取得

//※この後にレイヤ数、使っているチップ上限等は地図作成時に自分で
// 分かっているので取得を省きます。

//マップデータ格納配列を動的に作成(2レイヤー分)
//ここでは領域を確保しただけです。
MAP_L1 = (int **)malloc(sizeof(int *) * MAP_H);
MAP_L2 = (int **)malloc(sizeof(int *) * MAP_H);
for(i = 0; i < MAP_H; i++){
MAP_L1[i] = (int *)malloc(sizeof(int) * MAP_W);
MAP_L2[i] = (int *)malloc(sizeof(int) * MAP_W);
}

//16byte目までファイルポインタを移動する(ヘッダ読み飛ばし)
//16byte目からマップデータなので・・。
FileRead_seek( hdl_file, 16, SEEK_SET );

//レイヤー1のデータ読み込み(背景とか?)
for(idx_Y=0; idx_Y < MAP_H; idx_Y++){
for(idx_X=0; idx_X < MAP_W; idx_X++){
intLittle = FileRead_getc(hdl_file);
intBig = FileRead_getc(hdl_file);
intValue = intLittle|(intBig<<8);
MAP_L1[idx_Y][idx_X] = intValue;
}
}
//続けて読み続けることにより次のレイヤーデータとなる
//レイヤー2のデータ読み込み(障害物とか?)
for(idx_Y=0; idx_Y < MAP_H; idx_Y++){
for(idx_X=0; idx_X < MAP_W; idx_X++){
intLittle = FileRead_getc(hdl_file);
intBig = FileRead_getc(hdl_file);
intValue = intLittle|(intBig<<8);
MAP_L2[idx_Y][idx_X] = intValue;
}
}
// ファイルを閉じる
FileRead_close(hdl_file);
}


上記処理を行うことにより、マップのデータを配列に読み込むことが出来ます。しかも作成するマップサイズも処理の中で取得しているのでサイズの違うマップを読み込むことも可能です。その場合は、配列を一旦開放してこの関数をコールするようにしましょう。
intLittleとintBigの変数を使っていることから分かると思いますが、この処理は2バイトで1チップを表している想定で処理しています。1バイトで表せるのは256まででイマドキ256チップで満足するゲームプログラマーはいないと思いますので、2バイトで1チップを採用しています。2バイトですと256*256で65536チップを表現できます。もっともMapEditer-Quoyleの仕様をここで言ってるだけに過ぎませんが・・。

細かく説明するとキリがありませんが、以下の式について。
intValue = intLittle|(intBig<<8);

intLittleとintBigというのはいわゆるリトルエンディアンとビッグエンディアンを想定しています。上はintBigを8ビットシフトしたあとでintLittleとor演算を行っています。
例えば、上の式の手前のFileRead_getcでそれぞれintLittle=59, intBig=01が取得出来たとすると、これは16進ですので、以下のようになります。

(16進数)59->(2進数)01011001
(16進数)01->(2進数)00000001

これをまず01を左へ8ビットズラします。そうすると00000001は10000000となります。そして59の01011001とor演算を行います。or演算はどちらかが1なら1となり両方0なら0となります。ここでやろうとしていることはintLittleとintBigの順番を入れ替えるようなことをしているワケですね。つまり59、01の順番で取れたものを0159にしたいワケです。

001011001
100000000
----------
101011001
となります。これを10進数にすると345(がintValue)となります(なぜそうなるかはどこかの学習サイトを参考にしましょう)。16進数の0159も10進数では345となります。
ということで、2次元配列の[X][Y]には345番目のチップを表す345という数字をセットしているワケです。
次回はこれをタイル状に並べる処理について書くことにしましょう。
それではまた。
趣味の世界 | トラックバック(2) | コメント(0) | page top

ファミコン世代。

一年前の動画ですが、ファミコンゲームを知っている方には懐かしいのではないでしょうか。かなり丁寧に作られていて作成者に脱帽。


スパルタンX(8:27)

趣味の世界 | トラックバック(0) | コメント(0) | page top

ゲーム的なこと(2)。

昨日書いたWorldWideTelescopeが動作しないのはやはり自分のPCのビデオメモリが原因の様です。ソフトのせいにしようとしてスミマセン。

もう九州も梅雨入りしているかと思ったら昨日梅雨入り宣言のようです。かなり雨が降って庭が池状態です。

080611_225900.jpg
※見覚えのある敵キャラはほんの遊びゴコロです。私に著作権はありません。

さて、大半の方が興味がないであろうゲームのプログラミングですが、以前よりもちょっと進みまして、操作するキャラクターが一通りのアクション(剣を振るとか盾を構えるとか道具や魔法を使うとか)を行うようになって、敵がマップを徘徊するようになりました。ゲームパッドでも操作出来ます(DXライブラリのおかげですが・・)。
と、ゲームを作るなら「ツクールを使えば?」と思うでしょうし、「今更2Dですか?」みたいなツッコミもあるでしょうけど、実際はプログラミングの感覚を忘れないように(笑)というのが(おそらく)目的なので完成させることは特に考えていません。普通に仕事としてのプログラミングとゲームプログラミングは大して変わらないと思います。やっぱり効率の良い方法(どうすれば処理が速くなるか)を考えることは『こうすればいいんじゃないか?』と思う連続です。納得できなければ作り直すという繰り返しだと思います。
特にこれまでゲームを作ったこともないので手元に全然使えるプログラムがありません。全て一から作っています。

というワケでそんな手助けをしてくれる素材やツールは以下のようなもの。

プログラム作成
 ・・・VisualStudio2003 VisualC++(と言いながら中身はC言語です;)

マップ作成
 ・・・MapEditer-Quoyle 0.8(http://homepage2.nifty.com/a_izayoi/)
 (綴りはEditorだと思うけど・・直感的で使い始めたけどUndo機能が無いのが非常に痛い)
 レイヤーが使えるのでこれを利用するとマップ作成以外にもプログラムの手助けになります。

キャラ作成
 ・・・EDGE Ver.1.29a(http://www.tkb-soft.hmcbest.com/program/win/edge/index.htm)
 (256色で描く必要があるのと、ゲームのキャラクターを描くのに便利な機能が沢山あったので)
 他にもPhotoshopや減色ツール等も使用。

参考にしている素材の元
 ・・・たからじまウェブサイト(http://one.freespace.jp/myhome/index.html)
 (ここのマップチップをQuoyleで使えるように編集して利用しています・・今のところ・・)
 ※許可貰ってませんが勝手に紹介(してスミマセン)

と、これくらいです。ちなみに全て無料で使えます(C++はExpressEditionを使う)。
勿論主人公や敵の絵等は自分で描いてます・・というか描く作業とプログラミングを並行しているから進行具合が遅いワケです。誰か描いてくれるとありがたいんですけどね(笑)。
・・・また進捗があれば書くことにします。
趣味の世界 | トラックバック(0) | コメント(0) | page top

ゲーム的なこと(1)。

080523_230000.png
最近没頭グセというか何というか、この前ブログに書いたDXライブラリを使用してプログラミングしていてあっと言う間に一週間経ってしまった感じです。それが貼り付けてある画像なのですが、実質一週間程でここまでくらい出来たという感じです。
ここまでというのは、"これくらいしか出来ない"という意味です。まぁ久しぶりのC言語とDXライブラリのリファレンスを読みながらの作成なので遅いのですが・・。出来ているのは自分を中心としたマップ(背景)の移動くらいです。通常、画像のようなタイルを並べたようなマップはタイル間移動を行うのがセオリーなのですが、これを自由に歩けるようにしました。
タイル間移動は次のタイルに移動している場合は操作出来ないし、移動中はX,Y座標の片方が必ず0という決まりが出来ますのでドラクエのようなシステムはスグ出来ると思うのですが、自由にした途端プログラムは複雑になります(私だけでしょうか)。それは自分のいる位置がどのタイルのX,Y座標にいるのかをどう把握すればいいのかが困難になる為です。例えば二つのタイルに跨(またが)っている状態で海の方へ進んだ場合、片方は海で片方は陸の部分はどう処理すればいいのかという感じです(画像でいうとそのまま上に直進した場合)。しかも進む距離がタイル毎じゃないとすると、海に到達しているのかどうかをどうチェックすればいいのか分からなくなります。というか頭が混乱します(笑)。しかも、自分を中心にしているということは、自分は進んでいる訳ではなく、マップをズラしているということになりますね。つまり、上矢印(↑)キーを押すとマップは下にズレていくということです。歩けない位置に到達する場合、自分を動けなくする訳ではなく、マップをズラさないようにするということです。とは言っても四則演算でどうにかなるので一つ一つ考えていけば出来るのですが、プログラミングが出来る人程、この処理を作れという内容がいかに難題かが分かるでしょう。この部分は出来たのでいずれ説明します。あと出来ているものとして、マップのデータの読み込み、マップのデータを画像と交換しながら画面に表示する処理、あと1日のサイクルを表現しています(夜が来るということ)。画像がレトロ風なのは絵のセンス的なものなのでレトロ風にするのも綺麗にするのも腕次第です。まぁ時間的な都合が大きな理由です。32×32ではなく16×16なのも・・。
趣味の世界 | トラックバック(0) | コメント(0) | page top

DXライブラリ。

今日はプログラムのお話し。とは言っても紹介だけですが。
つい最近、「DXライブラリ」(http://homepage2.nifty.com/natupaji/DxLib/index.html)というのを知りまして、コレ、早い話が簡単にDirectXを使おうということで、つまりラッパーな役割を果たしてくれるライブラリなんです。で、DirectXと言えば、パッと思い浮かぶのが"ゲーム"な訳でして『時間あるしちょっとやってみようかな~』という気持ちで触ってみました。ちなみに2D向けにライブラリ化しています。
リンク先の始めに書いてある通り、C++用と言いながらC言語の知識だけで本当に行けるようです。実際自分もVisualC++を使いながらも中身はC言語だったりします。リンク先にはDXライブラリの関数リファレンスマニュアルもあり、関数も少ないのでとっつきやすい気がしますしサンプルも豊富です。
使い方もリンク先の「DXライブラリの使い方」に詳しく載っていますのでどんな感じになるのか興味ある方は触ってみてはいかがでしょうか。
ということでもしかするとDXライブラリを使ったゲーム作成で有用な情報は書いていくかもしれません(笑)。
趣味の世界 | トラックバック(0) | コメント(0) | page top

Zi:Kill(ジキル)

今みても全く色褪せない伝説のロックバンド・・・と言えば『何それ?』と返ってきそうですが、自分の中では本当です・・。その名も『Zi:Kill(ジキル)』。
既に約13年前の1994年5月に解散していますが、本格始動1988年2月から1994年5月・・・その間僅か6年。たまたま(今更)YouTubeで動画を見つけたので、いつも見れるようにリンクしておこうという魂胆です。実はビデオ持っていますけど・・。リンクは『DESERT TOWN TOUR 1991』1991年10月(16年前)のものです。詳しくはZI:KILL(Wikipedia)を参考に。ビデオは他に『ROCKET』(更に磨かれた高級感がある)とCDも初アルバムの真世界から解散までのROCKETまで持っていたりします(あとはいらん)。
Zi:Killのライブは面白い(スゴい)ですね。小さい事ですが、TUSKの人差し指を立てて歌うパフォーマンスが好きだったりします。TUSKの声は言うまでも無いのですが、KENのギターは異常だと思う(今はいずこへ・・)。当時は他のバンドを明らかに圧倒していたと思う。
毛嫌いしつつも最後まで見るとアナタも虜になる・・・かも?。ヴィジュアルバンドの位置付けは仕方ないんだけど、そうではないんだよなぁ・・・(独り言)。
画像はYouTube動画より参考SS。後はURLだけにしておきます。

Zi-Kill

Desert Town 1991 part 1(09:34) DESERT TOWN, ROUND AND FATE, "J"
Desert Town 1991 part 2(10:13) SUICIDE ~想い出なんて・・・, LOST
Desert Town 1991 part 3(09:47) NIGHT CALL, THIS TOWN DIE
Desert Town 1991 part 4(08:27) 笑ってごらんよ,華麗
Desert Town 1991 part 5(06:14) 少年の詩
Desert Town 1991 part 6(07:40) HERO,スタッフロール
オマケ(TERO 2ndAlbum) (02:11) ・・貴重だ。ちなみに歌詞が聴き取れないと思いますが、歌詞のない歌です(笑)。

THIS TOWN DIEのパフォーマンスが好きですね。次にROUND AND FATE、"J"。といいながらもメジャーにHERO、華麗がやはり一番かな。歌詞が聴き取れない時、それは日本語ではありません。HERO・・・うん、やっぱりHEROですね。
趣味の世界 | トラックバック(0) | コメント(0) | page top
| ホーム |

カレンダー

10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

カテゴリー

最近の記事

プロフィール

汽水田 邦夫(Kisuida Kunio)

Author:汽水田 邦夫(Kisuida Kunio)
ブログ開設日 2007/11/11(日)

脳内整理中社会人
難しい事を簡単に言おうとするが、
簡単な事を難しく言ったりもする。
読者対象成人以上。

【A→Zとは】
文章に詳細な説明を含まずに結果を出していること。結果が先で、その内容について徐々に説明されること。

おにくだいすききすいだくにお

最近のコメント

月別アーカイブ

ブログ内検索

リンク

このブログをリンクに追加する

RSSフィード

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。