游戏开发面试知识点汇总

情景设计

排行榜设计

游戏中排行榜的设计

  1. 利用MySQL来实现,存放一张用户积分表user_score
  2. 积分排名数组实现
  3. 自己实现排序树

玩家实力匹配

Elo评分算法原理与实现

碰撞检测算法

点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞


算法

Top K

在数据中找到前K大
经典的 Top K 问题

692. Top K Frequent Words

堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。

函 数描 述
heappush(heap, x)将x压入堆中
heappop(heap)从堆中弹出最小的元素
heapify(heap)让列表具备堆特征
heapreplace(heap, x)弹出最小的元素,并将x压入堆中
nlargest(n, iter)返回iter中n个最大的元素
nsmallest(n, iter)返回iter中n个最小的元素

Python

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        count = collections.Counter(words)
        # -freq: 出现freq最高的word变成了最小,方便堆弹出最下元素
        heap = [ (-freq, word) for word, freq in count.items()]
        heapq.heapify(heap)		# 将列表变成heap, 按照-freq的大小排序放入heap中
        return [heapq.heappop(heap)[1] for _ in range(k)]	# 弹出最小的k个值

Counter

import collections
obj = collections.Counter('aabbccc')
print(obj)

#输出:Counter({'c': 3, 'a': 2, 'b': 2})

C++

typedef pair<string, int> PAIR;

class Solution {
public:
    vector<string> topKFrequent(vector<string>& words, int k) {
        unordered_map<string, int> dict;
        for (string s: words)
        {
            dict[s]++;
        }
        
        struct cmp
        {
            bool operator()(const PAIR &a,const PAIR &b)
            {
                return (a.second == b.second)?
                    (a.first > b.first):
                    (a.second < b.second);
            };
        };
        
        priority_queue<PAIR, vector<PAIR>, cmp> pq(dict.begin(), dict.end());
        vector<string> res;
        while (!pq.empty() && res.size() < k) {
            PAIR top = pq.top();
            res.push_back(top.first);
            pq.pop();
        }
        return res;
    }
};

24点算法

24点算法讲解与实现

从n个村庄选m个点建邮局,使得每个村庄到邮局的距离和最小

POJ 1160 Post Office
在v个村庄中建立p个邮局,求所有村庄到它最近的邮局的距离和,村庄在一条直线上,邮局建在村庄上。

首先求出在连续的几个村庄上建立一个邮局的最短距离(邮局的位置应该在中位数上,如果村庄个数为偶数,则处于最中间的两个村庄都可以),用数组dis[i][j]表示在第i个村庄和第j个村庄之间建一个邮局的最短距。

dis[i][j]=dis[i][j-1]+x[j]-x[(i+j)/2]; (村庄位置为x[i])

用数组dp[i][j]表示在前i个村庄中建立j个邮局的最小距离。即在前k(k<i)个村庄建立j-1个邮局,在k+1到j个村庄建立一个邮局。

dp[i][j]=min(dp[i][j],dp[k][j-1]+dis[k+1][i])

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 305
const int inf=0x3fffffff;
int dp[N][35]; //在前i个村庄中建立j个邮局的最小耗费
int dis[N][N];//dis[i][j]:第i个村庄到第j个村庄建一个邮局的最短距离
int x[N]; //村庄位置
int main()
{
	int v,p,i,j,k;
	while(~scanf("%d%d",&v,&p))
	{
		for(i=1;i<=v;i++)
			scanf("%d",&x[i]);
		sort(x, x + i);//如果是乱序输入的话需要按照非降序排一下
		//memset(dis,0,sizeof(dis));
		for(i=1;i<=v;i++)
		{
			for(j=i+1;j<=v;j++)
			{
				dis[i][j]=dis[i][j-1]+abs(x[j]-x[(i+j)/2]);
			}
		}
		for(i=1;i<=v;i++)
		{
			dp[i][i]=0; //一个村庄一个邮局距离为零
			dp[i][1]=dis[1][i]; //前i个村庄建立一个邮局
		}
		for(j=2;j<=p;j++)
		{
			for(i=j+1;i<=v;i++)
			{
				dp[i][j]=inf;
				for(k=j-1;k<i;k++)
				{
					dp[i][j]=min(dp[i][j],dp[k][j-1]+dis[k+1][i]);
				}
			}
		}
		printf("%d\n",dp[v][p]);
	}
	return 0;
}

游戏常识

游戏类型

游戏基础知识:游戏类型介绍

  • RPG= Role-playing Game∶角色扮演游戏
  • ACT= Action Game∶动作游戏
  • AVG= Adventure Game ∶冒险游戏
  • SLG= Strategy Game∶策略游戏
  • RTS=Real-Time Strategy Game:即时战略游戏
  • FGT= Fighting Game∶格斗游戏
  • STG= SHOTING GAME∶射击类游戏
  • FPS=First Personal Shooting Game:第一人称视角射击游戏
  • PZL= Puzzle Game∶益智类游戏
  • RCG= Racing Game∶竞速游戏 [也有称作为RAC的]

游戏引擎

  • Frostbite:主要玩过寒霜的极品飞车系列,支持大规模全方位的渲染,地图细节也优良,尤其大型地图的内容十分丰富,场景整体展示十分好看。但是细节表现不足(寒霜的极品飞车经不起停车细看),同时优化不是很好,在显卡够用的情况下很吃内存。
  • Infinity Ward:使命召唤全系列。环境渲染优秀,光影效果在全局光照系统的加持下十分优秀,室内战斗效果和战火效果在同期很优秀,使用最新的DirectX来弥补自身的贴图粗糙。远景渲染及大地图较为粗糙。
  • Rage:神作GTA5 200小时玩家。高强度开放大地图缓冲无敌,逼真的大规模动态天气系统,大批量的AI管控,贴图逼真,优化很好。但是穿模经常出现,渲染效果欠佳。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值