PageRenderTime 71ms CodeModel.GetById 39ms RepoModel.GetById 0ms app.codeStats 0ms

/SlotGame.hx

https://bitbucket.org/scinova/slotgame
Haxe | 423 lines | 387 code | 32 blank | 4 comment | 73 complexity | be5679c149bc7aa81e8503c4ac962c69 MD5 | raw file
  1. import flash.display.Sprite;
  2. import flash.display.MovieClip;
  3. import flash.events.Event;
  4. import flash.events.KeyboardEvent;
  5. import flash.text.TextField;
  6. import flash.text.TextFormat;
  7. import flash.text.TextFormatAlign;
  8. class SlotGame extends Sprite {
  9. inline static var BLANK:Int = 0;
  10. inline static var BAR1 = 1;
  11. inline static var BAR2 = 2;
  12. inline static var BAR3 = 3;
  13. inline static var CHERRY = 6;
  14. inline static var SEVEN = 7;
  15. public var reels:Array<Array<Int>>;
  16. public var payout:Array<Int>;
  17. public var balance:Int;
  18. var balance_delta:Int;
  19. var jackpot_disabled:Bool;
  20. var altered_chance:Bool;
  21. public var bet:Int;
  22. public var multiply:Int;
  23. public var result:Array<Int>;
  24. public var win:Array<Int>;
  25. public var state:Int; // 0 idle 1 spin 2 result
  26. var display:Display;
  27. public function new() {
  28. super();
  29. trace('init');
  30. result = new Array();
  31. win = [0,0,0];
  32. payout = [250,100,50,40,30,30,30,25,20,15,10,10,5,2];
  33. reels = [[1,0,7,0,1,0,2,0,6,0,1,0,7,0,2,0,1,0,1,0,6,0,1,0,3,0],
  34. [6,0,1,0,2,0,1,0,6,0,1,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0],
  35. [3,0,1,0,3,0,2,0,3,0,6,0,2,0,3,0,2,0,3,0,7,0,3,0,2,0],
  36. [1,0,3,0,1,0,6,0,1,0,7,0,1,0,2,0,1,0,2,0,1,0,6,0,1,0]];
  37. // reels_init = [[6,2,1,2,2],[7,2,1,2,1],[1,4,6,1,1],[7,2,1,2,1]];
  38. bet = 0;
  39. multiply = 1;
  40. balance = 0;
  41. balance_delta = 10;
  42. flash.Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down );
  43. flash.Lib.current.stage.addEventListener(KeyboardEvent.KEY_UP, key_up );
  44. display = new Display(this);
  45. addChild(display);
  46. }
  47. public function random_result() {
  48. for (i in 0 ... 4)
  49. result[i] = Std.random(26);
  50. }
  51. function _compare(x, y) {
  52. if (x == y)
  53. return 0;
  54. if (x > y)
  55. return -1;
  56. else
  57. return 1;
  58. }
  59. public function calculate_win() {
  60. var outcome = [[0,0,0,0],[0,0,0,0],[0,0,0,0]];
  61. trace("result is " + result);
  62. for (r in 0 ... 4) {
  63. outcome[0][r] = reels[r][result[r]];
  64. if (result[r] == 0)
  65. outcome[1][r] = reels[r][25]
  66. else
  67. outcome[1][r] = reels[r][result[r] - 1];
  68. if (result[r] == 25)
  69. outcome[2][r] = reels[r][0];
  70. else
  71. outcome[2][r] = reels[r][result[r] + 1];
  72. }
  73. for (l in 0 ... 3)
  74. outcome[l].sort(_compare);
  75. trace("outcome is " + outcome[0] + " " + outcome[1] + " " + outcome[2]);
  76. for (l in 0 ... 3) {
  77. if (l == 1 && bet < 2)
  78. continue;
  79. if (l == 2 && bet < 3)
  80. continue;
  81. var out = outcome[l].join("");
  82. if (out.indexOf("7777") > -1) {
  83. win[l] = 250;
  84. continue;
  85. }
  86. if (out.indexOf("3333") > -1) {
  87. win[l] = 100;
  88. continue;
  89. }
  90. if (out.indexOf("2222") > -1) {
  91. win[l] = 50;
  92. continue;
  93. }
  94. if (out.indexOf("1111") > -1) {
  95. win[l] = 40;
  96. continue;
  97. }
  98. if (out.indexOf("6666") > -1) {
  99. win[l] = 30;
  100. continue;
  101. }
  102. if (out.indexOf("777") > -1) {
  103. win[l] = 30;
  104. continue;
  105. }
  106. if (out.indexOf("333") > -1) {
  107. win[l] = 25;
  108. continue;
  109. }
  110. if (out.indexOf("222") > -1) {
  111. win[l] = 20;
  112. continue;
  113. }
  114. if (out.indexOf("111") > -1) {
  115. win[l] = 15;
  116. continue;
  117. }
  118. if (out.indexOf("666") > -1) {
  119. win[l] = 10;
  120. continue;
  121. }
  122. if (out.indexOf("66") > -1) {
  123. win[l] = 5;
  124. continue;
  125. }
  126. if (out.indexOf("6") > -1) {
  127. win[l] = 2;
  128. continue;
  129. }
  130. }
  131. trace("win is " + win[0] + " " + win[1] + " " + win[2]);
  132. }
  133. function key_up(e:KeyboardEvent) {
  134. switch(e.charCode) {
  135. case 113: //q
  136. jackpot_disabled = false;
  137. trace ("jackpot enabled");
  138. case 111: //o
  139. altered_chance = false;
  140. trace ("payout 75%");
  141. case 97: //a
  142. balance_delta = 10;
  143. case 110: //n
  144. balance_delta = 10;
  145. }
  146. }
  147. function key_down(e:KeyboardEvent) {
  148. switch(e.charCode) {
  149. case 113: //q
  150. if (jackpot_disabled)
  151. return;
  152. jackpot_disabled = true;
  153. trace ("jackpot disabled");
  154. case 111: //o
  155. if (altered_chance)
  156. return;
  157. altered_chance = true;
  158. trace ("payout 85%");
  159. case 97: //a
  160. balance_delta = 1;
  161. case 110: //n
  162. balance_delta = 5;
  163. case 120: //x
  164. coin_in();
  165. case 122: //z
  166. coin_out();
  167. case 98: //b
  168. play_bet();
  169. case 99: //c
  170. play_bet_max();
  171. case 100: //d
  172. play_start();
  173. case 101: //e
  174. cash_out();
  175. case 115: //s
  176. show_history();
  177. }
  178. }
  179. function play_bet() {
  180. trace("bet");
  181. if (bet < 7 && balance - bet > 0)
  182. bet = bet + 1;
  183. else
  184. bet = 1;
  185. if (bet > 3)
  186. multiply = bet - 2;
  187. else
  188. multiply = 1;
  189. }
  190. function play_bet_max() {
  191. trace("bet_max");
  192. if (balance > 6)
  193. bet = 7;
  194. else
  195. bet = balance;
  196. if (bet > 3)
  197. multiply = bet - 2;
  198. else
  199. multiply = 1;
  200. }
  201. function play_start() {
  202. if (balance < 1)
  203. return;
  204. trace("start");
  205. win = [0,0,0];
  206. balance = balance - bet;
  207. random_result();
  208. state = 1;
  209. // TODO: spin
  210. calculate_win();
  211. for (l in 0 ... 3) {
  212. balance = balance + win[l];
  213. //win[r] = 0;
  214. }
  215. if (bet > balance)
  216. bet = balance;
  217. }
  218. function cash_out() {
  219. trace("cash_out");
  220. }
  221. function coin_in() {
  222. trace("coin_in");
  223. balance += balance_delta;
  224. if (bet < 1)
  225. bet = 1;
  226. }
  227. function coin_out() {
  228. trace("coin_out");
  229. balance -= balance_delta;
  230. }
  231. function show_history() {
  232. trace("show_history");
  233. }
  234. static function main() {
  235. var game:SlotGame = new SlotGame();
  236. flash.Lib.current.addChild(game);
  237. }
  238. }
  239. class Display extends Sprite {
  240. var game:SlotGame;
  241. var reel:Array<Sprite>;
  242. var position:Array<Float>;
  243. var speed:Array<Float>;
  244. var balance:TextField;
  245. var bet:TextField;
  246. var win:TextField;
  247. var fmt:TextFormat;
  248. var fmt2:TextFormat;
  249. var bet_selector:Array<Sprite>;
  250. var multiply_selector:Array<Sprite>;
  251. public function new(game:SlotGame) {
  252. super();
  253. this.game = game;
  254. trace('display init');
  255. var back:MovieClip = flash.Lib.attach("back");
  256. addChild(back);
  257. reel = new Array();
  258. position = new Array();
  259. speed = new Array();
  260. bet_selector = new Array();
  261. multiply_selector = new Array();
  262. var colors = [0xf0f0f0, 0xcccccc, 0x666666, 0x000000, 0x880000, 0xcccc00];
  263. for (r in 0 ... 4) {
  264. var mc = new Sprite();
  265. var gfx = new Sprite();
  266. position[r] = 0;
  267. speed[r] = 1;
  268. for (i in 0 ... 13) {
  269. mc.graphics.beginFill(colors[game.reels[r][i * 2]]);
  270. mc.graphics.drawRect(0, i * 120, 100, 120);
  271. if (game.reels[r][i * 2] == 1)
  272. gfx = flash.Lib.attach("bar1");
  273. if (game.reels[r][i * 2] == 2)
  274. gfx = flash.Lib.attach("bar2");
  275. if (game.reels[r][i * 2] == 3)
  276. gfx = flash.Lib.attach("bar3");
  277. if (game.reels[r][i * 2] == 6)
  278. gfx = flash.Lib.attach("cherry");
  279. if (game.reels[r][i * 2] == 7)
  280. gfx = flash.Lib.attach("seven");
  281. if (game.reels[r][i * 2] > 0) {
  282. mc.addChild(gfx);
  283. gfx.y = 120 * i;
  284. }
  285. }
  286. addChild(mc);
  287. mc.x = 30 + r * 110;
  288. //mc.y = 140;
  289. reel[r] = mc;
  290. position[r] = 0;
  291. }
  292. for (i in 0 ... 3) {
  293. var s = new Sprite();
  294. s.graphics.beginFill(0xff0000);
  295. s.graphics.drawRect(0, 0, 430, 1);
  296. s.graphics.drawRect(-30, -30, 30, 30);
  297. s.x = 30;
  298. s.y = 280 + 80 * i;
  299. addChild(s);
  300. bet_selector[i] = s;
  301. }
  302. for (i in 0 ... 5) {
  303. var s = new Sprite();
  304. s.graphics.beginFill(0x880000);
  305. s.graphics.drawRect(0, 0, 40, 580);
  306. s.x = 590 + 40 * i;
  307. s.y = 10;
  308. addChild(s);
  309. multiply_selector[i] = s;
  310. }
  311. var front:MovieClip = flash.Lib.attach("front");
  312. addChild(front);
  313. fmt = new TextFormat();
  314. fmt.font = "fixed";
  315. fmt.size = 40;
  316. fmt.color = 0xff0000;
  317. fmt.align = TextFormatAlign.CENTER;
  318. fmt2 = new TextFormat();
  319. fmt2.font = "fixed";
  320. fmt2.size = 16;
  321. fmt2.color = 0x330000;
  322. fmt2.align = TextFormatAlign.CENTER;
  323. for (i in 0 ... 5) {
  324. for (r in 0 ... 14) {
  325. var t:TextField = new TextField();
  326. t.x = 590 + 40 * i;
  327. t.y = 40 + 40 * r;
  328. t.width = 40;
  329. t.height = 40;
  330. t.text = Std.string(game.payout[r] * (i + 1));
  331. t.setTextFormat(fmt2);
  332. addChild(t);
  333. }
  334. }
  335. balance = new TextField();
  336. balance.selectable = false;
  337. addChild(balance);
  338. balance.y = 540;
  339. balance.x = 10;
  340. balance.width = 130;
  341. bet = new TextField();
  342. bet.selectable = false;
  343. addChild(bet);
  344. bet.y = 540;
  345. bet.x = 170;
  346. bet.width = 130;
  347. win = new TextField();
  348. addChild(win);
  349. win.y = 540;
  350. win.x = 330;
  351. win.width = 130;
  352. flash.Lib.current.stage.addEventListener(Event.ENTER_FRAME, loop);
  353. }
  354. private function loop(e:Event) {
  355. balance.text = Std.string(game.balance);
  356. balance.setTextFormat(fmt);
  357. bet.text = Std.string(game.bet);
  358. bet.setTextFormat(fmt);
  359. win.text = Std.string((game.win[0] + game.win[1] + game.win[2]) * game.multiply);
  360. win.setTextFormat(fmt);
  361. for (r in 0 ... 4)
  362. reel[r].y = 240 - game.result[r] * 60;
  363. for (r in 0 ... 3)
  364. bet_selector[r].visible = false;
  365. if (game.bet == 1)
  366. bet_selector[1].visible = true;
  367. if (game.bet > 1) {
  368. bet_selector[0].visible = true;
  369. bet_selector[1].visible = true;
  370. }
  371. if (game.bet > 2) {
  372. bet_selector[0].visible = true;
  373. bet_selector[1].visible = true;
  374. bet_selector[2].visible = true;
  375. }
  376. for (r in 0 ... 5)
  377. multiply_selector[r].visible = false;
  378. if (game.bet < 4)
  379. multiply_selector[0].visible = true;
  380. if (game.bet == 4)
  381. multiply_selector[1].visible = true;
  382. if (game.bet == 5)
  383. multiply_selector[2].visible = true;
  384. if (game.bet == 6)
  385. multiply_selector[3].visible = true;
  386. if (game.bet == 7)
  387. multiply_selector[4].visible = true;
  388. }
  389. public function refresh() {
  390. }
  391. }