java 自己搭建簡單遊戲框架(適合有想法卻無法入手的新手。)

liqfree發表於2013-11-17

我想做一個遊戲,但是不知從何下手?

網上可以看到很多遊戲開發的例子,不過這個是我自己研究的,一個簡單卻實在的遊戲框架。

首先,我甚至不知道遊戲到底要什麼效果,但是遊戲肯定要有自動能動的東西。一個可以顯示在螢幕上的單位。

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,又或者其它七七八八

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

從下到上,一步步來。從簡單到複雜一步步實現。只要懂得這個,一個想法或者專案至少就能入手了。

相關文章