Visual Studio C# テトリス作成において分からない箇所

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MONO

Visual Studio C# テトリス作成において分からない箇所

#1

投稿記事 by MONO » 12年前

C言語初心者の者です。初めてこちらで質問させて頂きます。
C#のフォームでテトリスを作成しているのですが、一列揃うと消えるプログラムは調べて作成できました。
ここから一列消えると40点、2列消えると100点、3列消えると300点、4列消えると1200点というようにスコアを足していきたいのですが、どのようなプログラムが必要になるでしょうか?
教えてください。

void DeleteLine()
{
for (int j = 0; j < height; ++j)
{
bool delete = true;

for (int i = 0; i < width; ++i)
if (screen[i, j] == 0)
delete = false;

if (delete)
for (int k = j; k >= 1; --k)
for (int i = 0; i < width; ++i)
screen[i, k] = screen[i, k - 1];
}
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: Visual Studio C# テトリス作成において分からない箇所

#2

投稿記事 by みけCAT » 12年前

コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。

この関数の最初で消したライン数を格納する変数を0に初期化し、
deleteフラグが立っている時に消したライン数を加算し、
この関数の最後で消したライン数に応じた得点を加算すればいいと思います。
「関数の最初」「関数の最後」はそれぞれjのfor文の前、後のことです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

MONO

Re: Visual Studio C# テトリス作成において分からない箇所

#3

投稿記事 by MONO » 12年前

コード:

        void DeleteLine()
        {
            for (int j = 0; j < height; ++j)
            {

                bool delete = true;

                for (int i = 0; i < width; ++i)
                    if (screen[i, j] == 0) 
                        delete = false;

                if (delete)
                    for (int k = j; k >= 1; --k)
                        for (int i = 0; i < width; ++i)
                            screen[i, k] = screen[i, k - 1];                                         
            }
        }


申し訳ありませんでした、提示し直しておきます。
みけCATさん、アドバイスありがとうございます。

MONO

Re: Visual Studio C# テトリス作成において分からない箇所

#4

投稿記事 by MONO » 12年前

コード:


        void DeleteLine()
        {
            int sum = 0;
            var delCount = 0;

            for (int j = 0; j < height; ++j)
            {

                bool delete = true;

                for (int i = 0; i < width; ++i)
                    if (screen[i, j] == 0) 
                        delete = false;


                if (delete)
                {
                    for (int k = j; k >= 1; --k)
                        for (int i = 0; i < width; ++i)
                            screen[i, k] = screen[i, k - 1];

                    delCount++;

                }
                                            
            }
            sum = delCount * 100;

            label1.Text = Convert.ToString(sum);

        }

まずは1ライン揃うごとに100点を加算するプログラムを作ってみたのですが、1ラインで100点、2ラインで200点、加算されることはされるのですが、
揃わなかったときに、0点にリセットされてしまいます。
return で返却しようとも考えましたが、型をvoid から int にするとエラーを吐きます。
かなり初歩的な質問だとは思うのですが、このような場合どのようにするのが良いでしょうか?

MONO

Re: Visual Studio C# テトリス作成において分からない箇所

#5

投稿記事 by MONO » 12年前

得点の表示、自己解決しました。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: Visual Studio C# テトリス作成において分からない箇所

#6

投稿記事 by みけCAT » 12年前

MONO さんが書きました:得点の表示、自己解決しました。
解決でしたら、解決したコードを提示し、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

MONO

Re: Visual Studio C# テトリス作成において分からない箇所

#7

投稿記事 by MONO » 12年前

コード:


        int DeleteLine()
        {
            int sum = 0;
            var delCount = 0;

            for (int j = 0; j < height; ++j)
            {

                bool delete = true;

                for (int i = 0; i < width; ++i)
                    if (screen[i, j] == 0) 
                        delete = false;


                if (delete)
                {
                    for (int k = j; k >= 1; --k)
                        for (int i = 0; i < width; ++i)
                            screen[i, k] = screen[i, k - 1];

                    delCount++;

                }
                                            
            }
            if (delCount == 4)
                sum = 1200;

            if (delCount == 3)
                sum = 300;

            if (delCount == 2)
                sum = 100;

            if (delCount == 1)
                sum = 40;

            score = score + sum;

            return score;

        }

すみません、1から教えて頂きありがとうございます。
解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る