-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcore_basic_window.cpp
More file actions
127 lines (101 loc) · 3.95 KB
/
core_basic_window.cpp
File metadata and controls
127 lines (101 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "raylib.h"
#include <stdio.h>
struct Posicao
{
int linha;
int coluna;
};
void inicializarTabuleiro(float celulaTamanho, float raio, Texture2D pecaDama, Texture2D pecaDama2);
bool validarPosicao(int linha, int coluna);
bool validarMovimento(Posicao posicaoAtual, Posicao novaPosicao, char jogadorAtual);
void moverPeca(Posicao posicaoAtual, Posicao novaPosicao);
int tabuleiro[8][8];
int main(void)
{
const int telaLargura = 700;
const int telaAltura = 700;
const float celulaTamanho = telaLargura / 8;
const float raio = celulaTamanho / 3;
InitWindow(telaLargura, telaAltura, "Dama");
Texture2D pecaDama = LoadTexture("resources/peca11.png");
Texture2D pecaDama2 = LoadTexture("resources/peca22.png");
SetTargetFPS(60);
while (!WindowShouldClose())
{
Vector2 mousePosition = GetMousePosition();
BeginDrawing();
ClearBackground(RAYWHITE);
inicializarTabuleiro(celulaTamanho,raio, pecaDama,pecaDama2);
EndDrawing();
}
CloseWindow();
return 0;
}
// Função para inicializar o tabuleiro com as peças nas posições iniciais
void inicializarTabuleiro(float celulaTamanho, float raio, Texture2D pecaDama, Texture2D pecaDama2)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
float posX = i * celulaTamanho;
float posY = j * celulaTamanho;
Color celulaCor = (i + j) % 2 == 0 ? WHITE : LIGHTGRAY;
DrawRectangle(posX, posY, celulaTamanho, celulaTamanho, celulaCor);
DrawRectangleLines(posX, posY, celulaTamanho, celulaTamanho, BLACK);
if ((j < 3) && ((i + j) % 2 != 0))
{
tabuleiro[i][j] = 'O';
float centroX = posX + celulaTamanho / 2;
float centroY = posY + celulaTamanho / 2;
DrawTexture(pecaDama, centroX - raio, centroY - raio, WHITE);
}
else if ((j > 4) && ((i + j) % 2 != 0))
{
tabuleiro[i][j] = 'X'; // Peças do jogador 2 (X)
float centroX = posX + celulaTamanho / 2;
float centroY = posY + celulaTamanho / 2;
DrawTexture(pecaDama2, centroX - raio, centroY - raio, WHITE);
}
else
{
tabuleiro[i][j] = ' '; // Espaços vazios
}
}
}
}
// Função para verificar se uma posição é válida no tabuleiro
bool validarPosicao(int linha, int coluna)
{
return (linha >= 0 && linha < 8 && coluna >= 0 && coluna < 8);
}
// Função para verificar se o movimento é válido para o jogador atual
bool validarMovimento(Posicao posicaoAtual, Posicao novaPosicao, char jogadorAtual)
{
int linhaDiff = novaPosicao.linha - posicaoAtual.linha;
int colunaDiff = novaPosicao.coluna - posicaoAtual.coluna;
// Verifica se as posições são válidas
if (!validarPosicao(novaPosicao.linha, novaPosicao.coluna) || !validarPosicao(posicaoAtual.linha, posicaoAtual.coluna))
return false;
// Verifica se a posição de destino está vazia
if (tabuleiro[novaPosicao.linha][novaPosicao.coluna] != ' ')
return false;
// Verifica se o movimento é válido para o jogador atual
if (jogadorAtual == 'O')
{
if (linhaDiff == 1 && (colunaDiff == 1 || colunaDiff == -1))
return true;
}
else if (jogadorAtual == 'X')
{
if (linhaDiff == -1 && (colunaDiff == 1 || colunaDiff == -1))
return true;
}
return false;
}
// Função para mover a peça para uma nova posição
void moverPeca(Posicao posicaoAtual, Posicao novaPosicao)
{
tabuleiro[novaPosicao.linha][novaPosicao.coluna] = tabuleiro[posicaoAtual.linha][posicaoAtual.coluna];
tabuleiro[posicaoAtual.linha][posicaoAtual.coluna] = ' ';
}