Upload
asutaka-nguyen
View
243
Download
7
Embed Size (px)
Citation preview
7/22/2019 [html] Vit game bn tu ngm
1/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam .html
HomeWelcome to
Gia Phi's Blog
[Java] Vit game bn tu ngm
Tc gi: Phm Gia Nguyn Phi
Sinh vin lp: D07THA3
Thi gian hon tt: 11.11.2010
Th loi: Platform Game
Ngn ng: Java
IDE: Netbeans 6.9.1
Cng ngh: Applet
>> Download Source Code > http://www.javacooperation.gmxhome.de/TutorialStartEng.html
i vi mt game platform, bn c th hiu tr chi bn ang chi nh mt b phim hot hnh c tnh
tng tc cao, mi hnh ng do bn a ra s thay i kt cc v cch thc ca tr chi. Mi nhn vt
trong game c coi l mt i tng. V khi bn bt u tr chi, my tnh s xa i v li nhiu ln
bc tranh , thay i v cp nht ta , thuc tnh ca cc nhn vt v c nh th cho n khi ngi
Gia Phi
Danh sch bi vit
Search
Follow by Email
What is my name?Gia PhiSex:Male, not GayWhere am I from?Nha Trang cityWhere do I live? "u xanh rau mSi Gn :))"What do I do?"Ch c ch mi hiuc kh ca vic gm xng, chc coder mi hiu c vl ca vitcode"What do I say?"Cuc sng nh lolznhng chng ta vn phi n tn v ttn"www.facebook.com/giaphi
Mun...Lm nhm sng th 2[OST] A Monster In Paris (2011)Tnh yu v s phn bi[HelloChao] Cp cu thng dng[Java] Vit game bn tu ngm
Search
Email address... Submit
http://giaphi.blogspot.com/http://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://giaphi.blogspot.com/2012/06/lam-nham-va-xao-lolz-sang-thu-2-nao-x.htmlhttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.htmlhttp://giaphi.blogspot.com/2012/04/hellochao-cap-cau.htmlhttp://giaphi.blogspot.com/2012/05/tinh-yeu-va-su-phan-boi.htmlhttp://giaphi.blogspot.com/2012/05/ost-monster-in-paris-2011.htmlhttp://giaphi.blogspot.com/2012/06/lam-nham-va-xao-lolz-sang-thu-2-nao-x.htmlhttp://giaphi.blogspot.com/2012/06/muon.htmlhttp://www.facebook.com/giaphihttp://www.javacooperation.gmxhome.de/TutorialStartEng.html%C2%A0http://adf.ly/7TZRGhttp://4.bp.blogspot.com/-tUQG90KNfLw/T5Ea0qhz8uI/AAAAAAAAB7s/nTrTMas1FsA/s1600/2010-11-10+13-35-11.pnghttp://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.htmlhttp://giaphi.blogspot.com/http://giaphi.blogspot.com/7/22/2019 [html] Vit game bn tu ngm
2/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 2
chi thot khi tr chi.
Demo
http://1.bp.blogspot.com/-naWWBTRo8n4/T5Ea6SCnXZI/AAAAAAAAB8E/9Xx9v9vCIRU/s1600/2010-11-10+14-47-47.pnghttp://1.bp.blogspot.com/-naWWBTRo8n4/T5Ea6SCnXZI/AAAAAAAAB8E/9Xx9v9vCIRU/s1600/2010-11-10+14-47-47.pnghttp://2.bp.blogspot.com/-CvMQM-0dVXY/T5Ea5L6c6vI/AAAAAAAAB78/sNJD9dRyob0/s1600/2010-11-10+13-35-51.pnghttp://3.bp.blogspot.com/-PUyezHzO0Nc/T5Ea309tkCI/AAAAAAAAB70/NuOE1EO4OLU/s1600/2010-11-10+13-35-33.png7/22/2019 [html] Vit game bn tu ngm
3/10
Ngy 24 thng 1 nm 2014 [Java]Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 3
Kch bn
-Ngi chi s iu khin mt con tu, dng cc phm mi tn di chuyn qua li, n n, ng thi
phn cng li trc s tn cng ca cc tu ngm di chuyn pha bn di.
- mi mn, khi ngi chi bn ht s lng tu ngm ca mi mn th hin thng bo Level Up, s
lng tu ngm cng nh tc bn, tc di chuyn ca chng c tng ln mn sau.
-Nu lng mu ca ngi chi (c ci t bng bin int lifePlayer=12) xung mc 0, game s t
ng ngt v hin thng bo thua cuc, ng thi cho php ngi chi chi li t u.
-C tt c l 5 mn, v n mn cui ngi chi s phi gp "trm".
Game Entry Point
y l ni tr chi bt u
@Override
public void start() { Thread game = new Thread(this);
game.start();
}
Phn tch
Chng ta cn phi xt xem s c nhng i tng no cn c xy dng:
Ship: i tng chnh m chng ta s iu khin.
Submarine: cc tu ngm con, chng c kh nng t ng bn tr sau mt thi gian xc nh, di chuyn
ngu nhin quanh mn hnh.
Boss: trm, c kh nng bn lin tc 3 vin n, lng mu 50, git c boss tc l bn chin thng.
Shot: cha i tng vin n, ty theo vin n ca i tng no m cch thc bn i (ln/xung) v
hnh nh ca n s thay i theo.
Explosion: cha i tng n, khi mt vin n bn trng mt i tng, s xut hin mt m la km
theo m thanh pht ra.
FunnyObject: cc i tng gip trang tr cho tr chi: ng mt tri, m my, cy da...
Main: lp chnh ca tr chi, y l ni m tr chi s hot ng theo cch m bn lp trnh.
Mt con tu chin i km vi n phi c tc di chuyn, tc bn (cc thuc tnh), loi n m n s
dng (i tng con), v cc thut ton tnh ton v iu khin s di chuyn ca con tu (cc phng
thc). Tng t nh vy cho cc i tng tu ngm v trm (boss).
http://3.bp.blogspot.com/-CLck5KWV14c/T5Ea7HCM7xI/AAAAAAAAB8M/-N1tdVEh2hs/s1600/2010-11-10+9-19-51.pnghttp://3.bp.blogspot.com/-CLck5KWV14c/T5Ea7HCM7xI/AAAAAAAAB8M/-N1tdVEh2hs/s1600/2010-11-10+9-19-51.pnghttp://1.bp.blogspot.com/-naWWBTRo8n4/T5Ea6SCnXZI/AAAAAAAAB8E/9Xx9v9vCIRU/s1600/2010-11-10+14-47-47.png7/22/2019 [html] Vit game bn tu ngm
4/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 4
y, ti mun mi lt bn, chng ta s c bn ra 3 lt n, ch khi no c 1 trong 3 vin n bn
trng ch hoc bay ra khi mn hnh chng ta mi c bn tip. Mun lm c iu chng ta cn
xy dng mt i tng Shot v a n vo mt mng c s phn t ti a l 3.
final byte maxShot = 3;
Shot[] shot = new Shot[maxShot];
on m lnh trn c vit trong lp tu chin (Ship) m chng ta s xy dng. Cc bn c th c
code ca mnh nm r hn.
Mi ln nhn phm mi tn chng ta s kim tra xem trong hp n c vin no cn trng, nu trng
chng ta khi tao mt vin n mi:
public boolean keyDown(Event e, int key) {
if (key == Event.DOWN) { for (int i = 0; i < ship.getMaxShot(); i++) {
if (ship.getShot(i) == null) {
ship.createShot(i);
break;
}
}
return true;
}
Vic bn i mt vin n ch n gin l thay i ta ca n theo trc tung:
public void launchDown(int speed) {
y += speed;
}
public void launchUp(int speed) {y -= speed;
}
Mt vin n c coi l bn trt nu ta y ca n nm ra ngoi mn hnh:
if (ship.getShot(i).getY() > gameHeight) {
ship.setNullShot(i);
missedShot++;
}
Vy nh th no l bn trng? Vin n c coi l trng ch khi ta (x, y) ca n nm lt trong ta
(x, y) ca i tng:
http://3.bp.blogspot.com/-CLck5KWV14c/T5Ea7HCM7xI/AAAAAAAAB8M/-N1tdVEh2hs/s1600/2010-11-10+9-19-51.png7/22/2019 [html] Vit game bn tu ngm
5/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 5
for (int i = 0; i < ship.getMaxShot(); i++) {
if (ship.getShot(i) != null) {
for (j = 0; j < sub.size(); j++) {
if (ship.getShot(i).getX() >= sub.get(j).getX() && ship.getShot(i).getX() = sub.get(j).getY() && ship.getShot(i).getY() Main.gameHeight) {
missedShot++;
ship.setNullShot(i); free the shot
}
}
}
Nu khng c dng lnh break, chng trnh s bo li NullPointerException do sau khi trng n, vng
lp vn tip tc qut qua arraylist tu ngm nhng vin n "bin mt" (=null). Do chng ta phi
dng break ngt vng lp trc khi c li xy ra.
"if (ship.getShot(i) != null && ship.getShot(i).getY() > Main.gameHeight)" --> do trn nu "l nh" vin
n trng mc tiu, n s c set = null, do vy dng lnh di khng th xy ra v bo li, do bt buc phi c dng "ship.getShot(i) != null".
iu khin lung/chuyn hng trong game
C l ai cng phi cng nhn vi Gapi mt iu, cho d game bn vit c hay nh th no, c hp dn
n u th vn c lc ngi chi s mun tm dng tr chi lm mt vic g (nghe in thoi, i
v sinh, blowjob :-" ...). V cn cc trng hp khc nh khi ngi chi thng hoc thua, bn mun hin
ra mt thng bo g n ngi chi. tng ca Gapi y l s dng mt bin c kiu nh phn,
mi khi ngi chi mun dng game, hoc thng/thua v.v... bin c s c bt ln v chng ta s x
l lung game ty theo iu kin c t ra.
Chng hn nh khi bn git ht s tu ngm mi mn, bin c gamePaused s c bt ln, hm
gameStatus() xem xt v tr v s 2, v ln mn hnh level up, sau bn nhn spacebar tip tc qua
hm paint(), nu mn bn va thng l mn k cui th v ra mn u vi trm, ngc li v tip mt mn
bnh thng khc.
Lu l y, khi chng ta ang tm dng game, hoc hin ln thng bo thng cuc, chng ta u
nhn space bar tip tc. Vy ci t c th c lm nh sau:
bool gamePased = true;
bool gameStarted = false;
public void paintGameElements(Graphics g) {
...
if (sub.isEmpty()) { // if the player had destroyed all the submarines
gamePaused = true;
}
...
...
if (lifePlayer
7/22/2019 [html] Vit game bn tu ngm
6/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 6
...
@Override
public void paint(Graphics g) {
requestFocus();
switch (gameStatus()) {
case 0: { // pause game while playing
paintGamePausedWarning(g);
}
break;
case 1: { // lost the game
paintGameLostWarning(g);
}
break;
case 2: { // level up
if (level == lastLevel - 1) {
paintGameBossLevelUp(g);
} else {
paintGameLevelUp(g);
}
}
break;
case 3: {
paintGameWonWarning(g);
} break;
case 4: {
paintGameStartWarning(g);
}
break;
default: {
if (level == lastLevel) {
paintGameBossElements(g);
} else {
paintGameElements(g);
}
}
break;
} }
...
/* -------------------- */
/* --- GAME CONTROL --- */
/* -------------------- */
public int gameStatus() {
if (gamePaused == true) {
if (lifePlayer
7/22/2019 [html] Vit game bn tu ngm
7/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 7
...
/* ------------------------- */
/* --- KEY EVENT CONTROL --- */
/* ------------------------- */
@Override
public boolean keyDown(Event e, int key) {
...
if (key == 32) {
switch (gameStatus()) {
case 1: { // lose
gameReset();
}
break;
case 2: { // level up
gamePaused = !gamePaused;
gameLevelUp();
}
break;
case 3: { // win
gameReset();
}
break;
case 4: {
gamePaused = !gamePaused; gameStarted = true;
}
break;
default: {
gamePaused = !gamePaused;
}
break;
}
}
...
return true;
}
Cu trc chung ca mt game vit bng Applet:
public class MainGame extends Applet implements Runnable {
Image bufferImage;
Graphics bufferGraphics;
// khi to cc bin game
@Override
public void init() {
}
// thc thi game
@Override
public void start() {
Thread game = new Thread(this);
game.start();
}
// to b m hnh cho tr chi nhm loi b hin tng nhp nhy do xa i v li nhiu ln
@Override
public void update() {
if (bufferImage == null) {
bufferImage = createImage(this.getSize().width, this.getSize().height);
bufferGraphics = bufferImage.getGraphics();
}
bufferGraphics.setColor(Color.white);
bufferGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height, this);
http://giaphi.blogspot.com/2012/04/hellochao-cap-cau.html7/22/2019 [html] Vit game bn tu ngm
8/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 8
paint(bufferGraphics);
g.drawImage(bufferImage, 0, 0, this);
}
// hm v chnh ca applet
@Override
public void paint(Graphics g) {
}
/* x l cc s kin t bn phm */
@Override
public boolean keyDown(Event e, int key) {
return true;
}
@Override
public boolean keyUp(Event e, int key) {
return true;
}
// phng thc run() c gi khi chng ta gi phng thc start()
public void run() {
while(true) {
repaint(); // c 20ms li xa mn hnh v v li
try { Thread.sleep(20); // 20ms l tc ca game
} catch(Exception e) {
}
}
}
}
y chnh l khung ht sc c bn ca mt tr chi vit trn nn Applet, do c im ca Applet l khng
c hm main() nn chng ta s thay bng hm start() c override t lp Applet. Trn Windows Form
cng c cu trc tng t nhng c l ti s dnh mt dp khc ni v cch vit game trn WF (sau
khi ti nghin cu, hehe).
c im ca hm update()
Mt iu quan trng bn cn bit: phng thc repaint() khng h gi phng thc paint() cng lc.Thay vo n s gi phng thc update() trc. Nu bn khng override n, update() s t ng xa
ton b mn hnh v sau mi gi hm paint().
Nh cc bn thy, c sau 20ms chng ta s gi li hm repaint() mt ln, mc ch ca vic lm ny l
to cm gic cc i tng trong tr chi ang chuyn ng. Tuy nhin, nu ch n thun l gi hm
repaint(), bn s cm thy hnh nh nhp nhy lin tc rt kh chu. n gin v mi khi gi hm repaint(),
hnh nh s c xa trng ton b ri mi v li, trong 20ms, mt thng vn c th cm nhn c
khong trng . Cch x l c chp nhn nhiu nht l s dng b m hnh, hnh nh s c v ln
mt bufferImage (gi l off-screen) sau mi c a ln mn hnh. Ni cch khc chng ta s
override v vit li hm update().
To mt hnh nh off-screen bng cch dng phng thc createImage v cha n trong mt bin thc
th = to mt hnh nh rng.
Gi getGraphics to graphic context cho bc hnh ny.
V mi th (k c vic xa mn hnh) ln trn off-screen = v hnh background.
Khi hon tt, copy hnh off-screen ln hnh nh ang c trn mn hnh = v hnh foreground.
K thut ny c ngha rng hnh nh c v trc khi n c a ln mn hnh. Khi cc pixel c
s c ln bi cc pixel mi. Nh vy s khng cn hin tng nhp nhy do bn s khng thy bt
c mt ms no c mn hnh trng.
@Override
public void update(Graphics g) {
// initialize the off-screen
if (bufferImage == null) {
bufferImage = createImage(this.getSize().width, this.getSize().height);
bufferGraphics = bufferImage.getGraphics();
7/22/2019 [html] Vit game bn tu ngm
9/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html 9
}
// clear the off-screen
bufferGraphics.setColor(Color.white);
bufferGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height);
// draw game elements on off-screen
paint(bufferGraphics);
// put the off-screen on the main screen
g.drawImage(bufferImage, 0, 0, this);
}
Hnh nh thc hin tr chi s l cc file png c nn trong sut c th c ti d dng trn mng.
a mt hnh nh bt k vo tr chi, ta dng lnh:
Image shipImage = new ImageIcon(images/ship.png).getImage();
a mt m thanh bt k vo tr chi, ta dng lnh:
AudioStream auship, auSub;
//....
try {
auShip = new AudioStream(new FileInputStream("sounds/ship.wav"));
auSub = new AudioStream(new FileInputStream("sounds/submarine.wav"));
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
//....
AudioPlayer.player.start(auShip);
AudioPlayer.player.start(auSub);
2 comments:October 24, 2012 at 4:06 PMAnonymous
the thi ban phai no ro la phan code nao viet o file nao chua.chu noi chung chung the nay thi nhung nguoimoi hoc android lam sao hieu duoc.vi trong pakage co nhieu foder va chua nhieu file ma.ban nen noi rocho mo nguoi hieu nhe
Reply
October 31, 2013 at 10:12 PMdfgh
bn i cho minh xin li code gmae di bn ... link cht r ... [email protected].... gi mnh dm nhabn
http://www.blogger.com/profile/14650645219906105981http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html?showComment=1383232339652#c928384191289433117http://giaphi.blogspot.com/2012/04/java-viet-game-ban-tau-ngam.html?showComment=1351069561015#c7399395978874371967http://1.bp.blogspot.com/-S9gTeI2cDlU/T5Eb2x0QZ4I/AAAAAAAAB8U/UoMGUtD_Zsg/s1600/2010-11-10+13-44-36.png7/22/2019 [html] Vit game bn tu ngm
10/10
Ngy 24 thng 1 nm 2014 [Java] Vit game bn tu ngm | Gia Phi's Blog
htt // i hi bl t /2012/04/j i t b t ht l 10
Add comment
Enter your comment...
Comment as: Google Accou
Publish
Preview
Subscribe to: Post Comments (Atom)
Reply
Copy right [Gia Phi]
http://giaphi.blogspot.com/feeds/1833531507677667030/comments/default