FastM1nesweeper.frx 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Report ScriptLanguage="CSharp" StartReportEvent="_StartReport" ReportInfo.Name="Fast M1nesweeper" ReportInfo.Author="Detrav" ReportInfo.Version="4/1/2019" ReportInfo.Created="04/01/2019 00:00:02" ReportInfo.Modified="04/01/2019 00:00:02" ReportInfo.CreatorVersion="2019.2.42.25769">
  3. <ScriptText>using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Windows.Forms;
  8. using System.Drawing;
  9. using System.Data;
  10. using FastReport;
  11. using FastReport.Matrix;
  12. using FastReport.Data;
  13. using FastReport.Dialog;
  14. using FastReport.Barcode;
  15. using FastReport.Table;
  16. using FastReport.Utils;
  17. namespace FastReport
  18. {
  19. public class ReportScript
  20. {
  21. const string BOMB = &quot;&lt;img src=\&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA9QD1APUHT9P6AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4wMaCBo1zI1h5wAABDFJREFUSMe1lltsVFUUhr+158ylFGgRKZcgBLEKJBRCXwhPQjQ+gQQYifFB1CkxNcCUBjtUZCIkdQq9AS/QGY0amkAo0WcTX9GYQKAKMUUw0jQCLQpF2rnu5cO0Y1s62GlwJyfZ5/x7r/+s+xIKXarUtX62CqCx5r0riBR03eQDQqdOTAyIgNFqjFbnIzvc8mXhhAz5NoXaosvWqRIOh3PaAQiyXpD1o7+Fw2FeVeXDltiyRya5KZ/YvPbYe7R9psdtHqi1bzTu3XkOINQWq7Qqa4xoO4BV2WlEL0WCgYsAdS3t28WYM2lNlzTVvD9QEGGWINoPMhvlC0XfcrlcbrfjQkQQYCiRHDmaUvS0IO8AfZFgoCyfTOeJHhb5GiVgjOx4acliZhYXYYwZtqTy/ZVrSNaP7mEyBL4pKGjCp04BUNcW26FWA4vml7Fu9QpS6RRXb/zOjz/9woXLV7lwOUc2NoihKtQWfRugpvnsxCYNNUdn4og7sidwD2D/8dhKtXTNmVXK4gVlXLtxi78HB3PaTSp7MCsbg+/+DBA6FptNWlOR2qoBCTVHwYgb4S5QimofInOG/xZUJ9Rkkjk7Ius+ShlWUzlJH0RPF814FO8GFvJ0Vw+WFyN7A/F/fajK/Dv9cYVKgIy1udOj9wVjqhiTWYOQGBs0Ihw4EFSsXeTzuKlcXo61irVK5YpyfB4PAD6PpzDM6yWdMYsiNQGdOC2MWRVPpui6fhNjstbu6r6Jtdnz8WSyYEyE1cClCQkrypdUJZKpp+pAr8ddBXyeLw+V/3mN0bDr+m8xgbXGSM5Uo/fj3yeDqdVo3kqjqpd9Hg8V5Utzzq8oXzomMArBbCbN3T/7+x8v3qq0fNQof8x9do5LuZOxFtdwVRm9H//+JCyRTNLT28sMb9GCh/HB253HG3RMWvz6/EKfS7kIjBHiGlfO/gsTIJVKcaunB1R5GB/8AfDkNBxf2hS9Lci8qQbFgwcD9N3rz04GqndQnYvIX2opE7dNm0htFVgtsujSSDAgjcGq+VZdK7OKT66GGmMYHBqip7eXu/19iAjPlM54ufN4w7zOE59KJiMviNtO62yNPN6Aa5rP0lq7nTdrD+6fVjStobi4GLfj4DgORgxIthdmMhnS6TTxeJz7AwMkEgmMMRgRfEW+uq8iHx+pPXqU5n37Jt/x/Xvq21WpUtU8/VkmmrGi54417Cx8iALUsgnA5/V95zhOjmTkGen8jsvB6/N+m51zdOOUxsTN1QenI8xVq9s6msKvnG09LCWlJX6vxxsaVbbqZpWWbDvTekg6joRfU6vbBJm3ufrg9IIJXU56g5JZrpWvn/f7/QA8Z4Y6O5rCjUA30N3R9MmR2OHQeQC/30967cbzGJa5nPSGgsN7Y/BQXmzrrvqTW3fVn5zK3SmtLbv3r9qyu75iKnf/AUwGAJZD/bErAAAAAElFTkSuQmCC\&quot;/&gt;&quot;;
  22. const string FLAG = &quot;&lt;img src=\&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4wMWDhQIRD3DcgAAALVJREFUSMftlb0NwkAMhT+bCiZhAJKGhI4lkOioqBiFnYDmwhqsQIGUmJYiiu4XUfAaS6fT+/xOlg++re3uIJ+1iNr90QBsXQjwWGK2wQ0NVSpIxw6fMwAqEZy1OJN4kHrcSQJpQDNRII141iCQJsyCF0gzDN1KBDc0nOVWBnA3o9Yrp9wJOjNquVCL0QHkSuBlHAMIMg4BRBlPAhZ9uvGkmozbdDTBvH+Rq2OlsP6AH/30c+oNWNZbLqWMv1wAAAAASUVORK5CYII=\&quot;/&gt;&quot;;
  23. private FastM1nesweeper fastM1nesweeper = new FastM1nesweeper();
  24. private TableObject table = null;
  25. private bool IsUpdated = false;
  26. private FillBase backUpFill;
  27. private int clickCount;
  28. private DateTime startTime;
  29. private int bombCount;
  30. private void RefreshPreview(Base obj)
  31. {
  32. if(obj!=null)
  33. {
  34. Report.PreparedPages.ModifyPage(0, obj.Page as ReportPage);
  35. foreach(System.Reflection.PropertyInfo info in Report.GetType().GetProperties())
  36. {
  37. if(info.Name == &quot;Preview&quot;)
  38. {
  39. object preview = info.GetValue(Report, null);
  40. if(preview !=null)
  41. foreach(System.Reflection.MethodInfo method in preview.GetType().GetMethods())
  42. {
  43. if(method.Name == &quot;Refresh&quot;)
  44. {
  45. try{
  46. method.Invoke(preview, null);
  47. }
  48. catch{
  49. }
  50. }
  51. }
  52. }
  53. }
  54. }
  55. table = null;
  56. }
  57. private bool IsRightClick(EventArgs e)
  58. {
  59. foreach(System.Reflection.PropertyInfo info in e.GetType().GetProperties())
  60. {
  61. if(info.Name == &quot;Button&quot;)
  62. {
  63. try{
  64. return 2097152 == (int)info.GetValue(e, null);
  65. }
  66. catch{
  67. return false;
  68. }
  69. }
  70. }
  71. return false;
  72. }
  73. private void TableCell_Click(object sender, EventArgs e)
  74. {
  75. if(clickCount == 0)
  76. startTime = DateTime.Now;
  77. clickCount++;
  78. IsUpdated = false;
  79. TextObjectBase cell = sender as TextObjectBase;
  80. if(table == null)
  81. {
  82. table = cell.Parent.Parent as TableObject;
  83. }
  84. if(!fastM1nesweeper.IsGameOver)
  85. {
  86. if(table!=null )
  87. {
  88. for(int i =0; i&lt; fastM1nesweeper.Width; i ++)
  89. for(int j = 0; j &lt; fastM1nesweeper.Height; j++)
  90. {
  91. if(sender == table[i,j])
  92. {
  93. if(IsRightClick(e))
  94. fastM1nesweeper.FlagClick(i,j);
  95. else
  96. fastM1nesweeper.OpenClick(i,j);
  97. }
  98. }
  99. if(bombCount != fastM1nesweeper.BombCount)
  100. {
  101. bombCount = fastM1nesweeper.BombCount;
  102. TextObject tBombsBox = table.Page.FindObject(&quot;tBombs&quot;) as TextObject;
  103. if(tBombsBox!=null)
  104. {
  105. tBombsBox.Text = fastM1nesweeper.BombCount.ToString();
  106. IsUpdated = true;
  107. }
  108. }
  109. if(fastM1nesweeper.IsGameOver)
  110. {
  111. TextObject labelGameOver = table.Page.FindObject(&quot;LabelGameOver&quot;) as TextObject;
  112. TextObject labelClicks = table.Page.FindObject(&quot;LabelClicks&quot;) as TextObject;
  113. TextObject labelTime = table.Page.FindObject(&quot;LabelTime&quot;) as TextObject;
  114. TextObject labelScore = table.Page.FindObject(&quot;LabelScore&quot;) as TextObject;
  115. TextObject tClicksBox = table.Page.FindObject(&quot;tClicks&quot;) as TextObject;
  116. TextObject tTimeBox = table.Page.FindObject(&quot;tTime&quot;) as TextObject;
  117. TextObject tScoreBox = table.Page.FindObject(&quot;tScore&quot;) as TextObject;
  118. if(labelGameOver!=null)
  119. {
  120. if(fastM1nesweeper.IsVictory)
  121. {
  122. labelGameOver.Text=&quot;Victory!&quot;;
  123. labelGameOver.TextFill = new SolidFill(Color.Green);
  124. }
  125. else
  126. {
  127. labelGameOver.Text=&quot;GAME OVER&quot;;
  128. labelGameOver.TextFill = new SolidFill(Color.Red);
  129. }
  130. IsUpdated = true;
  131. }
  132. if(labelClicks!=null)
  133. {
  134. labelClicks.Text = &quot;Clicks:&quot;;
  135. IsUpdated = true;
  136. }
  137. if(labelTime!=null)
  138. {
  139. labelTime.Text = &quot;Time:&quot;;
  140. IsUpdated = true;
  141. }
  142. if(labelScore!=null)
  143. {
  144. labelScore.Text = &quot;Score:&quot;;
  145. IsUpdated = true;
  146. }
  147. if(tClicksBox !=null)
  148. {
  149. tClicksBox.Text = clickCount.ToString();
  150. IsUpdated = true;
  151. }
  152. if(tTimeBox !=null)
  153. {
  154. TimeSpan span = DateTime.Now - startTime;
  155. tTimeBox.Text = span.ToString();
  156. IsUpdated = true;
  157. }
  158. if(tScoreBox != null)
  159. {
  160. tScoreBox.Text = fastM1nesweeper.Score.ToString();
  161. IsUpdated = true;
  162. }
  163. }
  164. if(IsUpdated)
  165. RefreshPreview(table);
  166. }
  167. }
  168. }
  169. private void TableMap_ManualBuild(object sender, EventArgs e)
  170. {
  171. for(int i =0; i&lt; fastM1nesweeper.Height; i ++)
  172. {
  173. TableMap.PrintRow(0);
  174. for(int j =0; j&lt; fastM1nesweeper.Width; j ++)
  175. {
  176. TableMap.PrintColumn(0);
  177. }
  178. }
  179. }
  180. private void _StartReport(object sender, EventArgs e)
  181. {
  182. fastM1nesweeper.CellUpdated += CellUpdated;
  183. clickCount = 0;
  184. }
  185. private void CellUpdated(object sender, FastM1nesweeperCellUpdateEventArgs e)
  186. {
  187. ReDraw(e.X,e.Y,e.Cell);
  188. }
  189. private void ReDraw(int x, int y, FastM1nesweeperCell cell)
  190. {
  191. if(cell != null)
  192. {
  193. IsUpdated = true;
  194. if(cell.IsFlag)
  195. {
  196. table[x,y].Text = FLAG;
  197. }
  198. else if(!cell.IsOpened)
  199. {
  200. table[x,y].Text = &quot;&quot;;
  201. }
  202. else if(cell.IsBomb)
  203. {
  204. table[x,y].Font = new Font(table[x,y].Font.FontFamily, 0.1f);
  205. table[x,y].Text = BOMB;
  206. }
  207. else if(cell.Number &gt; 0)
  208. {
  209. table[x,y].Text = cell.Number.ToString();
  210. }
  211. else table[x,y].Text = &quot;&quot;;
  212. if(cell.IsDefused)
  213. {
  214. table[x,y].Fill = new SolidFill(Color.LightGreen);
  215. table[x,y].Border.Color = Color.Green;
  216. table[x,y].Border.Lines = BorderLines.All;
  217. table[x,y].Border.Width = 1;
  218. }
  219. else if (cell.IsOpened)
  220. {
  221. if(cell.IsBomb)
  222. {
  223. table[x,y].Fill = new SolidFill(Color.MistyRose);
  224. table[x,y].Border.Color = Color.Red;
  225. table[x,y].Border.Lines = BorderLines.All;
  226. table[x,y].Border.Width = 1;
  227. }
  228. else
  229. {
  230. table[x,y].Fill = new SolidFill(Color.WhiteSmoke);
  231. }
  232. }
  233. else
  234. {
  235. table[x,y].Fill = backUpFill.Clone();
  236. }
  237. //table[x,y].Border.Style = LineStyle.Solid;
  238. //table[x,y].Border.Color = Color.Gainsboro;
  239. }
  240. }
  241. private void Page1_StartPage(object sender, EventArgs e)
  242. {
  243. int width;
  244. int height;
  245. bombCount = 0;
  246. Int32.TryParse(tRows.Text, out height);
  247. if(height &lt; 5) height = 5; else if (height &gt; 25) height = 25;
  248. Int32.TryParse(tColumns.Text, out width);
  249. if(width &lt; 5) width = 5; else if (width &gt; 25) width = 25;
  250. Int32.TryParse(tBombs.Text, out bombCount);
  251. if(bombCount &lt; 1) bombCount = 1; else if (bombCount &gt; height * width ) bombCount = height * width ;
  252. TableMap[0,0].Width = 28;
  253. TableMap[0,0].Height = 28;
  254. TableMap.Left = (Data1.Width - (TableMap[0,0].Width * width))/2;
  255. fastM1nesweeper.ReStart(width,height,bombCount);
  256. backUpFill = TableMap[0,0].Fill.Clone();
  257. }
  258. }
  259. public class FastM1nesweeper
  260. {
  261. private bool isGameOver = true;
  262. public event EventHandler&lt;FastM1nesweeperCellUpdateEventArgs&gt; CellUpdated;
  263. public int Score
  264. {
  265. get
  266. {
  267. try
  268. {
  269. int result = 0;
  270. if(map!=null &amp;&amp; isStarted)
  271. {
  272. for(int i =0; i&lt; Width; i++)
  273. for(int j = 0; j&lt; Height; j++)
  274. {
  275. if (map[i, j].IsOpened || IsVictory)
  276. result += GetScore(map[i, j].Number);
  277. }
  278. }
  279. return result;
  280. }
  281. catch
  282. {
  283. }
  284. return 0;
  285. }
  286. }
  287. private int GetScore(int number)
  288. {
  289. switch(number)
  290. {
  291. case 1: return 1;
  292. case 2: return 3;
  293. case 3: return 6;
  294. case 4: return 10;
  295. case 5: return 15;
  296. case 6: return 21;
  297. case 7: return 28;
  298. case 8: return 36;
  299. default: return 0;
  300. }
  301. }
  302. public FastM1nesweeperCell GetCell(int x, int y)
  303. {
  304. if (IsAllRight(x, y))
  305. {
  306. return map[x, y];
  307. }
  308. return null;
  309. }
  310. public bool IsGameOver
  311. {
  312. get { return isGameOver; }
  313. }
  314. public bool IsVictory
  315. {
  316. get { return isVictory; }
  317. }
  318. public int Width
  319. {
  320. get { return width; }
  321. }
  322. public int Height
  323. {
  324. get { return height; }
  325. }
  326. public int BombCount
  327. {
  328. get { return bombCount; }
  329. }
  330. private FastM1nesweeperCell[,] map;
  331. private int width;
  332. private int height;
  333. private int bombCount;
  334. private bool isStarted;
  335. private bool isVictory;
  336. public void ReStart(int width, int height, int bombCount)
  337. {
  338. isStarted = false;
  339. isGameOver = false;
  340. this.width = width;
  341. this.height = height;
  342. this.bombCount = bombCount;
  343. isVictory = false;
  344. map = new FastM1nesweeperCell[width, height];
  345. for(int i =0; i&lt; width; i++)
  346. for(int j =0; j&lt; height; j++)
  347. {
  348. map[i, j] = new FastM1nesweeperCell();
  349. }
  350. }
  351. private bool IsAllRight(int x, int y)
  352. {
  353. return map!=null &amp;&amp; !IsGameOver &amp;&amp; x &gt;= 0 &amp;&amp; x &lt; width &amp;&amp; y &gt;= 0 &amp;&amp; y &lt; height;
  354. }
  355. public void FlagClick(int x, int y)
  356. {
  357. if (isStarted &amp;&amp; IsAllRight(x,y))
  358. {
  359. if (!map[x, y].IsOpened)
  360. {
  361. map[x, y].IsFlag = !map[x, y].IsFlag;
  362. if (CellUpdated != null)
  363. {
  364. CellUpdated.Invoke(this, new FastM1nesweeperCellUpdateEventArgs(x, y, map[x, y]));
  365. }
  366. }
  367. }
  368. }
  369. private void GenerateMap(int x, int y)
  370. {
  371. if (!isStarted)
  372. {
  373. Random r = new Random();
  374. int bombs = 0;
  375. if(bombCount &gt; width * height / 2)
  376. {
  377. bombCount = width * height / 2;
  378. }
  379. for(int i = 0; i&lt; bombCount; i++)
  380. {
  381. int tryes = 256;
  382. while(tryes &gt; 0)
  383. {
  384. int left = r.Next(0, width);
  385. int top = r.Next(0, height);
  386. if (left == x &amp;&amp; top == y || map[left, top].IsBomb)
  387. tryes--;
  388. else
  389. {
  390. map[left, top].IsBomb = true;
  391. bombs++;
  392. break;
  393. }
  394. }
  395. }
  396. for(int i =0; i&lt; width; i++)
  397. {
  398. for(int j = 0; j&lt; height; j++)
  399. {
  400. if (!map[i, j].IsBomb)
  401. {
  402. for (int i1 = -1; i1 &lt;= 1; i1++)
  403. for (int j1 = -1; j1 &lt;= 1; j1++)
  404. {
  405. FastM1nesweeperCell cell = GetCell(i + i1, j + j1);
  406. if (cell != null &amp;&amp; cell.IsBomb)
  407. {
  408. map[i, j].Number++;
  409. }
  410. }
  411. }
  412. }
  413. }
  414. bombCount = bombs;
  415. isStarted = true;
  416. }
  417. }
  418. public void OpenClick(int x, int y)
  419. {
  420. GenerateMap(x, y);
  421. if (IsAllRight(x, y))
  422. {
  423. if (!map[x, y].IsOpened &amp;&amp; !map[x,y].IsFlag)
  424. {
  425. if(map[x,y].IsBomb)
  426. {
  427. GameOverBomb();
  428. }
  429. else
  430. {
  431. OpenRecursive(x, y);
  432. }
  433. CheckGameOverDefused();
  434. }
  435. }
  436. }
  437. private void CheckGameOverDefused()
  438. {
  439. for (int i = 0; i &lt; width; i++)
  440. {
  441. for (int j = 0; j &lt; height; j++)
  442. {
  443. if (!map[i, j].IsOpened &amp;&amp; !map[i, j].IsBomb)
  444. {
  445. return;
  446. }
  447. }
  448. }
  449. for (int i = 0; i &lt; width; i++)
  450. {
  451. for (int j = 0; j &lt; height; j++)
  452. {
  453. if (map[i, j].IsBomb)
  454. {
  455. map[i, j].IsOpened = true;
  456. map[i, j].IsDefused = true;
  457. if (CellUpdated != null)
  458. {
  459. CellUpdated.Invoke(this, new FastM1nesweeperCellUpdateEventArgs(i, j, map[i, j]));
  460. }
  461. }
  462. }
  463. }
  464. isVictory = true;
  465. isGameOver = true;
  466. }
  467. private void OpenRecursive(int x, int y)
  468. {
  469. if (IsAllRight(x, y))
  470. {
  471. if(!map[x,y].IsOpened &amp;&amp; !map[x,y].IsFlag )
  472. {
  473. map[x, y].IsOpened = true;
  474. if (map[x, y].Number == 0)
  475. {
  476. for (int i = -1; i &lt;= 1; i++)
  477. for (int j = -1; j &lt;= 1; j++)
  478. if (!(i == 0 &amp;&amp; j == 0))
  479. OpenRecursive(x + i, y + j);
  480. }
  481. if (CellUpdated != null)
  482. {
  483. CellUpdated.Invoke(this, new FastM1nesweeperCellUpdateEventArgs(x, y, map[x, y]));
  484. }
  485. }
  486. }
  487. }
  488. private void GameOverBomb()
  489. {
  490. for(int i =0; i&lt; width; i++)
  491. {
  492. for(int j =0; j&lt; height; j++)
  493. {
  494. if(map[i,j].IsBomb)
  495. {
  496. map[i, j].IsOpened = true;
  497. if (CellUpdated != null)
  498. {
  499. CellUpdated.Invoke(this, new FastM1nesweeperCellUpdateEventArgs(i, j, map[i, j]));
  500. }
  501. }
  502. }
  503. }
  504. isGameOver = true;
  505. }
  506. }
  507. public class FastM1nesweeperCell
  508. {
  509. private bool isFlag;
  510. private bool isBomb;
  511. private int number;
  512. private bool isOpened;
  513. private bool isDefused;
  514. public bool IsFlag
  515. {
  516. get { return isFlag; }
  517. set { isFlag = value; }
  518. }
  519. public bool IsBomb
  520. {
  521. get { return isBomb; }
  522. set { isBomb = value; }
  523. }
  524. public bool IsOpened
  525. {
  526. get { return isOpened; }
  527. set { isOpened = value; }
  528. }
  529. public int Number
  530. {
  531. get { return number; }
  532. set { number = value; }
  533. }
  534. public bool IsDefused
  535. {
  536. get { return isDefused; }
  537. set { isDefused = value; }
  538. }
  539. }
  540. public class FastM1nesweeperCellUpdateEventArgs : EventArgs
  541. {
  542. private int x;
  543. private int y;
  544. FastM1nesweeperCell cell;
  545. public int X
  546. {
  547. get { return x; }
  548. }
  549. public int Y
  550. {
  551. get { return y; }
  552. }
  553. public FastM1nesweeperCell Cell
  554. {
  555. get { return cell; }
  556. }
  557. public FastM1nesweeperCellUpdateEventArgs(int x, int y, FastM1nesweeperCell cell)
  558. {
  559. this.x = x;
  560. this.y = y;
  561. this.cell = cell;
  562. }
  563. }
  564. }</ScriptText>
  565. <Styles>
  566. <Style Name="Hover" Border.Lines="All" Fill="Texture" Fill.ImageWidth="28" Fill.ImageHeight="28" Fill.PreserveAspectRatio="true" Fill.WrapMode="Clamp" Fill.ImageOffsetX="0" Fill.ImageOffsetY="0" Fill.ImageData="iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA9QD1APUHT9P6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wMaBzYgkz2pnwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAw0lEQVRIx+3WsYqFMBCF4T8mGUSjiAYLsRN9Cp/SV7US0Wx1l132lvGyRaYaTvMlYSCjtm0Lx3FwnidPlPeedV1ZlgWtNaaua8Zx5L5vruuKipVlyTRNDMPwnRmAoijw3gMQQoiCGWNomoa2bX/nr0ZEqKoq2u1EBOfc34O8GqUUWZZhrY0Caq3f5hkfrgQmMIEJTGACE/jjx9daY61FRJ4HnXN0XUee588/ad/3zPP8EQxA7fse3m1Xj4Eh1iL6X6f0Cy2XHz7MkhXUAAAAAElFTkSuQmCC" Font="Arial, 10pt" ApplyBorder="false" ApplyTextFill="false" ApplyFont="false"/>
  567. </Styles>
  568. <Dictionary/>
  569. <ReportPage Name="MainPage" Watermark.Font="Arial, 60pt" StartPageEvent="Page1_StartPage">
  570. <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="47.25">
  571. <TextObject Name="GameTitle" Left="47.25" Width="670.95" Height="37.8" Text="Fast M1nesweeper" VertAlign="Center" Font="Comic Sans MS, 20pt" TextRenderType="HtmlParagraph"/>
  572. <PictureObject Name="GameIcon" Width="37.8" Height="37.8" SizeMode="StretchImage" Image="iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOvAAADrwBlbxySQAABT9JREFUaEPVWU1sG0UUNj9CFC7lT5wRLfQAt0ogcQUkJBACOxFNS5OG0qRN4+AktnfXSTZO4jSNf9bOr+Ox65Q0LWkFoWqrpjQprUgQB1BRW1AL7YWCOCBAFQq3Mry3ef7NJl7Drp180ifPvJl973uzM7Oza4uZcAUPPY+k6vqDoDAfkqrrDJzf4w6zW0gsk7W8EEZGHqFiQQhK4gUhHOcqoUzmgpCV5EYqGg8hzNqB1VRdFTDySioBLJN5VbiVeA3GoKrxcIfYG0uC4hFZlu8n83LAlBGU+O3MHYjfXm0aoS9YKwNL/WOvk9l4OILsUQj0j5qEwi4Ig4cfoyaLM3xoM9j3QXJHYSRvpMUT0YZt2Kc1En2aLrM0B8YeB18X1X7gG2NQkzmAW3w9I4rdEkMJF0yRL1M2vcRrXGHmgvLNLPv3FMY8QBCWFTBNKZLgfYmPePTEaT5x6jw/dvZz/vHsPJ+em+fjJ88t669FSCpGYcyDOxKvzQ7aMTTOR4+fUsV+emFBk5Nn5nKErkQJFjGFMQdimD0JC/IKBhNhxIePneSfpIXP8yNnZvkQ2HrZUe4d/ZB7BhJqPzFP6IpU4t9C/yconLFAx7AI1cXZPjyuTpOU8MT0We6NTmiLKprsuuFJyGNjD8HofI0BPINJfuLcJVX88ZlLvCc2qSHi/xHWwleO4NQGCq8PQpBtgn1+txCJvyoOjG3JdgBO0wsXE5iauciT0zO8bSi5LLiBjFJ42L6nNqAm1KZqBK3UlAsY5VCOE4X9Cr/f5dhKSSVxjTRk2eIhkqsNfOznXLCWWEi8iqVT5NpLQpf4LMBu0K/pqCxkfSRLP+hso+GsxFQYPE9iT5Es/XCHYg3oYOL0eXXPz3dcSrtLYXUkSz/o5AhOZlVmOy+1HdbkEZKlH5DA5Xyn5SIk8A3J0g+48Pd8R2XkbyRLH+B8s5A6Sa4VwrF8nuQVBnbWclJWzi18QfL0AW7b+p1CiLW0iPEkTLL0Ay6axItLud9r2uFBtrdLmSVZ+gEPj72qIx37tJn2em+Q17b3MZKlH/jpI99pqWnvHeC2Jg9vkENbSZZOLH2YCmg5LRXtBwZ55QcebrNLSD8p0wFVPAtrOS0Vm3LFF5dEud8FcM7jtMkTn+LqSeBLQ7YzSOZnd4RdzbaZRWcwxmtEX0YsJFHZ5LlmtUu/WBvFuym7tVEKkNxc4IuyGE685wqzV4RA7Bk5mXyQmvCr8ZhWUEMI2+S+bgWmTFtGPLBG8qX3/gpZfsDmEDa9vd/zMiRQi2Vq0gf8KtDsH7kMDzdtEf+FILyhJ8yrWjtzhCOrnN47LX7/wxTeGOyRA1t2uLyLe2Q/d/SPaIvSQcfBYf5+Rz/f1tKxTDhyu7Pz77q2g5sprLGo71Ke3d7a+RcGeqe5g9d6DqiLDvfrFv+oOo/dMLLuEOPOQFS14XZY1xnguyTfiqJT3NHqvbO721/862MxqHR4dmkFN4Lom8KYB9gVolrBjSD6pjDmwdYoXc0EFG9WC74ErI0/s4UUJGyR7zq7/qiRemPoI2WH8hUKYw7ebJI3pvZk2M4+sznk9N9Bdd7+l2o8vRM7xZ4ftrV0LqbFEqtaOharxZ4btZ7ew/Vy34t0mQV9qL5Un+JdjEFNxsO6X3pNFdQohSoqKu4j8zLIsnwviPkpJR7LYF7xTz70BaMfVPtCDDIbD5ij7Va7oOtvVnxiZhJY4emZB1uTtBNjUNV4FHN7rQ3S1nQCUCZzQZg6hYoFjPyPSKquP8C87oEp0U3V9Ye37OJzSKqaAIvlXycriBTjO0FlAAAAAElFTkSuQmCC"/>
  573. </ReportTitleBand>
  574. <PageHeaderBand Name="PageHeader1" Top="51.25" Width="718.2" Height="75.6">
  575. <TextObject Name="LabelRow" Width="122.85" Height="18.9" Text="Desk rows:" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  576. <TextObject Name="LabelCount" Top="37.8" Width="122.85" Height="18.9" Text="Bombs count:" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  577. <TextObject Name="tBombs" Left="122.85" Top="37.8" Width="75.6" Height="18.9" Text="500" Font="Comic Sans MS, 11.25pt"/>
  578. <TextObject Name="tRows" Left="122.85" Width="75.6" Height="18.9" Text="25" Font="Comic Sans MS, 11.25pt"/>
  579. <TextObject Name="tColumns" Left="122.85" Top="18.9" Width="75.6" Height="18.9" Text="25" Font="Comic Sans MS, 11.25pt"/>
  580. <TextObject Name="LabelColumn" Top="18.9" Width="122.85" Height="18.9" Text="Desk columns:" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  581. <TextObject Name="tScore" Left="557.55" Top="37.8" Width="151.2" Height="18.9" Font="Comic Sans MS, 11.25pt"/>
  582. <TextObject Name="tClicks" Left="557.55" Width="151.2" Height="18.9" Font="Comic Sans MS, 11.25pt"/>
  583. <TextObject Name="tTime" Left="557.55" Top="18.9" Width="151.2" Height="18.9" Font="Comic Sans MS, 11.25pt"/>
  584. <TextObject Name="LabelGameOver" Left="198.45" Width="283.5" Height="56.7" HorzAlign="Center" VertAlign="Center" Font="Comic Sans MS, 27.75pt, style=Bold"/>
  585. <TextObject Name="LabelClicks" Left="491.4" Width="66.15" Height="18.9" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  586. <TextObject Name="LabelTime" Left="491.4" Top="18.9" Width="66.15" Height="18.9" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  587. <TextObject Name="LabelScore" Left="491.4" Top="37.8" Width="66.15" Height="18.9" Font="Comic Sans MS, 11.25pt, style=Bold"/>
  588. </PageHeaderBand>
  589. <DataBand Name="Data1" Top="130.85" Width="718.2" Height="765.45">
  590. <TableObject Name="TableMap" Width="27.97" Height="27.97" Border.Lines="All" ManualBuildEvent="TableMap_ManualBuild">
  591. <TableColumn Name="Column1" Width="27.97"/>
  592. <TableRow Name="Row1" Height="27.97">
  593. <TableCell Name="GameCell" Border.Lines="Right, Bottom" Border.Color="Gainsboro" Fill="Texture" Fill.ImageWidth="28" Fill.ImageHeight="28" Fill.PreserveAspectRatio="true" Fill.WrapMode="Clamp" Fill.ImageOffsetX="0" Fill.ImageOffsetY="0" Fill.ImageData="iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA9QD1APUHT9P6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wMaBzUguBD6XAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAqklEQVRIx+3WzQrDIAwH8L920vd/pvoULV57KEVyiCBqcMdtrLs5GcOcgz/yAVHVWis6hkbn6Aoycz8wxohlWfqAMUZs24bjOHC7Ssg5N8NSSiAiMDMAXIMiAhFpAuacX9767y0d4AAHOMABDvBHwcuLX0pBSqkZ8vz1fQO99yAilFKaYEqpzxXu+w7nHEIITds4TRO01g9QRLCuK6y1OM/zK7MzxmCeZ9wBKmxQRfNekYUAAAAASUVORK5CYII=" Cursor="Hand" HoverStyle="Hover" ClickEvent="TableCell_Click" Padding="0, 0, 0, 0" HorzAlign="Center" VertAlign="Center" Font="Comic Sans MS, 11.25pt" TextRenderType="HtmlParagraph" ParagraphFormat.LineSpacingType="Exactly"/>
  594. </TableRow>
  595. </TableObject>
  596. </DataBand>
  597. <PageFooterBand Name="PageFooter1" Top="900.3" Width="718.2" Height="28.35" Fill.Color="WhiteSmoke">
  598. <TextObject Name="LabelCopy" Width="718.2" Height="28.35" Cursor="Hand" Hyperlink.Value="https://www.fast-report.com/en/product/fast-report-net/" Text="Generated by FastReport .NET" VertAlign="Center" Font="Comic Sans MS, 8.25pt, style=Underline" TextFill.Color="Blue"/>
  599. </PageFooterBand>
  600. </ReportPage>
  601. </Report>