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];
}
}
Visual Studio C# テトリス作成において分からない箇所
Re: Visual Studio C# テトリス作成において分からない箇所
コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。
この関数の最初で消したライン数を格納する変数を0に初期化し、
deleteフラグが立っている時に消したライン数を加算し、
この関数の最後で消したライン数に応じた得点を加算すればいいと思います。
「関数の最初」「関数の最後」はそれぞれjのfor文の前、後のことです。
かつきちんとインデントをしていただけると、見やすくて助かります。
この関数の最初で消したライン数を格納する変数を0に初期化し、
deleteフラグが立っている時に消したライン数を加算し、
この関数の最後で消したライン数に応じた得点を加算すればいいと思います。
「関数の最初」「関数の最後」はそれぞれjのfor文の前、後のことです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
MONO
Re: Visual Studio C# テトリス作成において分からない箇所
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# テトリス作成において分からない箇所
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);
}
揃わなかったときに、0点にリセットされてしまいます。
return で返却しようとも考えましたが、型をvoid から int にするとエラーを吐きます。
かなり初歩的な質問だとは思うのですが、このような場合どのようにするのが良いでしょうか?
Re: Visual Studio C# テトリス作成において分からない箇所
解決でしたら、解決したコードを提示し、解決チェックをお願いします。MONO さんが書きました:得点の表示、自己解決しました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
MONO
Re: Visual Studio C# テトリス作成において分からない箇所
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;
}
解決しました。