• 游戏开发面面观
    • 游戏产业的分类——六大游戏市场
    • 游戏类型
  • WINDOWS编程基础
    • Visual Studio文件类型分析
    • API
    • SDK
    • WinMain
    • PlaySound
    • 工程中包含库文件的方式
    • Windows程序的“外貌”——窗口
      • 窗口创建四部曲
        • 设计
        • 注册
        • 创建
        • 显示与更新
    • Windows资源的“身份证”——句柄
    • Windows程序的“邮局”——消息与消息队列
      • 消息的表现形式——MSG结构体

游戏开发面面观

游戏产业的分类——六大游戏市场

AAA级游戏开发领域

AAA级(游戏业界通常称其为“Triple-A”,即 3A)游戏是我们经常在评价一款游戏是否为大作的衡量标准,是游戏业界“酷”的代名词。

通常指的是游戏平台像XBOX360/Play Station或者 PC上的游戏作品。

通常团队规模50人以上,开发周期在2~5年之间,有着不菲的开发预算。

是成熟的商业作品,通常都有着精美的画质,好莱坞电影风格的过场CG动画,能将艺术与技术进行完美的结合,是会让玩家玩上几分钟就瞬间爱上然后大呼过瘾的游戏大作。

特质:

  • 高投入
  • 高品质
  • 高销量
  • 极少的BUG
  • 良好可上手性
  • 广阔市场前景
  • 经过完善的测试
  • 图形用户界面友好
  • 规模庞大的研发团队
  • 大规模市场宣传和炒作
  • 将艺术与技术完美结合
  • 高表现的视觉与听觉效果
  • 让玩家在玩上的最初5分钟入迷
  • 愉悦的体验连续、均衡、贯穿整个游戏过程

社交和休闲游戏开发领域

社交和休闲(Social and casual)类游戏与AAA级游戏相比,有着更小的开发团队(5 ~ 25人),更短的开发周期(4 ~ 8个月),更少的开发预算。

主要依附着社交网络(国内如QQ空间、人人网、新浪微博,国外如 facebook,twitter)而存在。
(老少咸宜的QQ农场就是一款在国内风靡一时的典型社交和休闲类游戏)

移动游戏开发领域

移动游戏市场包括普通移动手机,智能手机以及平板电脑。
目前该平台由 Android、iOS 以及Windows Phone这三大智能移动平台主导。
这个市场与社交和休闲类游戏市场有着很大的交集,与社交和休闲类游戏相比,有着更小的开发团队(甚至是个人),更少的预算以及更短的开发周期。

功能型游戏开发领域

功能性游戏(Serious game)是开发出来用于响应特定的企业或者机构的需求的游戏作品。

(比如,国外一款名叫《Remission》的游戏,就是用于帮助孩子们理解什么是化疗以及化疗的作用和重要性的)
(又比如,我国解放军开发的FPS大作《光荣使命》系列游戏,就是为我国的军队量身打造的,进行专门的高科技军事训练的一流游戏作品)

学术型游戏开发领域

学术型游戏开发领域是近年来新出现的游戏产业分支。

(现在越来越多的机构开始资助大学或者研究所的游戏开发团队,促进了这种新生的游戏开发领域的发展)

独立游戏开发领域

独立型游戏开发领域是游戏产业的命脉所在,随着近年移动平台与社交平台的火热崛起,独立游戏开发者们的舞台越扩越宽。

有着这样一群独立游戏开发者,他们视游戏开发为梦想,他们是独立游戏开发领域的主角。

独立开发者是一个游戏背后的唯一创造力量和经济力量。
没有外部的发行商为独立游戏提供资金,也没有其他的实体发挥对游戏内容的创造性控制。

独立游戏大多是自己发行的,但多数独立开发者也愿意与发行商一同协作。发行商不提供开发资金或者控制游戏的开发过程。在这种情况下,独立开发者将首先开发游戏,仅当游戏开发完成时或者快要完成时才让发行商介入。同时,通常独立开发者工作室都非常小,常常仅有1~2人。

游戏类型

  1. RPG = Role-playing Game :角色扮演游戏
    由玩家扮演游戏中的一个或数个角色,有完整的故事情节的游戏。
    玩家可能会与冒险类游戏混淆,其实区分很简单,RPG游戏更强调的是剧情发展和个人体验。
    一般来说,RPG可分为日式和美式两种,主要区别在于文化背景和战斗方式。日式RPG多采用回合制或半即时制战斗。

  2. ACT = Action Game :动作游戏
    玩家控制游戏人物用各种武器消灭敌人以过关的游戏,不追求故事情节。
    电脑上的动作游戏大多脱胎于早期的街机游戏和动作游戏如《魂斗罗》《三国志》《鬼泣》系列等。
    设计主旨是面向普通玩家,以纯粹的娱乐休闲为目的,一般有少部分简单的解谜成份,操作简单,易于上手,紧张刺激,属于“大众化”游戏。

  3. AVG = Adventure Game:冒险游戏
    由玩家控制游戏人物进行虚拟冒险的游戏。
    与RPG不同的是,AVG的特色是故事情节往往是以完成一个任务或解开某些迷题的形式出现的,而且在游戏过程中刻意强调谜题的重要性。
    AVG也可再细分为动作类和解迷类两种,动作类AVG可以包含一些格斗或射击成分。
    而解迷类AVG则纯粹依靠解谜拉动剧情的发展,难度系数较大。

  4. SLG = Simulation Game:策略游戏
    玩家运用策略与电脑或其他玩家较量,以取得各种形式胜利的游戏。(或统一全国,或开拓外星殖民地)
    策略游戏可分为回合制和即时制两种。
    后又被细分出模拟经营,于是就产生了SIM (simulation)类游戏。

  5. RTS = Real-Time Strategy Game:即时战略游戏
    本来属于策略游戏SLG的一个分支,但由于其在世界上的迅速风靡,使之慢慢发展成了一个单独的类型,知名度甚至超过了SLG,有点像现在国际足联和国际奥委会的关系。
    后来,从其上又衍生出了所谓“即时战术游戏”,多以控制一个小队完成任务的方式,突出战术的作用。

  6. FTG = Fighting Game:格斗游戏
    由玩家操纵各种角色与电脑或另一玩家所控制的角色进行格斗的游戏。
    按呈画技术可再分为2D和3D两种。
    此类游戏谈不上什么剧情,最多有个简单的场景设定,或背景展示,场景、人物、操控等也比较单一,但操作难度较大,主要依靠玩家迅速的判断和微操作取胜。

  7. STG = Shooting Game:射击类游戏
    这里所说的射击类,并非是模拟射击(枪战),而是指纯的飞机射击。
    由玩家控制各种飞行物(主要是飞机)完成任务或过关的游戏。
    此类游戏分为两种,一叫科幻飞行模拟游戏(Science-Simulation Game),以非现实的想象空间为内容。
    另一种叫真实飞行模拟游戏(Real- Simulation Game),以现实世界为基础,以真实性取胜,追求拟真,达到身临其境的感觉。

  8. FPS = First Personal Shooting Game:第一人称视角射击游戏
    严格来说它是属于动作游戏的一个分支,但和RTS一样,由于其在世界上的迅速风靡,使之展成了一个单独的类型。

  9. PZL = Puzzle Game:益智类游戏
    Puzzle的原意是指以前用来培养儿童智力的拼图游戏,引申为各类有趣的益智游戏,总的来说适合休闲。

  10. RCG ( RAC ) =Racing Game:竞速游戏
    在电脑上模拟各类赛车运动的游戏,通常是在比赛场景下进行。
    非常讲究图像音效技术,往往是代表电脑游戏的尖端技术。惊险刺激,真实感强,深受车迷喜爱。
    另一种说法称之为“Driving Game”。目前,RCG内涵越来越丰富,出现了另一些其他模式的竞速游戏,如赛艇、赛马等等。

  11. CAG = Card Game:卡片游戏
    玩家操纵角色通过卡片战斗模式来进行的游戏。
    丰富的卡片种类使得游戏富于多变化性,给玩家无限的乐趣。

  12. TAB = Table Game:桌面游戏
    顾名思义,是从以前的桌面游戏脱胎到电脑上的游戏。
    如各类强手棋(即掷骰子决定移动格数的游戏),经典的如《大富翁》系列。棋牌类游戏也属于TAB。

  13. MSC = Music Game:音乐游戏
    培养玩家音乐敏感性,增强音乐感知的游戏。
    伴随美妙的音乐,有的要求玩家翩翩起舞,有的要求玩家手指体操。

  14. SPG = Sports Game:体育类游戏
    模拟各种体育赛事的游戏。

WINDOWS编程基础

Visual Studio文件类型分析

**ipch**文件夹和**HelloVisualStudio.sdf**文件:都是Visual Studio用来保存预编译的头文件和 Intellisense用的,删除这些文件对于工程的开发完全没有影响,是可以删除掉的。 隐藏步骤:【工具】→【选项】,【文本编辑器】→【C/C++】→【高级】,然后把【始终使用退回位置】和【退回位置已在使用时,不警告】这两者设为True。

Debug文件夹,当中存放着编译过程中的中间文件,以及最后的目标文件,.exe型的执行文件( Debug 文件夹的出现对应着我们在选择解决方案时选择的是 Debug 型,如果我们解决方案类型为Release型,那么这时工程文件夹下就出现的不是 Debug文件夹,而是名为Release的文件夹)。

工程文件夹(HelloVisualStudio文件夹),当中存放着我们工程相关的源文件,头文件以及若干和后缀名为.vcxproj的项目文件。这个文件夹的名称与工程名的名称一致,因为我们例子中的工程名为 HelloVisualStudio,所以这个工程文件夹名称就为HelloVisualStudio。

扩展名为 .sIn 的文件,它记录着关于解决方案中的信息,我们打开一个解决方案,就是通过双击它。

扩展名为 .suo 的文件,它记录着应用于该解决方案的用户的选项。

扩展名为 .opensdf 的文件,记录着关于项目的状态信息。此文件只在项目处于打开状态时才会有。

API

微软公司为了方便我们开发基于Windows 的应用程序,为我们提供了各种各样的函数。这些函数是Windows操作系统提供给应用程序编程的接口,即Application Programming Interface,简称API。

任何Windows应用程序与Windows本身之间的所有通信,都要使用Windows应用程序编程接口,也就是Windows API。
这个接口说白了就是几百个函数组成的一个集合,它们是Windows操作系统提供的标准函数,可以提供应用程序与Windows互相进行通信的方法。

因为Windows API是在C语言称王争霸叱咤风云的年代开发的,那时候C++还未发迹,所以我们可以发现,在Windows和应用程序之间传递数据的是结构体而不是类。

SDK

Software Development Kit,中文译为软件开发包。

SDK说白了就是一个开发所需资源的一个集合
所以 DirectX SDK 就是用 DirectX 进行开发的一个资源的打包集合。

这里需要注意API和SDK都是IT业界广泛使用的术语,并不是专指某种特定的API或者SDK。

WinMain

原型:

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_ HINSTACNE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nCmdShow
);

WINAPI 就是_stdcall,只是为了让我们清楚知道这里的_stdcall 表示的是一种调用约定,它让编译器知道了应当以Windows兼容的方式来产生机器指令。
如果我们在写WinMain函数的时候去掉这句WINAPI 而直接写:
int WinMain(),仍然是可以编译并运行的,只不过在编译期间会得到一条警告( warning)。

这里的_In_可以理解为一个宏,表示需要我们进行自行输入(input)的一个参数。与其对应的是_Out_,之后我们也会经常在函数定义的代码中看到,它表示指定的这个参数是函数本身向外输出(Output)的一个参数。

第一个参数,HINSTANCE类型的 hInstance,它表示该程序当前运行的实例句柄。
我们可以对这个类型HINSTANCE进行字面上的理解,h前缀表示这个参数的类型为handle,句柄的意思,而后面的Instance中文意思是实例,将两个意思结合起来,所以这个类型就是实例句柄。
hInstance其实就是一个数值。当一个程序在 Windows下运行时,它唯一对应一个运行中的实例。也只有运行中的程序实例,才有资格分配到实例句柄。
一个应用程序可以运行多个实例每运行一个实例,系统都会给该实例分配一个句柄值,并且通过hInstance参数传递给程序的入口点WinMain函数。

第二个参数,HINSTANCE类型的hPrevInstance,表示当前实例的前一个实例的句柄。
我们可以对这个参数进行字面上的理解: h表示参数类型为句柄(handle) , Prev代表先前的(previous)意思,Instance依旧表示实例,那么组合起来就是先前的实例句柄。
对于这个参数的用法,MSDN中明确表示在Win32环境下,该参数总是取 NULL,这就是说,在Win32环境下,这个参数没有存在感,不起任何作用,只是在进行WinMain函数书写时需要将它专门作为一个参数表示出来而已。

第三个参数,LPSTR类型的lpCmdLine,它是一个以空终止的字符串
指定传递给运用程序的命令行参数。
参数肢解:lp前缀表示这个参数为一个指针,Cmd表示 command,命令的意思,与Line组合起来就表示命令行。
(例如,在 Windows7操作系统下的E盘有一个叫ForTheDream.txt 的文件,我们用鼠标双击这个文件时将启动记事本程序(notepad.exe)。此时系统会将E:\ForTheDream.txt作为命令行的参数传递给记事本程序的WinMain函数
记事本程序在得到这个文件的文件路径后,就会在窗口中正确显示这个文件的内容)

第四个参数,int类型的nCmdShow,指定程序窗口应该如何显示,是最大化,最小化,还是隐藏等等。
这个参数可有如下取值:

PlaySound

函数定义:

BOOL PlaySound(LPCTSTR pszSound,HMODULE hmod,DWORO fdwSound
);

必须在编译之前连接winmm.lib库文件。

第一个参数,LPCTSTR类型的pszSound,可以看到作为LPCTSTR类型的此参数为一个字符串,指定了要播放的声音文件。这个值设为NULL 的话,就会把所有当前播放的声音全部停掉。

第二个参数,HMODULE类型的 hmod,包含了在第一个参数中指定的声音文件作为资源的可执行文件的句柄。之后会详细介绍各种资源,这里把这个参数设为NULL就可以了。

第三个参数,DWORD类型的 fdwSound,是一个用来控制声音播放的一个标志。

下面是一些常用标识的列表。
(可以使用一个或者多个标识,标识之间用“|”连接)

工程中包含库文件的方式

  • #pragma comment(lib,“winmm.lib”),在""之间填需要链接的库文件,一般置于头文件include语句后。
  • 在工程配置中添加库文件的包含。
    菜单栏【项目】->【属性】,【配置属性】->【链接器】->【输入】,【附加依赖项】->【编辑】

Windows程序的“外貌”——窗口

每个Windows应用程序至少有一个窗口,称之为主窗口。

一个应用程序通常都包含 标题栏、菜单栏、系统菜单、最小化框最大化框,甚至滚动条。

  • 客户区:窗口的一部分,游戏软件通常都在客户区完成游戏中各种画面、功能与效果的实现。而应用程序则主要管理客户区的外观及其操作。
  • 非客户区:标题栏、菜单栏、系统菜单、最小化、最大化框。主要由Windows系统来管理。

窗口创建四部曲

设计

Windows已经定义好了一个窗口所具有的所有基本属性。

WNDCLASSEX结构体 定义:

typedef struct tagWNDCLASSEX{UINT cbSize;UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

在WinMain函数中定义一个WNDCLASSEX:

#include <Windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{//开始设计一个完整的窗口类WNDCLASSEX wndClass = { 0 };    //用WINDCLASSEX定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化wndClass.cbSize = sizeof(WNDCLASSEX);   //设置结构体的字节数大小wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口样式(此处定义窗口风格为水平重绘、垂直重绘)wndClass.lpfnWndProc = WndProc;    //设置指向窗口过程函数的指针wndClass.cbClsExtra = 0;    //表示窗口类附加内存wndClass.cbWndExtra = 0;    //表示窗口的附加内存wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄wndClass.hIcon = (HICON)::LoadImage(NULL, _T("icon.ico"), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //用全局的::LoadImage函数从本地加载自定义ico图标wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);    //指定窗口类的光标句柄wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);   //为hbrBackground成员指定一个灰色画刷句柄wndClass.lpszMenuName = NULL;  //用一个以空终止的字符串,指定菜单资源的名字wndClass.lpszClassName = _T("ForTheDreamOfGameDevelop");   //用一个以空终止的字符串,指定窗口类的名字return 0;
}

第二个参数:
常用样式取值:

第三个参数:
窗口过程函数是一个回调函数(不是由该函数的实现方直接调用的,而是在特定事件或条件发生时由另一方调用的,用于对该事件或条件进行响应)。

针对Windows的消息处理机制,窗口过程函数被调用过程如下:
1.在设计窗口类时,将窗口过程函数的地址赋值给lpfnWndProc成员变量
2.调用ResgisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址
3.当应用程序接收到某一窗口消息时,调用DispatchMessage(&msg)将消息回传给系统,系统则利用先前注册窗口类时得到的函数指针,调用窗口过程函数对消息进行处理

注册
创建
显示与更新

Windows资源的“身份证”——句柄

在Windows应用程序中,窗口都是通过窗口句柄(HWND)来标识的。我们要对某个窗口进行操作的话,首先就是要得到这个窗口的句柄。

句柄(HANDLE)
在Windows程序中,有各种各样的资源,比如窗口、图标、光标等。系统创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,这些标识号就是句柄。
一款优质的游戏一般都会有着个性化的图标与鼠标光标,而为了在我们自己开发的游戏中使用这样个性化的图标与光标资源,我们就会与图标句柄(HICON)和光标句柄(HCURSOR)打交道。

Windows程序的“邮局”——消息与消息队列

Windows程序设计是一种基于事件驱动方式的程序设计模式,Windows程序与操作系统间的通信主要是基于消息的。

每单击一次鼠标或按键,操作系统就会感知事件,将事件包装成消息,投递到消息队列中,然后程序从消息队列中取出消息并响应。
在这个处理过程中,操作系统也会给游戏程序“发送消息”,即操作系统调用程序代码中专门负责处理消息的“窗口过程函数”。

Windows程序运行的机制:Windows将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息并进行响应。

消息的表现形式——MSG结构体

定义:

typedef struct tagMSG{   //msgHWND hwnd; //指定消息所属窗口UINT message; //指定消息的标识符WPARAM wParam;    //指定此msg的附加信息LPARAM lParam; //指定此msg的附加信息DWORD time;    //指定投递到消息队列的时间POINT pt; //指定投递到消息队列中时鼠标的当前位置
} MSG;

第一个参数:通常一个消息都是与某个窗口相关联的。(例在某个活动窗口按下鼠标左键,产生的按键消息就是发给这个窗口的)

第二个参数:在Windows中,消息由一个数值来表示,不同消息对应着不同数值。由于数值记忆不方便,所以Windows将消息对应的数值定义为WM_XXX宏的形式。(其中WM是Windows Message的缩写,XXX对应某种消息的英文拼写的大写形式)

《逐梦旅程——windows游戏编程之从零开始》笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. 在文件中查找指定字符串
  2. 打开闪光灯java代码_android 拍照带水印(可打开闪光灯功能)
  3. How to write journal papers?
  4. href 带参数 打开exe_js调用winform程序(带参数)
  5. MVC4中EasyUI Tree异步加载JSON数据生成树
  6. 【锋利的JQuery-学习笔记】菜单栏及其2级菜单
  7. 如何把视频做成电脑壁纸?Dynamic Wallpaper导入视频壁纸的方法
  8. FinalShell下载安装教程
  9. Excel中让所有图片刚好适应单元格大小,或者让图片也支持排序
  10. 家居装修行业APP开发解决方案
  11. 【爬虫】9行python下载王者荣耀所有英雄的高清壁纸(附代码和图片下载)
  12. 异性相处,关系再好,也要懂得这些“分寸”
  13. ubuntu远程访问win7登录后语言为繁体字的解决办法
  14. java鱼雷3的几何_WFP:Geometries几何图形集合--Geometry几何图形(3)
  15. 【十二】Python全栈之路--推导式_生成器
  16. maya mel uf8_maya中mel文件如何使用?
  17. python中元组前代*是什么意思
  18. SpringBoot导出pdf文件学习
  19. JAVA入门基础(5)—— 流程控制
  20. 黑金花大理石_请问黑金花大理石是什么样的,有哪些特点?

热门文章

  1. 毕设一:python 爬取苏宁的商品评论
  2. AspnetCore 缓存篇
  3. 201671010119 2016-2017-2《Java程序设计》第十六周学习心得
  4. 图像patch feature源码
  5. 【原】对txt文本进行数据读取
  6. C# 异步调用中使用回调方法
  7. Qt_解决Qt5.15 + Xcode12iOS端qmake不可用的问题
  8. markdown编辑器 语法示例
  9. js如何获取php中的变量的类型,js获取变量的类型
  10. vs2013 资源视图 看不到东西