一般游戏引擎都是用C或者C++开发的,3D游戏很少有java或者C#的,尤其是大型游戏,基本都是C/C++与一些HLSL作为基础的。大部分都是使用商业游戏引擎。
对于RPG等情节性很重要的游戏,script会被用来写剧情以及事件关联等,使用的script语言可以是目前有的商业语言,也有的引擎实现了自己的script。
当然,也有很多游戏是自己开发的游戏引擎,一般来讲C/C++用的多。开发工具一般来说不是很重要,因为一般的游戏引擎都会对若干平台若干编译器进行支持的。
一般来说VC肯定有了,而且还是分2001,2003,2005版的,有的还有g++和Dev-C++的支持。
讲得很专业,不知道楼主能否看懂,呵呵!
下面是通俗点的,重点在上面~~~
引擎一般都是c,c++
以仙剑为例:
DOS版的仙剑是用Borland C++ for DOS写的
仙剑98柔情版是用的是VB
剑侠情缘II是用C++ Builfer写的。
其他RPG大多是用VC,
开发游戏(专业级的游戏)需要精通C++
熟练Win32 SDK
掌握DirectX技术
会用一种32位的C++编译器(VC,C++Builder,DevC++,Borland C++)
还要有灵感,创意,等等。。。
写的很乱,勉强能看懂.用二叉树就能实现.
public class SkillTree {
private class Node{
static final int UNDEF=0
int key
int value
String name
Node left
Node right
Node(int key,int value,String name){
this.key = key
this.value = value
this.name = name
left = null
right = null
}
public String toString(){
return "("+name+","+value+")"
}
}
private Node root
public SkillTree(){
root = null
}
public void insert(int key,int value,String name){
Node newNode = new Node(key,value,name)
if(root == null){
root = newNode
}else{
insertNode(root,newNode)
}
}
private Node getNode(int key) throws Exception{
Node result = root
while(result.key != key){
if(result.value == 0){
return null
}
if(key <result.key){
result = result.left
}else{
result = result.right
}
if(result == null){
throw new Exception("Can't find value by "+key)
}
}
return result
}
public int getValue(int key) throws Exception{
return getNode(key).value
}
private void insertNode(Node subtreeRoot,Node newNode){
Node current = subtreeRoot
while(true){
if(newNode.key<current.key){ //go left
if(current.left == null){
current.left = newNode
return
}else{
current = current.left
}
}else{ //go right
if(current.right == null){
current.right = newNode
return
}else{
current = current.right
}
}
}
}
public void setPoint(String name,int point){
int key = getKey(name)
if(key == -1){
System.out.println("没有这个技能名称:"+name)
return
}else{
try {
Node current = getNode(key)
if(current == null){
System.out.println("你还没有拥有这项技能."+name)
return
}
if(point >=0){
current.value = point
}else{
System.out.println("技能点不能为负.")
return
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace()
}
}
}
public int getKey(String name){
if(name.equals("冰弹")){
return 50
}else if(name.equals("冰风暴")){
return 20
}else if(name.equals("冰封装甲")){
return 60
}else if(name.equals("冰尖柱")){
return 10
}else if(name.equals("暴风雪")){
return 40
}else if(name.equals("碎冰甲")){
return 70
}else if(name.equals("冰封球")){
return 30
}else if(name.equals("寒冰装甲")){
return 80
}else{
return -1
}
}
public void view(Node subtreeRoot){
if(subtreeRoot !=null){
System.out.print(subtreeRoot+"[")
view(subtreeRoot.left)
System.out.print(",")
view(subtreeRoot.right)
System.out.print("]")
}else{
System.out.print("N")
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SkillTree st = new SkillTree()
st.insert(st.getKey("冰弹"),0,"冰弹")
st.insert(st.getKey("冰风暴"),0,"冰风暴")
st.insert(st.getKey("冰封装甲"),0,"冰封装甲")
st.insert(st.getKey("冰尖柱"),0,"冰尖柱")
st.insert(st.getKey("暴风雪"),0,"暴风雪")
st.insert(st.getKey("碎冰甲"),0,"碎冰甲")
st.insert(st.getKey("冰封球"),0,"冰封球")
st.insert(st.getKey("寒冰装甲"),0,"寒冰装甲")
st.view(st.root)
System.out.println()
st.setPoint("冰风暴",5)
st.view(st.root)
}
}