Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma resource "*.dfm"
- TMainForm *MainForm;
- int field[32][32];
- bool canPlace[32][32];
- int fsx = 32, fsy = 32;
- bool player1 = true;
- Graphics::TBitmap *blueF, *redF;
- //---------------------------------------------------------------------------
- __fastcall TMainForm::TMainForm(TComponent* Owner)
- : TForm(Owner)
- {
- field[fsx / 2][fsy / 2] = 1;
- field[fsx / 2][fsy / 2 - 1] = 2;
- field[fsx / 2 - 1][fsy / 2] = 2;
- field[fsx / 2 - 1][fsy / 2 - 1] = 1;
- blueF = new TBitmap();
- blueF->LoadFromFile("bluef.bmp");
- blueF->Transparent = true;
- blueF->TransparentColor = clWhite;
- redF = new TBitmap();
- redF->LoadFromFile("redf.bmp");
- redF->Transparent = true;
- redF->TransparentColor = clWhite;
- }
- //---------------------------------------------------------------------------
- void __fastcall TMainForm::MainDrawGridDrawCell(TObject *Sender, int ACol, int ARow,
- TRect &Rect, TGridDrawState State)
- {
- if (canPlace[ARow][ACol]) {
- MainDrawGrid->Canvas->Brush->Color = player1 ? clBlue : clRed;
- MainDrawGrid->Canvas->Rectangle(MainDrawGrid->CellRect(ACol, ARow));
- }
- if (field[ARow][ACol] == 1) {
- MainDrawGrid->Canvas->CopyRect(MainDrawGrid->CellRect(ACol, ARow), blueF->Canvas, Bounds(0, 0, 16, 16));
- }
- if (field[ARow][ACol] == 2) {
- MainDrawGrid->Canvas->CopyRect(MainDrawGrid->CellRect(ACol, ARow), redF->Canvas, Bounds(0, 0, 16, 16));
- }
- }
- struct vector2 {
- int x, y;
- vector2(int _x, int _y) {
- x = _x;
- y = _y;
- }
- };
- vector2 vs[8] = {
- vector2(1, 0),
- vector2(0, 1),
- vector2(-1, 0),
- vector2(0, -1),
- vector2(1, 1),
- vector2(1, -1),
- vector2(-1, 1),
- vector2(-l, -1)
- };
- //---------------------------------------------------------------------------
- void __fastcall TMainForm::UpdateGrid()
- {
- for (int i = 0; i < fsx; i++)
- for (int j = 0; j < fsy; j++)
- canPlace[i][j] = 0;
- int player = player1 ? 1 : 2;
- for (int i = 0; i < fsx; i++)
- for (int j = 0; j < fsy; j++)
- if (field[i][j] == player) {
- bool tb;
- tb = 0;
- for (int t = i; t >= 0; t--)
- if (field[t][j] != 0)
- tb = field[t][j] != player;
- else {
- if (tb)
- canPlace[t][j] = 1;
- break;
- }
- tb = 0;
- for (int t = i; t < fsx; t++)
- if (field[t][j] != 0)
- tb = field[t][j] != player;
- else {
- if (tb)
- canPlace[t][j] = 1;
- break;
- }
- tb = 0;
- for (int t = j; t >= 0; t--)
- if (field[i][t] != 0)
- tb = field[i][t] != player;
- else {
- if (tb)
- canPlace[i][t] = 1;
- break;
- }
- tb = 0;
- for (int t = j; t < fsy; t++)
- if (field[i][t] != 0)
- tb = field[i][t] != player;
- else {
- if (tb)
- canPlace[i][t] = 1;
- break;
- }
- for (int ti = i, tj = j; ti >= 0, tj >= 0; ti--, tj--)
- if (field[ti][tj] != 0)
- tb = field[ti][tj] != player;
- else {
- if (tb)
- canPlace[ti][tj] = 1;
- break;
- }
- for (int ti = i, tj = j; ti >= 0, tj < fsy; ti++, tj--)
- if (field[ti][tj] != 0)
- tb = field[ti][tj] != player;
- else {
- if (tb)
- canPlace[ti][tj] = 1;
- break;
- }
- for (int ti = i, tj = j; ti < fsx, tj >= 0; ti--, tj++)
- if (field[ti][tj] != 0)
- tb = field[ti][tj] != player;
- else {
- if (tb)
- canPlace[ti][tj] = 1;
- break;
- }
- for (int ti = i, tj = j; ti < fsx, tj < fsy; ti--, tj--)
- if (field[ti][tj] != 0)
- tb = field[ti][tj] != player;
- else {
- if (tb)
- canPlace[ti][tj] = 1;
- break;
- }
- }
- MainDrawGrid->Refresh();
- }
- //---------------------------------------------------------------------------
- void __fastcall TMainForm::MainDrawGridSelectCell(TObject *Sender, int ACol, int ARow,
- bool &CanSelect)
- {
- if (field[ARow][ACol] != 0 || !canPlace[ARow][ACol])
- return;
- int player = player1 ? 1 : 2;
- field[ARow][ACol] = player;
- int fi, fj;
- fi = -1, fj = -1;
- for (int i = ARow - 1; i >= 0; i--) {
- if (field[i][ACol] == 0)
- break;
- if (field[i][ACol] == player) {
- fi = i;
- fj = ACol;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow; i >= fi; i--)
- field[i][fj] = player;
- fi = -1, fj = -1;
- for (int i = ARow + 1; i < fsx; i++) {
- if (field[i][ACol] == 0)
- break;
- if (field[i][ACol] == player) {
- fi = i;
- fj = ACol;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow; i <= fi; i++)
- field[i][fj] = player;
- fi = -1, fj = -1;
- for (int i = ACol - 1; i >= 0; i--) {
- if (field[ARow][i] == 0)
- break;
- if (field[ARow][i] == player) {
- fi = ARow;
- fj = i;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ACol; i >= fj; i--)
- field[fi][i] = player;
- fi = -1, fj = -1;
- for (int i = ACol + 1; i < fsy; i++) {
- if (field[ARow][i] == 0)
- break;
- if (field[ARow][i] == player) {
- fi = ARow;
- fj = i;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow; i <= fj; i++)
- field[fi][i] = player;
- fi = -1, fj = -1;
- for (int i = ARow - 1, j = ACol - 1; i >= 0, j >= 0; i--, j--) {
- if (field[i][j] == 0)
- break;
- if (field[i][j] == player) {
- fi = i;
- fj = j;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow, j = ACol; i >= fi, j >= fj; i--, j--)
- field[i][j] = player;
- fi = -1, fj = -1;
- for (int i = ARow + 1, j = ACol - 1; i < fsx, j >= 0; i++, j--) {
- if (field[i][j] == 0)
- break;
- if (field[i][j] == player) {
- fi = i;
- fj = j;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow, j = ACol; i <= fi, j >= fj; i++, j--)
- field[i][j] = player;
- fi = -1, fj = -1;
- for (int i = ARow - 1, j = ACol + 1; i >= 0, j < fsy; i--, j++) {
- if (field[i][j] == 0)
- break;
- if (field[i][j] == player) {
- fi = i;
- fj = j;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow, j = ACol; i >= fi, j <= fj; i--, j++)
- field[i][j] = player;
- fi = -1, fj = -1;
- for (int i = ARow + 1, j = ACol + 1; i < fsx, j < fsy; i++, j++) {
- if (field[i][j] == 0)
- break;
- if (field[i][j] == player) {
- fi = i;
- fj = j;
- break;
- }
- }
- if (fi != -1 && fj != -1)
- for (int i = ARow, j = ACol; i <= fi, j <= fj; i++, j++)
- field[i][j] = player;
- player1 = !player1;
- UpdateGrid();
- }
- //---------------------------------------------------------------------------
- void __fastcall TMainForm::FormCreate(TObject *Sender)
- {
- UpdateGrid();
- }
- //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement