http://dixq.net/forum/viewtopic.php?f=3&t=16247
この質問をされている方がついこないだまでの私だなぁ、とつくづく思ってしまいました。誰もが一度はやってみたものじゃないでしょうか(?)
こういうしょーもない(といったら悪いかもしれないが)ことをただ興味本位でして、うまく行ったときにすごいうれしいんですよねー
そっから少しづつ機能の拡張とかをしていって遊んだりしてました、自分の書いた通りに
動くんですし、自分が弄ればその通りに動く、 それが本質的な楽しみなんじゃないかなーとか思います(プログラミング初心者のたしなみ。)
弄っていけば、少しづつ少量のコードで動くようになってきて、より早く書けるようになってきます。ソレを実感できるのも単なる
数学などの普通の教科と違い、しっかりと認識できるのですごいなと自分で思ったり、
例えば今から4年ほど前に重力を表現したくて、Softyaさんに聞いて書いたコード、バウンドすらせずにただ単に自由落下するだけのプログラム
を作りたかったんですが、その時はそれだけで50-70行ほど書いてた記憶があります、どうすればそんなに行数稼げるのかもう自分でもわかりません。
んなときがあった私も今ではバウンドの処理もいれて10行ぐらいで出来る様になってしまった、恐ろしい。
同じコードの量でできる動作の量が飛躍的に上がっているのが分かります。
CODE:
//適当にバウンドさせる処理
ball[i].v = ball[i].v + G;
ball[i].y = ball[i].y + ball[i].v;
if (ball[i].y > 480 - R)
{
ball[i].y = 480 - R;
ball[i].v = -ball[i].v;
}
今回この質問者さんがしたいことも私自身がほんの半年ほど前に考え、理解したようなことです。今ではソレも何も見ずに自分だけで実装できてしまいます。
怖いものです。
んでこの質問者さんもいろいろと弄っていってもっとプログラミングの楽しみに気づいてほしいなぁと思った次第です。
► スポイラーを表示
ほぼ回答(無駄な処理が多いと思うけど...)
CODE:
#include "DxLib.h"
typedef struct
{
int x;
int y;
bool flag;
int v;
int r;
int color;
}Ball_t;
//登録できる最大のボールの数
const int MAXBALL = 1024;
//半径は固定
const int R = 16;
//重力
const int G = 1;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
SetDrawScreen(DX_SCREEN_BACK);
Ball_t ball[MAXBALL];
int clickcnt = 0;//クリックカウンタ
for (int i = 0; i 480 - R)
{
ball[i].y = 480 - R;
ball[i].v = -ball[i].v;
}
if (ball[i].y < 0)ball[i].flag = false;
}
}
//Zキーが押されたらすべてフラグを折る
if (CheckHitKey(KEY_INPUT_Z) != 0)
{
for (int i = 0; i < MAXBALL; i++)
{
ball[i].v = 0;
ball[i].x = 0;
ball[i].y = 0;
ball[i].r = 0;
ball[i].color = 0;
ball[i].flag = false;
}
}
//描画
for (int i = 0; i < MAXBALL; i++)
{
if (ball[i].flag == true)
{
DrawCircle(ball[i].x, ball[i].y, ball[i].r, ball[i].color);
}
}
}
DxLib_End(); // 後処理
return 0;
}
それにしても自分は高レイヤーに浸りすぎてると最近よく感じます。DXライブラリはとても優秀なライブラリですが、
故にもっと専門的な(WindowsAPIなどの低いレベルでのプログラミング)もしないといけないんじゃないかと思ったりもして、
DirectXとかも直接たたきたい...!だけど全然見ても分からん!
こんな感じです。
追記:タイトルがおかしかったので変えました。