1read 100read
2012年5月ゲ製作技術240:  /* 簡単なプログラムをウプしよう */ (205) TOP カテ一覧 スレ一覧 2ch元 削除依頼
★リンク集★ (793)
ゲーム制作失敗について語るスレ (360)
STGを最初からみんなで作るスレ (737)
【囲碁?】囲連星のAIを作ってみよう【連珠?】 (728)
スーファミのプログラム (383)
【ボーン】スキンメッシュ勉強スレ【デフォーム】 (180)

 /* 簡単なプログラムをウプしよう */


1 :02/06/27 〜 最終レス :12/01/11
比較的規模の小さい
ゲームやアルゴリズムをUPしたり
語り合ったりするスレッドです。
勉強用ですので、言語の選択についてや
ゲームが面白いかどうかの議論は禁止の方向で。
UPする方は使用言語を明記してください。
どうか盛り上がってください。おながいします。おながいします。

2 :
削除依頼だしました。
糞スレ認定。

3 :
とりあえず、迷路生成プログラム作りました…
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/meiro.txt
C++です。

4 :
            o
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無事に  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /   モララーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ・∀・) /                /(・∀・ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)

5 :
>>2
そこを何とか。
プログラムを積極的にうpする
スレッドが無いのは寂しいので…

6 :
>>4
……

7 :

>>1
諦めるなよ。ちゃんとレスを付けて育てていけば、どこかの誰かがいっぱ
しのレスを付けてくれる。
それまで何とかジサクジエンでもいいからレスを付け続けろ。
諦めたらそこでおしまいさ。

8 :
とりあえず>>1は(必要な時以外は)名無しになります。
>>7
がんばります。
いきなり終了ってのは
新手の「2げっとズザー」なんでしょうか。
今日は(日付変わってるけど)もう寝るので
明日からは日々の勉強の成果を
少しずつ上げていこうと思います。
レベルの高い人も、自信の無い人も気軽に参加してくださーい。

9 :
ソースを上げるスレッド
http://game.2ch.net/test/read.cgi/gamedev/1005038280/
こっちを利用しる

10 :
>>9 あんたが一人で使えYO!

11 :
俺は伝統ある>>9のスレを支持。ていうかスレ立てる前にちとためらってクレヨン。

12 :
ただでさえ人もカキコも少ない板なのに、同様の主旨のスレが
乱立して情報があちこちに散らばるのは良くないよ。

13 :
>>># 一種の隔離スレです。<<<
あっちは最初にこんな風に書いてあるから感じ悪いし、
鯖に負荷が掛かるし、タブやらスペースが消えちゃうからダメダメ

14 :
>>9
>ソースを上げるスレッド
http://game.2ch.net/test/read.cgi/gamedev/1005038280/
>こっちを利用しる
同感だな。おまえに一票いれておく。

15 :

再利用かよ。最終カキコが02/04/28か・・・
誰が利用すんだよ。そんなの・・・
そりゃ気がつかねーぞ。 こっちを本スレにすりゃいいじゃんよ。

16 :
>15
この板ではすんごい遅レスをたまに見かけたりするし、
問題ないと思う。
それはいいけど、普通スレ立てる前に検索くらいはするだろ。

17 :

んじゃー聞きたいがこのスレはどうするつもり?
削除依頼か?

18 :
>>17
削除依頼されて何のデメリットがあるのかね。
このスレを失うことで、一体誰が損をするというのかね。
君はそもそも何のために闘争しているのかね。

19 :
今日は削除依頼どころじゃない騒ぎになってるね。
多分、例のコピペが貼られる→自然に下がるっていういつもの
パターンになっちゃう。
んでスレの存在を皆が忘れた頃に誰かが空age→「上げんなヴォケ」と
誰かが罵倒→再び下がる
みたいないつものパターンも考えられる。

20 :
やっぱり終了AAウザいっす。
禁止にしてほスィ

21 :
>>4を殺せばいいのら

22 :
終了AA張ってるの一人でしょ
アクセス制限しろよ

23 :

>>18
そりゃー誰も損はしないさ。>>1以外は。
一体、その古いスレに情報を書き込んで何がどうなる?
誰も見ていないスレに情報を集約してどうなるんだ?
事実、「古くなったスレの情報」に誰も興味が無くなったから書き込まな
かった。だから落ちた訳だろ?
誰だかは知らんが、古いスレに誘導してどうなるんだよ。

24 :
>>23
どのみち意味などないと知っていて君は意味を求めている。
同じなんだよ。何もかも。
くだらない事はくだらない事であると気付いているなら
2chのあらゆる板の過去に習い、慣習に従えばいいだけなのよ。
無駄なエネルギーロスは賢明じゃない。新しい試みをするなら
もっと重要な物事に対してやればいい。

25 :
ワケワカラン方向へ逝っちゃダメ!

26 :

んで? 古いレスを上げてどうすんの?
別段、この会話に意味を見出すつもりは一切ないが。
>>1 をそっちに誘導すんの?

27 :
>どのみち意味などない

28 :

なんだそりゃ。結局、どっちでもいいって事か・・・
この会話の意味って奴は本当になかったんだな。じゃあ上げるなよ・・・
まぁ、、、 どうでもいいがな

29 :
今我々にできるのは、1が2chに繋ぐまでやきもきする事だけだ。

30 :

>>29
了解した。
これを見て >>1 がどういう反応するか今から楽しみだ(W
楽しみは今日の夜だな。(WWWWW

31 :
            o
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無事に  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /   モララーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ・∀・) /                /(・∀・ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)

32 :
激しくジサクジエン臭いレスがいっぱいだな

33 :
>>32
重複禁止のルールを知らない時点で終わっていると思われる。
しかし、「古いから」という理屈があるとは予想していなかっただけに大収穫。
どこの駄板の習慣だろね。<古いから

34 :
         | |‖│||
    ┌― | |‖│|| ―┬────
    |   | |‖│||   |
    |             | | ̄ ̄ ̄
    |   / ̄ ̄∨ヽ.  |  |
    |   /     ∨.  | |___
    |  /___________ヽ  |ガシャン
    |  / | \/_|ヽ  |
    |  | |  ゚| □| \.|
    |  | |  ゚|  |\__|つ
    |  | |  ゚|  |  |
_       ______________│
  \    /
    \/
        ∫ フー
   ∧,,∧ ∬       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚ノ,っ━~  < 1よ、昔こ〜ゆ〜事されたのか?
_と~,,,  ~,,,ノ_. ∀  \  まぁいい、昔の事は聞かねぇから削除依頼出して来い
    .ミ,,,/~),  .| ┷┳━ \ ________
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃

35 :
>>3のプログラムをコンパイル(って言うんですよね)
したのも上げてホスィんですけど・・・プログラムに興味は
あるんですけど、C++はまだよく分からないので・・・お願いします・・・

36 :
goto(sine);

37 :
>>35
コンパイルだけならC++の知識はいらんぞ。フリーなのもあるから金もいらん。

38 :
>>37
>35は>1が自スレを上げるために書いたレスだと気付け。
>1の文面を読めばこの糞素人が「自分の」スレに
どれだけ執着を持つタイプか伝わってくるだろ?

39 :
bra $-2

40 :
とりあえずスレ違いの話題には
あまりレスを付けない方針でいきましょう。
>>35
実行してもあまり楽しいものではないですが…
FLASHへの移植を検討中ですので、期待せずに待っててください。

41 :
ポーカーゲームを作成中です。
検索とか使わないで今までの勉強の成果のみでやってみます。
いちおうポーカーが遊べる状態にはなりました。
あとは役の判定とかを作ればいいと思います。
1つのファイルにまとめて書いてしまっているので
見にくいでしょうが…
C++です
ソースのみ
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/poker01.txt
実行ファイル込み
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/poker01.zip
0(替える)と1(残す)をスペースで区切って5つ入力後Enterです。
<例>
0 1 0 0 1  (1,3,4番目のカードを替える)
変な入力をするとバグりますので
その時は、Ctrl + C で終了してください。

42 :
足し算するプログラム。モード切替機能付
#include <stdio.h>
void main(){
int a,b,c;
char m;
printf (" *select mode* \n");
m=getchar();
if(m = '+'){
printf(" +tasizan+ \n");
scanf ("%d",&a);
scanf ("%d",&b);
c = a+b;
printf ("%d\n",c);
}
else{
printf ("kaihatutyuu..");
}
}

43 :
モード切替機能がすごすぎるですね!
配列の勉強中。理想は式を打ち込んだら構文を解析して勝手に計算してくる奴作りたいdeath!

44 :
ごめん、漏れ1に萌えちゃった。

45 :
モード切替機能最高にかっこよすぎです。参考にさせていただきます

46 :
異次元スレ

47 :
異次元配列の勉強中です!

48 :
>>43の式の構文解析って逆ポーランド記法だっけ?
y=ax+bが
yax*b+=に変換して計算するやつ。

49 :
再帰下降じゃないのかなぁ・・・内部で式を逆ポーランドにするけども。

50 :
ポーカーclassが形になりました。
変な入力をするとバグるのは相変わらずです…
カードの交換操作は>>41と同じです。
C++です。
ソースのみ
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/poker.txt
実行ファイル込み
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/poker.zip
相変わらず見難いソースですが…
他のテーブルゲームのclassをいくつか作れば
カジノになりますねー。

51 :
>>48-49
イヤ、なんと呼ばれるのかは知らないが、そんな高級なのじゃないと思う。
入力を配列に入れて、その配列の要素が数字か文字か判定していくニダ
たとえば「15*3」と入力する。プログラムはそれを配列に入れ、まず変数aに15を入れ、*を読み込んで掛け算モードにして、
3を読み込んで変数bにいれて計算。配列の中身を一つずつ調べてそれが数字か文字か判定するって感じかな!
しかし、「{(10+3)*5}/5」とかはどうやってやるのかなあとか思うので、みんな考えてチョ
まあコンピュータにやらせるなら逆ポーランドは便利な記述法なのかなと思う

52 :
>>51
僕はまだ、クイックソートやマージソートが
何をやっているのか、ってのがやっと解りはじめた
程度のヘタレなんですが…
難しいですね。
全くと言っていいほど、やり方が思いつかないです。
()内の式を再帰で渡す形でバラバラにしていくのかなぁ?
頭の体操になりそうなので、毎日ちょっとずつ考えよう…

53 :
俺は51だが、俺のレベルもそのくらいだYo!>52
のほほんと頑張ろうぜ

54 :
逆ポーランド記法は、スタックを使って実現。
まず、逆ポーランド記法に数式をなおす。
{(10+3)*5}/5 → 10 3 + 5 * 5 /
と言うようになる。
まずは、数式を逆ポーランド記法になおす関数をつくり、結果を配列A[]にいれる。
次に、逆ポーランド記法の計算をする関数を作る。
A[]から一つずつ要素を取り出して、演算子かどうかを判断しながらスタックに格納していく。演算子だった場合は、計算を行う。
動作1:数字がきているので、そのままスタックに積む。
|10|
動作2:数字がきているので、そのままスタックに積む。
|10| 3|
動作3:演算子"+"がきているので、A[0] + A[1] をして、A[0]に代入。
|13|
動作4:数字がきているので、そのままスタックに積む。
|13| 5|
動作5:演算子"*"がきているので、A[0] * A[1] をして、A[0]に代入。
|65|
動作6:数字がきているので、そのままスタックに積む。
|65| 5|
動作7:演算子"/"がきているので、A[0] / A[1] をして、A[0]に代入。
|13|
動作8:要素がなくなったので、A[0]を出力して終了。

55 :
勉強になりますた

56 :
>>50
不覚にもハマッタよ。>>ポーカー
でも、もしかしたら
ロイヤルストレートってところで
入力をミスってオジャンにナターヨ。
入力ミスのチェックはしないのかな?

57 :
すいません、ポーカーclassにバグがありました。
>>56さんの書き込みを見て、何となくソースを
見直してみたんですけど、Flashの判定でバカなミスをかましてました。
コッソリ修正しておきましたので報告です。URLは>>50と同じです。
>>56
僕がヘタレだからエラーチェックが入っていないってのも
あるんですけど、後で再利用したり、手を加えることを考えて、余計な
コードは書かないようにしています。暇があったら改良してやって下さい。
あと、すいませんが遊ぶ時は修正版をダウンロードし直して下さい…

58 :
>>54
>逆ポーランド記法に数式をなおす。
これがえらい難しいですね…
難しいというか、ただ面倒くさいだけなのかもしれませんが。
検索すれば答えはあるんでしょうけど、なんとか
自分で作ってみたいなぁ。

59 :
逆ポーランドに直すのはかなり簡単だろ。
構文解析でも基礎中の基礎じゃないか。
優先順位と括弧にだけ気をつければ良いんだから。

60 :
とりあえずここまで… 残りは後で考えます
#! /usr/bin/env ruby
def infix_to_postfix(expr)
 stack = ['(']
 result = []
 operator_priority = {
  '*' => 50, '/' => 50,
  '+' => 20, '-' => 20,
  '(' => 10, ')' => 10,
 }
 expr.each{ |x|
  if '+ - * /'.split.include?(x)
   # operator
   while operator_priority[stack.last] >= operator_priority[x]
    result.push(stack.pop)
   end
   stack.push(x)
  else
   result.push(x) # operand はそのまま出力
  end
 }
 while not stack.empty? and operator_priority[stack.last] >= operator_priority[')']
  result.push(stack.pop)
 end
 result.pop # 最後は'('が入ってるので捨てる
 result
end
puts infix_to_postfix(ARGV[0].split).join

61 :
逆ポーランドへの変換プログラムです。
+ - * / 演算に対応しています。小数の使用可です。
()は使えません。入力時にスペースとタブを入れても大丈夫です。
今回はC言語です。
ソース
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/MtoB.txt
実行ファイル込み
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/MtoB.zip
なんか、ソースのコメントからして駄目さがにじみ出ていますが。
>>59
とりあえず、自分の理解した範囲で挑戦しました。
いずれ、完璧なものが出来たらUPさせていただきます。
>>60
rubyなのですか?僕には読めません…スマソ

62 :
逆ポーランドが終わったら正規表現をやると良い。
たぶん、コレも興味が持てるだろう

63 :
期待age
上にあるのは糞スレばっかり。
健闘を祈ります。

64 :
kusosure washo-i

65 :
プログラマの卵がんがれー

66 :
最近はアルゴリズムより言語の仕様の勉強中心なので
UPする(意味がある)ものが少ないです。というわけで
>>3をFLASHに移植してみることに。
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/Maze.swf
(IEならF5で)リロードしてみてください。
毎回違った迷路が作成されるはずです。今はこれだけです。
これをもとに、ちょっとしたミニゲームを作る予定…(未定ですが)
ソース(ファイルを開くのにFLASH5が必要です)
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/Maze.zip
なんか、FLASHだと(C/C++と比べて)混沌としてしまいますね。
でも、ActionScriptが分かる人なら簡単に改造できると思います。
ソースの80%ほどは、>>3のC++のソースからのコピペで済みました。
次回のUPまでに、もう少しコメントをしっかりと書いておきます。

67 :
メタセコイアっぽいマウスによるカメラの制御方法です。
回転にはクォータニオンを使ってます。
void CMouseListener::RotateCameraPosition()
{
int dx = mouseoldx - mou;
int dy = mouseoldy - mousey;
float dtheta1 = dx*D3DXToRadian(1)/2;
float dtheta2 = dy*D3DXToRadian(1)/2;
D3DXVECTOR3 axis1 = D3DXVECTOR3(0.0f,1.0f,0.0f);
//x-z平面上で見たときの角度を取得
float thetaaxis2 = (float)atan2(-vCameraPos.x,-vCameraPos.z);
//π/4回転させる
D3DXVECTOR3 axis2 = D3DXVECTOR3(cosf(thetaaxis2),0,-sinf(thetaaxis2));

//続く

68 :
D3DXQUATERNION q1,q2,
qi1,qi2;//逆クオータニオン
//dthetaだけaxisに対して回転
D3DXQuaternionRotationAxis(&q1,&axis1,dtheta1);
D3DXQuaternionRotationAxis(&q2,&axis2,dtheta2);

//逆クォータニオンを設定
D3DXQuaternionInverse(&qi1,&q1);
D3DXQuaternionInverse(&qi2,&q2);
//元のカメラの位置ベクトル成分を持つクォータニオン
D3DXQUATERNION qPos = D3DXQUATERNION(vCameraPos.x,vCameraPos.y,vCameraPos.z,0.0f);
D3DXVECTOR3 vNewPos1,vNewPos2;
//それぞれの軸についてカメラの位置を回転させたものを求めて
D3DXQUATERNION qNewPos1 = q1*qPos*qi1;
D3DXQUATERNION qNewPos2 = q2*qPos*qi2;
//ベクトルとして合成
vNewPos1 = D3DXVECTOR3(qNewPos1.x,qNewPos1.y,qNewPos1.z);
vNewPos2 = D3DXVECTOR3(qNewPos2.x,qNewPos2.y,qNewPos2.z);
//正規化
D3DXVec3Normalize(&vCameraPos,&(vNewPos2 + vNewPos1));

//元の大きさを持たせる
vCameraPos*= Dist;
//変換行列を作成、IDirect3DDeviceに与える
ApplyNewCameraPosition();
}

69 :
ゴメソ訂正
×//ベクトルとして合成
○//ベクトルとする
です。んでは学校行ってきます

70 :
ポインタの勉強をしたので
>>3の迷路生成クラスを、少し改良しました。
コンストラクタに二つの仮引数を渡すことで、迷路の大きさを自由に決定できます。
ソース
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/newMEIRO.txt
実行ファイル込み
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/newMEIRO.zip
変数名、コメントなども少しだけ改めました…精進します。

71 :
>>67-69
3Dですか〜。ゲーム製作の香りがしますねぇ。
僕は、どちらかというとゲームのルール自体は
2D前提で考えますね。(表示には3Dも使ってみたいですが)
ローグみたいなゲームを製作中です。
細かいデータをチマチマといじるのが好きなので。
あと、書き忘れましたが>>70はC++です。

72 :
>>71
実行してないから分からないんだが、生成した迷路データで
3D迷路を探索するゲーム作ったら?
Wizとか女神転生とかみたいな感じの。

73 :
>>71
どうもです。一人でちまちまコード打ってると気分が滅入ってくるので
これからもちょくちょく貼り付けさせてもらいにくるかもしれません。

74 :
役立たずかも
template<typename T, typename U>
T co_interface_cast(U from)
{
 T ret;
 HRESULT result;
 result = from->QueryInterface( __uuidof(T), reinterpret_cast<void**>( &ret ) );
 if ( FAILED( result ) ) {
  ret = NULL;
 }
 return ret;
}

75 :
>>74
ゲーム作るのにCOM使うのってどんなときですか?
xファイルを読み込むのぐらいにしか使ったことないyo

76 :
>>70
少しソースを見たけど
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<new>
は良くない無いなぁ、拡張子はきちんとつけようよ。

77 :
>>76
ネタはageて書こうぜ

78 :
あまり上げるネタがないですねぇ…
迷路ばっかりいじくっててナンですが
http://www.geocities.co.jp/SiliconValley-Cupertino/8770/mimiMaze.html
↑↓←→キーで移動できます。ミミズです。壁(固い土)も掘り進めます。
スクリプトの処理が多少重いので、環境によっては動きが悪いかもしれません。
これから、どんなゲームにしようか考えます。
>>78
大体は本で読んだとおりに書いているのですが…
ヘッダーファイルの拡張子は付けた方がいいのでしょうか?
ちょっと、検索してみます。すみませんが、まだ言語の理解が足りてないので…

79 :
>>76
最近、
#include<hoge>
ってくっつけて書くのが流行ってるのかなぁ?

80 :
関数呼び出しと同じ感覚なんじゃない?
include が関数名で(笑)。

81 :
× #include<hoge>
○ #include <hoge>
ですか?
コンパイラによっては正しく認識されなかったり
するのでしょうか…(僕はVC++6.0しか使ってないです)

82 :
#inluce<hege>
でも問題なしなんだろうけど、気になるね。
#include <hoge.cpp> とか #include <hoge.c>
で直接コンパイルしちゃう方法もあるから、ヘッダーファイルって事を明らかにする為にも
#include <hoge.h>
の方がいいとおもうよ。

83 :
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<new>
でもコレはC++標準じゃねーか

84 :
>>83
スマン、俺の知識が古かったのかもしれん。「C++標準」って言葉の意味が分からん。
VC++ではそうなるってこと?
それとも全てのC++で共通ってことなのか?
余計なこと言ったかもしれんな、逝ってくるよ・・・。

85 :
すべてのC++で共通。
Standard C++規格のライブラリで規定されている

86 :
>>84
調べてみましたが、C++ではファイル名の
重複を避ける為、拡張子を付けない形になっている
とのことでした。(違うのかもしれませんが)
ちなみに、conio.hはcconioってのが無いみたいなので
適当に#includeしちゃいました。
>>72
遅レスですが
実際にRPGみたいなゲームを作るときは
僕はランダムマップにはしないと思います。
出現する敵、アイテムに加えてマップまでランダムだと
バランスを取るのが大変ですし、1000回遊べる〜とかには興味がないので…
1〜2回でも満足できるゲームにするつもりです。

87 :
あと、>>78はFLASH5です。書き忘れでした。

88 :
よくわかんないけどSTGの弾幕の数式書き出すプログラム作ってよ。おながいします。

89 :
while(1)
{
printf("88逝ってよし\n");
}

90 :
>>88
数式じゃなくて、書き出すプログラム?
余り関係ないが、参考になるかも。
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index.html

91 :

 今…
     88が…
          … 逝 く ! ! ! ! ! ! !

92 :
>>90
ギャー!! これじゃー!! たぶん…
サンクスコーヽ(´д`)ノ
いやね、当方プログラマじゃないしなる気もないのでなんかスクリプトっぽいので
ミーシューでSTGを作ろうと思ってたのですよ。そしたら逝ってよしとか言われてるんです。
もうね、逝くかと、死ぬかと。
ごめんなさい。

93 :
ぷよぷよ消しアルゴリズムです。2回再帰しなくても良いようお知恵をお貸し下さい。
#define BX  6
#define BY  10
for( int x = 0; x < BX; x ++){
  for( int y = 0; y < BY; y ++){
    if( block[ x][ y].getActived()){
      int cnt = checkEraseBlock( x, y, block[ x][ y].getColor());
      if( cnt > 4) EraseBlock( x, y, block[ x][ y].getColor());
    }
  }
}
int checkEraseBlock( int x, int y, int color, int cnt)
{
  if( color == block[ x][ y].getColor() && block[ x][ y].getActived()){
    cnt ++;
    cnt = checkEraseBlock( x - 1, y + 1, color, cnt);
    cnt = checkEraseBlock( x - 1, y - 1, color, cnt);
    cnt = checkEraseBlock( x + 1, y + 1, color, cnt);
    cnt = checkEraseBlock( x + 1, y - 1, color, cnt);
  }
  return cnt;
}
void eraseBlock( int x, int y, int color)
{
  if( color == block[ x][ y].getColor() && block[ x][ y].getActived()){
    eraseBlock( x - 1, y + 1, color);
    eraseBlock( x - 1, y - 1, color);
    eraseBlock( x + 1, y + 1, color);
    eraseBlock( x + 1, y - 1, color);
    block[ x][ y].setErase();
  }
}

94 :
すいませんgetActived()ってなんですか?
で,分岐してからcolor調べずに分岐する前に調べたらどうでしょう?

95 :
フィールドと同じ配列を用意して、
状態を保存しておけば?

96 :
そう。
>      int cnt = checkEraseBlock( x, y, block[ x][ y].getColor());
>      if( cnt > 4) EraseBlock( x, y, block[ x][ y].getColor());
つながってる個数を調べるのと消すのを同時にやってるのが悪い。
cntは、各ブロックに覚えさせておいて、全ブロックのcntを計算してから
4以上のブロックのぷよを消せば、2回目の再帰は要らない。
再帰を使わないやり方もあるけど、ぷよぷよの場合は、返って効率悪いかな。

97 :
ちなみに、配列で状態を保存しておけば一度捜査したところの無駄な再帰は無くなる

98 :
>>94
各blockにstateflgを記録し、Actived(存在する)ならtrueを返します。
isActivedに変えました^^;colorを調べる順番変更させていただきました。
>>95>>97
blockの中に状態保持フラグがあり、そこで同動作を実現しております。
>>96
再帰の途中では、cnt<4の状態があり、この状態で2度と訪れない場合が
存在します。cnt>4条件で消していると、これらが消されないように思うのですが、
どうでしょうか?

99 :
再帰なんだけど、末尾再帰ではなく、
関数から戻るフェーズで一番下の層からの戻り値(カウント)をセットすれば?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【JAVA】2Dアクションゲームを作る【初級】 (190)
【65816:SNES】アセンブリ【6502:NES】 (227)
● 戦闘国家・大戦略ツクール ● (668)
C# C# C♯ でゲームを作ろう Part2 (329)
ゲーム作りませんか? (576)
【HSP】HSPで3Dゲーム 5 【3D】 (882)
--log9.info------------------
YahooBB総合 32 (669)
ブロードバンド@秋田 Part3 (860)
Yahoo! BBで急に速度が低下した人集まれ!7kbps (670)
KDDI auひかり 19 (852)
【中電】CTC コミュファ光 29回線目【KDDI】 (245)
【NTT】光の勧誘が来たら報告するスレ8【代理店】 (617)
OCN総合スレ 56 (726)
長野県のブロードバンドを語るスレ (866)
【スタート割】eo光83【長割】 (622)
【最大300Mbps】 Wi2 300 公衆無線LAN Pt.2 (492)
ソフトバンクBBから脅迫状が届いた (171)
【規制添え少な目】KCN-Net part9【解除処理迅速】 (603)
GMOとくとくBBってどうよ? その4 (253)
富山のケーブル事情について熱く語ろう (855)
【STNet】ピカラ 7【Pikara】 (124)
【ルーターIP電話内蔵】ADSLモデムNVIII/NVII/NVその5 (555)
--log55.com------------------
☆アクセサリー・ジュエリー・宝石好きな奥様 Part52★
恋する気持ち(IDなし) 90
☆転勤族の奥様 その124★
50歳〜54歳の奥様(ID梨) part10
【ID梨】イラッとくる他人の行動や言葉 その30【ID梨】
【サーチOK】ポケモンGOを楽しく語る奥様 57匹目
50代の奥様(ID梨) part372
嫌いだけど人に言えない芸能人・有名人125