/Applications/FractionOrderingApp/FractionOrderingApp/FractionOrderingApp.cs

https://github.com/alexmullans/Siftables-Emulator
C# | 214 lines | 194 code | 18 blank | 2 comment | 11 complexity | 97b7d2cdfbc76fc7d5ea9b193a577e61 MD5 | raw file
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using Sifteo;
  5. using Sifteo.Util;
  6. namespace FractionOrderingApp
  7. {
  8. public class FractionOrderingApp : BaseApp
  9. {
  10. public Random Rand = new Random();
  11. private bool _completelyOrdered;
  12. private int _cubeX;
  13. private int _cubeYDen;
  14. private int _cubeYNum;
  15. private int _height;
  16. private string _imageSourceDen;
  17. private string _imageSourceNum;
  18. private int _rotation;
  19. private int _scale;
  20. private int _sourceX;
  21. private int _sourceY;
  22. private int _width;
  23. public override void Setup()
  24. {
  25. _imageSourceNum = "";
  26. _imageSourceDen = "";
  27. _cubeX = 35;
  28. _cubeYNum = 0;
  29. _cubeYDen = 70;
  30. _sourceX = 0;
  31. _sourceY = 0;
  32. _width = 140;
  33. _height = 140;
  34. _scale = 1;
  35. _rotation = 0;
  36. foreach (var cube in CubeSet)
  37. {
  38. var fraction = new Fraction(Rand.Next(1, 11), Rand.Next(1, 11));
  39. ChangeCubeImg(cube, fraction, Color.White);
  40. cube.userData = new CubeData(fraction);
  41. }
  42. foreach (var cube in CubeSet)
  43. {
  44. CheckNeighborsAreOrdered(cube);
  45. }
  46. CheckEverythingOrdered();
  47. }
  48. private void ChangeCubeImg(Cube cube, Fraction fraction, Color color)
  49. {
  50. cube.FillScreen(color);
  51. // _imageSourceNum = fraction.GetNumerator() + ".png";
  52. // _imageSourceDen = fraction.GetDenominator() + ".png";
  53. switch (fraction.GetNumerator())
  54. {
  55. case 1:
  56. _imageSourceNum = "1.png";
  57. break;
  58. case 2:
  59. _imageSourceNum = "2.png";
  60. break;
  61. case 3:
  62. _imageSourceNum = "3.png";
  63. break;
  64. case 4:
  65. _imageSourceNum = "4.png";
  66. break;
  67. case 5:
  68. _imageSourceNum = "5.png";
  69. break;
  70. case 6:
  71. _imageSourceNum = "6.png";
  72. break;
  73. case 7:
  74. _imageSourceNum = "7.png";
  75. break;
  76. case 8:
  77. _imageSourceNum = "8.png";
  78. break;
  79. case 9:
  80. _imageSourceNum = "9.png";
  81. break;
  82. case 10:
  83. _imageSourceNum = "10.png";
  84. break;
  85. }
  86. switch (fraction.GetDenominator())
  87. {
  88. case 1:
  89. _imageSourceDen = "1.png";
  90. break;
  91. case 2:
  92. _imageSourceDen = "2.png";
  93. break;
  94. case 3:
  95. _imageSourceDen = "3.png";
  96. break;
  97. case 4:
  98. _imageSourceDen = "4.png";
  99. break;
  100. case 5:
  101. _imageSourceDen = "5.png";
  102. break;
  103. case 6:
  104. _imageSourceDen = "6.png";
  105. break;
  106. case 7:
  107. _imageSourceDen = "7.png";
  108. break;
  109. case 8:
  110. _imageSourceDen = "8.png";
  111. break;
  112. case 9:
  113. _imageSourceDen = "9.png";
  114. break;
  115. case 10:
  116. _imageSourceDen = "10.png";
  117. break;
  118. }
  119. cube.Image(_imageSourceNum, _cubeX, _cubeYNum, _sourceX, _sourceY, _width, _height, _scale,
  120. _rotation);
  121. cube.Image(_imageSourceDen, _cubeX, _cubeYDen, _sourceX, _sourceY, _width, _height, _scale,
  122. _rotation);
  123. cube.FillRect(Color.Black, _cubeX, _cubeYDen - 10, 65, 10);
  124. cube.Paint();
  125. }
  126. private void CheckEverythingOrdered()
  127. {
  128. var totalCubes = CubeSet.Count;
  129. var row = CubeHelper.FindRow(CubeSet);
  130. if (row.Length == totalCubes)
  131. {
  132. if (row.Any(cube => !((CubeData) cube.userData).IsOrdered()))
  133. {
  134. _completelyOrdered = false;
  135. return;
  136. }
  137. if (!_completelyOrdered)
  138. {
  139. _completelyOrdered = true;
  140. PlaySuccessSound();
  141. }
  142. }
  143. else
  144. {
  145. _completelyOrdered = false;
  146. }
  147. }
  148. public override void Tick()
  149. {
  150. foreach (var cube in CubeSet)
  151. {
  152. CheckNeighborsAreOrdered(cube);
  153. }
  154. CheckEverythingOrdered();
  155. }
  156. private void CheckNeighborsAreOrdered(Cube cube)
  157. {
  158. if ((null == cube.Neighbors.Left ||
  159. ((CubeData) cube.userData).GreaterThan(((CubeData) cube.Neighbors.Left.userData))) &&
  160. (null == cube.Neighbors.Right ||
  161. ((CubeData) cube.Neighbors.Right.userData).GreaterThan((CubeData) cube.userData)))
  162. {
  163. ChangeCubeImg(cube, ((CubeData) cube.userData).GetFraction(), new Color(0, 255, 0)); // green
  164. if (!((CubeData) cube.userData).IsOrdered())
  165. {
  166. PlayGoodSound();
  167. }
  168. ((CubeData) cube.userData).SetOrder(true);
  169. }
  170. else
  171. {
  172. ChangeCubeImg(cube, ((CubeData) cube.userData).GetFraction(), new Color(255, 0, 0)); // red
  173. if (((CubeData) cube.userData).IsOrdered())
  174. {
  175. PlayBadSound();
  176. }
  177. ((CubeData) cube.userData).SetOrder(false);
  178. }
  179. }
  180. private void PlayGoodSound()
  181. {
  182. var s = Sounds.CreateSound("Good.mp3");
  183. s.Play(1);
  184. }
  185. private void PlayBadSound()
  186. {
  187. var s = Sounds.CreateSound("Bad.mp3");
  188. s.Play(1);
  189. }
  190. private void PlaySuccessSound()
  191. {
  192. var s = Sounds.CreateSound("Success.mp3");
  193. s.Play(1);
  194. }
  195. }
  196. }