Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.70 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2.  
  3. #include <vcl.h>
  4. #pragma hdrstop
  5.  
  6. #include "Unit1.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma resource "*.dfm"
  10. TMainForm *MainForm;
  11.  
  12. int field[32][32];
  13. bool canPlace[32][32];
  14. int fsx = 32, fsy = 32;
  15. bool player1 = true;
  16. Graphics::TBitmap *blueF, *redF;
  17. //---------------------------------------------------------------------------
  18. __fastcall TMainForm::TMainForm(TComponent* Owner)
  19. : TForm(Owner)
  20. {
  21. field[fsx / 2][fsy / 2] = 1;
  22. field[fsx / 2][fsy / 2 - 1] = 2;
  23. field[fsx / 2 - 1][fsy / 2] = 2;
  24. field[fsx / 2 - 1][fsy / 2 - 1] = 1;
  25. blueF = new TBitmap();
  26. blueF->LoadFromFile("bluef.bmp");
  27. blueF->Transparent = true;
  28. blueF->TransparentColor = clWhite;
  29. redF = new TBitmap();
  30. redF->LoadFromFile("redf.bmp");
  31. redF->Transparent = true;
  32. redF->TransparentColor = clWhite;
  33. }
  34. //---------------------------------------------------------------------------
  35. void __fastcall TMainForm::MainDrawGridDrawCell(TObject *Sender, int ACol, int ARow,
  36. TRect &Rect, TGridDrawState State)
  37. {
  38. if (canPlace[ARow][ACol]) {
  39. MainDrawGrid->Canvas->Brush->Color = player1 ? clBlue : clRed;
  40. MainDrawGrid->Canvas->Rectangle(MainDrawGrid->CellRect(ACol, ARow));
  41. }
  42. if (field[ARow][ACol] == 1) {
  43. MainDrawGrid->Canvas->CopyRect(MainDrawGrid->CellRect(ACol, ARow), blueF->Canvas, Bounds(0, 0, 16, 16));
  44. }
  45. if (field[ARow][ACol] == 2) {
  46. MainDrawGrid->Canvas->CopyRect(MainDrawGrid->CellRect(ACol, ARow), redF->Canvas, Bounds(0, 0, 16, 16));
  47. }
  48. }
  49.  
  50. struct vector2 {
  51. int x, y;
  52.  
  53. vector2(int _x, int _y) {
  54. x = _x;
  55. y = _y;
  56. }
  57. };
  58.  
  59. vector2 vs[8] = {
  60. vector2(1, 0),
  61. vector2(0, 1),
  62. vector2(-1, 0),
  63. vector2(0, -1),
  64. vector2(1, 1),
  65. vector2(1, -1),
  66. vector2(-1, 1),
  67. vector2(-l, -1)
  68. };
  69.  
  70. //---------------------------------------------------------------------------
  71. void __fastcall TMainForm::UpdateGrid()
  72. {
  73. for (int i = 0; i < fsx; i++)
  74. for (int j = 0; j < fsy; j++)
  75. canPlace[i][j] = 0;
  76. int player = player1 ? 1 : 2;
  77. for (int i = 0; i < fsx; i++)
  78. for (int j = 0; j < fsy; j++)
  79. if (field[i][j] == player) {
  80. bool tb;
  81. tb = 0;
  82. for (int t = i; t >= 0; t--)
  83. if (field[t][j] != 0)
  84. tb = field[t][j] != player;
  85. else {
  86. if (tb)
  87. canPlace[t][j] = 1;
  88. break;
  89. }
  90. tb = 0;
  91. for (int t = i; t < fsx; t++)
  92. if (field[t][j] != 0)
  93. tb = field[t][j] != player;
  94. else {
  95. if (tb)
  96. canPlace[t][j] = 1;
  97. break;
  98. }
  99. tb = 0;
  100. for (int t = j; t >= 0; t--)
  101. if (field[i][t] != 0)
  102. tb = field[i][t] != player;
  103. else {
  104. if (tb)
  105. canPlace[i][t] = 1;
  106. break;
  107. }
  108. tb = 0;
  109. for (int t = j; t < fsy; t++)
  110. if (field[i][t] != 0)
  111. tb = field[i][t] != player;
  112. else {
  113. if (tb)
  114. canPlace[i][t] = 1;
  115. break;
  116. }
  117. for (int ti = i, tj = j; ti >= 0, tj >= 0; ti--, tj--)
  118. if (field[ti][tj] != 0)
  119. tb = field[ti][tj] != player;
  120. else {
  121. if (tb)
  122. canPlace[ti][tj] = 1;
  123. break;
  124. }
  125. for (int ti = i, tj = j; ti >= 0, tj < fsy; ti++, tj--)
  126. if (field[ti][tj] != 0)
  127. tb = field[ti][tj] != player;
  128. else {
  129. if (tb)
  130. canPlace[ti][tj] = 1;
  131. break;
  132. }
  133. for (int ti = i, tj = j; ti < fsx, tj >= 0; ti--, tj++)
  134. if (field[ti][tj] != 0)
  135. tb = field[ti][tj] != player;
  136. else {
  137. if (tb)
  138. canPlace[ti][tj] = 1;
  139. break;
  140. }
  141. for (int ti = i, tj = j; ti < fsx, tj < fsy; ti--, tj--)
  142. if (field[ti][tj] != 0)
  143. tb = field[ti][tj] != player;
  144. else {
  145. if (tb)
  146. canPlace[ti][tj] = 1;
  147. break;
  148. }
  149. }
  150. MainDrawGrid->Refresh();
  151. }
  152. //---------------------------------------------------------------------------
  153. void __fastcall TMainForm::MainDrawGridSelectCell(TObject *Sender, int ACol, int ARow,
  154. bool &CanSelect)
  155. {
  156. if (field[ARow][ACol] != 0 || !canPlace[ARow][ACol])
  157. return;
  158. int player = player1 ? 1 : 2;
  159. field[ARow][ACol] = player;
  160. int fi, fj;
  161.  
  162. fi = -1, fj = -1;
  163. for (int i = ARow - 1; i >= 0; i--) {
  164. if (field[i][ACol] == 0)
  165. break;
  166. if (field[i][ACol] == player) {
  167. fi = i;
  168. fj = ACol;
  169. break;
  170. }
  171. }
  172. if (fi != -1 && fj != -1)
  173. for (int i = ARow; i >= fi; i--)
  174. field[i][fj] = player;
  175.  
  176. fi = -1, fj = -1;
  177. for (int i = ARow + 1; i < fsx; i++) {
  178. if (field[i][ACol] == 0)
  179. break;
  180. if (field[i][ACol] == player) {
  181. fi = i;
  182. fj = ACol;
  183. break;
  184. }
  185. }
  186. if (fi != -1 && fj != -1)
  187. for (int i = ARow; i <= fi; i++)
  188. field[i][fj] = player;
  189.  
  190.  
  191. fi = -1, fj = -1;
  192. for (int i = ACol - 1; i >= 0; i--) {
  193. if (field[ARow][i] == 0)
  194. break;
  195. if (field[ARow][i] == player) {
  196. fi = ARow;
  197. fj = i;
  198. break;
  199. }
  200. }
  201. if (fi != -1 && fj != -1)
  202. for (int i = ACol; i >= fj; i--)
  203. field[fi][i] = player;
  204.  
  205. fi = -1, fj = -1;
  206. for (int i = ACol + 1; i < fsy; i++) {
  207. if (field[ARow][i] == 0)
  208. break;
  209. if (field[ARow][i] == player) {
  210. fi = ARow;
  211. fj = i;
  212. break;
  213. }
  214. }
  215. if (fi != -1 && fj != -1)
  216. for (int i = ARow; i <= fj; i++)
  217. field[fi][i] = player;
  218.  
  219. fi = -1, fj = -1;
  220. for (int i = ARow - 1, j = ACol - 1; i >= 0, j >= 0; i--, j--) {
  221. if (field[i][j] == 0)
  222. break;
  223. if (field[i][j] == player) {
  224. fi = i;
  225. fj = j;
  226. break;
  227. }
  228. }
  229. if (fi != -1 && fj != -1)
  230. for (int i = ARow, j = ACol; i >= fi, j >= fj; i--, j--)
  231. field[i][j] = player;
  232.  
  233. fi = -1, fj = -1;
  234. for (int i = ARow + 1, j = ACol - 1; i < fsx, j >= 0; i++, j--) {
  235. if (field[i][j] == 0)
  236. break;
  237. if (field[i][j] == player) {
  238. fi = i;
  239. fj = j;
  240. break;
  241. }
  242. }
  243. if (fi != -1 && fj != -1)
  244. for (int i = ARow, j = ACol; i <= fi, j >= fj; i++, j--)
  245. field[i][j] = player;
  246.  
  247. fi = -1, fj = -1;
  248. for (int i = ARow - 1, j = ACol + 1; i >= 0, j < fsy; i--, j++) {
  249. if (field[i][j] == 0)
  250. break;
  251. if (field[i][j] == player) {
  252. fi = i;
  253. fj = j;
  254. break;
  255. }
  256. }
  257. if (fi != -1 && fj != -1)
  258. for (int i = ARow, j = ACol; i >= fi, j <= fj; i--, j++)
  259. field[i][j] = player;
  260.  
  261. fi = -1, fj = -1;
  262. for (int i = ARow + 1, j = ACol + 1; i < fsx, j < fsy; i++, j++) {
  263. if (field[i][j] == 0)
  264. break;
  265. if (field[i][j] == player) {
  266. fi = i;
  267. fj = j;
  268. break;
  269. }
  270. }
  271. if (fi != -1 && fj != -1)
  272. for (int i = ARow, j = ACol; i <= fi, j <= fj; i++, j++)
  273. field[i][j] = player;
  274.  
  275. player1 = !player1;
  276. UpdateGrid();
  277. }
  278. //---------------------------------------------------------------------------
  279. void __fastcall TMainForm::FormCreate(TObject *Sender)
  280. {
  281. UpdateGrid();
  282. }
  283. //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement