java 自己搭建简单游戏框架(适合有想法却无法入手的新手。)

我想做一个游戏,但是不知从何下手?

网上可以看到很多游戏开发的例子,不过这个是我自己研究的,一个简单却实在的游戏框架。

首先,我甚至不知道游戏到底要什么效果,但是游戏肯定要有自动能动的东西。一个可以显示在屏幕上的单位。

Class Unit{

int x;

int y;

……//一堆属性,当然现在我不知道自己要多少属性,但是位置属性要有,其它属性呢?比如我要用一张图片显示?那就Image img;这不就好了?如果遇到问题或者有什么新想法我们再来改。

//方法:

public void show(Graphics g){

……//这里面是显示单位的代码块。以后我们要显示这个单位后,就调用这个方法。

}

public  method(){//这些都是能够想到的可以作为基础的方法,比如你觉得要有生命值获取。那就添加health属性,添加gethealth()方法。

}

}

Ok!这样我们就获得了一个单位类,它能表示位置,也能显示,但是它可能会动,可能不会动,可能可以攻击,可能不可以攻击。

我们想到一个英雄。英雄也是一个单位,有坐标系,也要显示。但是可以控制,可以攻击,甚至还有一些自动动作。

extends!yes!我们将英雄继承它!

Class Hero extends Unit implements MouseLisetener,Runnable{

//位置不用写了。Unit里面有。其它要添加属性,比如魔法,比如其它什么技能,或者奇怪属性,就加上。

//show()重写。英雄显示和单位显示毕竟不同。怎么也要特殊一点。最简单的,一个圆表示敌人的话,一个方形表示英雄啊!

public method()// 这一部分,一系列方法都是英雄独有,当然如果Unit里面也有的方法,也可以用啊。

run(){

用run方法将一部分自动动作写入进去。比如英雄每五分钟就要大喊:“我是英雄!”你可以在构造器Hero(){(Thread)this.start();//如果不可以,就换个可以的方法。不断尝试总能找到一个方法。如果只抄代码,那么自己独立设计的时候就会出大问题。这也是我没添方法的原因,想到什么写什么,不会的就先写一个简单的,比如用一个圆来显示英雄。mousepressed方法要实现。比如点击一下放个技能什么的?}
}

}

Ok 英雄已经弄好了。没什么代码?自己丰富,最简单的就是点击一下英雄就动一下了咯。其它的慢慢添。

英雄有了,就要有敌人。

敌人也是单位。ok 继续extends

Enemy extends Unit  implement  Runnable{//添加线程的接口,主要是因为敌人也要动啊,它们也要躲,要攻击,要干这干那。然后就可以想到,如果敌人的技能是一颗子弹?子弹是单位啊。也有x,y坐标,但它会自动飞行。这些单位都是独立的。为什么我不给每一样东西都做个线程?一个敌人一个线程,一个子弹一个线程然后敌人死了,子弹消失了,我们就将它们销毁。java会自动销毁线程,怎么销毁?记得吗?没人引用线程实例,而线程也不是一个死循环。线程就消失了。while(islive()){}run方法里面这样写,如果单位还活着就继续运行线程,如果死了,线程就退出循环。然后在将所有引用该线程的地方去掉它。子弹到射程自动死,活着到时间死。单位血没了也死。


}

好了我们有了敌人,有了英雄,有了技能(子弹射击)

然后要把他们显示在一个窗口中。

java swing  这个不是专业处理窗口的吗?

赶紧弄一个。然后又想,我显示在窗口中的东西都要动啊,动就是过一段时间显示一次吗。继续线程!

MyPanel extends JPanel implement Runnable{

public void paint(Graphics g){

//这里面不可以放所有实例过的英雄,敌人乱七八糟的东西吗?怎么找到它们?yes !为什么我们不弄个DataBank类将所有要显示的元素存储了,然后迭代显示?

//一个游戏演示可以自己用new方法,但是更高科技一点,用个工厂类,其实就是在一个方法里面建一堆对象,然后返回它们,自动生成一个英雄,和一堆敌人。反正他们都

//是Unit单位。Unit都有显示的方法show()!

迭代  Unit实例 表,然后调用show(g)!


}

run(){

…… 

repaint()//每过一段时间重绘一次,一秒钟重绘20次。用Thread.sleep(50)然后再repaint();这个都是基础。
}

}

然后frame。add(new MyPanel);


DataBank里的表最好是静态的或者单例模式。

然后任何单位一旦死亡,就删除它们。 List  allunit=new arraylist(); 然后在所有UnIt类的run()方法里面添加一个语句,一旦死亡,就从表里删除自己。

ok 这样我们就得到一个简单的,可以显示一堆单位,可以控制英雄,还可以攻击的一个简单游戏。这个游戏的扩展?继承Unit吧。又或者添加Map,又或者其它七七八八

这些一旦掌握了思想就可以自己慢慢丰富了。

从下到上,一步步来。从简单到复杂一步步实现。只要懂得这个,一个想法或者项目至少就能入手了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值