[html] Viết game bắn tàu ngầm

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.png
  • 7/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.png
  • 7/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.png
  • 7/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.html
  • 7/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.png
  • 7/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