游戏开发入门

对于程序员而言,游戏开发是一件非常有趣的事情,特别是对大多数的计算机专业相关的学生而言,或多或少都会有一点的游戏情结,所以笔者在后续的文章中将向没有接触过游戏开发的同学讲解一些简单的游戏开发常识。

做游戏开发首先需要了解的一个概念是游戏引擎,详情参见这里,顾名思义,引擎一款游戏的核心,是对游戏中最核心逻辑和功能的抽象和封装,例如对于网游而言,场景和人物的绘制,网络通信等最为基础,计算量庞大且不易改变的功能会放在引擎中来做,引擎一般采用C/C++来进行编写,以此来提高游戏的运行效率。除了场景绘制,网络通信之外,游戏还包括游戏逻辑,比如可以点击一个NPC并与之对话,或者打开物品栏来使用其中的道具,而这种逻辑的实现一般采用脚本语言,如最常见的Python,Lua以及页游中常用的AS等来实现,本人是某西游类题材的端游客户端程序员,其引擎使用C++语言完成,逻辑使用Lua脚本,故而在以后的文章中都会使用这两种语言来进行描述。

首先来认识简单认识一个Lua这个语言,Lua一个非常非常小巧的嵌入式语言,由于非常小巧,所以很多其它脚本语言中提供的功能它都没有,既然这样为什么还要使用Lua呢,其原因还是因为Lua非常简单小巧,与C/C++进行交互非常方便,BTW,大名鼎鼎的魔兽世界的客户端逻辑就是使用Lua的,而Lua也是因WOC而成名的,没接触过Lua的同学可以参考这里

为了更加让读者对C++和Lua的交互有一个直观的了解,下面使用一段代码来进行简单的讲解一下:

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
extern "C"  
{  
    #include <lua.h>  
    #include <lualib.h>  
    #include <lauxlib.h>  
}  

// C++ 调用Lua脚本定义的函数
void cpp_call_lua_api()
{
	lua_State *L = lua_open();;
	
	// 打开Lua中一些常用的库
	luaL_openlibs(L);  

	//加载lua文件
	luaL_dofile(L, "test.lua");
	//脚本:
	//function Add(a, b)
	//	return a + b
	//end
	 
	// 取得定义的Add函数,将其置于栈顶
	lua_getglobal(L,"Add");
	lua_pushinteger(L,6);//函数参数1  
	lua_pushinteger(L,5);//函数参数2  
	lua_pcall(L,2,1,0);//调用lua_add函数,同时会对lua_add及两个参加进行出栈操作,并压入返回值 

	int result = lua_tointeger(L,-1);//从栈中取回返回值  
	printf("result = %d",result);
	lua_pop(L,1);//清栈,由于当前只有一个返回值  

	//关闭lua环境
	lua_close(L);
}

int calc_max_min (lua_State * L)
{
	int a = lua_tointeger(L, 1);//取得函数参数  
	int b = lua_tointeger(L, 2);  

	printf("a:%d, b:%d\n", a, b);
	
	int min = a < b ? a : b;
	int max = a < b ? b : a;
  
	lua_pushinteger(L,max);//入栈返回值  
	lua_pushinteger(L,min);//入栈返回值  

	return 2;//2表示压入栈数据个数 
}
   

// Lua 脚本调用C++定义的函数
void lua_call_cpp_api()
{
	lua_State *L = lua_open();;
	
	// 打开Lua中一些常用的库
	luaL_openlibs(L);  

	// 注册MaxMin函数,供脚本来进行调用,MaxMin指向C++定义的calc_max_min函数
	lua_register(L, "MaxMin", calc_max_min);

	//加载lua文件
	luaL_dofile(L, "max_min.lua");
	//脚本:
	//local max, min = MaxMin(133, 50)
	//print("max =", max)
	//print("min =", min) 

	//关闭lua环境
	lua_close(L);
}

int _tmain(int argc, _TCHAR* argv[])
{
	lua_call_cpp_api();
	return 0;
}

当然如果没有接触过Lua,可能会对上面的内容有一点不理解,Lua与C++的交互其实都是基于栈的交互,lua_State *L = lua_open();这句话的语义是创建一个Lua和C++交互的栈,所有的交互都要通过L来执行。

最后我要说的是最好的老师是实践,希望本文能起到抛砖引玉的效果,让大家了解C++和Lua交互是非常简单的事情。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值