- 相关推荐
4399游戏策划面试问题
1 我玩过WOW,街球等若干款网游,如果找吸引我的地方的话,用《街头篮球》举例:
①街头嘻哈风格——该游戏是由韩国公司研发,所以吸收了韩国一贯酷炫的风格,加上街头的标识元素,配合篮球的主题,很吸引年轻人,我认为主题风格非常好,也贴合用户群体
②角色行为+技能搭配——游戏中的角色根据职业不同会有不同的行为动作,种类多样且实用好看,所以个人认为这部分设计的比较到位,也是游戏最核心的部分
③换装系统——游戏中会有大量的衣服装饰等道具,可以丰富游戏,也能增加角色的属性值,有些较低级的需要游戏币购买,增加了游戏粘性和游戏时间,相对较高级需要RMB购买,增加了游戏的直接受益。其中服饰道具的大量数目+风格搞怪嘻哈则是两大亮点,也是吸引玩家购买的动力。
等等……该游戏在国内代理已超过5年,也是休闲体育类网游中的佼佼者,其中很多合理且充满乐趣的设定都值得手游去借鉴,因为两者对与休闲趣味、短小精悍、付费粘性等都是相通的。
2 最近网上出现了一款叫《钉子户大战拆迁队》的塔防游戏,引起的反响不小,碰巧我也玩过,下面尝试简单分析一下该游戏
【优点】
①流行题材——塔防游戏很常见,其中POPCUP制作的《植物大战僵尸》系列更掀起了塔防游戏的狂潮,《钉子户》借鉴了《植物》的风格,并且配上当下流行的话题元素,可谓站在巨人的肩膀上,不难理解其现在为什么这么风靡了。所以,流行的题材很重要,对与手游而言,好的主题是一半的胜利。
②风趣幽默的风格——从主角的名字到各个角色的形象,都包含幽默卡-通的味道,贴合用户感受。
③攻击方式的多样——游戏中有6个角色,每个角色的攻击方式及数值各有不同,并且可以升级,相互搭配起来即能丰富游戏。
【缺点】
①话题过于敏感——谈论政治社会的游戏题材一向很敏感,该游戏如果移植到手游上估计在移动评审时会比较困难。其实《钉子户》已经被移植到了android游戏上,可是走的是freewap渠道,所以躲过了话题敏感的审查。
②数值的过于僵硬——游戏的数值很简单,也很僵硬,导致玩家对于游戏的可操控度下降,借鉴导致游戏性受到影响。
等等……这里是对《钉子户大战拆迁队》的一个简单的评述
4399网页游戏面试C++测试题
一.选择题:
1.以下代码执行的结果是什么? a
void main()
{
}
a) 交换p 和& a的内容,同时打印出 New string, string b) 在第8行生成编译期错误
c) 在第5行生成编译期错误
d) 在第7行生成编译期错误 e) 在第1行生成编译期错误
2. 下面程序的执行结果是? b
char *gxx-x()
{
}
void main()
{
}
a) The string is : string
b) The string is :Oldstring
c) 产生执行期错误
d) 产生编译期语法错误
e) 以上都不对 char *g="string"; strcpy(gxx-x(),g); g = gxx-x(); strcpy(g,"oldstring"); printf("The string is : %s",gxx-x()); static char xx-x[1024]; return xx-x; int i; char a[]="String"; char *p="New Sring"; char *Temp; Temp=a; a=malloc(strlen(p) + 1); strcpy(a,p); p = malloc(strlen(Temp) + 1); strcpy(p,Temp); printf("(%s, %s)",a,p); free(p); free(a);
3. 以下程序的执行结果是? c void myalloc(char *x, int n) {
}
main()
{
}
a) The string is : String b) 执行期错误
c) The string is : Oldstring d) 编译期语法错误 e) 以上都不对
4.以下代码的执行结果是? c void main()
{
}
a) Pass 1, Pass 2
b) Fail 1, Fail 2 char p[]="String"; int x=0; if(p=="String") { } else { } printf("Fail 1"); if(p[sizeof(p)-2]=='g') printf("Pass 2"); printf("Fail 2"); else printf("Pass 1"); if(p[sizeof(p)-2]=='g') printf("Pass 2"); printf("Fail 2"); else char *g="String"; myalloc(g,20); strcpy(g,"Oldstring"); printf("The string is %s",g); x= (char *)malloc(n*sizeof(char)); memset(x,\0,n*sizeof(char));
c) Pass 1, Fail 2
d) Fail 1, Pass 2
e) 编译器语法错
5. 对于下面的代码,哪个说法是对的? b
const char *p; 以及 char * const p;
a) 两个字符串内容都不可修改
b) 第一个: 不可修改字符串内容,第二个,不可假改指针内容 c) 两个指针都不可修改
d) 第一个: 不可修改指针,第二个,不可修改字符串内容 e) 以上说法都不对
6. 以下代码的输出是? c
void main()
{
}
a) Pass1,Pass2
b) Pass1,Fail2
c) Fail1,Pass2
d) Fail1,Fail2
e) 以上都不对
7. 以下代码的输出是 e
void main() char c=-64; int i=-32; unsigned int u =-16; if(c>i) { } else { } printf("Fail1); if(i<u) printf("pass2"); printf("Fail2") else printf("pass1,"); if(c<u) printf("pass2"); printf("Fail2"); else
{
}
a) 0,5,9,13,17
b) 5,9,13,17
c) 12,17,22
d) 16,21
e) 语法错误
8. 下面哪个说法是对的? d class A
{
}
Class B: public class A {
}
a) A中的func1和B中的func2都是虚函数. void func1() { } virtual void func2() { } cout << "fun2 in class B" << endl; cout << "fun1 in class B" << endl; virtual void func1(); void func2(); int i=0; for(i=0;i<20;i++) { } switch(i) { case 0: } printf("%d,",i); i+=5; i+=2; i+=5; i+=4; case 1: case 5: default: break;
b) A中的func1和B中的func2都不是虚函数.
c) A中的func2是虚函数.,B中的func1不是虚函数.
d) A中的func2不是虚函数,B中的func1是虚函数.
9. cout是I/O流库预定义的什么?. b
a)类
b)对象
c)包含文件
d)常量
10. 在32位系统下,已知int a,*pa=&a;,输出指针pa十进制的地址值的方法是? d a)cout<<pa;
b)cout<<*pa;
c)cout<<&pa;
d)cout<<unsigned long(&pa);
11. 32位系统下,有一个类A定义如下:
Class A
{
};
定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大b a)8
b)12
c)16
d)20
e)24
f) 以上答案都不对
12. 32位系统下,有一个类A定义如下:
定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大 Class A
{
Int M1; Float M2; Static Float M3; Static const Int M4; Enum M5 { Int M1; Float M2; Virtual void F1( void ); Void F2( void ); Static void F3( void );
}; } E1 = 1; E2 = 2;
定义一个A的实例a,请问a在常规的编译实现下,所占的内存空间有多大 d a)8
b) 12
c)16
d)20
e)24
f) 以上答案都不对
13. 已知类型定义如下:
class A
{
};
class B: public A
{
}
以下表达式的输出为: c
A* pa = New A; //假定pa赋值后的地址为0x111111;
B* pb = dynamic_cast< B*>( pa );
请问以上代码执行后,pb的值是:
a)0
b)与pa相同,即为0x111111
c)抛出异常
d)在pa地址上,进行类型换算偏移后的地址
e)以上结果都不对
14. 已知类型定义如下:
class A
{
};
class B: public A
{
}
以下表达式的输出为: int y; int x; virtual ~A(){} int y; int x; virtual ~A(){}
A* pa = New A; //假定pa赋值后的地址为0x111111;
B& b = dynamic_cast< B&>(* pa );
请问以上代码执行后, b的地址是: c
a)0
b)与pa相同,即为0x111111
c)抛出异常
d)在pa地址上,进行类型换算偏移后的地址
e)以上结果都不对
15. 关于this指针的说法错误的是 d
a) this指针不需要显示说明
b) 虚函数拥有this指针
c) 成员函数拥有this指针
d) 静态成员函数拥有this指针
16. 下面对构造函数的不正确描述是 a
a) 系统可以提供默认的构造函数
b) 构造函数可以有参数,所以可以有返回值
c) 构造函数可以重载
d) 构造函数可以设置默认参数
17.下列对模板的声明,正确的是 c
a) template <T>
b) template <class T1,T2>
c) template <class T1,class T2>
d) template <class T1;class T2>
18. 什么函数只能访问静态成员变量。 b
a) 静态函数
b) 虚函数
c) 构造函数
d) 析构函数
19 假定类定义如下:
Class A
{
}
Class B
{
}
Class C :public B ~B( void){} ~A(void){}
}
现有C的实例c,则当C被销毁时,调用的析构函数的顺序为 e ~C( void ){} A a;
a) ~C(), ~A(), ~B();
b) ~A(),~C(),~B()
c) ~B(),~A(),~C()
d) ~C(),~B(),~A()
e) ~A,~B(),~C()
f) ~B(),~C(),~A()
20假定类定义如下:
Class A
{
A(void){}
}
Class B
{
B( void){}
}
Class C :public B
{
C( void ){}
A a;
}
现有C的实例c,则当C被创建时,调用的建构函数的顺序为
a) C(),A(),B();
b) A(),C(),B()
c) B(),A(),C()
d) C(),B(),A()
e) A, B(),C()
f) B(),C(),A()
二.问答题
1.以下程序的输出是
#include<http://www.oh100.com
#define MAX(a,b) a > b ? a : b
void main ()
{
int m = 10, n = 3, k = 1;
k = MAX(m, n + k) * 10;
cout << "k = "<< k <<endl; a
100
2.以下程序的输出是:
#include<iostream>
using namespace std;
class a{ };
class b
{
public:
};
void main(void)
{
}
1 4
3. 什么函数不能声明为虚函数?
静态成员函数不能是虚函数 构造函数不能是虚函数
4. 简述c++0x标准比较重要的新特性有哪些
新特性之一:Lambda表达式.
很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了简明的函数式的句法。同样是Visual Studio中的开发语言,Visual Basic和Visual C#早就实现了对Lambda表达式的支持,终于Visual C++这次也不甘落后,在Visual Studio 2015中添加了对Lambda表达式的支持。
新特性之二:静态断言static_assert
在新的C++标准C++0x中,加入了对静态断言的支持,引入了新的关键字static_assert来表示静态断言。使用静态断言,我们可以在程序的编译时期检测一些条件是否成立,这个特性在调试模板函数的模板参数时特别有用。在编译的时候,模板函数实例化,这时我们就可以使用静态断言去测试模板函数的参数是否按照我们的设计拥有合适的值。
此外,静态断言还带来很多其他的优势。例如静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重要的一个特性是如果断言失败,它会产生有意义且充分的诊断信息,帮助程序员快速解决问题。 新特性之三:auto关键字
在C++0x中,auto关键字的意义发生了改变。从Visual C++ 2015开始,auto关键字将用于指引编译器根据变量的初始值来决定变量的数据类型。换句话说,我们可以把auto当成一种新的数据类型,它可以“从初始化器(initialize)中推导出所代表的变量的真正类型”。这种对auto关键字的使用方式可以大大消除当前替代方式所导致的冗长和易出错的代码。 新特性之四:右值引用 cout << sizeof(a); cout << sizeof(b); virtual void test(){ }
作为最重要的一项语言特性,右值引用(rvalue references)被引入到 C++0x中。我们可以通过操作符“&&”来声明一个右值引用,原先在C++中使用“&”操作符声明的引用现在被称为左值引用。 左值引用和右值引用的表现行为基本一致,它们唯一的差别就是右值引用可以绑定到一个临时对象(右值)上,而左值引用不可以。
5. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
Bool a;
if( a==false )
Int a;
if( a==0 )
Float a;
if( a==0 )
6. 简述单件,对象工厂,观察者模式的常见用途。
客户端--------------服务器
7. 一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,是否能实现多态? 能
只要基类在定义成员函数时已经声明了virtue关键字,在派生类实现的时候覆盖该函数时,virtue关键字可加可不加,不影响多态的实现。
8. const 符号常量; (1)const char *p (2)char const *p (3)char * const p 说明上面三种描述的区别
1 p指针指向的值必须是字符型
2 p指针指向的值不能变
3 p指针地址不能变
9. 写出运行结果:
{// test2
union V
{
}v;
http://www.oh100.com
}
3 printf("%d", http://www.oh100.com); struct X { }x; unsigned char c; unsigned char s1:2; unsigned char s2:3; unsigned char s3:3;
10. 简述Critical Section和Mutex的不同点 Mutex 是内核对象
Critical Section本身不是内核对象