这是一个有关我参加19年网龙公司线上训练营的项目,将在一个月的时间内,通过完成一个个阶段性任务,快速入门C++和U3D。
这份文档会记录所有的任务(分为C++和Unity3D两部分),目前更新至第一阶段。
记住:在做任务中遇到问题,通常的解决途径是搜索引擎。搜索,并不是为了去copy一个现成的解决方案,而主要是为了去理解方案背后的原理。
另外,本项目每个阶段(week)的文件夹里都有一份README说明文档。
这一部分任务属于C++。
诚信要求:请按自己的思路进行设计和开发,不可抄袭其他人作品(包括网络上的),否则按作弊处理(0分)。
友情链接:
- 菜鸟教程的C++文档,专为初学者打造
- 参加18年C++训练营时我做的笔记整理
- 微软Visual Studio的C++语言reference
编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。(提示:使用递归方法)(15分)
编码实现字符串类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;
}
创建双向链表类,该类有默认构造函数、类的拷贝函数、类的析构函数、实现链表添加数据、升序排序、查找链表中某个节点及删除链表中某个节点的操作(禁用STL及String类))。(25分)
设计并编写代码自动格斗类游戏。(25分)
1) 角色类CRole为基类
构造函数、析构函数;
成员变量:头像、HP(血量)、ATK(攻击力)、DEF(防御力)、Lv(等级),EXP(经验值);
成员函数:武器攻击、跳跃。
2)英雄类CHero继承于CRole类
构造函数、析构函数;
英雄类新增技能踢腿(成员函数)、抱摔(成员函数),给对方造成伤害具体值由学员自己进行设定;
3)敌人类CEnemy继承于CRole类
构造函数、析构函数;
新增技能劈掌(成员函数)、连环腿(成员函数),给对方造成伤害值由学员自己进行设定;
4)战斗类CBattle
构造函数、析构函数及其他成员函数
双方HP(血量)初始值为100,开始战斗以后,英雄和敌人轮流攻击对方,掉血量=攻击方技能伤害值+ATK(攻击方的攻击力)-DEF(防御方的防御力),当一方血量为0时,战斗结束,玩家经验值增加相应点数,当经验等级达一定时候,玩家等级提升。
- 提交以上题目的工程代码(关键地方需注释说明)。
- 平台为VS2013(及以上版本) C++ win32控制台;
实现客户端和服务器之间通过Socket进行双向通信,协议数据采用XML或者Json封装。最终实现一个简单的聊天系统。
- 没有使用XML或者Json封装协议数据,只支持纯文本收发数据;(满分60分)
- 只支持一个客户端和一个服务端,客户端和服务器轮流发送和接收文本消息;(满分70分)
- 支持多个客户端和一个服务端,客户端之间轮流发送和接收文本消息(需要对客户端socket进行管理);(满分80分)
- 支持多个客户端和一个服务端,客户端之间可以任意顺序发送和接收文本消息(需要使用多线程实现);(满分90分)
- 在4的基础上使用了图形客户端(WIN Form、QT、U3D等);(满分100分)
- 额外加分项:使用Protobuf封装协议数据。(酌情加1-10分)
平台为VS2013(及以上版本) C++ win32控制台或图形客户端,提交内容:
- 服务器工程文件及代码(关键地方需注释说明),引用的第三方库;
- 客户端工程文件及代码(关键地方需注释说明),引用的第三方库;
- 不要提交Protobuf源码及编译出来的Protobuf类库文件;
- 除可执行文件外,不要提交debug目录下.db,.sdf文件等编译中间文件,也不要提交.vs文件夹;
- 用WinRar软件将工程整体打包为rar文件。
MySQL数据库设计:
- 搭建MySQL数据库服务器;
- 至少设计以下数据库表:用户表、角色表、聊天消息表;
- 使用MySQL的C或者C++ API调用MySQL对上述数据库表(至少一张表)进行CRUD(增删改查)操作;
- 使用mysql_stmt_prepare或者PreparedStatement;
- 使用事务处理。
额外加分:实现数据库连接池。
- 创建数据库表的SQL语句,包括表初始化SQL脚本;
- C++代码及工程文件(关键地方需注释说明) ,引用的第三方库;
- 不要提交MySQL源码及编译出来的MySQL类库文件;
- 除可执行文件外,不要提交debug目录下 .db,.sdf文件等编译中间文件,也不要提交.vs文件夹;
- 用WinRar软件将工程整体打包为rar文件。
设计并实现游戏业务逻辑,完成一个简单的游戏。如果有WIN Form、QT或者U3D图形编程经验,可以使用自己熟悉的客户端进行呈现(客户端实现语言不限,服务端必须是C++实现);如果没有图形编程经验,可以使用类似MUD游戏的纯文本客户端(DOS),用文字对游戏进行描述。
游戏内容可以从下面列表选择其一,或者自行选题(不用太复杂的游戏)。
单机模式,需要实现的功能(满分60分):
- 生成不同类型方块
- 通过wasd或者方向键控制方块旋转和移动
- 消除一行
- 每升一级,提高方块下落速度
联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):
- 桌子管理
- 玩家准备完毕,自动开始
- 能同时显示2个玩家的游戏画面,并实时更新
- 显示玩家积分排名(荣誉),历史战绩
- 异常处理(如玩家在牌局中断开)
- 聊天功能
规则参考week4C++中的《斗地主规则》。
单机模式,则其他两位玩家由AI控制出牌,需要实现的功能(满分80分):
- 玩家具有初始筹码(不同于积分)
- 玩家准备完毕,自动开始
- 洗牌
- 发牌
- 抢地主
- 出牌
- 比较牌大小
联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):
- 桌子管理(参考qq游戏大厅)
- 显示玩家积分排名(荣誉),历史战绩
- 异常处理(如玩家在牌局中断开)
- 聊天功能
参考DOS游戏界面如下:
单机模式,需要实现的功能(满分60分):
- 生成坦克(己方和敌方)
- 显示简易地图
- 通过wasd或者方向键控制己方坦克移动
- 敌方坦克自主移动
- 发射炮弹
联网模式下,游戏数据通过服务端进行中转,在单机基础上,可以添加以下功能(满分100分):
- 玩家上线自动加入游戏(能支持2个同时游戏即可)
- 能同时显示2个玩家的游戏画面,并实时更新
- 聊天功能
- 显示玩家积分排名(荣誉),历史战绩
该选题必须有UI呈现(,界面参考《绝地求生》)。
需要实现的功能点(满分100分):
- 需要实现加入比赛
- 通过wasd或者方向键控制角色运动,鼠标左键射击
在优先完成上述功能的基础上,可以视需要添加一些其他功能(射击特效等)。
- 游戏中的数据必须使用数据库进行管理。
- 所开发的游戏需注意用户体验,比如界面友好、操作便利。
- vs工程文件及代码(关键地方需注释说明),引用的第三方库
- 所用到的数据库sql脚本
- 游戏设计文档
- 游戏使用说明
- 游戏演示录屏(重要,可以用FSCapture录屏,录屏文件大小最好不要超过100M),文件格式为mp4或者avi
- 除可执行文件外,不要提交debug目录下.db,.sdf文件等编译中间文件,也不要提交.vs文件夹。
- 用WinRar软件将工程整体打包为rar文件。
这一部分任务属于U3D。
诚信要求
- 请按自己的思路进行设计和开发,不可抄袭其他人作品,否则,按作弊处理。
提交清单
- 设计文档:扩展策划说明、核心功能代码说明
- 项目目录:执行文件、工程文件及源码
- 第三方插件:如有第三方插件,请提供第三方插件包
- 资源文件:如果有使用其它资源文件(音效\模型\图片等),请在项目目录中提供相关资源文件
用C# 实现一个小型连锁超市的库存管理,连锁超市在全国可能有多个仓库,可以查询指定仓库的商品库存情况,实现以下功能:
- 商品信息管理(增加、删除、修改、查询)
- 货架信息管理(增加、删除、修改、查询)
- 仓库信息管理(增加、删除、修改、查询)
- 商品出库/入库管理
- 查询库存数量前三名的商品
- 统计指定仓库所有商品总价值
- 退出系统
商品基本信息
商品编号+ 名称+类型+单价+计量单位+数量
货架基本信息
货架编号+总层数
仓库基本信息
仓库编号+地址
商品出入库管理
完成商品出入库功能,更新货架商品信息
查询仓库库存数量前三名商品
可以按仓库、类型统计数量最多的前三名商品
数据存储
录入及修改后的数据需保存到本地文件或数据库
以上提供基本的一些内容要求,学员们可以根据自身理解情况进行适当扩展。
- 平台为VS2013或VS2015 , 控制台或Windows窗体应用程序;
- 充分使用派生类、基类和接口;
- 运用文件存储或数据库存储。
- 清晰的注释和良好的编码习惯;
- 视系统需要,采用一到两种设计模式。
- 用UML类图画出系统中的类结构。
- 用UML时序图画出商品入库流程。
根据教学内容(我录了视频)完成丢泥巴小游戏开发,并进行游戏内容扩展, 游戏需体现以下内容:
- 修改/更换材质,得到理想效果。
- 进行操作改进( 取消发射操作控制,增加自动发射泥巴功能等等) 。
- 修改对象(砖块或泥巴球)的钢体组件及参数,实现不同的物理表现。
- 制作出更丰富的场景。
- 增加统计发射的子弹数量并自动清除地上的子弹等功能。
AI设计:每间隔一段时间,随机选中某个砖块赋于以下AI 行为之一,并且随着游戏进行,间隔的时间越来越短:
- 变换材质;
- 砖块跳到地板上跑走;
- 变换形状消失;
- 变透明后消失;
- 砖块变成活动的,并表现其它行为(自由设计);
- 其它自由设计。
课题要求:
根据教学内容(我录了视频)完成阶段任务开发(主界面开发),并提交发布的(*.EXE *_data目录) 及工程。
U3D资源包:
百度网盘 提取码:2fz3
完成3.3中的荒岛游戏开发,并在此基础上进行游戏内容扩展, 游戏需体现以下内容:
- 增加战斗模块: 战斗的方式不限,可参见视频说明。
- 增加游戏场景: 为战斗任务或其它任务设计专属的场景等。
- 增加任务对话: 为任务增加更多的提示,可以通过NPC对话, 界面提示等等方式。
附加可选项(加分项): 为游戏增加网络通讯功能:
1 实现基础的网络通讯模块(代码实现可参考学习资料)
2 实现客户端网络通讯功能及脱机测试。
脱机测试指在SOCKET 联接失败时, 则转到OFFLINE 模式,模拟无服务端情况下的通讯测试。
3 实现简单的服务器,实现客户端与服务器通讯功能:
- 用户登陆
- 聊天(功能实现可参考学习案例)
- 其它任务(自行发挥)
- 请提交发布的(*.EXE *_data目录) 及 工程代码(工程目录);
- 如果有使用其它资源文件(音效\模型\图片等),请在项目目录中提供相关资源文件;
- 如有第三方插件,请提供第三方插件包;
- 提交游戏说明文档(扩展内容策划说明、核心代码说明);
- 附加可选项尽量做,可增加实操评分;如有实现服务端通讯功能,请提交服务端工程及EXE。
- 清晰的注释和良好的编码习惯。