ここで質問するのは初めてなので、間違っていたら訂正してください。
駒を動かすたびに、約 1 秒遅れます。すべてのピースとタイルには画像があり、正確に 96 個の画像があります。ピースを移動するたびに、すべてが黒でクリアされ、グラフィックが更新されます。
チェスの初期の段階では、私は画像を持たず、代わりに異なる色を使用していましたが、数個の駒だけで目立ったラグはなく、駒は一瞬で動きました。
public void updateGraphics(PaintEventArgs e, Graphics g, Bitmap frame)
{
g = Graphics.FromImage(frame);
g.Clear(Color.Black);
colorMap(g);
g.Dispose();
e.Graphics.DrawImageUnscaled(frame, 0, 0);
}
関数 colorMap(g) は次のようになります。
private void colorMap(Graphics g)
{
for (int y = 0; y < SomeInts.amount; y++)
{
for (int x = 0; x < SomeInts.amount; x++)
{
//Tiles
Bundle.tile[x, y].colorBody(g, x, y);
//Pieces
player1.colorAll(g);
player2.colorAll(g);
}
}
}
colorAll 関数は、次のような colorBody(g) 関数をすべて実行します。
public void colorBody(Graphics g)
{
//base.colorBody() does the following: body = new Rectangle(x * SomeInts.size + SomeInts.size / 4, y * SomeInts.size + SomeInts.size / 4, size, size);
base.colorBody();
if (team == 1)
{
//If its a white queen
image = Image.FromFile("textures/piece/white/queen.png");
}
if (team == 2)
{
//If its a black queen
image = Image.FromFile("textures/piece/black/queen.png");
}
g.DrawImage(image, body);
}
最後に、駒を動かす関数:
public void movePiece(MouseEventArgs e)
{
for (int y = 0; y < SomeInts.amount; y++)
{
for (int x = 0; x < SomeInts.amount; x++)
{
if (Bundle.tile[x, y].body.Contains(e.Location))
{
//Ignore this
for (int i = 0; i < queens.Count; i++)
{
Queen temp = queens.ElementAt<Queen>(i);
temp.move(x, y);
}
//Relevant
player1.move(x, y);
player2.move(x, y);
}
}
}
}
これをすべて読んでくれてありがとう!コーディング例が不十分な場合は、プログラム全体へのリンクを作成できます。