admin 发表于 2014-10-1 16:18:18

ios 蓝牙供应商

  应用中关于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 =[ init];                  peerPickerController.delegate = self;                  peerPickerController.connectionTypesMask =                  GKPeerPickerConnectionTypeNearby;                  ;          }  }  -(IBAction) handleTapViewTapped {//点击操作          playerTapCount++;          ;          // did we just win?          BOOL playerWins = playerTapCount >= WINNING_TAP_COUNT;//当点击达到一定次数时          // send tap count to peer          NSMutableData *message = [ init];//传的数据类型为nsdata类型的          NSKeyedArchiver *archiver =          [ initForWritingWithMutableData:message];          ;          if (playerWins)                  ;          ;//打包传数据          GKSendDataMode sendMode =          playerWins ? GKSendDataReliable : GKSendDataUnreliable;//判断用可靠的链接还是不可靠的链接          ;//发送数据          ;          ;          // also end game locally          if (playerWins)                  ;  }   -(void) updateTapCountLabels {          playerTapCountLabel.text =          ;          opponentTapCountLabel.text =          ;  }  -(void) initGame {          playerTapCount = 0;          opponentTapCount = 0;  }  -(void) hostGame {          ;          NSMutableData *message = [ init];          NSKeyedArchiver *archiver = [                                                                   initForWritingWithMutableData:message];          ;          ;          NSError *sendErr = nil;          ;          if (sendErr)                  NSLog (@"send greeting failed: %@", sendErr);          // change state of startQuitButton          startQuitButton.text = @"Quit";          ;          ;          ;  }  -(void) joinGame {          ;          startQuitButton.text = @"Quit";          ;  }   //一下是代理方法   -(GKSession *) peerPickerController: (GKPeerPickerController*) controller                    sessionForConnectionType: (GKPeerPickerConnectionType) type {          if (!gkSession) {//如果没有链接时建立连接                  gkSession = [                                           initWithSessionID:AMIPHD_P2P_SESSION_ID//根据此值判断用的是什么链接                                           displayName:nil//在线用户名                                           sessionMode:GKSessionModePeer];                  gkSession.delegate = self;          }          return gkSession;  }   - (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session  {//当picker接收到数据后将其释放掉,否则进入不了界面          ;          picker.delegate = nil;          ;  }  - (void)session:(GKSession *)session  didReceiveConnectionRequestFromPeer:(NSString *)peerID {//已接受连接请求的代理方法          actingAsHost = NO;//设为客户端  }   - (void)session:(GKSession *)session peer:(NSString *)peerID  didChangeState:(GKPeerConnectionState)state {//状态改变时触发的代理方法          switch (state)          {                  case GKPeerStateConnected:                          ;                          opponentID = peerID;//改变opponentID的值                          actingAsHost ? : ;//                          break;          }  }   - (void) receiveData: (NSData*) data fromPeer: (NSString*) peerID                     inSession: (GKSession*) session context: (void*) context {//接受数据时的代理操作          NSKeyedUnarchiver *unarchiver =          [ initForReadingWithData:data];          if () {                  opponentTapCount = ;                  ;          }          if () {                  ;          }          if () {                  ;          }          ;  }  //以上是代理方法   -(void) showEndGameAlert {          BOOL playerWins = playerTapCount > opponentTapCount;          UIAlertView *endGameAlert = [                                                                   initWithTitle: playerWins ? @"Victory!" : @"Defeat!"                                                                   message: playerWins ? @"Your thumbs have emerged supreme!":                                                                   @"Your thumbs have been laid low"                                                                   delegate:nil                                                                   cancelButtonTitle:@"OK"                                                                   otherButtonTitles:nil];          ;          ;  }  -(void) endGame {          opponentID = nil;          startQuitButton.text = @"Find";          ;          ;  }   /*  // The designated initializer. Override to perform setup that is required before the view is loaded.  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {      if (self = ) {          // 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 {      ;  }  */   /*  // 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.      ;                    // 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 {          ;          ;          ;            ;          ;      ;  [*]}
页: [1]
查看完整版本: ios 蓝牙供应商