トップページ⇒tech
1001コメント487KB

貴様ら!ブロック崩し作るので見てください

■ このスレッドは過去ログ倉庫に格納されています
0001ヒッキー@プログラミングNGNG
VBでWinAPIを使う方法がわかってきたので
作りたくなりました。

Bitbltなど使う予定ですが、細かい技術がないので、
小出しにプログラムしようと思います。
(タマが動くだけとか、キーボードで自機を動かすだけとか)

オナーニスレだけどよろしくね。
0268デフォルトの名無しさんNGNG
>>253
>直線発生だけじゃなくても、浮動小数点演算でも
>差分方程式ならDDAって言うと思うけどなあ・・・

DDAの最初のDが何を意味するか?
DDAがどういう要求から生まれたものか?
を考えれば、DDAは「実数演算を用いない」ことが
定義に含まれていると考えるのが自然
でなきゃ単なる微分解析じゃん
0269デフォルトの名無しさんNGNG
DDAは考え方としては、実数を分数で扱うような感じだな。
正直言うと、いまどきそんな考え方は必要無い。
(ラスタライザとか書くなら別だが)
0270ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/
↑次うぷしました。変更点は

・他の色のブロックの追加
・ステージエディタの修正

です。

>>249
毎回除算してた部分を書き直してみました。
次うぷするときは重力とか入れてみたいです。
>>251
ういー。なんかDDAというのは難しそうなので、
また今度調べてみようと思います。
>>262
アークタンジェントってどうやって使ったらいいのでしょうか…。
ラケットにこすれる時、vxを直接変えたほうが簡単かもしれないですねー。
>>263
ほおほお。そういうことも考えられるんですね。参考になります。
>>267
してみました。
4ガノッサください。
0271ヒッキー@プログラミングNGNG
なんとなくageとこう。
0272デフォルトの名無しさんNGNG
DDAは Bresenham の アルゴリズムで線・円描画で有名だけど
考え方としての応用範囲は広いよ。 差分解析だよね。
整数演算だけで実現出来るけど、無理に整数に拘る必要はないと思うよ

でもデジタル微分とか差分とか難しく考える必要はないよ
 説明は x=f(t) を  x=∫f'(t)t として f('t) を積分するだけ
 tの多項式なら何度かこの変換をすれば定数になる
 また2変数の多くは相互に参照すればt項が消せる
 ・・・・というのが理屈だけど、ゲームなんかだと理屈関係
 なく自然に使ってるよね。

 というか px,pyにvx,vyを毎回足すという処理が既にDDAだから
難しいというより 既に使ってるよ >>270
0273249NGNG
ソース見た所、まだAngleを変な感じに使ってるね・・・反射が難しいのかな

反射 は 回転(カーブ)に似てるけど壁の角度をAngle
 水平 Angle=0度
 垂直 Angle=90度
 とすると vx,vyに対して
Private Sub reflect(Angle)
Dim s, c
 s = Sin(PI * 2 * Angle)
 c = Cos(PI * 2 * Angle)
 x = vx: y = vy
 vx = c * x + s * y
 vy = -c * y + s * x
End Sub

となる 0度の時は c=1,s=0 になるから yだけ符号が反転
 90度なら c=-1,s=0で xだけ符号反転
 というのは既に使ってるよね。
 これを一般化したのが上の式

だからラケット位置や動きの効果を反射で表現したいなら
水平との反射=0度でなく±45度の範囲で反射させればいい

ラケットの左右のスミの場合は、スミ座標とボール中央と90度
の方向に反射させればいい
0274249NGNG
上で使ってる PI は 3.1415/180 という定義になってるからそれを使ってる

でもPIは3.1415にして PiDegみたいな変数名の方がいいと思うな
0275249NGNG
 ラケットのスミでの反射はatnを使って角度を求めてもいいけど
  スミ座標と玉の中心座標の差 dx,dyを使って直接s,cを求めてもいい

1、正規化    c=dx/sqr(dx*dx+dy*dy) : s=dy/sqr(dx*dx+dy*dy)
2、90度反転 これは s,cを入れ替えて片方の符号を反対に
3、2倍角    c'=c*c-s*s s'=2s*c
と3つの手順で求まる
 でも、幸い ボールは上からしか来ないから dyは0にならないはずとして
  atn(dx/dy)*180/3.14 で角度求めた方が判り易くいていいと思うけどね
0276デフォルトの名無しさんNGNG
うーむむ
 三角関数が判らないと というより行列がわからないとゲームも作れない雰囲気だな
0277デフォルトの名無しさんNGNG
ここ読んでも判るようにさ
http://members.tripod.co.jp/snishi/text/index.html
みんなそんな難しい手法使ってないから安心しろよ>>1
0278吾輩は名無しさんであるNGNG
うむ。吾輩などはむりやり型が好みだな。
0279デフォルトの名無しさんNGNG
でも、まあ、三角関数と行列ベクトルが判る程度に勉強はするべし
0280デフォルトの名無しさんNGNG
さらに微積分も必要かもな
0281249NGNG
いや、別にゲームだから中でどんな処理しようが動いてるなら問題ない
と俺も思うよ。
 でも、1はソースを公開してるし、習得も早いからさ、
 つい、スタンダードというか普通はこうするってのを教えたくなったのさ

 基本的なアイテムの動かし方を身に付けた方がいいだろって余計なお世話かもしれんけどな
0282sageNGNG
数学関係の参考テキストも少しこのスレであげといた方が( ・∀・)イイ
0283デフォルトの名無しさんNGNG
なんかさ、ずーっとボールが同じ速度にするのではなくて
壁に当たったら少しずつ速度がUPみたいなほうが
おもしろいとおもう。

実際、テトリヌなんか、ブロックの落ちる速度が速くなったりするしね。

# あんまりテストプレイさせてもらっていないから分からないけど…
0284デフォルトの名無しさんNGNG
http://jp.shockwave.com/games/arcade/bricks/bricks_frame.html
のブロック崩しみたいに、ボールの角度変え + 敵きぼんぬ>>1
0285デフォルトの名無しさんNGNG
>>284
カコイイ!
0286吾輩は名無しさんであるNGNG
制作中の人間に、あまり同ジャンルのゲームは見せないほうがいいと思うぞ。
0287デフォルトの名無しさんNGNG
>>286 スマソ。
パクリだ!なんて騒がれたら、1がかわいそう。
1さん、オリジナル な要素を含めてね(♥
0288デフォルトの名無しさんNGNG
ブロック崩し自体、既にパクリなので大丈夫です。
0289(・ε・)NGNG
>>270
http://shinkiro.tripod.co.jp/valkyrie/cd_gano.html

す、すいません。1ガノッサしかないんです。
0290デフォルトの名無しさんNGNG
/*  ここからコメント

>>260
煽るつもりはって言われても、
こっちもわざと書いてみたりしただけだし(藁 カメレススマソ
完成したらどっかにうぷしておきます。ただしURIは公開しません(藁

# なんとなく今暇だからアプリ作りつつ例の吉野家コピペ
# 作成ScriptをJavaScriptでかいてたり。

重力もいいね。なにかボールと反発するようなブロックとかも追加きぼん!
ボールが風か何かで吹き飛ばされるみたいなのとか。

みんながアイデア出すから、結構ゲームの発想の手間が省けてたり
してるんじゃないかと。

厨房のとき発想力の無さからあきらめたんだよね。折れ。
だからこそ応援しているぞ1!

ここまでコメント */
0291デフォルトの名無しさんNGNG
>>284
アルカノイドのつもりで敵にパドルぶつけたら、パドルが破壊された(笑

同ジャンルのゲームを見た方がいいかは微妙だね。
パクり以前にモチベーション下がるか上がるか・・・それは本人次第だけど。
俺なんかは、自分のアイディアが既出だったりすると萎えるタイプ。

最初このスレ見たとき俺もブロック崩し作ろうかと思ったけど、1が萎えそう
だからやめたよ。
0292デフォルトの名無しさんNGNG
けっこう面白いじゃん。みんな何点くらいいったよ?
おれは7314点が最高。三面がクリアできない。。。
0293292NGNG
記録更新。5面までで16,258点
0294(・ε・)NGNG
>>292
それは何?
インターネットランキングに対応しろと言うことかい・・・?(笑)
0295デフォルトの名無しさんNGNG
わざわざ落としてまでやる気無し
0296(・ε・)NGNG
あれ?ステージエディタはテキスト化されてないの?
作って公開しようと思ったんだけど。
0297デフォルトの名無しさんNGNG
ときどきブルブルいいながらブロックにくっついて移動するね
0298あきまさNGNG
age
0299デフォルトの名無しさんNGNG
ステージクリアした時の、ご褒美エロCGキボンヌ (´Д`;)ハアハア
0300 NGNG
いろいろみんな1を応援してるようだけど、
ソースまで載せて手ほどきするのはどうかと思うよ。
最初の頃のようにキーワードや概要だけを載せてあげたほうが、
1も試行錯誤するだろうし結果的に身に付けるスピードも速くなると思う。

まあ1が鵜呑みにせず自分なりに解釈して作り出すタイプ(根っからのプログラマ気質?)
なら全然構わないんだけどさ。
頑張って欲しいね。
0301デフォルトの名無しさんNGNG
>>299
ステージクリアまで待てないよ・・・
ステージの背景に描いて頂戴!
0302デフォルトの名無しさんNGNG
>>300 そうは言っても、衝突や反射をちゃんと解説してるサイトってある?
0303デフォルトの名無しさんNGNG
26180てん!わ〜い
0304デフォルトの名無しさんNGNG
つまんね〜。ちょうくそげーじゃん。
もっとましなの作れよ。
0305吾輩は名無しさんであるNGNG
>>304
お主が作ればよかろう。
0306ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/
↑つぎうぷしました。変更点は

・マウスモードの追加
・残機を3に変更
・難易度の調整

です。

>>272
ほお、そうなんですか?既に使っていたとは(藁
理屈的にはムズカシそうですねー。ちゃんと理解できるようにします…。
>>273
ちょ、ちょっとまってください…理解するのに紙に書いてみないと
難しいです…正規化とはなんでしょう?ヘイホウコン使うんでしょうか。
もうちょっと頭使います。
>>277
お、ちょっと安心しました(w
ラケットがあたる位置で判定してたりするんですねー。
>>279
了解。頭に刻んでおきます。
>>280
ビブンセキですか。できるかな…。
>>281
おー、ありがとうございます。そういう意図があったんですね。感謝します。
>>283
一応、書いてはいたんですが、上がり方がしょぼかったようです。
難易度調整しました。
>>284
やってみました。ShockWaveって結構すごいですねー。
まだまだ負けてる…。敵っておもしろいので考えてみたいです。
>>289
ありがとうございます。1ガノッサ頂きます…ってガノッサって
おっさんだったんですね。
>>290
ご意見ありがとうございます。風とか吹いてもおもしろそうですね。
結局重力は今回、いれれませんでした…

更新age
0307ヒッキー@プログラミングNGNG
>>291
自分のアイデアが既出だったらちょっと悲しいと思います。
ブロック崩し、2chの人も結構作ってるみたいで、ヒッキー崩しというのを
発見したんですが、(鬱打のページ)それもコンボ点とかありました…
VBでDirectXつかってるし。鬱氏
>>292
おぉ、感謝感謝。やってくださる人がいてると嬉しいです。
>>294
完成したらインターネットランキング作ってみたいと思います。
>>295
う…
>>296
一応テキスト化したんですが、拡張子がSTGになっています。
>>297
そうですねー。壊れないブロックにあたるとぶるぶるします。
今回は修正できませんでした…
>>299
エロ画像描いてくれる人キボンヌ
>>300
がんばりますー。
ソースは参考にさせていただいてます。…が、ちょっと難しいです(藁
>>303
僕は最高15000点くらいです。26000点…すごい。
>>304
ちゃんとゲームとして認識されるようになっただけでも嬉しいです。
最初はゲームどころではなかったので(w
0308デフォルトの名無しさんNGNG
じゃあ参考図書
本物のヒッキ-なら
 高専の数学1,2 これの問題集とセットで勉強するといい
http://www.morikita.co.jp/mokuji/0481.html
http://www.morikita.co.jp/mokuji/0482.html
0309249NGNG
ええと、やっぱりベクトル・行列を勉強した方がいいよ
といっても、
 ベクトルは単に複数の数をまとめて扱うというだけ
 行例は、数式の係数をまとめて扱うというだけという理解でとりあえずスタート

たとえば、玉の動きは
  x = x + speed * cos(angle)
  y = y + speed * sin(angle)
これは正しい でも
  ball_x = ball_x + vx * (90 - Angle)
  ball_y = ball_y + vy * Angle
 こではダメっての説明してみるね。
 前者は回転だけど、後者は、伸張になってしまう。

○回転というのは
  vx*cos(w) - vy*sin(w)
  vx*sin(w) + vy*cos(w)
 という形になっている。これはひとつのスタイルだから覚える。
 そして、掛算してるのは vx,vyと4つの係数だからそれぞれ
 |vx| |cos ,-sin|
 |vy| | sin , cos| と分離して考える。
 左がベクトルで右側が行列だ
 で、元の格好に直す規則は・・・判るよね?
 ここまでいい? とにかく2つの数がこういう格好に並んでいれば回転だって事で

○反射は既にやってるように
 vx=vx
 vy=-vy
 という格好になっている これも分離すると
 |vx| | 1 , 0|
 |vy| | 0 ,-1| となる。
  上の回転では角度がどうであれこの格好にならないの判るよね?

 任意の角度で反射させるには回転を組み合わせればいい。
 ただ、反射する時は反射面に対して倍角で反射するというのに注意
 で、組み合わせる時は この反射を掛算した結果のベクトルは
 | vx|
 |-vy| となるなら、上の回転の vyを単に-vyにするだけでいい

○伸張 y軸が斜面で、斜めにあるのを上から見る場合は
  | 1 , 0|
  | 0 , a | というようになるよね? これが伸張さらに裏から見たら 上にある反射になる

○拡大/縮小 これは簡単で全体に
  | a , 0|
  | 0 , a | とaを掛算すればいい
0310デフォルトの名無しさんNGNG
>>309
気持ちはうれしいけど、その説明は
ちゃんと数学の本を手にして読まないと
わけわからんかと。
0311デフォルトの名無しさんNGNG
 演算子法的立場からの解説って奴だね
 遅延演算子も導入してさ
 一挙に微積分飛び越してフーリエ・ラプラス変換の世界にご招待ってのは?
0312249NGNG
>>310 そうかもしれないね。
 Web上の教科書は 特にベクトル 行列は少ない。基礎だからね
 だから高校の教科書でも手に入れて勉強するしかないね。

 ちょっと調べてみつけたのは
 高校:
ttp://www.kwansei.ac.jp/hs/z90010/hyousi/2106.htm

応用数学なら見つかるんだけどね
ttp://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/diffpub/diffpub.html
0313249NGNG
どうも探し方が悪かったみたい

数学玉手箱
http://www.nikonet.or.jp/spring/sanae/MathTopic/MathTopic.htm

ベクトルとは
http://www.nikonet.or.jp/spring/what_v/what_v.htm
0314デフォルトの名無しさんNGNG
>>1
エロ画像ソース!

★☆★いやんエッチ!見ないでよ!★☆★
http://piza2.2ch.net/test/read.cgi/kao/1000818283/
0315デフォルトの名無しさんNGNG
どうせ回転くらいにしか使わないなら、行列は回転後の座標系の単位ベクトルを
組み合わせたものと教えるのが一番分かりやすくていいんじゃないか?
もっとも、ブロック崩しごときで行列を持ち出す必要ないと思うけど。

方向変えるなら、vxを適当にいじったあとに、√(vx*vx+vy*vy)がvxをいじる
前と同じになるようにするだけでも十分だよ。
例えばC言語で書くと
v = sqrt(vx*vx+vy*vy);
vx1 = vx / v;
vy1 = vy / v;
vx1 += (適当な値。例えばパドルのX座標-ボールのX座標など);
v1 = sqrt(vx1*vx1+vy1*vy1);
vx = (vx1 / v1) * v;
vy = (vy1 / v1) * v;
この程度で十分かと。
0316249NGNG
>>315 そりゃそれで、十分といえば十分。

だいたい、今のAnglleで傾斜させる方式でもゲームが今の状態で完成だとすれば十分。
  実現方法は面白さとは何の関係もないしね
0317デフォルトの名無しさんNGNG
>>309
 |vx| |cos ,-sin|
 |vy| | sin , cos|
じゃなく
 |cos ,-sin| . |vx|
 | sin , cos|  |vy|
てかいてよ
0318(・ε・)NGNG
ブロックを全部壊した後、自機で球を受け止めてクリアにしてはどうだろうか。
0319(・ε・)NGNG
Block00,9,000,032#Block01,9,016,016#Block02,9,032,000#Block03,9,216,032
Block04,9,200,016#Block05,9,184,000#Block06,9,024,008#Block07,9,008,024
Block08,9,192,008#Block09,9,208,024#Block10,9,048,080#Block11,9,056,088
Block12,9,064,096#Block13,9,072,104#Block14,9,168,080#Block15,9,160,088
Block16,9,152,096#Block17,9,144,104#Block18,3,088,040#Block19,3,128,040
Block20,3,128,056#Block21,3,088,056#Block22,3,088,072#Block23,3,128,072
Block24,3,088,024#Block25,3,128,024#Block26,9,096,136#Block27,9,120,136
Block28,3,192,128#Block29,3,024,128

-----
>>1 これでプレイしてみて。"#"は改行に置き換えて。
ブロックにくっつくバグが置きやすいよ。
0320(・ε・)NGNG
要望ばかりでゴメン。
ステージファイルをパラメータに与えて起動するとそのステージだけ
プレイできるとステージのテストプレイがやりやすいなぁと。
0321>318NGNG
なぜ?
0322デフォルトの名無しさんNGNG
>>318
なんかいいね。
0323デフォルトの名無しさんNGNG
>>318
なんだそりゃ
マッピーで盗品全部集めた後に
開けたドアを全部閉めたらクリア
って言ってるのと同じだぞそれ
0324(・ε・)NGNG
Block00,9,104,184#Block01,2,024,120#Block02,9,184,152#Block03,2,024,096
Block04,9,024,152#Block05,2,080,096#Block06,2,080,120#Block07,2,128,120
Block08,2,128,096#Block09,2,184,096#Block10,2,184,120#Block11,1,128,072
Block12,1,128,048#Block13,1,080,072#Block14,1,080,048#Block15,1,184,072
Block16,1,184,048#Block17,1,024,072#Block18,1,024,048#Block19,3,080,024
Block20,3,080,000#Block21,3,128,024#Block22,3,128,000#Block23,3,184,024
Block24,3,184,000#Block25,3,024,024#Block26,3,024,000#Block27,1,024,184
Block28,1,184,184#Block29,1,104,152
------
かなりバグります。球の速度に制限を設けた方がいいかもしれませんね。

>>321 なんとなく。ゲーム性があがらないかな?
>>323 マッピー知らんです。ゲームはあまりやらないもんでして。
0325(・ε・) ◆LbaGYMio NGNG
要望は出すけど、組み込むかは>>1が判断してね。当たり前だけど。
0326デフォルトの名無しさんNGNG
とりあえず、ゲームのバランス調節等のアドバイス

基本は、難しいことをしたら見返りがあって、簡単なことをしたらペナルティ。
見返りってのはボーナス点が貰えるとか、ブロック崩しなら速度が遅くなるとか。
ペナルティはその逆。
とは言っても、必ずしもこれに従う必要は無いよ。
例えば同等の難易度の2種類の行為について、片方だけ点を高くしておくと
点を稼ぐにはそれだけを狙う必要があって、結果的に難易度の向上に繋がる。

クリアだけなら簡単、稼ごうとすると難しくなるようにようにするのが俺流。
0327デフォルトの名無しさんNGNG
>>320
iniファイルのステージファイル名を書き換えるのがいいと思われ
0328初心者さんNGNG
漏れも超級素人なんで見てておもしろい。
がんばってね。>>1
0329コーダーさんNGNG
今更発見したが、いいスレだ。

>>1
俺は始めて作ったゲームっぽい作品はBio100%の戦艦シューティングもどき
だった。なつかしい。
最後までがむばれYO!
0330ななしNGNG
コンボボーナスの点数がカウントされないことがあるみたいだよ。
水平に近い弾道でブロック壊したら、
2Hitsって出たけど、ポイントが0から増えなかった。

うまく再現できないんで、もう少し試してみる。
0331デフォルトの名無しさんNGNG
なんか、自機の真中心で跳ね返したらブロックを突き抜けて
壊すみたいのがいいなぁ。

要望ばっかだが、>>330の 問題をぼくも確認してみます。
0332デフォルトの名無しさんNGNG
/*    ↓これが
http://www.google.co.jp/search?q=%83u%83%8D%83b%83N%95%F6%82%B5+%95%9E&hl=ja&lr=
ブロック崩し + 服 で検索。
さすがにエロ系が多かった。
0333デフォルトの名無しさんNGNG
>>332
コメントかい。(誰かのレスにそんなかんじのが…パクリ?)
しかもコメントとじれてないし。

それより>>1のヒッキー@(略)
やってみたけど、結構おもしろかった。
ず〜っと前のヴァより断然面白くなってるよ。
コンボ点&角度変化&玉の速度アップで。
vectorにでも、こういうゲームはうようよあるから、
頑張れ!
0334デフォルトの名無しさんNGNG
ごめんな。俺には1794点しか取れないよ(;´Д`)
0335ヒッキー@プログラミングNGNG
>>308
ほお、高専の教科書ですかー。穴場的ですね。
普通の本屋で注文できるのかな…
>>309
おー、とてもよくわかりました。
回転の式はCGの本に載ってたので、1回画像の回転のプログラムを作るときに
使ったことがあります。そのときは行列の意味がよくわからなかったんですが(藁
反射は単に符号を反転させるだけで良いというのは分かるのですが、
ボールが早すぎる時に、反転しても画面に戻ってこなくなる事があったので、
ifをいれて、画面内の方向のみを向くようにしました。
伸張は…(y軸が斜面で、斜めにあるのを上から見る場合は)というのが
よく分かりません…。
>>312
高校の方のページ、なんか読めそうです。
分からないところ、全部読んでみようと思います。
>>313
わざわざいくつも探して頂いて申し訳ないです…
あとで、ウチのページでまとめて紹介したいと思います。
>>314
あの…エロ画像ならHDDにも入っています(w
でも、やっぱ使ったらまずいかなぁと
>>318
はは。そうですねー。おもしろいかも。
今の段階では、受け止めてクリアの表示を出してる間、
ボールが自機に埋まる or 変な位置にあるような気が
するので、ちょっと考えてみます。
>>319
やってみました。
うまりますね…。残像残ってるし。埋まらないように考えたいと思います。
わざわざ上げていただいて、サンクスです。
>>320
あー、たしかに。
いじってみようと思います。
>>324
今、実験的に速度の制限つけてみました。
直るかどうかはもうちょっと試験運転しないとわからないですが。
>>326
あー、そういうのおもしろいですねー。
ゲーセンでシューティングゲームやってると、そういう設定のが
結構ありますね。名作ほど微調整が細かかったり。
>>328
ういー。がんばりますよー。もうちょっと完成度あげたいです。
0336ヒッキー@プログラミングNGNG
>>329
この前、Bio100%のページいきました。
戦艦のゲーム、以前にどっかでやった事あるような…(藁
>>330
実は水平に近いほど点が入らないようにしてあります。
テストしてると、10度くらいの角度にしたら、簡単にクリアできるし、
点もかなり入ってしまったので。
>>331
おぉ、そういう設定の仕方もあるんですねー。参考になります。
>>332
服がだんだん欠けていくゲームがイパーイありますね。
全部同じ様に見えるのは気のせいでしょうか。
>>333
どもども。ありがとうございます。
vectorですかー。一回、ゲームのところ覗いてみます。
>>334
今回のUPしたやつは前より難しいです。
僕もそんなに点が取れなくなりました…
0337ヒッキー@プログラミングNGNG
この前、この板のスレ「シューティングゲームを作りたい!!」
http://pc.2ch.net/test/read.cgi/tech/990219336/
を読みました。

作ってみないと気付かないような所にワナがいっぱい潜んでるんですねー。
(3Dシューティングで、リプレイのデータが浮動小数点で
 管理してるとずれてくるなど)

あと、雷電のレーザーはどうやって実現してるのか気になりました…。

それから、ひとつ疑問なんですが、ローカル変数とグローバル変数は
どういうときに使い分けたらいいんでしょう。全てグローバルでも
よさそうに感じるのですが…。
ローカルだと関数呼び出すたびにメモリを確保しないといけないと思うし、
関数に引数を使うときも、スタックに積んだりしてたら余計に遅くなったり
しないかなぁと、ふと疑問に思いました。
0338ヒッキー@プログラミングNGNG
あぁ何か日本語がおかしかった。
0339デフォルトの名無しさんNGNG
>>337
グローバル変数はなるべく使わない方がいいよ。
理由は色々あるけど、一番恐いのはどこで変数の内容が破壊されるか分からない事。
以前、全てグローバル変数で組んでて原因不明のバグで悩んでる人の相談にのった
ときは、ループ用のカウンタをグローバル変数にしていて、ループの中で別の関数
を呼んでいるんだけど、その呼ばれた先でも同じ変数を使ってループしていた。
その関数呼ぶとループ用の変数が書き換えられるから、それが原因で無限ループに。

まぁ、この辺はグローバル変数でトラブってみないとピンとこないかもしれないが。
昔のBASICはグローバル変数しか無かったから苦労した。

ちなみに速度で言えば、ローカル変数の方が速いよ。
ローカル変数が使うメモリ領域ってのはスタックメモリって呼ばれていて、あら
かじめ決められたサイズで最初に確保してあるの。だから、メモリ確保に関する
コストはほとんど0に等しい。
(ちなみに通常のメモリはヒープと呼ばれていて、グローバル変数はヒープに
確保される)

ローカル変数の方が速い根拠だけど、1つはコンパイラの最適化がかかりやすいこと。
ローカル変数ってのはその関数を抜けたら消えてなくなるものだからメモリに値を
保存しておく必要が無いので、実際にはメモリを確保せずにCPUのレジスタを割り
当てる場合がある。レジスタはPCの中で最も高速にアクセスできるメモリ。
もう1つは、ローカル変数は関数に入った時点で順番に確保されるから、関数内で
使う変数がメモリの中で近い位置に確保されること。CPUのキャッシュは32バイト
単位でキャッシュしてるから、1つの変数にアクセスした際に他の変数もキャッシュ
に入る可能性が高くなる。

ローカル変数とグローバル変数に関しては、構造化プログラミングを勉強してみると
いいかも。いまどき構造化プログラミングなんて参考書無さそうだけど。

ちなみに、スタックメモリはコンパイル時にサイズが決まっていて、通常はあまり
大きくないのでローカル変数で巨大な配列とか使うとエラーが出るので注意。
グローバル変数ならヒープに確保されるので、20MBくらい使っても平気。
0340339NGNG
こういう事を疑問に思って、質問してみるってのは良い傾向だと思うよ。
(大事なのは聞いてみることより、むしろ疑問に思うこと)
0341デフォルトの名無しさんNGNG
せっかく VBには構造体があるから まず ボールを構造体にしよう

 ball_xとか vx とかを一つの構造体にまとめたら 関数呼び出しが楽だし
 ボールを2つにするのも簡単になる
0342デフォルトの名無しさんNGNG
>>339
>グローバル変数ならヒープに確保される

…ん?
0343デフォルトの名無しさんNGNG
>>342
間違っていないと思うけど。グローバル変数はプログラムの
開始から終了までずっと残っているものなので、ヒープ領域
に確保されると習った。

あと、ローカル変数でも static 宣言した変数はその関数が
終了しても値が残っていて、これもヒープに確保されると
習った。

間違っている?
0344デフォルトの名無しさんNGNG
>>343
間違ってる。BSS で検索。
0345デフォルトの名無しさんNGNG
初期値があるやつはdataセクションに入ると思われ。
0346デフォルトの名無しさんNGNG
>>344
BSSとかって環境依存な気がする。
0347デフォルトの名無しさんNGNG
>>346
いずれにせよ、ヒープに確保されるのは間違いって話では?

C の規格ではメモリの分類に関しては何も言ってないが、一般には

text プログラムのコード (サイズ固定)
bss 初期化されない変数 (サイズ固定)
data 初期化された変数 (サイズ固定)
stack 自動変数 (サイズ可変)
heap 動的に確保/解放されるメモリ (サイズ可変)

ぐらいに分けて管理してることが多いと思われ。Win32 だとヒープもプロセスヒープ以外に、プライベート
ヒープとか複数持てたり、スレッドが絡むとスタックも並行して複数存在することになるから、いろいろと
話がややこしいけど。
0348デフォルトの名無しさんNGNG
>>347
習ったって話なので一般論を習っただけでわ?
bss やら data ってのは環境依存というより実装依存だと思われ
0349デフォルトの名無しさんNGNG
>>348
とりあえずこういう用語は一般的に使われるし
覚えておいて損は無いでしょ。
得も無いかもしれんけどな。
0350デフォルトの名無しさんNGNG
>>347
漏れがC覚えたのZ80だったから、スタックとヒープしか無いような状態だったよ。
0351デフォルトの名無しさんNGNG
なんでそう言い張るんだ!
 ヒープはヒープ! alloc系の操作で確保する領域
 普通の変数はそれとは別のセクションに取られる

領域は大まかにコード用の領域、グローバル/staticデータの領域、ヒープ用、スタック用と
4つに分割される。 一般的にはスタック用とヒープ用の領域は重なっていて、
スタックは下から ヒープは上から確保される

 基本はZ80用でも構成は殆ど同じ 違いはROM用に定数用の領域があったりする程度
0352デフォルトの名無しさんNGNG
>>351
> スタックは下から ヒープは上から確保される
他は知らんが x86 は逆だな。
0353ヒプ子NGNG
私のために、喧嘩はやめて〜!
0354デフォルトの名無しさんNGNG
1がついて来れないから、そろそろやめにしないか?
0355(・ε・) ◆LbaGYMio NGNG
有名どころかな?
http://www.interq.or.jp/tohoku/kenta/
0356デフォルトの名無しさんNGNG
下というのが
番地nからn+1,n+2と向かっていくのか
番地nからn−1、n−2と向かっていくのか分かりづらいですな。
上位って一般的に番地0のこと?
0357デフォルトの名無しさんNGNG
太陽のあるほうが上。
地面のあるほうが下。
0358デフォルトの名無しさんNGNG
big endianでは0番地が上
little endianでは0番地が下
0359デフォルトの名無しさんNGNG
ソース見てないけど、反射してボールの進路が変わったときに、その新しい進路で
当たり判定してる?>>1
0360ヒッキー@プログラミングNGNG
ほおほお、みなさん、ご意見ありがとうございます。
ヒープやBSSという単語を知らなかったので、勉強になりました。

メモリについて検索していたら、とても興味深い内容のページをハケーンしました↓
http://www-6.ibm.com/jp/developerworks/security/000721/j_smash.html
メモリとはどういうものかというイメージが以前よりつかみやすくなりました。

>>339
グローバル変数は他のところで書き換えられる可能性があるんですねー。
そこまで頭が回りませんでした。ありがとうございます。
そういえばコンパイラが最適化してくれるような事がどこかに書いてありました。
registerってキーワードいれたら自分で調整する事もできるんですね。
(といってもどれをレジスタに入れたら早くなるのか検討がつきませんが…)
こういうのVBではどうなっているんだろう…

>>341
してみました。
でも、関数の割り振り方の問題からか、ボールを2個にするのが難しいです…

>>347
text、stackは想像がつくんですが、dataやbssの違いがよくわかりません。

>>354
検索してたら頭が割れそうになりました。

>>359
うーん、どういうことなのでしょうか。
2回目の判定ということですか?
0361ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/
↑次うぷしました。変更点は

・毎秒60フレームに変更・ソースの見直し

です。

ソースが読みにくくなってきたので、Form1のイベントに関係ない部分は
別ファイルにしました。
あと、今までGetTickCountを使って毎秒のフレームの調整をしていたのですが、
なぜか10ms単位でしか時間を調整できないので、timeGettimeを使うように
変更しました。
0362デフォルトの名無しさんNGNG
このスレ見てたらVB始めたくなりました。
プログラムは初心者レベルなので初心者本買って
勉強してみたいと思いました。
頑張ってください>>1さん
0363343NGNG
大変勉強になりました。私は今までヒープと bss と data を
全部ひっくるめてヒープと捉えていたようです。

>>360
>http://www-6.ibm.com/jp/developerworks/security/000721/j_smash.html

かなり参考になりますね。この話題に限らず、www-6.ibm.com には
有益な情報が多いと思います。
0364デフォルトの名無しさんNGNG
超なにげにDeveloperWorksのリンクを引いてくるあたり、
やはり>>1はプロかセミプロで、このスレは壮大なネタなのではとか…思ってみたり…
ソースのコメントのつけ方とか………
0365(・ε・) ◆LbaGYMio NGNG
Googleに「ヒープ BSS」を尋ねて見たら2個目にあったよ。
ネタでも実際ゲームが出来てるので、それを楽しんでます。
仕事の合間にちょうどいい。

最新版いい感じになったね。まだたまにすり抜けるけど。
前よりとても良くなった感じ。個人的には球が速すぎるけど。
0366デフォルトの名無しさんNGNG
>>364
VBが初めてであって、C++とか結構やってるんでしょう。

>ヒッキー
パドル?にあたる場所で反射角度を変えてほしい。
端にあたると鋭角に反射で、もう一回あたると鈍角に戻るとか。
0367デフォルトの名無しさんNGNG
つーか、まん丸いパドルにチャレンジキボーンヌ
■ このスレッドは過去ログ倉庫に格納されています