GuessSizeView.m 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. //
  2. // GuessSizeView.m
  3. // BuguLive
  4. //
  5. // Created by 布谷 on 2017/5/26.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "GuessSizeView.h"
  9. #import <ImageIO/ImageIO.h>
  10. @implementation GuessSizeView
  11. - (void)awakeFromNib
  12. {
  13. [super awakeFromNib];
  14. _httpManager =[NetHttpsManager manager];
  15. _BuguLive = [GlobalVariables sharedInstance];
  16. self.timeLabel = [[UILabel alloc] init];
  17. self.timeLabel.textColor = kColorWithStr(@"fff3e1");
  18. self.timeLabel.textAlignment = NSTextAlignmentCenter;
  19. self.timeLabel.font = kAppMiddleTextFont_1;
  20. [self.clockImageView addSubview:self.timeLabel];
  21. self.betImageArray = @[self.bigSizeImageView,self.middleSizeImageView,self.smallSizeImageView];
  22. if (!_coinMoveArray) {
  23. _coinMoveArray = [[NSMutableArray alloc]init];
  24. _coinBtnArray = [[NSMutableArray alloc]init];
  25. _coinBeignArray = [[NSMutableArray alloc]init];
  26. _betViewArray = [[NSMutableArray alloc]init];
  27. _breathImgArray = [[NSMutableArray alloc]init];
  28. }
  29. self.diceImageViewOne = [[FLAnimatedImageView alloc] init];
  30. self.diceImageViewOne.frame = CGRectMake((kScreenW-170)/2, 0, 150, 150);
  31. self.diceImageViewOne.backgroundColor = [UIColor clearColor];
  32. [self addSubview:self.diceImageViewOne];
  33. self.diceImageViewTwo = [[FLAnimatedImageView alloc] init];
  34. self.diceImageViewTwo.frame = CGRectMake((kScreenW-170)/2+30, 40, 100, 100);
  35. self.diceImageViewTwo.backgroundColor = [UIColor clearColor];
  36. [self addSubview:self.diceImageViewTwo];
  37. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateCoin) name:@"updateCoin" object:nil];
  38. _canCloseGame = YES;
  39. _maskViewNameArr = @[@"gm_bigMaskView",@"gm_middleMaskView",@"gm_smallMaskView"];
  40. }
  41. - (void)creatLabel
  42. {
  43. [self setNeedsLayout];
  44. [self layoutIfNeeded];
  45. self.timeLabel.frame = CGRectMake(0, 0, self.clockImageView.width, self.clockImageView.height);
  46. CGFloat betLabelOrigin = 0;
  47. CGFloat userBetLabelOrigin = 0;
  48. for (int i=0; i<3; i++) {
  49. UIImageView * betImageView = self.betImageArray[i];
  50. if (i == 0) {
  51. betLabelOrigin = (betImageView.width-60)/2+10;
  52. userBetLabelOrigin = (betImageView.width-60)/2+5;
  53. }
  54. else if (i == 1)
  55. {
  56. betLabelOrigin = (betImageView.width-60)/2;
  57. userBetLabelOrigin = (betImageView.width-60)/2;
  58. }
  59. else if (i == 2)
  60. {
  61. betLabelOrigin = (betImageView.width-60)/2-10;
  62. userBetLabelOrigin = (betImageView.width-60)/2-5;
  63. }
  64. UILabel * betLabel = [[UILabel alloc] initWithFrame:CGRectMake(betLabelOrigin, 10, 60,20)];
  65. betLabel.textAlignment = NSTextAlignmentCenter;
  66. betLabel.font = kAppSmallerTextFont_1;
  67. betLabel.backgroundColor = kGrayTransparentColor3;
  68. betLabel.layer.cornerRadius = 10;
  69. betLabel.layer.masksToBounds = YES;
  70. betLabel.hidden = YES;
  71. betLabel.textColor = kWhiteColor;
  72. [betImageView addSubview:betLabel];
  73. [self.betLabelArr addObject:betLabel];
  74. UILabel * userBetLabel = [[UILabel alloc] initWithFrame:CGRectMake(userBetLabelOrigin, betImageView.height-50, 60, 20)];
  75. userBetLabel.textAlignment = NSTextAlignmentCenter;
  76. userBetLabel.font = kAppSmallerTextFont_1;
  77. userBetLabel.backgroundColor = kRedColor;
  78. userBetLabel.layer.cornerRadius = 10;
  79. userBetLabel.layer.masksToBounds = YES;
  80. userBetLabel.hidden = YES;
  81. userBetLabel.textColor = kWhiteColor;
  82. [betImageView addSubview:userBetLabel];
  83. [self.userBetLabelArr addObject:userBetLabel];
  84. UILabel * betMultipleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, betImageView.height-30, betImageView.width, 20)];
  85. betMultipleLabel.textAlignment = NSTextAlignmentCenter;
  86. betMultipleLabel.textColor = kColorWithStr(@"832f0d");
  87. betMultipleLabel.font = kAppMiddleTextFont_1;
  88. [betImageView addSubview:betMultipleLabel];
  89. [self.betMultipleLabelArr addObject:betMultipleLabel];
  90. [_coinMoveArray addObject:[NSValue valueWithCGPoint:betImageView.center]];
  91. UIImageView * maskView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, betImageView.width, betImageView.height)];
  92. maskView.image =[UIImage imageNamed:self.maskViewNameArr[i]];
  93. maskView.hidden = YES;
  94. [betImageView addSubview:maskView];
  95. [self.maskViewArr addObject:maskView];
  96. betImageView.userInteractionEnabled = YES;
  97. betImageView.tag = i+1;
  98. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(coinMove:)];
  99. [betImageView addGestureRecognizer:tap];
  100. }
  101. }
  102. - (void)setBetOptionArray:(NSArray *)betOptionArray
  103. {
  104. _betOptionArray = betOptionArray;
  105. //[self createCoinView];
  106. }
  107. - (void)loadDiceWithDicesArr:(NSArray *)dicesArr andResultWinPostion:(NSInteger )winPostion
  108. {
  109. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  110. if (winPostion>0)
  111. {
  112. for (UIImageView * view in self.maskViewArr)
  113. {
  114. if (![view isEqual:self.maskViewArr[winPostion-1]] && winPostion>0)
  115. {
  116. view.hidden = NO;
  117. }
  118. }
  119. [self.betArr removeAllObjects];
  120. [self.userBetArr removeAllObjects];
  121. }
  122. });
  123. self.clockImageView.hidden = YES;
  124. NSURL *url1 = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%@-%@",dicesArr.firstObject,dicesArr.lastObject] withExtension:@"gif"];
  125. NSData *data1 = [NSData dataWithContentsOfURL:url1];
  126. FLAnimatedImage * animatedImage1 = [FLAnimatedImage animatedImageWithGIFData:data1];
  127. // animatedImage1.loopCount = 1;
  128. self.diceImageViewOne.animatedImage = animatedImage1;
  129. self.diceImageViewOne.hidden = NO;
  130. }
  131. - (void)showTime:(int)time
  132. {
  133. _countTime = time;
  134. _timeLabel.text = [NSString stringWithFormat:@"%d",time];
  135. _clockImageView.hidden = NO;
  136. _timeLabel.hidden = NO;
  137. for (UIImageView * view in self.maskViewArr) {
  138. view.hidden = YES;
  139. }
  140. [self hiddenLabelWithLabelArr:self.betLabelArr];
  141. [self hiddenLabelWithLabelArr:self.userBetLabelArr];
  142. //[self hiddenLabelWithLabelArr:self.betMultipleLabelArr];
  143. self.diceImageViewOne.hidden = YES;
  144. self.diceImageViewTwo.hidden = YES;
  145. if (_showDiceTimer) {
  146. [_showDiceTimer invalidate];
  147. _showDiceTimer = nil;
  148. }
  149. _showDiceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDown) userInfo:nil repeats:YES];
  150. }
  151. - (void)hiddenLabelWithLabelArr:(NSArray *)labelArr
  152. {
  153. for (UILabel * label in labelArr) {
  154. label.hidden = YES;
  155. }
  156. }
  157. - (void)countDown
  158. {
  159. if (_countTime == 0) {
  160. [_showDiceTimer invalidate];
  161. _showDiceTimer = nil;
  162. return;
  163. }
  164. _countTime--;
  165. _timeLabel.text = [NSString stringWithFormat:@"%d",_countTime];
  166. if (_countTime == 0) {
  167. [self addTimer];
  168. }
  169. }
  170. -(void)addTimer
  171. {
  172. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  173. if (_delegate && [_delegate respondsToSelector:@selector(reloadGameData)]) {
  174. [_delegate reloadGameData];
  175. }
  176. });
  177. }
  178. - (void)disClockTime
  179. {
  180. if (_showDiceTimer) {
  181. [_showDiceTimer invalidate];
  182. _showDiceTimer = nil;
  183. }
  184. _clockImageView.hidden = YES;
  185. }
  186. -(void)setIsArc:(BOOL)isArc
  187. {
  188. _isArc = isArc;
  189. NSString * imageStr = isArc ? @"gm_game_arcBtn" : @"gm_game_mrcBtn";
  190. [_arcOrMrcGameView.betBtn setBackgroundImage:[UIImage imageNamed:imageStr] forState:UIControlStateNormal];
  191. }
  192. #pragma mark ---------------------------------加载押注数据等------------------------------------
  193. #pragma mark 加载更新押注数据
  194. -(void)loadBetDataWithBetArray:(NSArray *)betArray andUserBetArray:(NSArray *)userBetArray
  195. {
  196. if (betArray.count == self.betImageArray.count ) {
  197. if (self.betArr.count == 0 ) {
  198. NSMutableArray * arr = [NSMutableArray arrayWithArray:betArray];
  199. //每局游戏第一次加载下注情况时对总下注情况用数组进行记录
  200. self.betArr = arr;
  201. for (int i=0; i<betArray.count; ++i) {
  202. //总投注数,第一次加载下注情况时进循环,如果为0则不显示出来
  203. if ([betArray[i] integerValue]>0) {
  204. [self loadBetDesDataWithBetLabel:_betLabelArr[i] andBetNumber:betArray[i]];
  205. }
  206. }
  207. }
  208. else
  209. {
  210. for (int i=0; i<betArray.count; ++i) {
  211. //如果不是第一次加载下注情况,则通过之前存的下注情况与现在的下注情况进行对比
  212. if ([betArray[i] integerValue]>[self.betArr[i] integerValue]) {
  213. self.betArr[i] = betArray[i];
  214. [self loadBetDesDataWithBetLabel:_betLabelArr[i] andBetNumber:betArray[i]];
  215. }
  216. }
  217. }
  218. }
  219. if (userBetArray != nil) {
  220. if (userBetArray.count == self.betImageArray.count) {
  221. //每局游戏第一次加载下注情况时对玩家下注情况用数组进行记录
  222. if (self.userBetArr.count == 0 ) {
  223. NSMutableArray * arr = [NSMutableArray arrayWithArray:userBetArray];
  224. self.userBetArr = arr;
  225. for (int i=0; i<userBetArray.count; ++i) {
  226. //玩家投注数,第一次加载下注情况时进循环,如果为0则不显示出来
  227. if ([userBetArray[i] integerValue] >0) {
  228. [self loadUserBetDesDataWithLabel:_userBetLabelArr[i] andUserBetNumber:userBetArray[i]];
  229. }
  230. }
  231. }
  232. else
  233. {
  234. //玩家投注数
  235. for (int i=0; i<userBetArray.count; ++i) {
  236. //如果不是第一次加载下注情况,则通过之前存的下注情况与现在的下注情况进行对比
  237. if ([userBetArray[i] integerValue]>[self.userBetArr[i] integerValue]) {
  238. self.userBetArr[i] = userBetArray[i];
  239. [self loadUserBetDesDataWithLabel:_userBetLabelArr[i] andUserBetNumber:userBetArray[i]];
  240. }
  241. }
  242. }
  243. }
  244. }
  245. }
  246. #pragma mark 加载总下注数据的实现
  247. -(void)loadBetDesDataWithBetLabel:(UILabel *)betLabel andBetNumber:(id)betNumber
  248. {
  249. betLabel.hidden = NO;
  250. if ([betNumber integerValue]>=10000) {
  251. float bet = [betNumber integerValue]/10000.0;
  252. betLabel.text = [NSString stringWithFormat:ASLocalizedString(@"%.1f万"),bet];
  253. }
  254. else
  255. {
  256. betLabel.text = [NSString stringWithFormat:@"%@",betNumber];
  257. }
  258. }
  259. #pragma mark 加载玩家下注数据的实现
  260. -(void)loadUserBetDesDataWithLabel:(UILabel *)userBetLabel andUserBetNumber:(id)userBetNumber
  261. {
  262. userBetLabel.hidden = NO;
  263. if ([userBetNumber integerValue]>=10000) {
  264. float userBet = [userBetNumber integerValue]/10000.0;
  265. userBetLabel.text = [NSString stringWithFormat:ASLocalizedString(@"%.1f万"),userBet];
  266. }
  267. else
  268. {
  269. userBetLabel.text = [NSString stringWithFormat:@"%@",userBetNumber];
  270. }
  271. }
  272. - (void)createButtomView
  273. {
  274. if (!_buttomView) {
  275. _buttomView = [[UIView alloc] initWithFrame:CGRectMake(0, kGuessSizeViewHeight-kGuessSizeButtomHeight, kScreenW, kGuessSizeButtomHeight)];
  276. [self addSubview:_buttomView];
  277. _gameRechargeView = [[NSBundle mainBundle] loadNibNamed:@"GameRechargeView" owner:nil options:nil].lastObject;
  278. _gameRechargeView.userInteractionEnabled = YES;
  279. _gameRechargeView.frame = CGRectMake(10, (kGuessSizeButtomHeight-26)/2,kScreenW-200, 26);
  280. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(recharge)];
  281. [_gameRechargeView.backGroundView addGestureRecognizer:tap];
  282. [_buttomView addSubview:_gameRechargeView];
  283. //金币余额的中心位置
  284. _coinPoint = CGPointMake(17.5, kGuessSizeViewHeight-kGuessSizeButtomHeight);
  285. [self updateCoinWithID:nil];
  286. }
  287. [self createBetView];
  288. }
  289. - (void)recharge
  290. {
  291. if (_delegate && [_delegate respondsToSelector:@selector(clickRecharge)]) {
  292. [_delegate clickRecharge];
  293. }
  294. }
  295. #pragma mark 创建押注金额视图
  296. - (void)createBetView
  297. {
  298. //押注的金额视图
  299. if (!_isHost) {
  300. if (!_betView) {
  301. for (int i = 0; i < self.betOptionArray.count; i++) {
  302. _betView = [BetView EditNibFromXib];
  303. _betView.delegate = self;
  304. _betView.backgroundColor = [UIColor clearColor];
  305. _betView.frame = CGRectMake((kScreenW -180) + i*(betButtonInterval +betButtonWidth), (kGuessSizeButtomHeight-30)/2, 30, 30);
  306. _betView.betBtn.tag = i+200;
  307. if (_betOptionArray.count > 0)
  308. {
  309. [_betView.betBtn setTitle:[NSString stringWithFormat:@"%@",[self.betOptionArray objectAtIndex:i]] forState:UIControlStateNormal];
  310. }
  311. [_betView.betBtn setBackgroundImage:[UIImage imageNamed:@"gm_selectedBet"] forState:UIControlStateNormal];
  312. [_betView.betBtn setTitleColor:kAppMainColor forState:UIControlStateNormal];
  313. if (i == 0) {
  314. //获取betView在当前视图的位置
  315. _amountPoint = [_buttomView convertPoint:_betView.center toView:self];
  316. _betMoney = [NSString stringWithFormat:@"%@",[self.betOptionArray objectAtIndex:0]];
  317. [_betView.betBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];
  318. // //加上呼吸灯动画
  319. // _betView.breathImg.image = [UIImage imageNamed:@"gm_coin_breath"];
  320. // [_betView.breathImg.layer addAnimation:[CAAnimation AlphaLight:1.0f fromValue:1.0f toValue:0.4f] forKey:@"alpha"];
  321. }
  322. else if (i == 1)
  323. {
  324. [_betView.betBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
  325. }
  326. else if (i == 2)
  327. {
  328. [_betView.betBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:9]];
  329. }
  330. else
  331. {
  332. [_betView.betBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:8]];
  333. }
  334. // _betView.betBtn.userInteractionEnabled = NO;
  335. // _betView.betBtn.alpha = 0.3;
  336. BOOL isSelected = i == _betCount ? YES : NO;
  337. [self setBetBtnWithIsSelected:isSelected andBtn:_betView.betBtn];
  338. //将控件存入数组中
  339. [_coinBtnArray addObject:_betView.betBtn];
  340. [_breathImgArray addObject:_betView.breathImg];
  341. [_betViewArray addObject:_betView];
  342. //将押注的开始位置保存起来
  343. [_coinBeignArray addObject:[NSValue valueWithCGPoint:_betView.center]];
  344. [_buttomView addSubview:_betView];
  345. }
  346. }
  347. }
  348. //历史记录
  349. if (!_historyView) {
  350. _historyView = [BetView EditNibFromXib];
  351. _historyView.delegate = self;
  352. if (_isHost) {
  353. _historyView.frame = CGRectMake((kScreenW - 180)+3*(betButtonInterval +betButtonWidth),( kGuessSizeButtomHeight-30)/2, 30, 30);
  354. }
  355. else
  356. {
  357. _historyView.frame = CGRectMake((kScreenW - 180)+4*(betButtonInterval +betButtonWidth), ( kGuessSizeButtomHeight-30)/2, 30, 30);
  358. }
  359. _historyView.betBtn.tag = 204;
  360. [_historyView.betBtn setBackgroundImage:[UIImage imageNamed:@"gm_history"] forState:UIControlStateNormal];
  361. [_buttomView addSubview:_historyView];
  362. //将控件存入入数组中
  363. [_coinBtnArray addObject:_historyView.betBtn];
  364. [_breathImgArray addObject:_historyView.breathImg];
  365. [_betViewArray addObject:_historyView];
  366. }
  367. if (_isHost) {
  368. //游戏结束
  369. if (!_gameOverView) {
  370. _gameOverView = [BetView EditNibFromXib];
  371. _gameOverView.delegate = self;
  372. _gameOverView.frame = CGRectMake((kScreenW -180)+4*(betButtonInterval +betButtonWidth), ( kGuessSizeButtomHeight-30)/2, 30, 30);
  373. _gameOverView.betBtn.tag = 205;
  374. [_gameOverView.betBtn setBackgroundImage:[UIImage imageNamed:@"gm_game_closeBtn"] forState:UIControlStateNormal];
  375. [_buttomView addSubview:_gameOverView];
  376. //将控件存入入数组中
  377. [_coinBtnArray addObject:_gameOverView.betBtn];
  378. [_breathImgArray addObject:_gameOverView.breathImg];
  379. [_betViewArray addObject:_gameOverView];
  380. }
  381. //手动发牌与自动发牌
  382. if (!_arcOrMrcGameView && kSupportArcGame) {
  383. _arcOrMrcGameView = [BetView EditNibFromXib];
  384. _arcOrMrcGameView.delegate = self;
  385. _arcOrMrcGameView.frame = CGRectMake((kScreenW -180)+2*(betButtonInterval +betButtonWidth), ( kGuessSizeButtomHeight-30)/2, 30, 30);
  386. _arcOrMrcGameView.betBtn.tag = 206;
  387. [_arcOrMrcGameView.betBtn setBackgroundImage:[UIImage imageNamed:@"gm_game_mrcBtn"] forState:UIControlStateNormal];
  388. [_buttomView addSubview:_arcOrMrcGameView];
  389. //将控件存入入数组中
  390. [_coinBtnArray addObject:_arcOrMrcGameView.betBtn];
  391. [_breathImgArray addObject:_arcOrMrcGameView.breathImg];
  392. [_betViewArray addObject:_arcOrMrcGameView];
  393. }
  394. }
  395. }
  396. - (void)setBetBtnWithIsSelected:(BOOL )isSelected andBtn:(UIButton *)button
  397. {
  398. if (isSelected) {
  399. [button setBackgroundImage:[UIImage imageNamed:@"gm_selectedBet"] forState:UIControlStateNormal];
  400. [button setTitleColor:kColorWithStr(@"fbeda5") forState:UIControlStateNormal];
  401. }
  402. else
  403. {
  404. [button setBackgroundImage:[UIImage imageNamed:@"gm_normalBet"] forState:UIControlStateNormal];
  405. [button setTitleColor:kWhiteColor forState:UIControlStateNormal];
  406. }
  407. }
  408. #pragma mark ------------------------------------网络请求--------------------------------------
  409. #pragma mark -- 押注发送请求
  410. - (void)postBetMoneyStr:(NSString *)str withTag:(NSInteger)tag
  411. {
  412. NSMutableDictionary *parmDict = [[NSMutableDictionary alloc]init];
  413. [parmDict setObject:@"games" forKey:@"ctl"];
  414. [parmDict setObject:@"bet" forKey:@"act"];
  415. [parmDict setObject:str forKey:@"id"];
  416. [parmDict setObject:_betMoney forKey:@"money"];
  417. [parmDict setObject:[NSString stringWithFormat:@"%ld",(long)_bet] forKey:@"bet"];
  418. [_httpManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson) {
  419. NSLog(@"----%@",responseJson);
  420. if ([responseJson toInt:@"status"] == 1)
  421. {
  422. NSDictionary *dataDic = [responseJson objectForKey:@"data"];
  423. NSDictionary *dic = [dataDic objectForKey:@"game_data"];
  424. if (_BuguLive.appModel.open_diamond_game_module == 1)
  425. {
  426. _currentMoney = [[IMAPlatform sharedInstance].host getDiamonds];
  427. }
  428. else
  429. {
  430. _currentMoney = [[IMAPlatform sharedInstance].host getUserCoin];
  431. }
  432. //更新押注信息
  433. if ([dic[@"bet"] isKindOfClass:[NSArray class]]&& [dic[@"user_bet"] isKindOfClass:[NSArray class]]) {
  434. [self loadBetDataWithBetArray:dic[@"bet"] andUserBetArray:dic[@"user_bet"]];
  435. }
  436. //更新金币
  437. if (_currentMoney >= 0 && _currentMoney >= [_betMoney integerValue])
  438. {
  439. _currentMoney -= [_betMoney integerValue];
  440. _gameRechargeView.accountLabel.text = [NSString stringWithFormat:@"%ld",(long)_currentMoney];
  441. if (_BuguLive.appModel.open_diamond_game_module == 1)
  442. {
  443. //存入本地
  444. [[IMAPlatform sharedInstance].host setDiamonds:[NSString stringWithFormat:@"%ld",(long)_currentMoney]];
  445. }
  446. else
  447. {
  448. //存入本地
  449. [[IMAPlatform sharedInstance].host setUserCoin:[NSString stringWithFormat:@"%ld",(long)_currentMoney]];
  450. }
  451. }
  452. [self coinBreathMove:_currentMoney];
  453. [self judgmentBetView:[_gameRechargeView.accountLabel.text integerValue]];
  454. }
  455. else
  456. {
  457. [[BGHUDHelper sharedInstance] tipMessage:[responseJson toString:@"error"]];
  458. }
  459. } FailureBlock:^(NSError *error) {
  460. [[BGHUDHelper sharedInstance] tipMessage:[NSString stringWithFormat:@"%@",error]];
  461. }];
  462. }
  463. #pragma mark -- 更新余额
  464. - (void)updateCoinWithID:(NSString *)ID
  465. {
  466. NSMutableDictionary *parmDict = [[NSMutableDictionary alloc]init];
  467. [parmDict setObject:@"games" forKey:@"ctl"];
  468. [parmDict setObject:@"userDiamonds" forKey:@"act"];
  469. if (ID != nil) {
  470. [parmDict setObject:ID forKey:@"id"];
  471. }
  472. [_httpManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson) {
  473. if ([responseJson toInt:@"status"] == 1)
  474. {
  475. GameGainModel * gainModel = [GameGainModel mj_objectWithKeyValues:responseJson];
  476. NSInteger gainInt = [responseJson toInt:@"gain"];
  477. if (_BuguLive.appModel.open_diamond_game_module == 1)
  478. {
  479. _currentMoney = [[responseJson toString:@"user_diamonds"] integerValue];
  480. //存入钻石
  481. [[IMAPlatform sharedInstance].host setDiamonds:[responseJson toString:@"user_diamonds"]];
  482. }
  483. else
  484. {
  485. _currentMoney = [[responseJson toString:@"coin"] integerValue];
  486. //存入游戏币
  487. [[IMAPlatform sharedInstance].host setUserCoin:[responseJson toString:@"coin"]];
  488. }
  489. if (ID != nil) {
  490. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  491. _gameRechargeView.accountLabel.text = [NSString stringWithFormat:@"%ld",(long)_currentMoney];
  492. //押注按钮颜色变化
  493. if (!_isHost) {
  494. [self judgmentBetView:[_gameRechargeView.accountLabel.text integerValue]];
  495. }
  496. });
  497. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  498. if (gainInt > 0) {
  499. if (_delegate && [_delegate respondsToSelector:@selector(displayGameWinWithGainModel:)]) {
  500. [_delegate displayGameWinWithGainModel:gainModel];
  501. }
  502. }
  503. });
  504. }else{
  505. _gameRechargeView.accountLabel.text = [NSString stringWithFormat:@"%ld",(long)_currentMoney];
  506. //押注按钮颜色变化
  507. if (!_isHost) {
  508. [self judgmentBetView:[_gameRechargeView.accountLabel.text integerValue]];
  509. }
  510. }
  511. }
  512. } FailureBlock:^(NSError *error) {
  513. NSLog(@"---%@",error);
  514. }];
  515. }
  516. #pragma mark 主播结束游戏
  517. - (void)gameOver
  518. {
  519. NSMutableDictionary *parmDict = [[NSMutableDictionary alloc]init];
  520. [parmDict setObject:@"games" forKey:@"ctl"];
  521. [parmDict setObject:@"stop" forKey:@"act"];
  522. [_httpManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson) {
  523. _canCloseGame = YES;
  524. if ([responseJson toInt:@"status"] == 1)
  525. {
  526. [[NSNotificationCenter defaultCenter]postNotificationName:@"closeGame" object:nil];
  527. }
  528. } FailureBlock:^(NSError *error) {
  529. _canCloseGame = YES;
  530. [[BGHUDHelper sharedInstance] tipMessage:ASLocalizedString(@"关闭游戏失败")];
  531. NSLog(@"---%@",error);
  532. }];
  533. }
  534. #pragma mark 更新余额
  535. - (void)updateCoin
  536. {
  537. [self updateCoinWithID:nil];
  538. }
  539. #pragma mark -----------------------------------押注相关--------------------------------
  540. #pragma mark 点击押注
  541. - (void)coinMove:(UITapGestureRecognizer *)tap
  542. {
  543. if (!_isHost && _canBet)
  544. {
  545. if ([_gameRechargeView.accountLabel.text integerValue] >= [[self.betOptionArray objectAtIndex:0] integerValue])
  546. {
  547. [self betProcessing:tap.view.tag];
  548. }
  549. else
  550. {
  551. [SVProgressHUD showErrorWithStatus:ASLocalizedString(@"金额不足,请充值")];
  552. }
  553. }
  554. }
  555. #pragma mark 押注进行中
  556. - (void)betProcessing:(NSInteger)tag
  557. {
  558. _bet = tag;
  559. //发送请求
  560. [self postBetMoneyStr:_game_log_id withTag:tag-1];
  561. // //余额减少
  562. // NSInteger coinInt = [_coinView.personCoinLab.text integerValue] - [_betMoney integerValue];
  563. // _coinView.personCoinLab.text = [NSString stringWithFormat:@"%d",coinInt];
  564. //金币移动
  565. CGPoint imagePoint = [[_coinMoveArray objectAtIndex:tag-1] CGPointValue];
  566. [self coinMoveWithBegin:_amountPoint WithEnd:imagePoint];
  567. }
  568. #pragma mark 选择押注金额或游戏记录
  569. - (void)selectAmount:(UIButton *)sender
  570. {
  571. if (_isHost) {
  572. //(tag==204 代表游戏记录按钮)
  573. if (sender.tag == 204) {
  574. _betView = [_betViewArray objectAtIndex:0];
  575. if (_delegate && [_delegate respondsToSelector:@selector(displayGameHistory)]) {
  576. [_delegate displayGameHistory];
  577. }
  578. }
  579. else if (sender.tag == 206)
  580. {
  581. if (_betViewArray.count>2) {
  582. _betView = [_betViewArray objectAtIndex:2];
  583. }
  584. if (_delegate && [_delegate respondsToSelector:@selector(choseArcOrMrcGameWithView:)]) {
  585. [_delegate choseArcOrMrcGameWithView:self];
  586. }
  587. }
  588. else{
  589. if (_betViewArray.count>1) {
  590. _betView = [_betViewArray objectAtIndex:1];
  591. }
  592. if (_canCloseGame)
  593. {
  594. FWWeakify(self)
  595. [FanweMessage alert:nil message:ASLocalizedString(@"是否确定结束游戏?")destructiveAction:^{
  596. FWStrongify(self)
  597. self.canCloseGame = NO;
  598. //主播结束游戏
  599. [self gameOver];
  600. } cancelAction:^{
  601. }];
  602. }
  603. else
  604. {
  605. [[BGHUDHelper sharedInstance] tipMessage:ASLocalizedString(@"关闭游戏中,请稍后!")];
  606. }
  607. }
  608. }
  609. else
  610. {
  611. _betView = [_betViewArray objectAtIndex:sender.tag-200];
  612. if (sender.tag != 204) {
  613. if ([_gameRechargeView.accountLabel.text integerValue] < [[self.betOptionArray objectAtIndex:sender.tag-200] integerValue])
  614. {
  615. [[BGHUDHelper sharedInstance] tipMessage:ASLocalizedString(@"余额不足")];
  616. return;
  617. }
  618. else
  619. {
  620. _isClick = !_isClick;
  621. _betCount = sender.tag-200;
  622. //为什么不行~_~!!!!!
  623. //[_coinBtnArray makeObjectsPerformSelector:@selector(removeBreathAnimation:) withObject:sender];
  624. for (BetView * betView in _betViewArray) {
  625. if (![betView isEqual:_historyView]) {
  626. [self setBetBtnWithIsSelected:[betView isEqual:_betView] andBtn:betView.betBtn];
  627. }
  628. }
  629. [self getCoinBreathAndPoint:sender.tag-200];
  630. }
  631. }
  632. else
  633. {
  634. if (_delegate && [_delegate respondsToSelector:@selector(displayGameHistory)]) {
  635. [_delegate displayGameHistory];
  636. }
  637. }
  638. }
  639. //加入抖动动画
  640. [_betView.layer addAnimation:[CAAnimation jitterAnimation] forKey:@"jitter"];
  641. }
  642. #pragma mark 押注按钮颜色变暗(金额不足时)
  643. - (void)judgmentBetView:(NSInteger)coin
  644. {
  645. if (self.betOptionArray.count > 0 && self.betOptionArray.count < self.coinBtnArray.count) {
  646. [self.betOptionArray enumerateObjectsUsingBlock:^(NSString *betOptionStr, NSUInteger idx, BOOL * _Nonnull stop) {
  647. NSInteger betOptionInt = [betOptionStr integerValue];
  648. UIButton *btn= (UIButton *)_coinBtnArray[idx];
  649. if (coin >= betOptionInt) {
  650. btn.userInteractionEnabled = YES;
  651. btn.alpha = 1;
  652. }
  653. else
  654. {
  655. btn.userInteractionEnabled = NO;
  656. btn.alpha = 0.3;
  657. }
  658. }];
  659. }
  660. }
  661. #pragma mark 判断呼吸灯位置(金额减少时)
  662. - (void)coinBreathMove:(NSInteger)currentGold
  663. {
  664. if (currentGold >= 0 && currentGold < [_betMoney integerValue])
  665. {
  666. if (currentGold >=[[self.betOptionArray objectAtIndex:2]integerValue])
  667. {
  668. _betCount = 2;
  669. }
  670. else if (currentGold >= [[self.betOptionArray objectAtIndex:1]integerValue])
  671. {
  672. _betCount = 1;
  673. }
  674. else
  675. {
  676. _betCount = 0;
  677. }
  678. [self getCoinBreathAndPoint:_betCount];
  679. }
  680. }
  681. #pragma mark 加入呼吸灯和获取金币移动的起始位置
  682. - (void)getCoinBreathAndPoint:(NSInteger)tag
  683. {
  684. //获取押注金额
  685. if (_betOptionArray.count > 0) {
  686. _betMoney = [_betOptionArray objectAtIndex:tag];
  687. }
  688. // //移除呼吸灯动画
  689. // for (UIImageView *imageView in _breathImgArray) {
  690. // imageView.image = [UIImage imageNamed:@""];
  691. // [imageView.layer removeAnimationForKey:@"alpha"];
  692. // }
  693. // //加入呼吸灯动画
  694. // UIImageView *img = [_breathImgArray objectAtIndex:tag];
  695. // img.image = [UIImage imageNamed:@"gm_coin_breath"];
  696. // [img.layer addAnimation:[CAAnimation AlphaLight:1.0f
  697. // fromValue:1.0f
  698. // toValue:0.4f]
  699. // forKey:@"alpha"];
  700. //获取金币开始动画的位置
  701. CGPoint point = [[_coinBeignArray objectAtIndex:tag] CGPointValue];
  702. _amountPoint = [_buttomView convertPoint:point toView:self];
  703. }
  704. #pragma mark -----------------------------------金币相关动画-----------------------------------
  705. #pragma mark 金币移动动画(传入起始位置和终点位置)
  706. - (void)coinMoveWithBegin:(CGPoint)begin WithEnd:(CGPoint)end
  707. {
  708. UIImageView *breathImg = [[UIImageView alloc]init];
  709. breathImg.width = 25;
  710. breathImg.height = 25;
  711. if (!_isClick && NSStringFromCGPoint(_winCoinPoint).length == 0) {
  712. breathImg.center = _amountPoint;
  713. }
  714. else
  715. {
  716. breathImg.center = begin;
  717. }
  718. breathImg.image = [UIImage imageNamed:@"gm_selectedBet"];
  719. [self addSubview:breathImg];
  720. if (!_isClick) {
  721. [breathImg.layer addAnimation:[CAAnimation coinMoveAntimationWithBegin:breathImg.center
  722. WithEnd:end
  723. andMoveTime:kMoveAnimationDuration
  724. andNarrowTime:kNarrowAnimationDuration
  725. andNarrowFromValue:1.0f
  726. andNarrowToValue:0.0f]
  727. forKey:@"moveWithNarrow"];
  728. }
  729. else
  730. {
  731. [breathImg.layer addAnimation:[CAAnimation coinMoveAntimationWithBegin:begin
  732. WithEnd:end
  733. andMoveTime:kMoveAnimationDuration
  734. andNarrowTime:kNarrowAnimationDuration
  735. andNarrowFromValue:1.0f
  736. andNarrowToValue:0.0f]
  737. forKey:@"moveWithNarrow"];
  738. }
  739. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kCoinMoveAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  740. if (breathImg) {
  741. [breathImg removeFromSuperview];
  742. }
  743. });
  744. }
  745. #pragma mark 加载押注倍率
  746. -(void)loadOptionArray:(NSArray *)optionArray
  747. {
  748. if (optionArray.count == self.betMultipleLabelArr.count ) {
  749. for (int i=0; i<optionArray.count; ++i) {
  750. UILabel * optionLabel = self.betMultipleLabelArr[i];
  751. if ([optionArray[i] floatValue]>0) {
  752. optionLabel.text = [NSString stringWithFormat:@"X%@",optionArray[i]];
  753. optionLabel.hidden = NO;
  754. }
  755. else
  756. {
  757. optionLabel.hidden = YES;
  758. }
  759. }
  760. }
  761. }
  762. //总押注数据
  763. -(NSMutableArray *)betArr
  764. {
  765. if (_betArr == nil) {
  766. _betArr = [NSMutableArray array];
  767. }
  768. return _betArr;
  769. }
  770. //用户本人押注数据
  771. -(NSMutableArray *)userBetArr
  772. {
  773. if (_userBetArr == nil) {
  774. _userBetArr = [NSMutableArray array];
  775. }
  776. return _userBetArr;
  777. }
  778. //总押注数据label
  779. -(NSMutableArray *)betLabelArr
  780. {
  781. if (_betLabelArr == nil) {
  782. _betLabelArr = [NSMutableArray array];
  783. }
  784. return _betLabelArr;
  785. }
  786. //用户押注数据label
  787. -(NSMutableArray *)userBetLabelArr
  788. {
  789. if (_userBetLabelArr == nil) {
  790. _userBetLabelArr = [NSMutableArray array];
  791. }
  792. return _userBetLabelArr;
  793. }
  794. /**
  795. 下注倍率label
  796. */
  797. - (NSMutableArray *)betMultipleLabelArr
  798. {
  799. if (!_betMultipleLabelArr) {
  800. _betMultipleLabelArr = [NSMutableArray array];
  801. }
  802. return _betMultipleLabelArr;
  803. }
  804. /**
  805. 遮罩视图
  806. */
  807. - (NSMutableArray *)maskViewArr
  808. {
  809. if (!_maskViewArr) {
  810. _maskViewArr = [NSMutableArray array];
  811. }
  812. return _maskViewArr;
  813. }
  814. - (void)dealloc
  815. {
  816. [[NSNotificationCenter defaultCenter] removeObserver:self];
  817. if (_showDiceTimer) {
  818. [_showDiceTimer invalidate];
  819. _showDiceTimer = nil;
  820. }
  821. }
  822. @end