代碼有點多, 實現(xiàn)思路, 實現(xiàn)鍵盤事件監(jiān)聽機制, 在監(jiān)聽函數(shù)中判斷 按了什么鍵,比如按J就發(fā)送子彈. 然后啟動子彈線程. 定義一個子彈類線程, 定義出子彈的所在屬性和方法.
創(chuàng)新互聯(lián)服務(wù)項目包括五臺網(wǎng)站建設(shè)、五臺網(wǎng)站制作、五臺網(wǎng)頁制作以及五臺網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,五臺網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到五臺省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
寫個方法,判斷子彈是否擊中目標(biāo),以XY坐標(biāo)相交來判斷
下面是我寫的代碼,如果有用,請采納吧,最近正好在看進(jìn)程通信的東西,正好拿你這個題練練手。
package test;
import java.util.ArrayList;
import java.util.LinkedList;
public class ProducerConsumer {
/*
* 生產(chǎn)者類:屬性:子彈夾(生產(chǎn)者可以使用子彈夾)設(shè)計為線程,調(diào)用子彈夾類的push方法,向子彈夾里放入子彈
* 消費者類:屬性:子彈夾(消費者可以使用子彈夾)設(shè)計為線程,調(diào)用子彈夾類的pop方法,從子彈夾里取出子彈
* 子彈類:屬性:子彈編號(第幾顆子彈)
* 子彈夾類:屬性:存放子彈(數(shù)組),索引index(下一個要放子彈的位置)方法:push方法:向子彈夾里放入子 pop方法:從子彈夾中取出子彈
*/
private Clip clip = new Clip();
public ProducerConsumer() {
}
public void start() {
new Producer().start();
new Comsumer().start();
}
class Producer extends Thread {
public void run() {
while (true) {
synchronized (clip.bullets) {
try {
Bullet bullet = new Bullet();
int i = clip.push(bullet);
System.out.println("Producer put a bullet to clip");
Thread.sleep((long) (Math.random() * 3000));
clip.notify();
} catch (InterruptedException ie) {
System.out.println("producer is interrupted!");
}
}
}
}
}
class Comsumer extends Thread {
public void run() {
while (true) {
synchronized (clip.bullets) {
try {
while (clip.bullets.size() == 0) {
System.out.println("clip is empty , please wait");
clip.wait();
}
clip.pop();
System.out.println("Comsumer get a bullet from clip");
Thread.sleep((long) (Math.random() * 3000));
clip.notify();
} catch (InterruptedException ie) {
System.out.println("Consumer is interrupted");
}
}
}
}
}
class Bullet{
int number;
}
class Clip{
public ArrayListBullet bullets = new ArrayListBullet();//set the size is 10
int index = 0;//the next location to put the bullet
/*put a bullet into the clip*/
int push(Bullet bullet){
bullets.add(bullet);
index = bullets.size();
return index;
}
/*get a bullet from the clip*/
void pop(){
//自己寫吧
}
}
public static void main(String[] args) throws Exception {
ProducerConsumer pc = new ProducerConsumer();
pc.start();
}
}
監(jiān)聽鼠標(biāo)動作,
然后控制子彈圖片移動。
然后跟目標(biāo)做碰撞檢測。
java 事件 消息傳遞機制 實際上是
1、用戶點擊鼠標(biāo)左鍵。
2、操作系統(tǒng)觸發(fā)一個事件傳遞個java程序。
3、java程序再去觸發(fā)你代碼里相關(guān)控件的ui響應(yīng)或者你自己定義的Listener。
我認(rèn)為想要實現(xiàn)你的需求的話,忽略1,在2處模擬操作系統(tǒng)同,傳遞一個事件給java程序了,這只是我的一個想法。
這個是碰撞檢測算法。
簡單說,你繪制的對象,比如飛機A,子彈B,都是圖形,有大小、有形狀的,這個形狀的邊角都有坐標(biāo)點。
//B的矩形右側(cè)坐標(biāo)
B.RightX;
//A的矩形左側(cè)坐標(biāo)
A.LeftX;
假定它們圖形都是矩形,子彈B從左側(cè)向右側(cè)平移,與飛機A“碰撞”,碰撞的條件,可以認(rèn)為是子彈B的最右側(cè)坐標(biāo)大于等于飛機A的所在的左側(cè)坐標(biāo)。
if(B.RightX?=?A.LeftX)
游戲循環(huán)中不斷進(jìn)行這樣的檢測,一旦檢測到碰撞成立時就認(rèn)為是擊中了。
進(jìn)一步,并不是每個圖形都是規(guī)則的矩形或者圓形,這個時候,你就要為圖形自己定義一個碰撞檢測圖形(比如一個合適大小的圓形,大小剛好可以包裹你的對象)這個形狀的坐標(biāo)與對象運動關(guān)聯(lián),同步改變。通過這個碰撞檢測的圖形的坐標(biāo)是否重合來判斷是否碰撞。
分享名稱:java子彈代碼 子彈的編程程序
分享地址:http://vcdvsql.cn/article10/hepido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App設(shè)計、品牌網(wǎng)站設(shè)計、微信小程序、定制網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)