Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;生成器-在棋盘上移动一个棋子将移动下一个棋子_C++_C++builder_Chess - Fatal编程技术网

C++ C++;生成器-在棋盘上移动一个棋子将移动下一个棋子

C++ C++;生成器-在棋盘上移动一个棋子将移动下一个棋子,c++,c++builder,chess,C++,C++builder,Chess,我有个问题。我有一盘国际象棋,我想让我的棋子在棋盘上随机移动。我不知道为什么,但当我移动一块时,下一块会移动,所以我写了移动(第一块)。在这种情况下,只有第一块不能移动。如何解决这个问题 formaJoc.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "formaJoc.h" //

我有个问题。我有一盘国际象棋,我想让我的棋子在棋盘上随机移动。我不知道为什么,但当我移动一块时,下一块会移动,所以我写了移动(第一块)。在这种情况下,只有第一块不能移动。如何解决这个问题

formaJoc.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "formaJoc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_FIGURI 20
TfJoc *fJoc;
Test fnc;
Piece *pc[MAX_FIGURI];
//---------------------------------------------------------------------------
__fastcall TfJoc::TfJoc(TComponent* Owner)
        : TForm(Owner)
{

        blBoard[0] = new Board (0, 0, fJoc);

        BlackRook1[0]   =  new bkRook1  ( 40, 40, fJoc);
        BlackRook1[0]   -> LoadImg();
        BlackRook2[0]   =  new bkRook2  (292, 40, fJoc);
        BlackRook2[0]   -> LoadImg();
        BlackKnight1[0] =  new bkKnight1( 76, 40, fJoc);
        BlackKnight1[0] -> LoadImg();
        BlackKnight2[0] =  new bkKnight2(256, 40, fJoc);
        BlackKnight2[0] -> LoadImg();
        BlackBishop1[0] =  new bkBishop1(112, 40, fJoc);
        BlackBishop1[0] -> LoadImg();
        BlackBishop2[0] =  new bkBishop2(220, 40, fJoc);
        BlackBishop2[0] -> LoadImg();
        BlackQueen[0]   =  new bkQueen (148, 40, fJoc);
        BlackQueen[0]   -> LoadImg();
        BlackKing [0]   =  new bkKing  (184, 40, fJoc);
        BlackKing [0]   -> LoadImg();
        BlackPawns[0]   =  new bkPawn  ( 40, 76, fJoc);
        BlackPawns[0]   -> LoadImg();
        BlackPawns[1]   =  new bkPawn  ( 76, 76, fJoc);
        BlackPawns[1]   -> LoadImg();
        BlackPawns[2]   =  new bkPawn  (112, 76, fJoc);
        BlackPawns[2]   -> LoadImg();
        BlackPawns[3]   =  new bkPawn  (148, 76, fJoc);
        BlackPawns[3]   -> LoadImg();
        BlackPawns[4]   =  new bkPawn  (184, 76, fJoc);
        BlackPawns[4]   -> LoadImg();
        BlackPawns[5]   =  new bkPawn  (220, 76, fJoc);
        BlackPawns[5]   -> LoadImg();
        BlackPawns[6]   =  new bkPawn  (256, 76, fJoc);
        BlackPawns[6]   -> LoadImg();
        BlackPawns[7]   =  new bkPawn  (292, 76, fJoc);
        BlackPawns[7]   -> LoadImg();

        WhiteRooks[0]   =  new whRook  ( 40, 292, fJoc);
        WhiteRooks[0]   -> LoadImg();
        WhiteRooks[1]   =  new whRook  (292, 292, fJoc);
        WhiteRooks[1]   -> LoadImg();
        WhiteKnights[0] =  new whKnight( 76, 292, fJoc);
        WhiteKnights[0] -> LoadImg();
        WhiteKnights[1] =  new whKnight(256, 292, fJoc);
        WhiteKnights[1] -> LoadImg();
        WhiteBishops[0] =  new whBishop(112, 292, fJoc);
        WhiteBishops[0] -> LoadImg();
        WhiteBishops[1] =  new whBishop(220, 292, fJoc);
        WhiteBishops[1] -> LoadImg();
        WhiteQueen[0]   =  new whQueen (148, 292, fJoc);
        WhiteQueen[0]   -> LoadImg();
        WhiteKing [0]   =  new whKing  (184, 292, fJoc);
        WhiteKing [0]   -> LoadImg();
        WhitePawns[0]   =  new whPawn  ( 40, 256, fJoc);
        WhitePawns[0]   -> LoadImg();
        WhitePawns[1]   =  new whPawn  ( 76, 256, fJoc);
        WhitePawns[1]   -> LoadImg();
        WhitePawns[2]   =  new whPawn  (112, 256, fJoc);
        WhitePawns[2]   -> LoadImg();
        WhitePawns[3]   =  new whPawn  (148, 256, fJoc);
        WhitePawns[3]   -> LoadImg();
        WhitePawns[4]   =  new whPawn  (184, 256, fJoc);
        WhitePawns[4]   -> LoadImg();
        WhitePawns[5]   =  new whPawn  (220, 256, fJoc);
        WhitePawns[5]   -> LoadImg();
        WhitePawns[6]   =  new whPawn  (256, 256, fJoc);
        WhitePawns[6]   -> LoadImg();
        WhitePawns[7]   =  new whPawn  (292, 256, fJoc);
        WhitePawns[7]   -> LoadImg();

}

int id, row, col;
int &porecla=id;
int rowColToPixel[10] = {40, 76, 112, 148, 184, 220, 256, 292, 0, 331};

//---------------------------------------------------------------------------

void movePiece(int piece, int col, int row)
{
   int left = rowColToPixel[col];
   int top  = rowColToPixel[row];
      switch (piece)
      {
      case(1): {fJoc->BlackRook1[1]->imPiece->Left=left;fJoc->BlackRook1[1]->imPiece->Top=top;break;}
      case(2): {fJoc->BlackKnight1[1]->imPiece->Left=left;fJoc->BlackKnight1[1]->imPiece->Top=top;break;}
      case(3): {fJoc->BlackBishop1[1]->imPiece->Left=left;fJoc->BlackBishop1[1]->imPiece->Top=top;break;}
      case(4): {fJoc->BlackQueen[1]->imPiece->Left=left;fJoc->BlackQueen[1]->imPiece->Top=top;break;}
      case(5): {fJoc->BlackKing[1]->imPiece->Left=left;fJoc->BlackKing[1]->imPiece->Top=top;break;}
      case(6): {fJoc->BlackBishop2[1]->imPiece->Left=left;fJoc->BlackBishop2[1]->imPiece->Top=top;break;}
      case(7): {fJoc->BlackKnight2[1]->imPiece->Left=left;fJoc->BlackKnight2[1]->imPiece->Top=top;break;}
      case(8): {fJoc->BlackRook2[1]->imPiece->Left=left;fJoc->BlackRook2[1]->imPiece->Top=top;break;}
      case(9): {fJoc->BlackPawns[8]->imPiece->Left=left;fJoc->BlackPawns[8]->imPiece->Top=top;break;}
      }
}

//---------------------------------------------------------------------------

void __fastcall TfJoc::btnStartClick(TObject *Sender)
{
        exit(0);
}
//---------------------------------------------------------------------------

void __fastcall TfJoc::btnExitClick(TObject *Sender)
{
        exit(0);
}
//---------------------------------------------------------------------------

void __fastcall TfJoc::Image1Click(TObject *Sender)
{
        void LoadImg();        
}
//---------------------------------------------------------------------------
void __fastcall TfJoc::Button1Click(TObject *Sender)
{
        fnc.Test123("Muie!");
}
//---------------------------------------------------------------------------

void __fastcall TfJoc::bkRook1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 1;}
void __fastcall TfJoc::bkKnight1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 2;}
void __fastcall TfJoc::bkBishop1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 3;}
void __fastcall TfJoc::bkQueenMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 4;}
void __fastcall TfJoc::bkKingMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 5;}
void __fastcall TfJoc::bkBishop2MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 6;}
void __fastcall TfJoc::bkKnight2MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 7;}
void __fastcall TfJoc::bkRook2MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 8;}
void __fastcall TfJoc::bkPawnMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 9;}

void __fastcall TfJoc::whRookMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 10;}
void __fastcall TfJoc::whKnightMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 11;}
void __fastcall TfJoc::whBishopMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 12;}
void __fastcall TfJoc::whQueenMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 13;}
void __fastcall TfJoc::whKingMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 14;}
void __fastcall TfJoc::whPawnMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y) {id = 15;}

void __fastcall TfJoc::imBoardMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
        if (id != 99) {
                col = (X - 40) / 36;
                row = (Y - 40) / 36;
                movePiece(::id-1, col, row);
                id=99;
                //ShowMessage(id);
        }
}

您移动了
fJoc->BlackRook1[1]
,但该值超出了数组
BlackRook1
的有效范围

线路

bkRook1*   BlackRook1[1];
仅定义一个元素,即
BlackRook1[0]

“下一步行动”的原因纯属偶然。处理超出其边界的数组对象是一种未定义的行为,实际上任何事情都可能发生,包括“似乎正常工作”,或者,在您的案例中,“似乎正常工作,除了这件小事”


我想它在您的案例中正好起作用,因为所有的对象初始化都是一个接一个的,所以“beyond”很高兴地指向下一个创建的对象。(除了最后一个,也就是说。请随意试验。)

那么我应该如何使它们正确移动呢?我解决了这个问题。谢谢我将BlackRook1[1]更改为BlackRook1[0]。您可能想去某个论坛讨论您的代码。还有很大的改进空间。如果您有一大块代码,其中的代码行看起来非常相似,那么在大多数情况下,有一种更好的方法可以做到这一点。我可以问一下,为什么每个不同的作品都有自己的类别,而不是所有作品都有一个通用的类别?当你可以使用网格坐标时,为什么要使用像素坐标?
bkBishop1::bkBishop1(unsigned int a, unsigned int b, TfJoc* fJoc):Piece(a, b, fJoc)
{
        nBishop1 = "Imagini/Nebun1.bmp";
        imPiece -> Left = a;
        imPiece -> Top = b;
        imPiece -> OnMouseDown = fJoc -> bkBishop1MouseDown;
}

void bkBishop1::LoadImg()
{
        imPiece->Picture->LoadFromFile(nBishop1);
}

bkBishop2::bkBishop2(unsigned int a, unsigned int b, TfJoc* fJoc):Piece(a, b, fJoc)
{
        nBishop2 = "Imagini/Nebun1.bmp";
        imPiece -> Left = a;
        imPiece -> Top = b;
        imPiece -> OnMouseDown = fJoc -> bkBishop2MouseDown;
}

void bkBishop2::LoadImg()
{
        imPiece->Picture->LoadFromFile(nBishop2);
}
bkRook1*   BlackRook1[1];