ぷよぷよのプログラム組んだことある奴いる?

公開日: : 最終更新日:2015/10/01 プログラミング, 初心者 , , , ,

1: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:09:05.656 ID:wKR0GFwi0.net
お前らの実装を教えてくれ
苦労話とかデータ構造とか工夫したところ

4: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:23:27.302 ID:QFeBTEct0.net
自作ってこと?

 

5: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:24:24.381 ID:wKR0GFwi0.net
>>4
うん

 

6: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:26:58.957 ID:QFeBTEct0.net
そんな界隈あるのか

 

7: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:28:21.841 ID:wKR0GFwi0.net
>>6
プログラム覚えたらテトリス作ってみるかってなるじゃん
テトリス作ったらぷよぷよ作ってみるかってなったのが俺

 

スポンサーリンク

8: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:30:01.268 ID:QFeBTEct0.net
どこまで再現したの?

 

9: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:33:39.580 ID:wKR0GFwi0.net
>>8
これくらい
3U0YUBx

 

16: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:48:21.400 ID:LFdtdLTJ0.net
>>9
頑張りすぎだろ

 

17: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:54:49.598 ID:wKR0GFwi0.net

>>16
サンキュー!

ぷよぷよのフィールドは 6 * 13 = 78マスあるんだが、
上下左右の壁も含めて 8 * 16 = 128マスにすることをオススメする
壁がないと操作中のぷよぷよを壁際で回転させたときに壁蹴りの判定が非常に面倒なことになる

 

10: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:35:14.523 ID:QFeBTEct0.net
すげえ!
言語は何使ってるん?

 

11: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:37:24.900 ID:wKR0GFwi0.net
>>10
C++だよ
C++の勉強の一環で作ったんだがぷよぷよ面白くてはまったわ

 

12: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:39:45.538 ID:hPlMt4D40.net
DXライブラリやんけ

 

14: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:41:55.483 ID:wKR0GFwi0.net
>>12
最初WINAPIでやったけど不便だったわ

 

13: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:39:48.401 ID:wKR0GFwi0.net
意外と作ってる奴いないな
テトリスはよく聞くんだがぷよぷよは難しいと思われてるのか

 

15: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:47:31.381 ID:wKR0GFwi0.net
勝手に実装について書いていくわ

 

18: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:57:30.127 ID:LFdtdLTJ0.net
これAIは何コンボくらい出せるの?

 

20: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:59:45.136 ID:wKR0GFwi0.net
>>18
この画像だと7連鎖だよ

 

19: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 22:58:42.259 ID:wKR0GFwi0.net
フィールドは一次元配列でも2次元配列でもいい
2次元配列のメリットはわかりやすいこと
デメリットは、今いるマスの上下左右を見たいときに方向を表す定数を2次元配列にしなければならないのですっきりしないことかな
1次元配列なら方向を表す定数はすっきり書けるし、たぶん早い

 

21: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:00:01.656 ID:hPlMt4D40.net
再帰嫌い

 

22: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:01:07.218 ID:wKR0GFwi0.net
>>21
連鎖判定についても書くわ
再起使わないとすっきりかけないよね

 

23: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:03:49.053 ID:qJAZg/Cy0.net
落下中のぷよに配列は使いたくないな
高さと幅の最大値だけ決めておいてx座標y座標で別々に管理するほうがよさげ
位置確定後に配列に格納

 

28: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:31:48.950 ID:wKR0GFwi0.net

ゲームに進行な関数だけど
・現在ぷよぷよが4つ以上つながっている場所を消す関数
・消した後スライドさせる関数
が大体必要になってくる。
実は操作関連の関数が結構めんどくさい。
左右の壁けりという関門を越え他と思ったら15段目の壁を用意してなくてぷよがメモリの海に逃げ出していくことがあった

>>23
俺は配列に入れてるけど、その実装はとてもいい思う

 

24: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:23:58.601 ID:xEE7L88i0.net
画像どっから手に入れてきたんだよ

 

26: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:27:34.725 ID:LFdtdLTJ0.net
>>1自身はぷよぷようまいの?

 

27: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:29:47.812 ID:wKR0GFwi0.net

>>24
ネットで拾った。描いたのもあるし、描いて貰ったのもある

>>26
ぷよぷよVS2でレート1000くらい
強い人から見たら断然弱いけど初心者ではないよ

 

30: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:36:33.026 ID:wKR0GFwi0.net

4つ以上つながっている場所を消す関数は

・あるマスのぷよがいくつつながっているのかを求める関数
・あるマスからつながっているぷよを消す関数

が必要になる。ここで再帰の処理がでてくる

 

31: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:44:24.394 ID:wKR0GFwi0.net
あるマスのぷよがいくつつながっているのかを求める関数だけど、ここの実装は人それぞれかなり違うと思う。
あるマスの上下左右を見て、同じ色があればそのマスの上下左右を見て、同じ色があれば……ってのを繰り返すわけだ
むしろ再帰を使わないで書く方法があったら知りたい

 

33: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:47:46.277 ID:wKR0GFwi0.net
気をつけるのは一度調べた場所は調べたフラグを立てないと無限ループするということかな
フラグ用のフィールドと同じサイズの配列を作って、調べた場所は1にするとかでいい
実際に消す関数もほとんど同様の実装でいける

 

34: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:50:00.070 ID:wKR0GFwi0.net
AIを作ってるんだけど、実は一番呼ばれる回数が多いのが
このあるマスからぷよがいくつつながっているのかを求める関数なんだ
だからこの関数は俺はとことん高速化した

 

35: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:54:13.946 ID:wKR0GFwi0.net

俺はフィールドを表す配列に色情報だけじゃなく、それがどことつながっているかを表す情報を含めている。
4方向それぞれに対してつながっているかつながっていないかだから2^4で16通り、4ビットあればいい
それを下位4ビットに当てている
そうすることによって、あるマスの上下左右に同じ色があるかどうかっていう4回のループを作る必要がなくなり
つながっている方向だけを見ればいいようになる

これはぷよぷよがつながっている画像を

 

36: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:55:03.672 ID:wKR0GFwi0.net
表示するときにも役立つから高速化とか考えてなくてもやったほうがいいよ

 

38: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:58:06.715 ID:wKR0GFwi0.net
スライドさせる関数は表示用に1マスずつずらす関数とAI用に一気にずらす関数の二つがある
これはほとんど誰でも思いつくようなやり方でやっているから特筆すべきことはない

 

39: 以下、\(^o^)/でVIPがお送りします 2015/09/26(土) 23:58:30.782 ID:hPlMt4D40.net
見てるぞ

 

41: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:03:03.867 ID:AwcBKA1Q0.net

>>39
じゃあもうちょっとだけ書くわ

高速化のために用意しとくといいと思うのは、
フィールドのx座標ごとの一番上にあるぷよぷよのy座標 + 1を記憶しておく配列
具体的にはint upper[8]とか用意してx軸にあるぷよぷよが9段目まで詰まれてたらupper[1] = 10にしておく

 

40: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:02:57.193 ID:ippw6bYs0.net

「ぷよが繋がっている数を求める処理」は、各ぷよに「『繋がっているぷよグループ』のID」をつけておくと簡単そう

(1) 下・右・左で同色のぷよを探す(上は上のマスにぷよが落ちてきた時に計算するので無視)
(2) (1)で見つかったぷよの『繋がっているぷよグループ』に含まれる全てのぷよに、同じ新規のぷよグループIDを割り当てる
(3) (2)で作られた各ぷよグループIDを持つぷよの数を数えて、4以上になるかどうかチェック

 

55: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:18:36.566 ID:ippw6bYs0.net
ちなみに>>40の方法のいいところは、
1回のループで4コ以上になっているグループが全て取れること
一気に下の方が抜けたりした場合に強い

 

42: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:05:02.229 ID:iqk0K4w20.net
ぷよぷよ程度のフィールドサイズならビット使って省メモリ化しなくてもいい気もする

 

51: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:14:13.604 ID:AwcBKA1Q0.net
>>42
色情報とつながっている場所情報を別の配列にすると、そこを空にしたいとき、二つに0を代入する必要が出てくる
高速化の面からしたらちょっと嫌なんだ

 

57: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:19:47.790 ID:iqk0K4w20.net
>>51
下位4ビットを1ビットずつ4回参照して方向を決定するのと
周りの要素を4回比較するのって結局メモリコスト以外何が違うんだってことが言いたかった

 

63: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:24:08.291 ID:AwcBKA1Q0.net
>>57
ちょっとずれた答えかもしれないけど
4ビットを4回参照したりはしない
1になっているビットの方向だけ調べてるから速度がぜんぜん違うよ

 

71: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:36:20.875 ID:iqk0K4w20.net

>>63
書き方が悪かったかもしれん
結局ビットが1かどうか色情報をマスクするなりして4回は比較する必要があるよね?
なら周りのぷよ4つが同色か比較するのと何が違うんだってこと
配列にアクセスするための座標情報も結局再起的に調べるなら同じだけ必要になるからそこで違いは出ないと思う

かなと思ったけどメモリの局所性を考えると同色ぷよが周りに存在しない時に
本当に若干の高速化が見込めるのかな?とか思い始めたからもういいや

 

43: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:05:08.374 ID:AwcBKA1Q0.net

なんであるといいのかっていうと
盤面全体を調べるループが
for(int x = 1; x <= 6; x++)
for(int y = 1; y <= 13; y++)

って書かなくても
for(int x = 1; x <= 6; x++)
for(int y = 1; y < upper[x]; y++)
ってかけるようになるから。
他にもかなり多くのメリットがある

 

44: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:06:51.846 ID:MNII3MSC0.net
>>43
関係ないけど、ループ変数の初期値は0にする癖をつけといた方がいいぞ
コーディング規則としてそっちの方が一般的だから

 

46: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:09:10.347 ID:AwcBKA1Q0.net
>>44
field[x][y]って感じでアクセスしてるんだけど
field[0][y]とfield[x][0]は壁なんだ
この場合は許してくれるよね

 

50: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:12:14.710 ID:MNII3MSC0.net
>>46
ああ、壁なのか
ってことはもしかして、壁蹴りや着地の判定を(移動先)==field[0][y]とかってやってる?
そうでなければいいんだけど、もしやらかしてたらバグの原因なので修正した方がいい

 

45: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:07:27.506 ID:vIHjUbUsM.net
凄いなぁ
ここまで来たらオリジナルのビジュアルにして売り出したほうがよくね?

 

47: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:09:30.629 ID:ippw6bYs0.net
無視されてるかなしい……

 

48: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:11:18.111 ID:AwcBKA1Q0.net

>>47
いや答えようと思ってるよww

そのアイデアはありかもしれないが、
あるマスのグループIDがわかったとしてそれと同じグループIDを探す方法はどんな感じなんだ?
結局上下左右を見るか盤面全体を探すループを作るかになりそうなんだが

 

54: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:15:30.830 ID:ippw6bYs0.net
>>48
高々100コくらいだし、これくらいの大きさなら全ループでOKっしょ
真面目に塗り潰しアルゴリズムを使おうとするとスタックとか作ってやらなくちゃいけないから複雑になるけど、
単純なやり方で済むならその方がいい

 

56: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:18:55.588 ID:AwcBKA1Q0.net
>>54
うーん、考えが合わないようだ
AIから呼ばれる回数が一番多い関数なんだよ
高速化なしだと、AIは3手先ぐらいしか読めない

 

62: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:24:01.095 ID:ippw6bYs0.net
>>56
ああ、AIの方もそれやるのか
だったら落とした後の4つ以上チェック処理の時にキャッシュしておけばおk
2つ以上のグループを1つの新しいぷよで繋げる処理以外は、単純にグループ番号を探して+1するだけで済む

 

65: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:31:23.290 ID:AwcBKA1Q0.net
>>62
1連鎖しか起きない場合はいいかもしれないけど、2連鎖目以降からはグループの更新が大変な気がするな
消してスライドしたらフィールドが一気にずれるから

 

72: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:36:32.134 ID:ippw6bYs0.net
>>65
ごそっと落ちた場合に大変なのは、どんな方法でも同じじゃね?
ただ、AIの場合は「どこに何を置いたら何連鎖」だけ知ってればいいから、消した後の事は考える必要あるまい

 

60: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:23:06.439 ID:MNII3MSC0.net
>>56
何かのきっかけでぷよの位置が負になったり、最大値を超えたりすると大変なことになる
大昔はそれが原因でやたら落ちまくるPCゲーがよくあったりした

 

64: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:28:35.164 ID:AwcBKA1Q0.net
>>60
そっか、もっかい見直すよ

 

67: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:32:41.114 ID:MNII3MSC0.net
>>64
>>60だけど言いたかったこととしては
なんか枠があってその内側でのみ行われるイベントを作るときには
==じゃなくて<、定数じゃなくて範囲で指定した方がいいよってこと
3Dゲーの壁抜けとかもここを徹底すればそれなりに対策できたりする

 

58: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:20:12.031 ID:MNII3MSC0.net
俺なら座標をオブジェクト化して、格納ぷよ、接続ぷよ数と周辺にあるぷよ色のフラグを入れておく
ぷよが配置されたタイミングで周囲のマスの対応する色フラグを立てて、
ぷよが消えたタイミングでフラグを落とす
これなら走査も必要ない

 

59: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:20:53.914 ID:KafP2yLd0.net
C++って定数使わないのが一般的なの?

 

68: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:33:15.ウンコ ID:AwcBKA1Q0.net
>>59
使ってもいいんじゃない?
おれはconst int か enum で定義することが多いな

 

69: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:35:40.825 ID:MNII3MSC0.net
>>68
Java使いだけどstatic finalは使うなって言われたことがある
これってなんでダメなんだっけか? もしかしたら関係ないかもしれないけど
もし知ってたら教えてほしい

 

74: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:37:02.745 ID:AwcBKA1Q0.net
>>69
悪いがJavaで何かを作ったことはないからわからん

 

79: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:42:44.556 ID:AwcBKA1Q0.net
>>74
現在のツモを総当りで着手したときに、周りとのコネクト情報(って勝手に読んでる)をセットする
そのときに4個以上つながってたら連鎖が起こるフラグを立てるんだ。そこで呼ぶ。
連鎖フラグがたってたらAIが連鎖関数を呼ぶ。連鎖関数の中ではフィールドを走査するループがあるから、一つ一つに対して(実は違うけど)この関数を呼ぶ
あと連結数も数えてるから差分計算のために着手関数の中で呼んでる。ってな感じ

 

85: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:51:00.638 ID:0Soylz2v0.net
>>79
ぷよぷよが消える連鎖を考えるときに
状態が繰り返し変化するからそのたびに掲載しなおす必要があるってことか?

 

88: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:54:49.510 ID:AwcBKA1Q0.net
>>85
掲載って何
たぶんいってることはそのとおり

 

89: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:55:14.129 ID:0Soylz2v0.net
>>88
計算しなおすのミスタイプ

 

86: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:54:11.164 ID:MNII3MSC0.net
>>84
えっと、>>79を読んで連鎖フラグ云々っていうのがしっくり来なくって
もしかしたら「下に移動できるぷよがあるなら移動する」みたいなメソッドが
移動中、消去中の処理と独立してあるのかなあと

 

90: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:57:39.489 ID:AwcBKA1Q0.net
>>86
いや、してないよ
連鎖フラグは1連鎖目が起こるかどうか判定するのに使う
この説明じゃちょっとよくわかってもらえないかもしれんな

 

78: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:41:22.975 ID:0Soylz2v0.net

>>69
static finalを使うななんて聞いたことないけど

メソッド使ってアクセスしろ
static finalが参照しているオブジェクトは不変じゃない

とか思い付くのはそんなとこか

 

77: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:39:45.479 ID:+eUHTpZCp.net
再起使うと機能安全の規格通らないっていう

 

80: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:45:07.592 ID:AwcBKA1Q0.net
再帰は自分自身を呼び出すってのに惑わされると混乱する
入力と出力だけに注目するべき
AIの実装で特にそう思った

 

81: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:47:50.876 ID:AwcBKA1Q0.net

4つ以上つながっている場所の見つけ方だけど、4つ以上つながっているぷよには
必ず2方向につながっているぷよが存在する
コネクト情報をもっておけば、これがすごく簡単に判別できる
コネクト情報をcとすると
c = field[x][y] & 0x0f;

if(c & c – 1)
{
//連鎖が起こるかもしれない
}
// 連鎖は起こらない

ってかける。これはコネクト情報を持つ大きなメリットだと思う

 

87: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:54:23.295 ID:ippw6bYs0.net
たぶん、>>1が考えてるAIと俺達が考えてるAIが違う

 

91: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 00:57:50.056 ID:MNII3MSC0.net
>>87
何となく感じた
多分「どこに何を置いたらどれがどの順番で消えて何連鎖するか」を計算する
アルゴリズムは作ってないだろうと言うのも

 

92: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:01:18.515 ID:AwcBKA1Q0.net

AIは

現局面から置ける手を列挙する(22通り)

ひとつ選んで着手

連鎖が起こるなら最後まで連鎖する

スコアを評価

連鎖が起きないならその局面において置ける手を列挙

着手

この繰り返しで最大スコアを求めて一番大きなスコアの1手目を着手するって感じのAIがひとつだな
相手の手も読むAIもあるよ

 

100: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:08:18.471 ID:ippw6bYs0.net
>>92
22通りのうち大半は、前のぷよを置いた時の結果を加工するだけで済むわけじゃん?

 

101: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:11:45.270 ID:AwcBKA1Q0.net
>>100
うん 位置ボーナスと連結数は差分計算してるよ

 

103: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:13:52.283 ID:0Soylz2v0.net

>>101
AIで仮想的に変更したときにコネクト情報も変わるだろ
でもそれは現在の状態とは違うからそれを変えたくはない

仮想的に変更するときは現在のぷよの情報をすべてコピーしてる?

 

104: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:17:07.513 ID:AwcBKA1Q0.net
>>103
AIに考えさせるときはすべてコピー渡しだね

 

106: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:20:23.307 ID:0Soylz2v0.net

>>104
なるほどなあ

それだったら接続ぷよ数の情報も保持させたほうがいいと思うんだけど
接続ぷよ数は毎回計算しているのはどうして?

 

107: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:24:01.688 ID:AwcBKA1Q0.net
>>106
接続ぷよ数は着手時にコネクト情報を更新したときに変わるかもしれないよね
連結数を持ってるんだけど、これは3個の配列で0番目には連結数1のぷよの数、
1番目には連結数2のぷよの数、2番目には連結数3のぷよの数が入ってる
連結数を更新するためには、今着手したぷよがそこからいくつつながっているのかを調べなければならない

 

110: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:28:47.563 ID:0Soylz2v0.net
>>107
マスごとに接続ぷよ数の情報を保持して
ぷよが落ちてくるか、消すかしたら、上下左右のマスを更新するってすれば
良さそうな気がするけど何か見落としてる?

 

112: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:31:42.850 ID:AwcBKA1Q0.net
>>110
走査しているぷよを着手するときならそんなに更新の手間はかからないけど、
連鎖が起こるとフィールドがガラッと変わるから、そのときに結局すべてのフィールドを見る必要が出てきそうだなと
せっかく更新しても次の連鎖が起こったら変わってくるし
そういう意味で時間がかかると思う
どんな方法使っても時間はかかるんだけど、結局コネクト情報持たせるだけに落ち着いてるよ

 

113: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:32:19.802 ID:AwcBKA1Q0.net
>>112
走査じゃなくて操作だった

 

116: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:34:32.766 ID:ippw6bYs0.net
>>112
そもそも「幾つ連鎖するか」ってのは持つ必要ないんじゃない?
評価を工夫すれば、「消せる=大連鎖」にできそう

 

118: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:36:31.346 ID:AwcBKA1Q0.net
>>116
連鎖関数を通さずにどれくらいの大きさの連鎖かわかる方法があるとは思えん

 

121: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:40:37.600 ID:ippw6bYs0.net

>>118
「連鎖を邪魔する場所には置かない」
「なるべく連鎖が発動するように置く」
「どうしょもなかったら消す」

この3つのルールだけで、消す=最大限連鎖するになる

 

122: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:43:18.961 ID:0Soylz2v0.net

>>121
横からだが

「連鎖を邪魔する場所には置かない」
「なるべく連鎖が発動するように置く」

ってのが連鎖関数を使わずに分かる方法がないんだろ

 

123: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:55:18.702 ID:ippw6bYs0.net
>>122
それぞれ連鎖チェックは1回で済むから、3連鎖以上の事を考える必要がない

 

119: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:37:31.957 ID:0Soylz2v0.net

>>112
影響を受けるのは変化したマスの上下左右のマスだけだから
変化したマスの上下左右にだけ伝播するってロジックにすれば
だいぶ節約できるんじゃないかな

連鎖のときにコネクト情報が変わるっていうのは一緒だから
同じやり方でできそう

全体のコードが分からないからはっきりしないが

 

スポンサーリンク

93: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:01:23.632 ID:0Soylz2v0.net

コネクト情報と接続ぷよ数の関係がよく分からない

あるマスからぷよがいくつつながっているかの情報は毎回計算する
同色のマスと隣接しているかの情報は保持してるってこと?

 

95: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:02:40.951 ID:AwcBKA1Q0.net
>>93
そのとおり
コネクト情報はフィールドの要素の下位4ビットに入ってていつでも参照できる

 

94: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:02:05.714 ID:aL4svUwPa.net
本家再現なのか?
オリジナルの何かを付けたりしたら面白そうだが

 

96: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:04:07.409 ID:AwcBKA1Q0.net
>>94
オリジナルバージョンもあるよ

 

102: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:12:43.480 ID:aL4svUwPa.net
>>96
どんな改変か気になる

 

105: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:19:28.637 ID:AwcBKA1Q0.net
>>102
近々公開すると思うからお楽しみに

 

111: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:30:04.967 ID:aWC1a1zB0.net
ぷよぷよってAIプログラミングの題材として面白いの?

 

114: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:33:03.504 ID:AwcBKA1Q0.net
>>111
チェスや将棋の探索法がそのまま使える奴が結構ある
面白いよ

 

115: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 01:33:29.726 ID:AwcBKA1Q0.net
付き合ってくれてありがとう
寝るわおやすみ

引用元:http://viper.2ch.sc/test/read.cgi/news4vip/1443272945/

関連記事

FireShot Screen Capture #098 - 'Nayuta - ウェプページ結集サイト' - nottari_php_xdomain_jp

おい、なんか面白いサイト作ったからあそぼうぜ

1: 以下、\(^o^)/でVIPがお送りします 2015/07/10(金) 13:27:54.8

記事を読む

https---www.pakutaso.com-assets_c-2015-05-N811_notepcwosawarubiz-thumb-1000xauto-14749

趣味でプログラミングやるならVBAとC言語どっちやるべき?

1: 以下、\(^o^)/でVIPがお送りします 2015/05/25(月) 22:16:09.0

記事を読む

You-Should-Definitely-Know-About-PHP7

『PHP7』、 12月3日メジャーリリース!!

1: 番組の途中ですがアフィサイトへの\(^o^)/です (オッペケ Sr8d-y8Vw) 20

記事を読む

https---www.pakutaso.com-assets_c-2015-06-GREEN_O20140125-thumb-1000xauto-16629

JAVAでぐだぐだプログラミング講座はっじまっるよーwwwww

1: 名無しさん@おーぷん 2015/05/23(土)01:45:50 ID:haY よろしくお

記事を読む

bsAL202syazai220140830165542

JavascriptもPHPも挫折したんだけど、もっと簡単なプログラミング言語は無いの?

1: 番組の途中ですがアフィサイトへの\(^o^)/です (ワッチョイ c576-2/7G) 20

記事を読む

https---www.pakutaso.com-assets_c-2015-02-BON85_pcsutu20150207161815500-thumb-autox1000-12110

パソコン持ってるならプログラミング、作曲、作画、3DCG、動画作成できて当たりまえだよな

1: 以下、\(^o^)/でVIPがお送りします 2015/05/16(土) 18:25:04.4

記事を読む

43229ad807120631f052743290374151_s

全てが機械化されて働かないで良い世界が来たら問題ってなんかある?

1: 以下、\(^o^)/でVIPがお送りします 2015/06/13(土) 23:13:53.4

記事を読む

bsLISA78_MBAsawaru20141018102912

こういうWEBサイト作り始めたいんだけど、色々教えろカス

1: 以下、\(^o^)/でVIPがお送りします 2015/10/08(木) 20:42:03.8

記事を読む

https---www.pakutaso.com-assets_c-2015-01-LISA78_hozonshitene-20141018102704500-thumb-autox1000-5887

お前らってパソコン関連のことっていつ覚えたの?

1: 以下、\(^o^)/でVIPがお送りします 2015/05/12(火) 22:21:44.3

記事を読む

150130-php7

PHP7に初のアルファ版登場

1: 番組の途中ですがアフィサイトへの\(^o^)/です 2015/07/02(木) 20:10:

記事を読む

Huawei-Mate-8-benchmark-post-launch_1
Androidのベンチマーク、10万点を突破 インフレが止まらない

1: 番組の途中ですがアフィサイトへの\(^o^)/です (ニククエ

hGJvbfh
せっかくの休みだ。原付で>>5に行く。

1: 名無しさん@おーぷん 2015/11/29(日)06:13:2

9xHNnte
XperiaZ5からdocomoのロゴだけ消せるシートが発売開始

1: 番組の途中ですがアフィサイトへの\(^o^)/です (アウアウ

bsLISA78_MBAsawaru20141018102912
子供にプログラミング教えることになりそうなんだが、どうやって教えたら良いんだ?

1: 以下、\(^o^)/でVIPがお送りします 2015/11/2

top
国内で最大容量の8THDDが2万円台に値下がり

1: 海江田三郎 ★ 2015/11/29(日) 14:43:35.

→もっと見る

PAGE TOP ↑