logo

 找回密码
 立即注册
搜索
查看: 7846|回复: 0
打印 上一主题 下一主题

ios 蓝牙供应商

[复制链接]

119

主题

0

好友

445

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-10-1 16:18:18 |只看该作者 |倒序浏览
  应用中关于GameKit蓝牙实例讲解是本文要介绍的内容,主要是来了解并学习GameKit蓝牙实例。介绍一下这个实例实现的是两个带有蓝牙设备的touch之间的一个小游戏,在界面上有个可以响应事件的UIView(之前说过)可以点击,然后看谁新达到WINNING_TAP_COUNT (游戏中一常量可以自己设置)谁先达到谁就赢了,然后通知对方。还要引入GameKit.framework框架
头文件BlueToothViewController.h:

    //  //  // BlueToothViewController.h  // BlueTooth  //  // Created by mingchun liu on 09-11-24.  // Copyright sdie 2009. All rights reserved.  //   #import <UIKit/UIKit.h> #import <GameKit/GameKit.h>  #define START_GAME_KEY @"startgame"  #define END_GAME_KEY @"endgame"  #define TAP_COUNT_KEY @"taps"  #define WINNING_TAP_COUNT 50   #define AMIPHD_P2P_SESSION_ID @"amiphdp2p2"//这个是蓝牙协议   @interface BlueToothViewController : UIViewController<GKPeerPickerControllerDelegate,GKSessionDelegate>{          BOOL actingAsHost;//是否提供服务,客户端还是服务器端          int playerTapCount;//记录玩家点击次数          int opponentTapCount;//对方点击次数          IBOutlet UILabel *playerTapCountLabel;//显示玩家点击次数          IBOutlet UILabel *opponentTapCountLabel;//显示对手点击次数          NSString *opponentID;//对方标识符          GKSession *gkSession;                    IBOutlet UILabel *startQuitButton;//开始退出按钮  }   @property BOOL actingAsHost;  @property int playerTapCount;  @property int opponentTapCount;  @property (nonatomic,retain) GKSession *gkSession;   @property (nonatomic,retain) NSString *opponentID;   @property (nonatomic,retain)UILabel *playerTapCountLabel;  @property (nonatomic,retain)UILabel *opponentTapCountLabel;   @property (nonatomic,retain)UILabel *startQuitButton;   -(IBAction) handleStartQuitTapped;//处理开始退出操作  -(IBAction) handleTapViewTapped;//处理点击UIView的操作  -(void) updateTapCountLabels;//更新显示  -(void) initGame;//初始化游戏  -(void) hostGame;  -(void) joinGame;//加入游戏  -(void) endGame;//结束游戏  -(void) showEndGameAlert;//弹出结束游戏对话框  @end   #import "BlueToothViewController.h"   @implementation BlueToothViewController   @synthesize actingAsHost;  @synthesize playerTapCount;  @synthesize opponentID;  @synthesize playerTapCountLabel;  @synthesize opponentTapCountLabel;   @synthesize startQuitButton;  @synthesize gkSession;  @synthesize opponentTapCount;   -(IBAction) handleStartQuitTapped {//建立链接操作,弹出链接窗口显示在线          if (! opponentID) {//如果对手ID为空就建立服务端提供服务                  actingAsHost = YES;                  GKPeerPickerController *peerPickerController =[[GKPeerPickerController alloc] init];                  peerPickerController.delegate = self;                  peerPickerController.connectionTypesMask =                  GKPeerPickerConnectionTypeNearby;                  [peerPickerController show];          }  }  -(IBAction) handleTapViewTapped {//点击操作          playerTapCount++;          [self updateTapCountLabels];          // did we just win?          BOOL playerWins = playerTapCount >= WINNING_TAP_COUNT;//当点击达到一定次数时          // send tap count to peer          NSMutableData *message = [[NSMutableData alloc] init];//传的数据类型为nsdata类型的          NSKeyedArchiver *archiver =          [[NSKeyedArchiver alloc] initForWritingWithMutableData:message];          [archiver encodeInt:playerTapCount forKey: TAP_COUNT_KEY];          if (playerWins)                  [archiver encodeBool:YES forKey:END_GAME_KEY];          [archiver finishEncoding];//打包传数据          GKSendDataMode sendMode =          playerWins ? GKSendDataReliable : GKSendDataUnreliable;//判断用可靠的链接还是不可靠的链接          [gkSession sendDataToAllPeers: message withDataMode:sendMode error:NULL];//发送数据          [archiver release];          [message release];          // also end game locally          if (playerWins)                  [self endGame];  }   -(void) updateTapCountLabels {          playerTapCountLabel.text =          [NSString stringWithFormat"%d", playerTapCount];          opponentTapCountLabel.text =          [NSString stringWithFormat"%d", opponentTapCount];  }  -(void) initGame {          playerTapCount = 0;          opponentTapCount = 0;  }  -(void) hostGame {          [self initGame];          NSMutableData *message = [[NSMutableData alloc] init];          NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]                                                                   initForWritingWithMutableData:message];          [archiver encodeBool:YES forKey:START_GAME_KEY];          [archiver finishEncoding];          NSError *sendErr = nil;          [gkSession sendDataToAllPeers: message                                           withDataMode:GKSendDataReliable error:&sendErr];          if (sendErr)                  NSLog (@"send greeting failed: %@", sendErr);          // change state of startQuitButton          startQuitButton.text = @"Quit";          [message release];          [archiver release];          [self updateTapCountLabels];  }  -(void) joinGame {          [self initGame];          startQuitButton.text = @"Quit";          [self updateTapCountLabels];  }   //一下是代理方法   -(GKSession *) peerPickerController: (GKPeerPickerController*) controller                    sessionForConnectionType: (GKPeerPickerConnectionType) type {          if (!gkSession) {//如果没有链接时建立连接                  gkSession = [[GKSession alloc]                                           initWithSessionID:AMIPHD_P2P_SESSION_ID//根据此值判断用的是什么链接                                           displayName:nil//在线用户名                                           sessionMode:GKSessionModePeer];                  gkSession.delegate = self;          }          return gkSession;  }   - (void)peerPickerControllerGKPeerPickerController *)picker didConnectPeerNSString *)peerID toSessionGKSession *)session  {//当picker接收到数据后将其释放掉,否则进入不了界面          [picker dismiss];          picker.delegate = nil;          [picker autorelease];  }  - (void)sessionGKSession *)session  didReceiveConnectionRequestFromPeerNSString *)peerID {//已接受连接请求的代理方法          actingAsHost = NO;//设为客户端  }   - (void)sessionGKSession *)session peerNSString *)peerID  didChangeStateGKPeerConnectionState)state {//状态改变时触发的代理方法          switch (state)          {                  case GKPeerStateConnected:                          [session setDataReceiveHandler: self withContext: nil];                          opponentID = peerID;//改变opponentID的值                          actingAsHost ? [self hostGame] : [self joinGame];//                          break;          }  }   - (void) receiveData: (NSData*) data fromPeer: (NSString*) peerID                     inSession: (GKSession*) session context: (void*) context {//接受数据时的代理操作          NSKeyedUnarchiver *unarchiver =          [[NSKeyedUnarchiver alloc] initForReadingWithData:data];          if ([unarchiver containsValueForKey:TAP_COUNT_KEY]) {                  opponentTapCount = [unarchiver decodeIntForKey:TAP_COUNT_KEY];                  [self updateTapCountLabels];          }          if ([unarchiver containsValueForKey:END_GAME_KEY]) {                  [self endGame];          }          if ([unarchiver containsValueForKey:START_GAME_KEY]) {                  [self joinGame];          }          [unarchiver release];  }  //以上是代理方法   -(void) showEndGameAlert {          BOOL playerWins = playerTapCount > opponentTapCount;          UIAlertView *endGameAlert = [[UIAlertView alloc]                                                                   initWithTitle: playerWins ? @"Victory!" : @"Defeat!"                                                                   message: playerWins ? @"Your thumbs have emerged supreme!":                                                                   @"Your thumbs have been laid low"                                                                   delegate:nil                                                                   cancelButtonTitle"OK"                                                                   otherButtonTitles:nil];          [endGameAlert show];          [endGameAlert release];  }  -(void) endGame {          opponentID = nil;          startQuitButton.text = @"Find";          [gkSession disconnectFromAllPeers];          [self showEndGameAlert];  }   /*  // The designated initializer. Override to perform setup that is required before the view is loaded.  - (id)initWithNibNameNSString *)nibNameOrNil bundleNSBundle *)nibBundleOrNil {      if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {          // Custom initialization      }      return self;  }  */   /*  // Implement loadView to create a view hierarchy programmatically, without using a nib.  - (void)loadView {  }  */   /*  // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  - (void)viewDidLoad {      [super viewDidLoad];  }  */   /*  // Override to allow orientations other than the default portrait orientation.  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {      // Return YES for supported orientations      return (interfaceOrientation == UIInterfaceOrientationPortrait);  }  */   - (void)didReceiveMemoryWarning {          // Releases the view if it doesn't have a superview.      [super didReceiveMemoryWarning];                    // Release any cached data, images, etc that aren't in use.  }   - (void)viewDidUnload {          // Release any retained subviews of the main view.          // e.g. self.myOutlet = nil;  }   - (void)dealloc {          [opponentID release];          [playerTapCountLabel release];          [opponentTapCountLabel release];            [startQuitButton release];          [gkSession release];      [super dealloc];  
  • }
广州鼎瀛计算机科技有限公司为您提供UI设计,APP开发,小程序开发,微信公众号开发,网站开发等软件开发;

广州鼎瀛计算机科技有限公司|广州APP开发,APP开发公司,APP定制服务商,安卓/ios软件开发,APP软件开发,移动应用开发,手机软件开发微信二次开发外包公司,广州APP开发公司,企业APP开发,手机APP开发,APP制作,广州优质的APP开发公司;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|广州鼎灜科技计算机科技有限公司

GMT+8, 2024-4-29 14:03 版权所有 粤ICP备09101347号

回顶部