ページ 1 / 1
テトリス 回転の実装ができません
Posted: 2010年4月11日(日) 01:10
by 海老天
windows vista
vusual C++
DXライブラリを使用しています
現在自力でテトリスを組もうとしているのですが回転で躓いてしまいました
Zを押すと回転するようにしているのですがエラーは出ず処理そのものが行われません
Zを押したことは認識されているようなのですが……
ごちゃごちゃしたプログラムですがミスを指摘してくださる方お願いします
Re:テトリス 回転の実装ができません
Posted: 2010年4月12日(月) 09:34
by バグ
コメント文が少ないのと、ファイルを細かく分けすぎていて、全部読む気になれなかったのですが…
Zが押されたのを認識するところまでは確認できているようですので、それ以降の処理をざっと読んでみました。
turn_calc関数内でなんらかの処理を行って、turn_move関数で完結させてるって感じでしょうか?
で、turn_switchとturn_stateという変数が共に1である場合にturn_move関数の中身が実際に実行される…
turn_switchはturn_calc関数内でZが押された場合に問答無用で1になっているので、これは大丈夫かな?
となると、turn_stateが怪しいぞと。
turn_stateが変更される条件は、bblock[/url][/url]のメンバであるstateが1の場合に、同メンバのkind_stateの数値で上書きされると…
多分、ここが問題かな?前後の流れから察するにturn_state変数はkind_stateが1箇所でも1であったら0に戻ってはいけないっぽいけど0で上書きされている可能性が大きいですね…
下記のような感じでいかがでしょうか?
今、動作できる環境がないので未確認ですが…
void turn_calc()
{
if (CheckStateKey(KEY_INPUT_Z) == 1)
{
turn_state = 0; // ※ここでturn_stateを0クリアしておく
turn_switch = 1;
for (int i = 0; i < 10; i++)
{
for (int n = 0; n < 22; n++)
{
if (bblock[n].state == 1)
{
turn_number = bblock[n].kind;
turn_state |= bblock[n].kind_state; // ※1度でも1になったturn_stateが0にならないようにkind_stateとの論理和を求めるように変更
if ((ablock[i + 2][n].state == 1) || (ablock[i + 1][n + 2].state == 1))
{
turn_switch = 0;
}
}
}
}
}
}
Re:テトリス 回転の実装ができません
Posted: 2010年4月12日(月) 12:22
by 海老天
すみません
根本的にプログラムがまずかったようです
一から組み直したいと思います
Re:テトリス 回転の実装ができません
Posted: 2010年4月12日(月) 12:42
by バグ
以前作ったテトリスをアップしてますんで、よかったらダウンロードしてみてください。
開発言語がC#なので全てが参考になるか分かりませんが、大まかな流れとかは使える箇所があるかもしれませんので(^_^;)
http://park.geocities.jp/bugbugbugbug2001/