忍者ブログ
Admin*Write*Comment
35歳からのC言語ゲームプログラミング
[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

このブログには関係ない話なんですが、1月のTOEIC受験に向けて英語を勉強してみる事にしました。
英語は高校以降苦手で、だからこそチャレンジしてみようかと。
まずは400点をねらいます(低っ!!)

で、語学はさぼらず毎日勉強を継続する事が大切ですので、現状空いた時間を思いっきりそっちの勉強に振っています。
ともなって、こっちの進行が遅れているわけですな。
週1回は更新できるように頑張りますが、今までのようなペースは無理だと思います。

で、R-TYPEはフォース実装が完了したら、終了とします。
なんかコロコロ方針が変っておりますが・・・(汗)

その後、オリジナルのアクションゲームを作ってみようと思っていましたが、これも却下です。
現状のC言語能力でアクションを作った場合、どんなコードを自分が書くかなんとなく想像できるわけですが、察するにそこにある進歩と呼べるものは数学的部分だけのように思います。
で、趣味なんだし、もっとモチベーションの上がる事をやろうと思いました。

そこで、R-TYPEが終ったら、C++の学習を始めます。
またコンソールプログラム(Hello Worldとかね)からのスタートになるので、観ている人には詰まんないと思いますが、僕的には俄然モチベーションが上がる訳です。
基本を学んだら、またDXライブラリを使って簡単なゲームを作成し、C++(&オブジェクト指向)でのゲームプログラミングの書き方を習得するつもりです。

その後は・・・WinAPIやDirectXの学習まで持っていければ、ちょっとしたスキルと呼べるレベルになるのかなあと。
すいません、夢物語です・・・。
PR
ちょっと今日は気分転換に違う作業がしたいなぁって時、ありますよね。
思い付いたんです。
そんなときはドミノを起動して、曲でも書こうって。
ゲームに合わせて曲を書くのは未知の領域で、なかなか難しいんですが。
もともと音楽作るの好きなんで苦には感じません。
ゲームに合わない曲でも、いつか使える時までストックしとけばいいですからね。

と、軽い気持ちではじめて、気が付いたら朝でした(笑)
しかも曲はシューティングにはどう考えても合わない。
まあ、いいかぁ。
音楽から映像が浮かぶこともあって、そうゆうのってゲーム作ろうとして出てくるイメージとはまた違っていて面白いです。
音楽から発想されたゲームってのも面白いかもしれませんね。
構造体に関する理解が浅かったですね。

実は最近、時間のあるときにC++の勉強もしています。
と言っても、入門用のサイトを読む程度で、実際にC++でプログラムを書いたりしているわけではないんですが。
まあ、やはりオブジェクト指向とかの知識を欲すると、C言語の拡張版であるC++に興味が行くわけです。
で、その中で、C++の中核をなす機能であるクラスについて読んでいて、自分の構造体に関する理解の浅さに気付きました。
C++におけるクラスとは、C言語における構造体の機能を拡張する事でオブジェクト指向プログラミングを可能にすると言う考え方で、これを勉強すると副産物として『Cの構造体とは何か』をより深く知る事が出来るなあと感じました。

中級以上の人達には何を今さらな話なんでしょうけども。
構造体とは、扱うオブジェクトに必要な様々な型の変数をまとめて一つの変数のように使う(宣言する)機能なんだなと。

typedef struct  {
      メンバ変数;
} 型名;
型名 変数名;

とやって構造体を使っていたのですが、最後の行の意味がわかっていませんでした。
最後の行は言わば、

int  x;

ってやってるのと同じ事なんですね。
つまり、変数を宣言するように構造体に名前をつけて宣言しているわけです。
その有効範囲は変数と同じように宣言されたスコープ内になるのでしょう。
僕は宣言まで含めて一括りで覚えたために、構造体は同じようなメンバ内容でもオブジェクトごとに作り、全てグローバルで宣言していました。
理解が深まると自分が公開していたソースの拙さが恥ずかしくなります・・・。
まあ、そうなる事は最初からわかっていて、その過程も隠さず見せる方が同じような初心者の人にはわかりやすいと思ったからやっているわけですけども。

具体的に言うと、現状で僕のソースは自機、敵機、敵弾、自機の波動砲、フォースと、画面上に表示するオブジェクトに関して、必要なデータは似通っているにも関わらず、個別に構造体を作っています。
座標(x、y)や、ベクトル(x、y)など、そのメンバ変数はかぶりまくっています。
おそらくこれらは、一番メンバ変数の多い敵機の構造体をキャラクターデータ型として統合し、皆で共有する方がソースは単純になるはずです。

typedef struct {
   メンバ変数(座標とかベクトルとか);
 ~内容は敵機の構造体~
} charadata;
charadata  Jiki, JikiShot,  Teki,  TekiShot,  Force;

これで、いけると思います。
「ばかだなあ、俺・・・」と思うと同時に、勉強の成果なんで嬉しくも感じます。

今回、何が言いたいかというと、「気が向いたらC++もやっとけ」と。
他の言語でもいいんでしょうけど、とにかく自分の使っている言語以外の勉強をする事で、メインで使っている言語の理解がより深まる事ってあるんだなあと思ったわけです。
今回、C++でクラスの概念を知った事がC言語における構造体の理解を深めた様に、他のオブジェクト指向型言語を軽く勉強する音でC++におけるクラスやオブジェクト指向に関する理解を深められるんだろうなと容易に想像できます。

趣味でプログラミングをやっている人なんて、レベルの違いがあっても、おおよそ利害関係を度外視して勉強好きな方が多いとは思いますが、ホント、こういうことがあるから勉強って面白いですよね。
フォースの実装 ~その3~

フォースに、敵機、敵弾との当たり判定をつけました。
敵弾はフォースに当たると used フラグが降りて消えます(特殊弾は除く)。
敵機はフォースに当たると1フレームにつき防御力を表す変数 def から0.2引かれ、0になると破壊されます。
この実装に伴って、敵の持つ変数 def を int 型から float 型に変更しました。(小数点以下を扱うケースが出来たため)
これで、通常の敵弾とヤワな敵機に対してはバリアとして働くようになりました。
敵が硬い場合はフォースを突き抜けるまでに def の値を0に出来ないので防御壁にはなってくれません。

5bccf821.JPG










わかり難いですが、敵機がフォースに当たった瞬間です。
波動砲ではなく、フォースによって破壊されています。




その他の改善

最近フォース以外の処理にも少しずつですが手を加えて改善していっています。
まず、以前記事にも書いていますが、現在時刻を得たい時に毎回 GetNowCount 関数を使うのは効率が悪い気がします。
そこで、毎フレーム、1フレームにかかる時間を計測するためにループの先頭で呼び出しているGetNowCount関数1回で済むように改良しました。
そのフレーム中は、どの関数もこの時刻を現在時刻として使用します。
関数の呼び出しから、変数の参照への変更ですから僅かですが処理速度も上がるはずです。

他にも関数の設計を見直したり、少しずつですが手を入れています。
例えば円の当たり判定を行う部分を当たりならTRUEを返す関数に分けました。
2つの円の中心座標と半径を Circle_Coll 関数に渡すと結果が返ってきます。
また、この関数を効率よく使うために、敵機には画像表示座標と当たり判定の中心座標との差分をデータとして持たせました。
画面座標をX、Y、差分をCx、Cyとすると、関数に渡す座標はX+Cx、Y+Cyとなります。
これで当たり判定の関数は見た目にもスッキリしてわかりやすいコードになったと思います。

でも、まだ無駄があるんですよね(汗)
例えば、敵と自機、敵と波動砲の当たり判定は別の関数で行っていますが、敵を番号で検索しながら判定を行うので、この二つのような場合は同じ関数にしてしまえば使用中の敵番号の検索が1回で済む分効率的です。

ああ、あと三角関数の値もゲームスタート前に360度分配列変数に入れて、ゲーム内では一切sin、cosの計算をさせない処理も試してみたいんだよなあ・・・。

ま、ぼちぼちやりますわ。

フォースの実装 ~その2~

とりあえず自機の前に装着した形で座標を調整して表示してみました。

862f2e66.JPG

















はい、デカすぎですw
いやあ、他の絵も含めて大きく描きすぎるんです。いつも。
それがわかっているので、小さめ小さめと意識して描くように気をつけているんですが、それでもこのざまです。
エディタ上で0.8倍に縮小しました。
5e0dde10.JPG

















うん、こんなもんですよね?
もう少し小さいかなあ・・・。
まあ、良しとしよう!

次は敵機および敵弾と当たり判定をつけて、バリアとして機能させてみようと思います。

  • ABOUT
やってやれないことはないっ!たぶん・・・
  • カレンダー
04 2024/05 06
S M T W T F S
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 31
  • 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
  • プロフィール
HN:
Call my name
年齢:
49
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
  • バーコード
  • ブログ内検索
  • カウンター
  • アクセス解析
Copyright © 35歳からのC言語ゲームプログラミング All Rights Reserved.*Powered by NinjaBlog
Graphics By R-C free web graphics*material by 工房たま素材館*Template by Kaie
忍者ブログ [PR]