トップ
新規
単語検索
ヘルプ
puyo
をテンプレートにして作成
開始行:
*ぷよぷよプロジェクト [#f2dc0bfe]
**ぷよコードby吉岡 [#t3934187]
O-Camlのプリントを見直しながら、記述したコードを書いてお...
下記はremove関数を実装するためのものです。
type color = RED | BLUE | GREEN | YELLOW;;
type puyo=COLOR of color|JAMA|DEL_COLOR;;
DEL_COLORを消す予定ぷよとしています。
let rec deletecheck' plist y =
match y with
0 -> DEL_COLOR::(List.tl plist)
| y ->(List.hd plist)::(deletecheck' (List.tl plist) (y-...
let rec deletecheck plist (x,y)=
match x with
0 -> (deletecheck' (List.hd plist) y)::List.tl plist
| x ->List.hd plist::(deletecheck (List.tl plist) (x-1,y...
消すぷよリスト要素をDEL_COLORに置換する関数です。
リストの要素を消す既存関数はあるのでしょうか?
let rec delete plist=
match plist with
| [] -> plist
| plist -> (List.filter (fun l -> l != DEL_COLOR)(List.h...
消す予定ぷよを実際にリストから消去する関数。
let rec remove t v =
match v with
[] -> delete t
| v ->(remove (deletecheck t (List.hd v)) (List.tl v));;
let vanish t =
let connected t = []
in List.flatten(List.filter (fun l -> List.length l >= 4...
連結を調べるconnected関数ができません・・・orz
let rec rensa i p j t =
match vanish t with
[] -> (p,j,t)
| v -> rensa (i+1) (p+40*i) (j+(j+1)*i) (remove t v);;
現状状態だとconnectedができても、ぷよが消える時にその上下...
-なるほど、「消す」という情報を一旦 DEL_COLOR に押し込め...
関数型言語では list の威力を発揮させるために、一旦中間的...
吉岡君が OCaml に慣れてきているからこそ思い付いたのだと思...
改良するとすると、
+消すかどうかの 1 ビットの情報なので、option 型を利用でき...
+List.mapi : (int -> 'a -> 'b) -> 'a list -> 'b list という
「今リストの何番目の要素を参照しているのかを教えてくれる ...
簡単に実装できそう.
といった点でしょうか. 例えばこんな感じ.
let remove t v =
let marked =
mapi
(fun i l ->
mapi
(fun j x ->
if List.mem (i, j) v then
None
else
Some x) l) t
in
let take_some l = function
None -> l
| Some v -> v :: l
in
List.map (List.rev $ (List.fold_left take_some [])) ma...
(小笠原)
-そういえば、お邪魔ぷよを消す処理を追加しないといけません...
とりあえず、connected を貼っておきます. graph の型は、Geo...
module Geom = struct
type t = int * int
let compare a b =
let c =
compare (fst a) (fst b)
in
if c = 0 then
compare (snd a) (snd b)
else
c
end
module GSet = Set.Make(Geom)
(**
take connections.
*)
let connected t =
let rec take_connection g t c =
if GSet.is_empty t then
g, GSet.elements c
else
let loc =
GSet.choose t
in
let t =
GSet.remove loc t
in
let c =
GSet.add loc c
in
let t =
try
GSet.union t
@@ GSet.filter (fun elem -> not (GSet.mem elem c))
@@ List.assoc loc g
with
Not_found -> t
in
take_connection (List.remove_assoc loc g) t c
in
let rec reduce_graph cs = function
[] -> cs
| ((loc, _) :: _) as g ->
let traverse =
GSet.add loc GSet.empty
in
let g', connect =
take_connection g traverse GSet.empty
in
reduce_graph (connect :: cs) g'
in
reduce_graph [] (make_graph t)
**作成の流れ [#z36d4b81]
+モデル作成
+UIの作成
+対戦する敵のアルゴリズム作成
+テスト&レビュー
こんなとこでしょうか? 1がおおよそ出来れば、2と3は同時並行...
**参考 [#m76b1453]
http://www13.plala.or.jp/kymats/study/game_other/TOKOPUYO...
もっと他にもあると思う
**モデル [#a8f8f693]
type color = RED | BLUE | GREEN | YELLOW | SEE_THROUGH
type kind = NORMAL | JAMA
type puyo = { color : color; kind : kind }
こんな感じで。あとは空間とぷよの配置の定義すればおしまい。
配置から消えるぷよを求める関数とか作っとくと便利かな。
追記よろしく :)
**空間とぷよ反応 [#c845d6d8]
type space = puyo list list
let react (p:ps) = ...
型spaceは空間を表す.
react : space -> option (int, space) を想定.結果がNONEの...
あと画面のエフェクトを考えると,消えたぷよの位置のリスト...
ところでどうやって再帰で書くんだろう.
配列を使って破壊的なアルゴリズムを記述するなら,割に簡単...
純粋関数的にやるとどうなる? Stateモナドを使うか,継続渡...
#ありがとうございます。すばらしいです。とってもいい感じだ...
ところで、上記の react 関数をエレガントに記述する為に、そ...
別にもったいつける訳ではないのですが、皆さん少し考えてみ...
終了行:
*ぷよぷよプロジェクト [#f2dc0bfe]
**ぷよコードby吉岡 [#t3934187]
O-Camlのプリントを見直しながら、記述したコードを書いてお...
下記はremove関数を実装するためのものです。
type color = RED | BLUE | GREEN | YELLOW;;
type puyo=COLOR of color|JAMA|DEL_COLOR;;
DEL_COLORを消す予定ぷよとしています。
let rec deletecheck' plist y =
match y with
0 -> DEL_COLOR::(List.tl plist)
| y ->(List.hd plist)::(deletecheck' (List.tl plist) (y-...
let rec deletecheck plist (x,y)=
match x with
0 -> (deletecheck' (List.hd plist) y)::List.tl plist
| x ->List.hd plist::(deletecheck (List.tl plist) (x-1,y...
消すぷよリスト要素をDEL_COLORに置換する関数です。
リストの要素を消す既存関数はあるのでしょうか?
let rec delete plist=
match plist with
| [] -> plist
| plist -> (List.filter (fun l -> l != DEL_COLOR)(List.h...
消す予定ぷよを実際にリストから消去する関数。
let rec remove t v =
match v with
[] -> delete t
| v ->(remove (deletecheck t (List.hd v)) (List.tl v));;
let vanish t =
let connected t = []
in List.flatten(List.filter (fun l -> List.length l >= 4...
連結を調べるconnected関数ができません・・・orz
let rec rensa i p j t =
match vanish t with
[] -> (p,j,t)
| v -> rensa (i+1) (p+40*i) (j+(j+1)*i) (remove t v);;
現状状態だとconnectedができても、ぷよが消える時にその上下...
-なるほど、「消す」という情報を一旦 DEL_COLOR に押し込め...
関数型言語では list の威力を発揮させるために、一旦中間的...
吉岡君が OCaml に慣れてきているからこそ思い付いたのだと思...
改良するとすると、
+消すかどうかの 1 ビットの情報なので、option 型を利用でき...
+List.mapi : (int -> 'a -> 'b) -> 'a list -> 'b list という
「今リストの何番目の要素を参照しているのかを教えてくれる ...
簡単に実装できそう.
といった点でしょうか. 例えばこんな感じ.
let remove t v =
let marked =
mapi
(fun i l ->
mapi
(fun j x ->
if List.mem (i, j) v then
None
else
Some x) l) t
in
let take_some l = function
None -> l
| Some v -> v :: l
in
List.map (List.rev $ (List.fold_left take_some [])) ma...
(小笠原)
-そういえば、お邪魔ぷよを消す処理を追加しないといけません...
とりあえず、connected を貼っておきます. graph の型は、Geo...
module Geom = struct
type t = int * int
let compare a b =
let c =
compare (fst a) (fst b)
in
if c = 0 then
compare (snd a) (snd b)
else
c
end
module GSet = Set.Make(Geom)
(**
take connections.
*)
let connected t =
let rec take_connection g t c =
if GSet.is_empty t then
g, GSet.elements c
else
let loc =
GSet.choose t
in
let t =
GSet.remove loc t
in
let c =
GSet.add loc c
in
let t =
try
GSet.union t
@@ GSet.filter (fun elem -> not (GSet.mem elem c))
@@ List.assoc loc g
with
Not_found -> t
in
take_connection (List.remove_assoc loc g) t c
in
let rec reduce_graph cs = function
[] -> cs
| ((loc, _) :: _) as g ->
let traverse =
GSet.add loc GSet.empty
in
let g', connect =
take_connection g traverse GSet.empty
in
reduce_graph (connect :: cs) g'
in
reduce_graph [] (make_graph t)
**作成の流れ [#z36d4b81]
+モデル作成
+UIの作成
+対戦する敵のアルゴリズム作成
+テスト&レビュー
こんなとこでしょうか? 1がおおよそ出来れば、2と3は同時並行...
**参考 [#m76b1453]
http://www13.plala.or.jp/kymats/study/game_other/TOKOPUYO...
もっと他にもあると思う
**モデル [#a8f8f693]
type color = RED | BLUE | GREEN | YELLOW | SEE_THROUGH
type kind = NORMAL | JAMA
type puyo = { color : color; kind : kind }
こんな感じで。あとは空間とぷよの配置の定義すればおしまい。
配置から消えるぷよを求める関数とか作っとくと便利かな。
追記よろしく :)
**空間とぷよ反応 [#c845d6d8]
type space = puyo list list
let react (p:ps) = ...
型spaceは空間を表す.
react : space -> option (int, space) を想定.結果がNONEの...
あと画面のエフェクトを考えると,消えたぷよの位置のリスト...
ところでどうやって再帰で書くんだろう.
配列を使って破壊的なアルゴリズムを記述するなら,割に簡単...
純粋関数的にやるとどうなる? Stateモナドを使うか,継続渡...
#ありがとうございます。すばらしいです。とってもいい感じだ...
ところで、上記の react 関数をエレガントに記述する為に、そ...
別にもったいつける訳ではないのですが、皆さん少し考えてみ...
ページ名: