Skip to content

wty2019/2019NetDragonInc.Training

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

这是一个有关我参加19年网龙公司线上训练营的项目,将在一个月的时间内,通过完成一个个阶段性任务,快速入门C++和U3D。

这份文档会记录所有的任务(分为C++和Unity3D两部分),目前更新至第一阶段。

记住:在做任务中遇到问题,通常的解决途径是搜索引擎。搜索,并不是为了去copy一个现成的解决方案,而主要是为了去理解方案背后的原理

另外,本项目每个阶段(week)的文件夹里都有一份README说明文档。

1. 目录


2. C++

这一部分任务属于C++。

诚信要求:请按自己的思路进行设计和开发,不可抄袭其他人作品(包括网络上的),否则按作弊处理(0分)。

友情链接:

2.1. 语言基础

阶段一任务卡片图

2.1.1. 题目

2.1.1.1. 题目1

编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。(提示:使用递归方法)(15分)

2.1.1.2. 题目2

编码实现字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载,需实现以下“=”运算符、“+”运算、“[]”运算符、“<”运算符及“>”运算符及“==”运算符(备注:可以用strcpy_s, strcat_s,但禁用STL及String类),以下为各个运算符的运算效果的详细说明(35分)

a) 字符串“=”重载运算符

CNStringstr1("abc ");
CNString str2 = str1;

b) 字符串“+”运算

CNStringstr1("abc"); 
CNStringstr2("efg ");
str1 = str1 + str2;    

c) 字符串“[]”运算

CNString nstring1("abc");
cout<< nstring1[0] ;// 则屏幕显示a
cout<< nstring1[2] ; // 则屏幕显示c

d) “<”运算符

CNStringstr1("abc");
CNStringstr2("efg");
if (str1 <str2 ){
cout<<“str1<str2”<<endl;
}

e) “>”运算符

CNStringstr1("abc");
CNStringstr2("efg");
if (str1 >str2 ){
cout<<“str1>str2”<<endl;
}

f) “==”运算符

CNStringstr1("abc");
CNStringstr2("efg");
if (str1 == str2){
cout<<“str1==str2”<<endl;
}

2.1.1.3. 题目3

创建双向链表类,该类有默认构造函数、类的拷贝函数、类的析构函数、实现链表添加数据、升序排序、查找链表中某个节点及删除链表中某个节点的操作(禁用STL及String类))。(25分)

2.1.1.4. 题目4

设计并编写代码自动格斗类游戏。(25分)

1) 角色类CRole为基类

构造函数、析构函数;
成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值);
成员函数:武器攻击、跳跃。

2)英雄类CHero继承于CRole类

构造函数、析构函数;
英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方造成伤害具体值由学员自己进行设定;

3)敌人类CEnemy继承于CRole类

构造函数、析构函数; 
新增技能劈掌(成员函数)、连环腿(成员函数),给对方造成伤害值由学员自己进行设定;

4)战斗类CBattle

构造函数、析构函数及其他成员函数
双方HP(血量)初始值为100,开始战斗以后,英雄和敌人轮流攻击对方,掉血量=攻击方技能伤害值+ATK(攻击方的攻击力)-DEF(防御方的防御力),当一方血量为0时,战斗结束,玩家经验值增加相应点数,当经验等级达一定时候,玩家等级提升。

2.1.2. 任务提交

  • 提交以上题目的工程代码(关键地方需注释说明)。
  • 平台为VS2013(及以上版本) C++ win32控制台;

2.2. 网络编程

阶段二任务卡片图

2.2.1. 题目

实现客户端和服务器之间通过Socket进行双向通信,协议数据采用XML或者Json封装。最终实现一个简单的聊天系统

2.2.2. 实现难度及对应分值

  • 没有使用XML或者Json封装协议数据,只支持纯文本收发数据;(满分60分)
  • 只支持一个客户端和一个服务端,客户端和服务器轮流发送和接收文本消息;(满分70分)
  • 支持多个客户端和一个服务端,客户端之间轮流发送和接收文本消息(需要对客户端socket进行管理);(满分80分)
  • 支持多个客户端和一个服务端,客户端之间可以任意顺序发送和接收文本消息(需要使用多线程实现);(满分90分)
  • 在4的基础上使用了图形客户端(WIN Form、QT、U3D等);(满分100分)
  • 额外加分项:使用Protobuf封装协议数据。(酌情加1-10分)

2.2.3. 任务提交清单

平台为VS2013(及以上版本) C++ win32控制台或图形客户端,提交内容:

  1. 服务器工程文件及代码(关键地方需注释说明),引用的第三方库;
  2. 客户端工程文件及代码(关键地方需注释说明),引用的第三方库;
  3. 不要提交Protobuf源码及编译出来的Protobuf类库文件;
  4. 除可执行文件外,不要提交debug目录下.db,.sdf文件等编译中间文件,也不要提交.vs文件夹
  5. 用WinRar软件将工程整体打包为rar文件。

2.3 数据库设计

阶段三任务卡片图

2.3.1. 题目

MySQL数据库设计:

  1. 搭建MySQL数据库服务器;
  2. 至少设计以下数据库表:用户表、角色表、聊天消息表;
  3. 使用MySQL的C或者C++ API调用MySQL对上述数据库表(至少一张表)进行CRUD(增删改查)操作;
  4. 使用mysql_stmt_prepare或者PreparedStatement;
  5. 使用事务处理。

额外加分:实现数据库连接池。

2.3.2 任务提交清单

  1. 创建数据库表的SQL语句,包括表初始化SQL脚本;
  2. C++代码及工程文件(关键地方需注释说明) ,引用的第三方库;
  3. 不要提交MySQL源码及编译出来的MySQL类库文件;
  4. 除可执行文件外,不要提交debug目录下 .db,.sdf文件等编译中间文件,也不要提交.vs文件夹;
  5. 用WinRar软件将工程整体打包为rar文件。

2.3.3 NoSQL学习资料

2.4 游戏设计与实现

阶段四任务卡片图

2.4.1 题目

设计并实现游戏业务逻辑,完成一个简单的游戏。如果有WIN Form、QT或者U3D图形编程经验,可以使用自己熟悉的客户端进行呈现(客户端实现语言不限,服务端必须是C++实现);如果没有图形编程经验,可以使用类似MUD游戏的纯文本客户端(DOS),用文字对游戏进行描述。

游戏内容可以从下面列表选择其一,或者自行选题(不用太复杂的游戏)。

2.4.1.1 俄罗斯方块

单机模式,需要实现的功能(满分60分):

  • 生成不同类型方块
  • 通过wasd或者方向键控制方块旋转和移动
  • 消除一行
  • 每升一级,提高方块下落速度

联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):

  • 桌子管理
  • 玩家准备完毕,自动开始
  • 能同时显示2个玩家的游戏画面,并实时更新
  • 显示玩家积分排名(荣誉),历史战绩
  • 异常处理(如玩家在牌局中断开)
  • 聊天功能

2.4.1.2 斗地主

规则参考week4C++中的《斗地主规则》。

单机模式,则其他两位玩家由AI控制出牌,需要实现的功能(满分80分):

  • 玩家具有初始筹码(不同于积分)
  • 玩家准备完毕,自动开始
  • 洗牌
  • 发牌
  • 抢地主
  • 出牌
  • 比较牌大小

联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):

  • 桌子管理(参考qq游戏大厅)
  • 显示玩家积分排名(荣誉),历史战绩
  • 异常处理(如玩家在牌局中断开)
  • 聊天功能

参考DOS游戏界面如下:

斗地主DOS界面

2.4.1.3 坦克大战

单机模式,需要实现的功能(满分60分):

  • 生成坦克(己方和敌方)
  • 显示简易地图
  • 通过wasd或者方向键控制己方坦克移动
  • 敌方坦克自主移动
  • 发射炮弹

联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):

  • 玩家上线自动加入游戏(能支持2个同时游戏即可)
  • 能同时显示2个玩家的游戏画面,并实时更新
  • 聊天功能
  • 显示玩家积分排名(荣誉),历史战绩

2.4.1.4 策略射击生存游戏

该选题必须有UI呈现(,界面参考《绝地求生》)。

需要实现的功能点(满分100分):

  • 需要实现加入比赛
  • 通过wasd或者方向键控制角色运动,鼠标左键射击

优先完成上述功能的基础上,可以视需要添加一些其他功能(射击特效等)。

2.4.2 要求

  1. 游戏中的数据必须使用数据库进行管理
  2. 所开发的游戏需注意用户体验,比如界面友好、操作便利。

2.4.3 任务提交清单

  1. vs工程文件及代码(关键地方需注释说明),引用的第三方库
  2. 所用到的数据库sql脚本
  3. 游戏设计文档
  4. 游戏使用说明
  5. 游戏演示录屏(重要,可以用FSCapture录屏,录屏文件大小最好不要超过100M),文件格式为mp4或者avi
  6. 除可执行文件外,不要提交debug目录下.db,.sdf文件等编译中间文件,也不要提交.vs文件夹
  7. 用WinRar软件将工程整体打包为rar文件。

3. U3D

这一部分任务属于U3D。

诚信要求

  • 请按自己的思路进行设计和开发,不可抄袭其他人作品,否则,按作弊处理。

提交清单

  • 设计文档:扩展策划说明、核心功能代码说明
  • 项目目录:执行文件、工程文件及源码
  • 第三方插件:如有第三方插件,请提供第三方插件包
  • 资源文件:如果有使用其它资源文件(音效\模型\图片等),请在项目目录中提供相关资源文件

3.1. Csharp

阶段一任务卡片图

3.1.1. 题目

用C# 实现一个小型连锁超市的库存管理,连锁超市在全国可能有多个仓库,可以查询指定仓库的商品库存情况,实现以下功能:

  • 商品信息管理(增加、删除、修改、查询)
  • 货架信息管理(增加、删除、修改、查询)
  • 仓库信息管理(增加、删除、修改、查询)
  • 商品出库/入库管理
  • 查询库存数量前三名的商品
  • 统计指定仓库所有商品总价值
  • 退出系统

3.1.2. 内容要求

商品基本信息

商品编号+ 名称+类型+单价+计量单位+数量

货架基本信息

货架编号+总层数

仓库基本信息

仓库编号+地址

商品出入库管理

完成商品出入库功能,更新货架商品信息

查询仓库库存数量前三名商品

可以按仓库、类型统计数量最多的前三名商品

数据存储

录入及修改后的数据需保存到本地文件或数据库

以上提供基本的一些内容要求,学员们可以根据自身理解情况进行适当扩展。

3.1.3. 技能要求

  • 平台为VS2013或VS2015 , 控制台或Windows窗体应用程序;
  • 充分使用派生类、基类和接口;
  • 运用文件存储或数据库存储。
  • 清晰的注释和良好的编码习惯;
  • 视系统需要,采用一到两种设计模式。

3.1.4. 设计文档要求

  • 用UML类图画出系统中的类结构。
  • 用UML时序图画出商品入库流程。

3.2. U3D入门

阶段二任务卡片图

3.2.1. 题目

根据教学内容(我录了视频)完成丢泥巴小游戏开发,并进行游戏内容扩展, 游戏需体现以下内容:

  • 修改/更换材质,得到理想效果。
  • 进行操作改进( 取消发射操作控制,增加自动发射泥巴功能等等) 。
  • 修改对象(砖块或泥巴球)的钢体组件及参数,实现不同的物理表现。
  • 制作出更丰富的场景。
  • 增加统计发射的子弹数量并自动清除地上的子弹等功能。

3.2.2. 附加可选项

AI设计:每间隔一段时间,随机选中某个砖块赋于以下AI 行为之一,并且随着游戏进行,间隔的时间越来越短:

  • 变换材质;
  • 砖块跳到地板上跑走;
  • 变换形状消失;
  • 变透明后消失;
  • 砖块变成活动的,并表现其它行为(自由设计);
  • 其它自由设计。

3.3 U3D进阶

阶段三任务卡片图

课题要求:

根据教学内容(我录了视频)完成阶段任务开发(主界面开发),并提交发布的(*.EXE *_data目录) 及工程。

U3D资源包:

百度网盘 提取码:2fz3

3.4 终极任务

阶段四任务卡片图

3.4.1 课题要求

完成3.3中的荒岛游戏开发,并在此基础上进行游戏内容扩展, 游戏需体现以下内容:

  • 增加战斗模块: 战斗的方式不限,可参见视频说明。
  • 增加游戏场景: 为战斗任务或其它任务设计专属的场景等。
  • 增加任务对话: 为任务增加更多的提示,可以通过NPC对话, 界面提示等等方式。

附加可选项(加分项): 为游戏增加网络通讯功能:

1 实现基础的网络通讯模块(代码实现可参考学习资料)

2 实现客户端网络通讯功能及脱机测试。

脱机测试指在SOCKET 联接失败时, 则转到OFFLINE 模式,模拟无服务端情况下的通讯测试。

3 实现简单的服务器,实现客户端与服务器通讯功能:

  • 用户登陆
  • 聊天(功能实现可参考学习案例)
  • 其它任务(自行发挥)

3.4.2 提交要求

  1. 请提交发布的(*.EXE *_data目录) 及 工程代码(工程目录);
  2. 如果有使用其它资源文件(音效\模型\图片等),请在项目目录中提供相关资源文件;
  3. 如有第三方插件,请提供第三方插件包;
  4. 提交游戏说明文档(扩展内容策划说明、核心代码说明);
  5. 附加可选项尽量做,可增加实操评分;如有实现服务端通讯功能,请提交服务端工程及EXE。
  6. 清晰的注释和良好的编码习惯。

About

我参加19年网龙公司线上训练营的项目。我将在一个月的时间内,通过完成一个个阶段性任务,快速入门C++和U3D。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 87.1%
  • C# 10.7%
  • ShaderLab 1.2%
  • Other 1.0%