《二吃一》游戏加蓝牙代码

转载自:http://www.aisidachina.com/forum/thread-105-1-2.html

界面二吃一又名四步顶或是四棋,起源于中国民间。规则是两块吃一块,就是在一条直线上的自己的两个棋子可以吃掉对方的一个棋子。

在这说一下这个游戏的主要思想和大家分享一下,这个游戏分为双人模式和单人模式,双人模式主要是规则下边会简单介绍一下,人机对战涉及到比较复杂的算法想和大家一块探讨一下。
1.规则方法:
我用数组qizi存8个棋子,用数组position存17个位置,其实棋谱上有16个第17个是用来设置被吃的那个棋子的位置的。每个棋子都是一个Button,刚开始时想用UIImageView但是UIImageView不支持相应事件所以改为使用Button,每一个棋子都有不同的tag属性(从0到7)用来从数组中取对象,然后是用两个数组分别存双方棋子的位置从0到3和从12到15,每个数组4个对象,通过这两个数组把棋子和位置对应起来。每个棋子可以向4个方向走(用1、-1、4、-4表示),所以首先要判断是否越界了然后判断是否可以向这个方向移动,因为有可能那里已经有棋子了。然后要做的就是改变数组的值设置位置在界面上体现出来。
2.人机对战算法实现:
在以上规则的基础上添加玩家走棋后机器要执行的代码。主要是一个判断的过程,我分了三种情况(要建立三对数组分别存这三种情况所对应的棋子tag和方向),
首先模拟走一步棋,然后循环模拟对方(玩家)走每一步可以走的操作,
之后如果判断出可以吃掉对方(玩家)但不被玩家吃掉就把这个棋子的tag和走的方向放入第一对数组中,如果没吃掉对方也没被对方吃掉就放到第二对数组中,如果没吃掉对方的反而能被对方的吃掉就把它放到第三对数组中,其实这是一个循环的过程,
放完后随即取一个小于第一个数组个数的数从第一对数组中取出相应的值进行操作,如果第一对数组个数为零就从第二对数组中取值,之后是第是三个。这样我就取到了最理想的那个旗子和要做的操作,之后就按规则进行。

 

介绍一下这个实例实现的是两个带有蓝牙设备的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;//对方点击次数
        IBOutle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是添了安卓模拟蓝牙手柄支持的游戏手柄描述符,并使用HID的代码: ```c 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x05, // Usage (Game Pad) 0xA1, 0x01, // Collection (Application) 0x85, 0x04, // Report ID (4) 0x05, 0x09, // Usage Page (Button) 0x19, 0x01, // Usage Minimum (Button 1) 0x29, 0x10, // Usage Maximum (Button 16) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x10, // Report Count (16) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x15, 0x81, // Logical Minimum (-127) 0x25, 0x7F, // Logical Maximum (127) 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) 0x09, 0x32, // Usage (Z) 0x09, 0x35, // Usage (Rz) 0x75, 0x08, // Report Size (8) 0x95, 0x04, // Report Count (4) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x39, // Usage (Hat Switch) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x07, // Logical Maximum (7) 0x35, 0x00, // Physical Minimum (0) 0x46, 0x3B, 0x01, // Physical Maximum (315) 0x65, 0x14, // Unit (Eng Rot: Degree) 0x75, 0x04, // Report Size (4) 0x95, 0x01, // Report Count (1) 0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State) 0x65, 0x00, // Unit (None) 0x95, 0x01, // Report Count (1) 0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0 // End Collection ``` 这是一个支持安卓模拟蓝牙手柄的游戏手柄描述符。你可以将这个描述符用于你的项目中,以实现安卓设备上的手柄功能。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值