通过shareSDK分享链接,通过scheme传参到IOS和安卓.棋牌游戏只需要这些,丢掉魔窗吧

什么是游戏盾?游戏盾的原理以及应用游戏盾做网络优化 什么是游戏盾 游戏盾是阿里云针对游戏行业面对的DDoS、CC攻击推出的针对性的网络安全解决方案,相比高防IP,除了能针对大型DDoS攻击(T级别)进行有效防御外,还具备彻底解决游戏行业特有的TCP协议的CC攻击问题能力,防护成本更低,效果更好! 与传统单点防御DDoS防御方案相比,游戏盾用数据和算法来实现智能调度,将“正常玩家”流量和“黑客攻击”流量快速分流至不同的节点,最大限度缓解大流量攻击;通过端到端加密,让模拟用户行为的小流量攻击也无法到达客户端。 游戏盾提供了一个只能由SDK接入的并且免疫DDoS/ 阅读详情

最近独立完成一个棋牌项目,对,没错,服务器,客户端都是我自己一个人完成的,真是累的想死.

服务器用的是photon,客户端用unity,客户端使用ab实现资源热更.时间太紧也就没做lua的代码热更了.

撸代码的过程就是一个苦力活,没什么好说的,最后项目结束的时候遇到了麻烦,

根据甲方要求,要接入shareSDK做分享,魔窗或者moblink做跳转和传参.yaya语音做接入.

然后被yaya的SDK坑了半个月,跟他们的技术联调半个月,才把实时视频接完成.过程只想杀人.然后又被moblink坑了一星期,之前接好的跳转出问题了,天天找他们客户,

一星期后,他们客户告诉我,他们那边出了问题,让我下载最新SDK.好吧,反正是被第三方SDK坑惨了.于是我想到之前一个项目,自己实现了scheme的跳转,没用使用任何第三方

于是果断丢掉魔窗和moblink.


于是通过IOS和安卓的SCHEME自己来实现跳转和传参.因为棋牌只要求拉起APP,和传递房间号就可以了.于是花了2天时间搞定,一测试.yo,倍稳定,再也不怕第三方出问题导致跳不过去了!哈哈,


1.unity中代码实现获取参数的代码,并根据参数来处理

在需要的UI中实现OnApplicationPause()方法,当APP退出和唤醒的时候检查是否有参数传进来.

 /// <summary>
    /// app切换出去或者切换进来的时候会被调用.
    /// </summary>
    /// <param name="pause"></param>
    private void OnApplicationPause(bool pause)
    {
        //是切换出去
        if (pause)
        {
            //切换出去的时候清空暂时存储参数的地方
            APPsetting.ShareJionRoom = new Hashtable();
        }
        //是切换进来
        else
        {
            //获取参数
            shareStartApp();
            //检查是否有参数,并根据参数采取下一步操作
            CheckShareJionRoom();
        }
    }

实现获取参数的方法

#if UNITY_IOS
        //调用xcode中的方法
        [DllImport("__Internal")]
        private static extern string _nameType();
#endif

    /// <summary>
    /// 获取进入房间参数
    /// </summary>
    public void shareStartApp()
    {

       
        string StartApp = "";
        string iType = "";
        string iName = "";
        if (iType == "" && iName == "")
        {
#if UNITY_EDITOR || UNITY_STANDLONE
            Debug.Log("在PC或者编辑器中不获取进入房间的参数");
#elif UNITY_ANDROID
           
            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
              
                using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    Debug.Log("UNITY_ANDROID res room AndroidJavaObject......"    );
                    //Android SDK 返回的数据格式为: type|name    例如进入房间1|123456
                     StartApp = jo.Call<string>("StartApp1", "随便什么");
                   
                    Debug.Log("UNITY_ANDROID res room  "   +StartApp );
                }
            }
#elif UNITY_IOS
           // _nameType()
            Debug.Log("UNITY_IOS res data  "  );
            StartApp = _nameType();
            Debug.Log("UNITY_IOS res data  " + StartApp  );

#endif
            if (StartApp != "")
            {
                Debug.Log("share link param " + StartApp);
                string[] StartApp_arr = StartApp.Split('|');
                if (StartApp_arr.Length == 2)
                {
                    iType = StartApp_arr[0];
                    iName = StartApp_arr[1];
                    Debug.Log("iType :" + iType + "iName :" + iName);
                    APPsetting.ShareJionRoom = new Hashtable();
                    APPsetting.ShareJionRoom[iType] = iName;
                }
            }
        }
        
    }


以上就完成了unity的代码

2/安卓中的代码.

在上面的代码中可以看到,安卓中必须有一个叫做StartApp1的方法,用来返回参数给unity.

2.1:第一步,使用eclips建立一个android工程,引用unity中的class.jar.报名需要与我们的unity的包名相同.

2.2:然后建立一个脚本.它必须继承于UnityPlayerActivity.我这里建立了一个叫做MainActivity的java脚本,需要引用一些东西,大家自己引用吧

public class MainActivity extends UnityPlayerActivity {
	public String _name = "";
	public String _type = "";
@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		
        Uri mLink = getIntent().getData();
        
        if(mLink != null){
        	_type = mLink.getQueryParameter("type");
        	_name= mLink.getQueryParameter("name");
         }

        
       
	}
public String StartApp1(String name) {
	
	Uri mLink = getIntent().getData();
        
        if(mLink != null){
         _type = mLink.getQueryParameter("type");
         _name= mLink.getQueryParameter("name");
         }
  
  Log.i(TAG, "有啊!   StartApp");
  Log.i(TAG, _type+"|"+_name);
  // if(name.equals("0")){
  
  String retrunVar=_type+"|"+_name;
  
  _type="";
  _name="";
  //调用过一次就清除掉,不然进行微信分享动作,或者接个电话的时候回到大厅就会再次调用这个数据!
  getIntent().setData(null);
  return retrunVar;
}

2.3-,好了,以上就完成了jar包的编写了,其中还可以写一些安卓的原生方法,例如看电池百分比,网络状态等.然后输出jar包


右键选择输出:

选择jar file->next

直接finish,

然后把得到的jar包丢到unity中的\Assets\Plugins\\Android\文件夹中.

2.4:编写AndroidManifest.xml文件,这个是安卓的配置页面,所有的安卓调用的东西都需要在这里编写,如果没有就在Assets\Plugins\\Android\文件夹中建立一个,shareSDK也会需要一个,还有微信分享的回调页面也会写在这里

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.你的包名要和unity的一样.chess"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="preferExternal"
    android:versionCode="201"
    android:versionName="2.0.1">
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"/>
  <uses-feature android:name="android.hardware.camera"/>
  <uses-feature
      android:name="android.hardware.camera.autofocus"
      android:required="false" />
  <uses-permission android:name="android.permission.GET_TASKS" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name="android.permission.RECEIVE_SMS" />
  <!-- 蓝牙分享所需的权限 -->
  <uses-permission android:name="android.permission.BLUETOOTH" />
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  <!--yunva P2P video-->
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"/>
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
  <uses-permission android:name="android.permission.BLUETOOTH"/>

  <uses-feature android:name="android.hardware.camera" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_CONTACTS" />
  <!-- 向SDCard写入数据权限 -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
  <uses-feature android:name="android.hardware.camera.autofocus" />
	
    <application
		    android:name="com.mob.MobApplication"
        android:theme="@style/UnityThemeSelector"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:debuggable="true">
		
<activity android:name=".MainActivity"
                  android:label="@string/app_name" 
                 android:clearTaskOnLaunch="false"
				  android:launchMode="singleInstance"
                >
        <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
          <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
        <intent-filter>
          <data android:scheme="你设置的scheme别名" />
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
        <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
        
      </activity>

     


<!-- shareSDK需要的-->
      <activity
             android:name="com.mob.tools.MobUIShell"
             android:configChanges="keyboardHidden|orientation|screenSize"
             android:theme="@android:style/Theme.Translucent.NoTitleBar"
             android:windowSoftInputMode="stateHidden|adjustResize" >


      </activity>

      <!-- 微信分享回调 -->
      <activity
          android:name=".wxapi.WXEntryActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:exported="true" />

          </application>
</manifest>


然后输出层安卓就可以了!


3:Ios编写部分,首先需要设置scheme,2种方式设置

3.1:unity中设置,在build setting->player setting中设置


可以设置多个scheme,我们自己需要一个,shareSDK也需要一个!其中一个必须和安卓的设置成一样的

3.2:Xcode中设置,与3.1随便选一种方式即可

3.3:xcode中编写代码

找到xcode中的入口文件,打开它,编写和实现需要的方法


添加我们再unity中调用的方法

//跳转传参需要的方法
static NSString * _name=@"";
static NSString * _type=@"";

extern "C"{
    char* _nameType(){
        
        
        NSLog(@"_name:被调用:%@",_name);
        NSLog(@"_type被调用:%@",_type);
        if (_name!=nil && _type!=nil && _name!= NULL && _type!= NULL){
            NSString *  string = [_type stringByAppendingString:@"|"];
            //NSString * str = @"1|123456";
            NSString * str = [string stringByAppendingString:_name];
            char * x = (char *)malloc(strlen([str UTF8String]) + 1);
            strcpy(x, [str UTF8String]);
            _name = @"";
            _type = @"";
            return x;
        }else{
            NSString * str = @"";
            char * x = (char *)malloc(strlen([str UTF8String]) + 1);
            strcpy(x, [str UTF8String]);
            return x;
        }
        
        
        
        //        char* x=(char*)malloc(strlen([@"hmok" UTF8String])+1);
        //        return x;
    }
}

实现并编写xcoede中的openurl方法(这个方法根据xcode版本不同有3个,最新的就是app openURL,保险起见3个都实现掉吧)

-(bool)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
   
    if([url query] == NULL){
        _name=@"";
        _type=@"";
        return YES;
    }
    NSString *string = [NSString stringWithString:[url query]];
    NSArray *array = [string componentsSeparatedByString:@"&"];
    [array enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSArray *childArray = [obj componentsSeparatedByString:@"="];
        if (childArray.count > 1) {
            if([childArray.firstObject isEqual:@"name"])
            {
                _name = childArray.lastObject;
            }
            if([childArray.firstObject isEqual: @"type"])
            {
                _type = childArray.lastObject;
            }
            NSLog(@"%@",childArray.lastObject);
        }
    }];
    NSLog(@"_name:%@",_name);
    NSLog(@"_type:%@",_type);
    return YES;
}

OK,xcode中的相关代码也写完了,

另外shareSDK如果采用的不是自动打包方式的话需要添加mobappid和密码等信息到info:还有需要在unity中设置(其他的安卓sharesdk官网的配置就可以了)


或者在info.plist文件中添加

<key>MOBAppKey</key>
	<string>2278549adfc3b</string>
	<key>MOBAppSecret</key>
	<string>561ffa05dc4b2ad6b54c1a79793f9632</string>
	<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>mcqiqi</string>
		<string>weixin</string>
	</array>

然后就可以了!输出安卓项目和IOS项目


你可以分享 http://www.你的网站.com/?name=123&type=abc的方式分享跳转链接.

当然在web上需要设置自动跳转到  

你设置的scheme://?name=123&type=abc(例如:  hmok://?name=321&type=bcd)

那么你再安卓或者IOS中就会主动拉起你的APP,并且传递参数进去了!

其实很简单,主要是要跨平台编写代码,还要熟悉各平台的东西!

好吧,我承认我对object-C完全不懂,里面的代码是请朋友写的;  (

最近真的好累,有没有轻松点的公司招人的,我想跳槽!只限湖南哦!

你的OLED屏和MPU6050为啥通信失败?从IIC的7位地址冲突讲起 本文深入解析OLED屏与MPU6050传感器在I2C总线上的通信故障,重点探讨7位地址冲突问题。通过分析I2C协议中的地址分配机制,提供硬件调整和软件调试的完整解决方案,帮助开发者有效排查和解决设备无响应问题。 阅读详情

相关推荐

深入RK3588内存管理:如何用dma_buf_alloc和mpp_buffer为RGA2分配4G以内内存(附kernel版本选择)

本文深入探讨了RK3588平台上RGA2核心的4G内存限制问题,详细解析了dma_buf_alloc和mpp_buffer两种内存分配方案的技术细节与适用场景。通过代码示例和性能对比,帮助开发者优化高分辨率视频处理流程,并提供了内核版本选择与常见错误排查指南。

weixin_29168153的博客 360

H5通过Url Scheme方式传参跳转微信小程序

【代码】H5通过Url Scheme方式传参跳转微信小程序。

weixin_43902413的博客 3224

STM32F4用FSMC驱动AX58100 EtherCAT从站芯片,保姆级配置流程与避坑指南

本文详细介绍了STM32F4通过FSMC接口驱动AX58100 EtherCAT从站芯片的完整配置流程,包括硬件连接、时序优化、协议栈移植及TwinCAT主站集成。针对工业自动化场景,提供高性价比的实时控制解决方案,特别适合机械臂、CNC机床等精确同步应用,并分享关键调试技巧与性能优化方法。

weixin_27869497的博客 301

通过URL Scheme在应用间传递参数(Swift)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34375054的博客 653

银河麒麟V10SP1实战:5步搞定AD域登录(附Samba+Winbind配置详解)

本文提供银河麒麟V10 SP1操作系统无缝集成Windows AD域的实战指南。文章深入解析了Samba、Winbind与Kerberos三大核心组件的协作原理,并详细阐述了从环境准备、软件包安装、配置文件定制到执行加域及排错的全流程。特别针对2403等新版本提供了关键配置差异与避坑要点,旨在帮助企业运维人员实现高效、稳定的域环境登录与管理。

weixin_29269441的博客 285

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4681

采坑道路3:支付宝小程序,通过scheme跳转小程序页面

应用场景:公司需求,需要增加一个支付宝的优惠券,直接跳转公司内部某个商品详情页 根据官方文档的说法: 需要的格式长这样 alipays://platformapi/startapp?appId= appid自不必说,当然是你项目的appid,但这里没有提示如何跳转页面和带入参数,如果你的页面不需要参数还好,如果是商品详情这类页面根据id去查数据的,那么页面参数很重要,在找了大量的官方文档之后,最后竟然在知乎上翻到了一篇文章(支付宝小程序scheme连接介绍)(吐槽一下支付宝官方的文档啥时候能归类一下,太多

爱吃牛肉的政 4805

结构化数据特征构建神器openfe的实战代码

最近订阅专栏的几位同学一起参加了AI比赛,该比赛的数据形式是结构化的。随着特征和模型的不断迭代优化,达到了一个难以跨越的瓶颈。希望我能够给出一些有效的方法,帮助他们提高成绩。在个人的调研和体验后,向他们推荐了结构化数据特征构建神器openfe,最终也帮助他们提升了十来名的成绩,个人也感到十分的欣慰。特意写此博客,希望能够帮助更多的同学。 文章目录 1. 安装 2. 实战例子一 3. 实战例子二

herosunly的博客 3万+

斗地主游戏排行榜功能快速开发教程

目录 排行榜实现接入描述排行榜接口 host 和 path 创建排行榜上报排行榜 client 获取排行榜列表 获取玩家当前分数排行榜接入总结 一般来说,一款比较流行的斗地主游戏主要功能如下:实现了最经典的斗地主玩法,叫地主抢地主等功能。支持随机匹配模式,主动创建房间邀请微信好友模式两种。这款《斗地主》游戏分为客户端和服务端两个部分,client 是使用 Egret 实现的,server 是使用 ...

weixin_33728708的博客 665

Python 爬虫实战:爬虫代码打包为可执行文件

本文详细介绍了使用PyInstaller工具将Python爬虫打包为可执行文件的全过程。以豆瓣电影Top250爬虫为例,首先对比了主流打包工具,推荐选择跨平台的PyInstaller。通过编写完整的爬虫代码(包含异常处理和数据保存功能),演示了从环境准备、代码测试到打包配置的具体步骤。重点讲解了单文件打包、自定义图标等高级功能,并针对常见的"找不到模块"、文件体积过大等问题提供了解决方案。文章还说明了跨平台打包的注意事项,帮助开发者实现爬虫程序的无环境依赖部署,大幅提升程序的易用性和部署

2503_91057718的博客 2211

RK3568 上C图像camera图像采集应用实例(二)

本文探索rk3568上实现C语言的 通过C v4l2 接口 采集图像 ,刷屏控制 drm的显示camera图像中 实现camera preview 预览 的实践和探索。

luoshanxuli2010的专栏 754

网络棋牌游戏开发方案整理

        1、有良好负载系统,单台服务器最高同时在线人数承受大于2000;  2、服务器等关键技术用C++完成;  3、单个游戏的服务器可实现无障碍扩充;  4、游戏运营稳定,不会出现死机、掉牌、卡死等现象;  5、客户端稳定利于升级。  6、整个程序结构合理,后续开发只需提供接口就可完成,方便且扩展性好;  7、文档完整; 游戏包括:斗地主,升级,象棋,麻将,梭哈,五子棋购入形式:程序

Danisの一棵树的软件历程 4762

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7208

棋牌游戏服务器架构: 总体设计

首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构。网狐棋牌最令人印象深刻的是其稳定性和高网络负载。它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和使用共享100M光纤的机子能够支持5000人同时在线游戏。       在研究其服务器框架后发现,它的网络部分确实是比较优化的。它主要采用了Windows提供的IO完成端口来实现其网络组件。本服

Li_Shugan1的专栏 1767

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SDK棋牌游戏盾防护原理解析

棋牌游戏很容易招到黑客攻击,尤其是对于一些比较出名的平台,风险就更高一些。究竟为什么黑客这么喜欢攻击地方性棋牌游戏呢? 经过许多被攻击的案例显示,黑客之所以会选择攻击棋牌游戏平台是以下原因: 盗卖游戏币。一般这种情况会出现在比较成熟的平台上,使用这种方式通常都是长期进行的过程。就像蛀米虫一样,慢慢的、悄悄的进行。 勒索行为。这个是绝大部分黑客攻击平台的原因。如果出现这个原因的,黑客就不会专门去挑选平台,无论平台大小、是否成熟。做这种事的也并不是技术十分了得的黑客,只是为了贪图一些小钱的网络流氓罢了。

LuHai3005151872的博客 3831

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Url Scheme实现APP间通信、分享

代码地址如下:http://www.demodashi.com/demo/12748.html 简介: URL Scheme就是一个可以让app相互之间可以跳转的对外接口。通过给APP定义一个唯一的URL路径来从外部快速的打开这个指定的APP,每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的...

weixin_34358365的博客 437

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怎么去进行棋牌游戏搭建,如何一步步的开发棋牌游戏

关于怎么开发一款自己的棋牌游戏项目(目前只说棋牌客户端),就说说自己的个人观点, 首要,要做一款游戏,如果你要做一款有网络的棋牌游戏,有用户数据保存的,那么首要就要有一个服务器,然后我们才能基于unity开发的这个棋牌客户端去跟服务器通讯,(如果是做单机,那么 就请忽略这第一步)我们运用unity跟服务器通讯这个机制,叫做网络通讯,一款游戏刚开始时,会定好预备运用的是什么网络协议,基于什么网络协议...

baiyouhuiwanluo的博客 1万+

棋牌游戏服务端架构(总)

    H5Gateway 接入H5客户端 Gateway 服务器仅暴露 Gateway 监听端口,Client 与 Server 之间通讯均通过 Gateway 转发 Client 与 Gateway 仅建立一条连接,Gateway 可与多种 Server(Login、Center)建立连接,初步设想同一时间仅保留一条连接,内网连接的切换代价不高,当然同时保留多条连接也行 Gat...

追求卓越 1万+

维护棋牌游戏服务器的几大关键点

棋牌公司的运营者都知道,开一个棋牌网站服务器至关重要。因为服务器的数据库中存放着许多重要的数据,一旦服务器被黑,整个网站就容易出现很多问题。大家都知道,有的时候玩游戏会出现登录不上的状态,这个时候如果开发商不及时发现问题、修复BUG,那么玩家的流失速度也是很快的。所以,服务器的维护工作就显得尤为重要。那么,一般的棋牌公司应该如何维护棋牌游戏的服务器呢?运营商们可能觉得棋牌游戏是最容易遭受攻击不安全...

FlyPigYe的博客 2966

接入moblink SDK 造成第三方登录无反应情况解决

【事故原因】 MobLink SDK为了完成场景恢复功能,hook了 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourc

Henry_moneyBag的博客 1476

ShareSDK短链接服务域名更换为l.mob.com

产品动态 ShareSDK短链接服务域名更换为l.mob.com 自ShareSDK重金购入mob.com域名后,将提供更加简洁的短链接转换域名。 原默认短链接转化域名link.sharesdk.cn更改为l.mob.com 为您节省更多分享空间。 1.自8月11日12:00开始,新生成的短链接将使用l.mob.com域名。 2.已经转换的短链接仍可以正常跳转使用

ShareSDK的专栏 3626

ShareSDK集成第三方登录和分享的步骤

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33704591的博客 306

什么是Scheme?原来还可以这样应用!

Scheme定义 Scheme 编程语言是一种Lisp方言,诞生于1975年,由MIT的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成。它是现代两大Lisp方言之一;另一个方言是Common Lisp。 Scheme遵循极简主义哲学,以一个小型语言核心作为标准,加上各种强力语言工具(语法糖)来扩展语言本身。 MIT曾用Scheme作为计算机系入门课程的编程语言。计算机程序语言界著名的魔法书《计算机程序的构造和解释》(又称SICP)正是利用Scheme来解释程序设..

pikaduo的博客 10万+

Android 中Scheme协议的使用详解

1. 什么是URL Scheme? 简单的说就是android中的一种页面内跳转协议,方便app页面的内的跳转 2.什么时候使用 服务器下发跳转路径,客户端根据 服务器下发跳转路径跳转相应的页面 H5页面点击描点,根据描点具体跳转路径APP端跳转具体的页面 APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面 APP根据URL跳转到另外一个APP指定页面 ...

苏打水解渴的博客 1万+

接呀呀云实时语音SDK总结

1、给到测试的时间很少,应该至少一天时间给到测试。要有一个时间节点!!! 2、出现了好几次bug: (1)sdk主工程的asset目录拷贝到unity里面去,导致语音初始化回调,登录回调没返回 (2)x86的.so文件比提交到Android和unity的plugin下去 ,导致使用x86作为cpu芯片的手机或者平板无法使用语音功能 (3)也是最坑的地方,查了大半天才知道UnityPlaye

JH_Wiki的专栏 7758
上一篇: unity几个重要的文件夹!
下一篇: 做个记录,一些认识大神的技术博客
失恋王子
博客等级 码龄11年 46粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值