简答题

  • 游戏对象运动的本质是什么?
  • 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
  • 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。

游戏对象运动的本质

游戏对象的运动实际上是通过不断更改位置(position)属性和旋转(rotation)属性的值,以微小差异的离散值变化,在快速刷新图像的条件下,使人视觉上产生运动的感觉。

// 以一定速度向左移动
this.transform.position += speed * Vector3.left * Time.deltaTime;// 以一定速度向e方向旋转
Quaternion q = Quaternion.AngleAxis(speed * Time.deltaTime, e);
this.transform.localRotation *= q;

物体抛物线运动

抛物线运动可以分解为水平方向运动以及垂直方向运动,水平方向速度一定,垂直方向存在加速度。但是由于显示画面刷新快且时间间隔一定,所以可以认为在每一次 Update函数执行时速度是不变的,存在公式ds=dv*dt,关键是垂直方向在此时也可以认为速度不变。

(1) 第一种方法:在原position上增值

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1;public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");this.transform.position += Vector3.down * Time.deltaTime * v;    // 竖直方向和水平方向都有 ds=dv*dtthis.transform.position += Vector3.right * Time.deltaTime * 2;v += a;                                                          // 存在加速度,v的值不断改变}
}

(2) 第二种方法:用新的position取代原position

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1;                                                   //垂直方向速度public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");this.transform.position = new Vector3(this.transform.position.x + v, this.transform.position.y, this.transform.position.z + 1);v += a;                                                          // 存在加速度,v的值不断改变}
}

(3) 第三种方法:使用translate函数

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1;                                                                   // 垂直方向速度public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");Vector3 run = new Vector3(Time.deltaTime * 2, -Time.deltaTime * v, 0);           // 和速度向量this.transform.Translate(run);v += a;                                                                          // 存在加速度,v的值不断改变}
}

完整太阳系

在unity中建立模型(红色为太阳,蓝色为地球):

Moon需要放在Earth下,作为子对象,以保证在Earth自转时,轴位置的改变不会影响到Moon的公转。

在空游戏对象中绑定脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript1 : MonoBehaviour
{GameObject Sun, Mer, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Earth, Moon;// Start is called before the first frame updatevoid Start(){Sun = GameObject.Find("Sun");Mer= GameObject.Find("Mer");Venus= GameObject.Find("Venus");Mars= GameObject.Find("Mars");Jupiter= GameObject.Find("Jupiter");Saturn= GameObject.Find("Saturn");Uranus= GameObject.Find("Uranus");Neptune= GameObject.Find("Neptune");Earth= GameObject.Find("Earth");Moon= GameObject.Find("Moon");}// Update is called once per framevoid Update(){Earth.transform.RotateAround(Sun.transform.position, Vector3.up, 50 * Time.deltaTime);Earth.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Moon.transform.RotateAround(Earth.transform.position, Vector3.up, 359 * Time.deltaTime);Moon.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Mer.transform.RotateAround(Sun.transform.position, new Vector3(1, 5, 2), 45 * Time.deltaTime);Mer.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Venus.transform.RotateAround(Sun.transform.position, new Vector3(1, 2, 0), 42 * Time.deltaTime);Venus.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Mars.transform.RotateAround(Sun.transform.position, new Vector3(2, 1, 2), 40 * Time.deltaTime);Mars.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Jupiter.transform.RotateAround(Sun.transform.position, new Vector3(1, 2, 1), 38 * Time.deltaTime);Jupiter.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Saturn.transform.RotateAround(Sun.transform.position, new Vector3(2, 1, 1), 36 * Time.deltaTime);Saturn.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Uranus.transform.RotateAround(Sun.transform.position, new Vector3(3, 1, 2), 35 * Time.deltaTime);Uranus.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Neptune.transform.RotateAround(Sun.transform.position, new Vector3(1, 3, 2), 33 * Time.deltaTime);Neptune.transform.Rotate(Vector3.up * 30 * Time.deltaTime); }
}

游戏运行结果如下:

编程实践

  • 列出游戏中提及的事物(Objects)
  • 用表格列出玩家动作表(规则表),注意,动作越少越好
  • 请将游戏中对象做成预制
  • 在 GenGameObjects 中创建 长方形、正方形、球 及其色彩代表游戏中的对象。
  • 使用 C# 集合类型 有效组织对象
  • 整个游戏仅 主摄像机 和 一个 Empty 对象, 其他对象必须代码动态生成!!! 。 整个游戏不许出现 Find 游戏对象, SendMessage 这类突破程序结构的 通讯耦合 语句。 违背本条准则,不给分
    请使用课件架构图编程,不接受非 MVC 结构程序
  • 注意细节,例如:船未靠岸,牧师与魔鬼上下船运动中,均不能接受用户事件!

游戏中提及的事物

  • 河岸,牧师、恶魔、船、河水、“Go”按钮、“Restart”按钮。

玩家动作表

动作 参数 结果
点击牧师或恶魔 船不在移动且两者在同一侧 牧师或恶魔上船或下船
点击小船 小船已靠岸 ,船上有人物 小船向另一边航行

游戏对象预制

下载了一些材料,使用Cube和Sphere预制了河岸、牧师、恶魔、小船。

游戏实现

主要按照MVC结构设置了Model、Controller以及View。其中Controller被分解成了Director、SceneController、UserActions几个方面。

程序内主要需要完成的是根据行为为事物添加动作,关键在于position的定位以及状态的设定。

遇到的一些问题主要有:
1.空位判断时,需要保证小船的空位数组在起始处与终点处时相互对应的。
2.绑定事件到游戏对象需要,先为事件设计类,再将事件类实例使用AddComponent(typeof(事件类)) as 事件类绑定到游戏对象。
3.Resume功能必须详尽的考虑到所有可能被改变的初始状况。
4.灵活使用单例,可以方便的将各个组件串联到一起,本次实验中SSDirector.getInstance().currentSceneController as 类就是一个很明显的例子,通过SSDirector单例,可以在其他类中对场景进行唯一性的变换。
5.View部分应该通过用户行为与场记交互,从而影响场景变换。

程序运行界面:

程序运行效果视频:https://www.bilibili.com/video/av68226387/

具体程序如下:

1.View.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UserActions;
using Director;namespace View
{public class pageImage : MonoBehaviour{IUserAction userAction;public bool isOver = true;// Start is called before the first frame updatevoid Start(){userAction = SSDirector.getInstance().currentSceneController as IUserAction;}private void OnGUI(){if (!isOver){GUI.Label(new Rect(Screen.width / 2 - 80, Screen.height / 2 - 80, 100, 50), "Gameover!", new GUIStyle(){fontSize = 30});if (GUI.Button(new Rect(Screen.width / 2 - 60, Screen.height / 2, 100, 50), "Restart")){userAction.Resume();isOver = true;}}if(GUI.Button(new Rect(Screen.width / 2- 60, Screen.height / 2-150, 100, 50), "Go")){userAction.MoveBoat();}}}
}

2.UserActions.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using Models;namespace UserActions
{public interface IUserAction{void MoveBoat();                       /* 小船向另一边航行,条件:小船已靠岸 ,船上有人物 */void MoveRole(Role role);              /* 牧师或恶魔上船或下船,条件:船不在移动且两者在同一侧 */bool Check();                          /* 游戏结束,条件:岸上牧师的人数小于恶魔数; 通关,条件:所有人物都达到河岸另一边 */void Resume();                         /* 游戏重新开始 */}}

3.SceneController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/* 场记命名空间,便于被Director.cs文件中引用,场记应该受导演管制和调用 */namespace SceneController {/* 场记接口:用于被场记类继承,一个游戏中通常不止一个场记 */public interface ISceneController{void LoadResource();                   /* 加载当前场景的资源 *///void Pause();                          /* 当前场景暂停 *///void Resume();                         /* 当前场景继续进行 */}
}

4.Model.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using SceneController;
using UserActions;namespace Models
{public class Land                                     /* 陆地类 */{GameObject land;                                  /* 声明陆地对象 */Vector3[] rolesPositions;                         /* 保存陆地上人物的位置 */bool isStart;                                     /* 标记左右岸,默认右岸为Start */Vector3 landPosition;                             /* 岸的位置 */bool[] isPosEmpty = new bool[6];                  /* 保存岸上位置的占用的情况 */public Land(bool startOrEnd)                      /* true为右岸,false为左岸 */{if (startOrEnd){landPosition = new Vector3(3, -1, -2);rolesPositions = new Vector3[] {new Vector3(1,1,-4), new Vector3(1,1,-2), new Vector3(2,1,-4),new Vector3(2,1,-2),new Vector3(3,1,-4),new Vector3(3,1,-2)};}else{landPosition = new Vector3(-20, -1, -2);rolesPositions = new Vector3[] {new Vector3(-18,1,-4), new Vector3(-18,1,-2), new Vector3(-19,1,-4),new Vector3(-19,1,-2),new Vector3(-20,1,-4),new Vector3(-20,1,-2)};}land = Object.Instantiate(Resources.Load("Land", typeof(GameObject)), landPosition, Quaternion.identity) as GameObject;isStart = startOrEnd;for (int i = 0; i < 6; i++) isPosEmpty[i] = true;}public Vector3 getPos(int index)                   /* 获得一个岸上的位置 */{return rolesPositions[index];}public int getAnEmptyIndex(){for(int i = 0; i < isPosEmpty.Length; i++){if (isPosEmpty[i])return i;}return -1;}public bool isEmpty()                              /* 岸上是否为空 */{for(int i = 0; i < isPosEmpty.Length; i++){if (!isPosEmpty[i])return false;}return true;}public bool judgeId()                              /* 判断是左岸还是右岸 */{return isStart;}public void setOccupied(int index)                /* 将位置设为占用 */{isPosEmpty[index] = false;}public void setEmpty(int index)                  /* 将位置设置为空闲 */{isPosEmpty[index] = true;}public int getSeatByPos(Vector3 pos)            /* 根据坐标获得人物在岸上的位置 */{for(int i = 0; i < rolesPositions.Length; i++){if (rolesPositions[i] == pos)return i;}return -1;}public void reset()                               /* 所有位置置空 */{for (int i = 0; i < isPosEmpty.Length; i++){isPosEmpty[i] = true;}}}public class Boat                                     /* 小船类 */{GameObject boat;Move move;Click click;Vector3[] rolePositionsAtStart;                   /* 小船在右岸时的座位位置 */Vector3[] rolePositionsAtEnd;                     /* 小船在左岸时的座位位置 */bool[] isPosEmpty = new bool[2];                  /* 座位是否空闲 */bool boatPosition;                                /* 小船的位置,右岸为true,左岸为false */Vector3 startPos, endPos;                         /* 小船在起点和终点时的位置 */public Boat(){/* 起点和终点的船上位置坐标必须对应,调试了好久!! */startPos = new Vector3(-1, -1, -1);rolePositionsAtStart = new Vector3[] { new Vector3(-0.5F, 0.5F, -1), new Vector3(-1.6F, 0.5F, -1) };endPos = new Vector3(-16, -1, -1);rolePositionsAtEnd = new Vector3[] { new Vector3(-15.5F, 0.5F, -1), new Vector3(-16.6F, 0.5F, -1) };boatPosition = true;boat= Object.Instantiate(Resources.Load("Boat", typeof(GameObject)), startPos, Quaternion.identity) as GameObject;move = boat.AddComponent(typeof(Move)) as Move;click = boat.AddComponent(typeof(Click)) as Click;move.moveTowards(startPos);for (int i = 0; i < isPosEmpty.Length; i++) isPosEmpty[i] = true;}public Vector3 getPos(int index)                   /* 获得一个岸上的位置 */{if (boatPosition)return rolePositionsAtStart[index];elsereturn rolePositionsAtEnd[index];}public int getAnEmptyIndex(){for (int i = 0; i < isPosEmpty.Length; i++){if (isPosEmpty[i])return i;}return -1;}public int getSeatByPos(Vector3 pos)               /* 根据坐标获得人物在船上的位置 */{if (boatPosition){for (int i = 0; i < 2; i++){if (rolePositionsAtStart[i] == pos)return i;}}else{for (int i = 0; i < 2; i++){if (rolePositionsAtEnd[i] == pos)return i;}}return -1;}public void setOccupied(int index)                /* 将位置设为占用 */{isPosEmpty[index] = false;}public void setEmpty(int index)                  /* 将位置设置为空闲 */{isPosEmpty[index] = true;}public bool isEmpty()                              /* 船上是否为空 */{   for (int i = 0; i < isPosEmpty.Length; i++){if (!isPosEmpty[i]){return false;}}return true;}public bool isMove(){if (boat.transform.position != startPos && boat.transform.position != endPos)return true;elsereturn false;}public void moveToOtherSide()                      /* 船向对岸移动 */{if (getBoatPos()){move.moveTowards(endPos);boatPosition = false;}else{move.moveTowards(startPos);boatPosition = true;}}public bool getBoatPos()                          /* 返回船在左岸还是右岸,右岸为true */{return boatPosition;}public GameObject getPrototype()                 /* 获得游戏对象 */{return boat;}public void reset()                               /* 所有位置置空 */{for(int i = 0; i < isPosEmpty.Length; i++){isPosEmpty[i] = true;}boat.transform.position = startPos;boatPosition = true;}}public class Role                                     /* 人物类 */{GameObject role;Move move;                                        /* 移动 */Click click;bool id;                                          /* 判断身份,牧师或者恶魔,true为牧师,false为恶魔 */int isOnLand;                                     /* 判断是否在岸上,在船上是0,右岸为1,左岸为2 */Land startLand = (SSDirector.getInstance().currentSceneController as Controller).startLand;Land endLand = (SSDirector.getInstance().currentSceneController as Controller).endLand;Boat boat = (SSDirector.getInstance().currentSceneController as Controller).boat;public Role(bool hisId,string name)               /* 用name来标识人物 */{int emptyIndex = startLand.getAnEmptyIndex();if (emptyIndex == -1)Application.Quit();if (hisId){role = Object.Instantiate(Resources.Load("Priest", typeof(GameObject)), startLand.getPos(emptyIndex), Quaternion.identity) as GameObject;startLand.setOccupied(emptyIndex);}else{role = Object.Instantiate(Resources.Load("Devil", typeof(GameObject)), startLand.getPos(emptyIndex), Quaternion.identity) as GameObject;startLand.setOccupied(emptyIndex);}role.name = name;isOnLand = 1;id = hisId;move = role.AddComponent(typeof(Move)) as Move;click = role.AddComponent(typeof(Click)) as Click;move.moveTowards(startLand.getPos(emptyIndex));click.SetRole(this);}public void setRolePos(Vector3 pos)                /* 设置人物位置 */{role.transform.position = pos;}public void goAshore()                             /* 人物上岸 */{Land land = boat.getBoatPos() ? startLand : endLand;int pos = land.getAnEmptyIndex();if (pos == -1){Debug.Log("Land No Empty.");return;}land.setOccupied(pos);boat.setEmpty(boat.getSeatByPos(role.transform.position));//Debug.Log("Boat empty:" + boat.getSeatByPos(role.transform.position) + role.transform.position);move.moveTowards(land.getPos(pos));if (boat.getBoatPos()) isOnLand = 1;else isOnLand = 2;role.transform.parent = null;}public void goBoarding()                           /* 人物上船 */{Land land = boat.getBoatPos() ? startLand : endLand;int pos = boat.getAnEmptyIndex();if (pos == -1){Debug.Log("Boat No Empty.");return;}boat.setOccupied(pos);land.setEmpty(land.getSeatByPos(role.transform.position));move.moveTowards(boat.getPos(pos));isOnLand = 0;role.transform.parent = boat.getPrototype().transform;}public int getRolePos()                           /* 了解人物在左岸(2)、右岸(1)还是船上(0) */{return isOnLand;}public bool getRoleId()                           /* 获得人物身份 */{return id;}public void reset(){int emptyIndex = startLand.getAnEmptyIndex();setRolePos(startLand.getPos(emptyIndex));startLand.setOccupied(emptyIndex);role.transform.parent = null;isOnLand = 1;}}public class Move: MonoBehaviour{int speed = 50;Vector3 destPos;bool canMove = false;private void Update(){if (canMove){transform.position = Vector3.MoveTowards(transform.position, destPos, speed * Time.deltaTime);if(transform.position==destPos)canMove = false;}}public void moveTowards(Vector3 dest){destPos = dest;canMove = true;}}public class Click : MonoBehaviour{IUserAction userAction;Role role;public void SetRole(Role role){this.role = role;}public void Start(){userAction = SSDirector.getInstance().currentSceneController as IUserAction;}private void OnMouseDown(){if (role == null) return;else{userAction.MoveRole(role);}}}
}

5.Director.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SceneController;namespace Director
{public class SSDirector : System.Object{/* 单例模式,导演只有一个 */private static SSDirector _instance;/* 记录当前的场记,也即记录了当前场景 */public ISceneController currentSceneController { get; set; }/* 记录游戏是否正在运行 */public bool running { get; set; }/* 获得单例 */public static SSDirector getInstance(){if (_instance == null){_instance = new SSDirector();}return _instance;}}
}

6.Controller.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using UserActions;
using Models;
using View;
using SceneController;/* 场记类实现:需要继承场记接口 */
public class Controller : MonoBehaviour, ISceneController, IUserAction
{public Land startLand, endLand;public Boat boat;public Role[] roles;public pageImage gameGUI;/* 场记接口方法的实现,主要完成场景载入 */public void LoadResource(){startLand = new Land(true);endLand = new Land(false);boat = new Boat();roles = new Role[6];for (int i = 0; i < 3; i++){roles[i] = new Role(true, "Priest" + i);}for (int i = 3; i < 6; i++){roles[i] = new Role(false, "Devil" + i);}}/* 用户行为接口方法的实现 */public void MoveBoat(){if (boat.isEmpty() || boat.isMove()|| !gameGUI.isOver) return;boat.moveToOtherSide();gameGUI.isOver = Check();}public void MoveRole(Role role){if (!boat.isMove() && gameGUI.isOver){if (role.getRolePos() == 0){role.goAshore();}else{role.goBoarding();}}}public bool Check(){int priestNumAtStart = 0;int priestNumAtEnd = 0;int devilNumAtStart = 0;int devilNumAtEnd = 0;int priestNumAtBoat = 0;int devilNumAtBoat = 0;for (int i = 0; i < 6; i++){switch (roles[i].getRolePos()){case 0:if (roles[i].getRoleId()){priestNumAtBoat++;}else{devilNumAtBoat++;}break;case 1:if (roles[i].getRoleId()){priestNumAtStart++;}else{devilNumAtStart++;}break;case 2:if (roles[i].getRoleId()){priestNumAtEnd++;}else{devilNumAtEnd++;}break;default:break;}}Debug.Log("priestNumAtBoat:" + priestNumAtBoat);Debug.Log("priestNumAtStart:" + priestNumAtStart);Debug.Log("devilNumAtBoat:" + devilNumAtBoat);Debug.Log("devilNumAtStart:" + devilNumAtStart);Debug.Log("priestNumAtEnd:" + priestNumAtEnd);Debug.Log("devilNumAtEnd:" + devilNumAtEnd);Debug.Log("");if ((priestNumAtBoat + priestNumAtStart < devilNumAtBoat + devilNumAtStart || priestNumAtBoat + priestNumAtEnd < devilNumAtBoat + devilNumAtEnd)){return false;}elsereturn true;}public void Resume(){startLand.reset();endLand.reset();boat.reset();for (int i = 0; i < roles.Length; i++){roles[i].reset();}}/* 控制器的生命周期 */void Awake(){SSDirector director = SSDirector.getInstance();director.currentSceneController = this;director.currentSceneController.LoadResource();}void Start(){Debug.Log("First SceneController Start!");gameGUI = gameObject.AddComponent<pageImage>() as pageImage;}
}

Unity 3D游戏——神鬼传说相关推荐

  1. Unity 3D游戏——神鬼传说(动作管理重制版)

    基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 写一个简单的总结,总结游戏对象的使用 下载Fantasy Skybox FREE 构建场景 (1)在Asset Sto ...

  2. Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games

    Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...

  3. 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  4. 雨松MOMO《Unity 3D游戏开发》源码公布

    原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...

  5. 【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍

    随着游戏体积和功能的不断叠加,游戏中的数据也变得越来越庞杂,这其中既包括玩家产生的游戏存档等数据,例如关卡数.金币等,也包括游戏配置数据,例如每一关的配置情况.尽管Unity提供了PlayerPref ...

  6. unity 3d游戏开发_使用Unity 5开发3D游戏

    unity 3d游戏开发 If there's one thing cooler than playing games, it's building games. 如果有比玩游戏更酷的一件事,那就是构 ...

  7. 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  8. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  9. Unity 3D游戏发布到Android平台

    Android 是目前最流行的一个词,Android 的游戏.软件等几乎是人们每天都要用到的.要将 apk 文件发布到 Android 平台,必须先安装两个工具:Java(JDK)和 Android ...

最新文章

  1. matlab处理图像位置,MATLAB图像处理:我的直方图的最后一个位置出现了
  2. Logstic与Softmax比较
  3. matplotlib 设置图形大小时 figsize 与 dpi 的关系
  4. tensorflow详解-tf.nn.conv2d(),tf.nn.max_pool()
  5. 技术分享丨关于 Hadoop 的那些事儿
  6. I.MX6 boot from Micro SD
  7. PolandBall and Forest(并查集)
  8. java stringbuffer原理_深入理解Java:String
  9. 收藏 | 可能是最详尽的PyTorch动态图解析
  10. win7 python2.7安装PIL库
  11. 如何去除chrome最常访问的网页
  12. 设计模式之组合模式(十四)
  13. Win10加装SSD固态硬盘后卡顿现象的解决方法
  14. Xweibo:新浪云微博服务 - 新浪开源微博系统
  15. jsdroid 教程_ps教程自学平台
  16. h30-t10 android phone,荣耀3C移动2G版(H30-T10)官方完整版ROM全合集!!!
  17. MYSQL设置初始密码
  18. 兴奋神经递质——谷氨酸与大脑健康
  19. 在react脚手架中使用Tailwind CSS (入门)
  20. 永磁同步电机转子位置估算专题 —— 基波模型与转子位置角

热门文章

  1. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day40】—— 数据库7
  2. 加油吧,数字化转型@聪明的券商正在成为金融技术的整合者
  3. 判断一个图形是否为对称图形
  4. IDEA编译项目提示程序包不存在、符号错误,最终幻想
  5. HTML学生个人网站作业设计:电影网站设计——威海影视网站首页(1页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  6. plex自动跳到登入_如何使用Plex Media Server自动下载字幕
  7. iPhone上用小影剪辑视频(iPhone读取文件)
  8. APK动态加载框架(DL)解析
  9. weblog_Google Weblog宣布Froogle A hrefhttpwwwjepstonene
  10. 『每日AI』5G新时代丨最先火起来的居然是……