how to make tetris game

Upload: trieu-hong-bien

Post on 06-Apr-2018

277 views

Category:

Documents


10 download

TRANSCRIPT

  • 8/3/2019 How to Make Tetris Game

    1/29

    Hng Dn Vit Game TETRIS

    n Gin

    Vi Ngn Ng C/C++ Trn DOS

    Xin cho cc bn!

    Chc hn chng ta cng s c ngi am m lm game v cng mun mnh c th vit c1 hoc nhiugame ,nhng khi u nh th no? ,cch lm ra sao?,cn nhng kin thc j khilm game? . lm c nhng game ln,hay,p v giao din th cc bn c th bt u lmvi nhng game nh, n gin .Mnh chc rng lm nh vy th k nng vit code ca bn stng rt nhanh v bn s t tin hn khi lm 1 game hay 1 chng trnh tng i ln.

    Ci ny th theo kinh nghim ca mnh th rt ng.Ngi ta thng ni nng nht ,cht bsing nng tch cp nhng kin thc nh s c ngy bn nhn ra gi tr ca nhng g bnthn hc c.Mnh cng khng gii giang j c cng ch l 1 thng IT bnh thng,nhng bt

    chc chu nn mun chia s t kinh nghim vit game n gin cho cc bn newbie(ch ccpro th em khng dm ma my u )

    Writer: tauit_dnmdEmail:[email protected].

    Uitstudent.com & congdongcviet.com

  • 8/3/2019 How to Make Tetris Game

    2/29

    Li ni u

    Trong Tut ny mnh s hng dn cho cc bn chi tit cch lm game Xp Gch trn Dos

    nh th no: t m t gamechn cu trc d liucode hon chnh.

    Ti sao mnh li bt u vi game trn DOS (mn hnh console) ? Ti v: mnh mun ai cngc th c hiu c ci TUT ny ,v lm trn DOS ri th chuyn qua lm c giao din th rtn gin.Mnh cng code game ny trn Dos v Winform(vi C#).Code demo trn C/C++ca game ny mnh ly li ca mnh code hi mi hc C/C++ nn c th n khng c hay vchun cho lm(v mi hc th ai m ch g.hihihi).

    . tin v thun li khi theo di Tut ny cc bn cn phi bit cch hot ng v cchchi game Xp Gch (Tetris) Loi n gin y(V tetris c rt nhiu bin th v lut chikhc nhau). hiu r lut ca game cc bn ti ci ny v chi l hiu :

    +DOS version:+Winform version(C#+GDI+):

    -Mnh vit trn Complier l Microsoft Visual Studio 2008 nn 1 s hm ch c BC,TC skhng xi c nn mnh s dng 1 th vin ngoi (ngi ta vit li 1 s hm m t cndng) .Cc hm c cha trong file support.cpp.

  • 8/3/2019 How to Make Tetris Game

    3/29

    I/ Tm hiu cu trc game.

    -Lut l ca game m mnh s trnh by:

    + Game m phng game Xp Gch (Tetris),nhim v ca ngi chi l di chuyn

    cc khi gch ang ri t t xung trong kch thc hnh ch nht 18 hng x 10 ct(trn mnhnh).Ch no c gch ri th khng di chuyn c ti v tr .

    +Ngi chi c gng xp c nhng hng y nhng vin gch .Nu xp c 1hng s c cng im v hng s b xa .

    +Nu khi gch khng th rt xung c na th nu m vn cha hin ht ra mnhnh th ngi chi s thua

    -Chng ta s i xem ci game Tetris c nhng j no? Cch qun l ra sao?.Cc bn coi s ci

    ny

    Ci giao din chi game ,cc bn c th thy n c chia ra thnh tng vung nh ,v c ttc l 18x10 nh th, v cc bn c th thy rng cc c th c vung hoc khng c vung. Thc ra kch thc mn hnh chi game ny khng phi c nh,ngi vit game cth chn 1 kch thc khc cng c.Nhng y t chn dng 18 x 10.

    Nh vy lu trng thi ca tr chi ta tm thi c th dng 1 mng 2 chiu kchthc 18x10 (18 hng x 10 ct).Khi xt n im hay cht(gameover) ta ch cn xttrn ma trn Board ny thi.

    VD: int Board[18][10];

    - Mi Board[i][j] s i din cho 1 vung nh v cha gi tr 0 hoc 1 :

    +0 : cha c vung nh no .

    +1: c vung nh .

    V d vi ci hnh demo di y :

  • 8/3/2019 How to Make Tetris Game

    4/29

    Nhng bn cng thy rng ,c lc khi gch ca chng ta hin c 1 phn ln ma trn kchthc 18x10 (18 hng x 10 ct) thi ng khng no?

    VD: Ta c khi hnh vung mi ch hin ra 1 na trn ma trn thi:

    Vy 1 na trn u? Ta bit mng khng c ch s m ng khng no.Thc cht , dqun l th mnh s chn thm 4 hng v na ngha l thay v dng ma trn Board[18][10] thdng ma trn Board[22][10].Khi 4 hng u tin (0->3) c dng lm v tr tm cho cc

    khi gch-cc phn ca khi gch m nm trong khu vc 4 hng u tin s khng c v lnmn hnh game.

  • 8/3/2019 How to Make Tetris Game

    5/29

    -Vy th ngha ma trn sau khi iu chnh l.

    Kt lun:

    +Vy qun l t s dng 1 ma trn 2 chiu kch thc 22x10 (22 hng x10 ct) Vi ngha t gii thch trn.

    +V gi tr ca ma trn Board ch c thit lp khi 1 khi gch khng th ri xung

    c na.Cn trong qu trnh khi gch ri th gi tr ca ma trn ti khng thay i (vnl 0)

    *Qun l khi gch:

    -Chng ta bit game Xp Gch c 7 loi hnh : vung,ch Z,hnh ch L,thngng(ging cy gy)Ta thy mi khi gch c cu to t 4 hnh vung nh xp li vinhau.Ta c th coi cc khi gch nh l nhng hnh ch nht c kch thc khc nhau.

    Da vo kch thc khi m mnh s chia thnh 3 loi khi c bn:

  • 8/3/2019 How to Make Tetris Game

    6/29

    -Cc hnh khc c to ra khi xoay cc khi c bn ny cc gc tng ng 90o, 180o ,270o.Khi xoay th c ngha ta s xoay ma trn trng thi 1 gc 90o .

    V vy d qun l cc khi cng nh xy dng cc phng thc xoay khi chng ta sdng mt ma trn c kch thc Row x Col (Row hng x Col ct) xc nh hnh dng hinti ca mt khi - gi l Ma Trn Trng Thi . tit kim th mnh s dng b nh ng :

    VD: int **arr;

    chng hn,khi cn kch thc bao nhiu th ta cp pht by nhiu.V nh gii phng b nhkhi khng cn xi na.

    - Mt khi gch,gi tr ca ma trn trng thi c xc nh l v tr no l gch s c nhs 1, khng c gch nh s 0.

    VD:

  • 8/3/2019 How to Make Tetris Game

    7/29

    Khi trn s c biu din bng ma trn trng thi nh sau: vi Row=2 v Col=3

    1 1 0

    0 1 1

    Nguyn l khi to khi gch:

    -S dng nguyn l x l bit xy dng. Ma trn trng thi s c trng cho khi gch.to ma trn trng thi cho tng khi gch ta s dng php x l bit, s dng (Row x Col) bitc nh s t bt cao nht t tri qua phi v t trn xung di xc nh khi.

    V d:

    Khi 2x3 th ta x l trn 2x3=6 bit.

    S tng ng vi chui nh phn 011110 v gi tr ca chui ny l 30.

    Khi:

    5 4 3

    2 1 0

    0 1 11 1 0

    1 1 0

    0 1 1

  • 8/3/2019 How to Make Tetris Game

    8/29

    S tng ng vi chui nh phn 110011 v gi tr ca chui ny l 51.

    Khi:

    S tng ng vi chui nh phn 111001 v gi tr ca chui ny l 57.

    Khi:

    S tng ng vi chui nh phn 111010 v gi tr ca chui ny l 58.

    Khi:

    1 1 1

    0 0 1

    1 1 10 1 0

  • 8/3/2019 How to Make Tetris Game

    9/29

    S tng ng vi chui nh phn 111100 v gi tr ca chui ny l 60.

    Khi:

    S quy nh l 1111 cho phn bit ch khng mang gi tr biu din vlc x l s x l ring cho khi ny.

    Khi:

    S quy nh l 11111 cho phn bit ch khng mang gi tr biu din vlc x l s x l ring cho khi ny.

    1 1 1

    1 0 0

  • 8/3/2019 How to Make Tetris Game

    10/29

    -Do ,mi khi gch (mi hnh dng khi gch) c bn ta c 7 loi khi c bn s c 7con s i din cho n.

    II/ T chc chng trnh,chn cu trc ci t.- Phn I chng ta c ni s s qua tng,cu trc ca game Tetris ny ri.Phn II ts hng dn cch vit code v t chc game.

    1/ Cc hm b tr

    - V trong game mnh c s dng cc hm nh gotoxy(), textcolor() ,delay() m trong VS 2k8 khng c nn phi vit li cc hm ny.Cc hm ny ch l ph thinn chng ta chp code v l c ,khng cn phi hiu cc hm ny hot ng ra saoc.

    Sau y l code mu ca cc hm ny.

  • 8/3/2019 How to Make Tetris Game

    11/29

    enum{

    BLACK,BLUE,GREEN,CYAN,RED,PURPLE,

    GRAY,WHITE,LIGHTGRAY,LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTPURPLE,LIGHTYELLOW,LIGHTWHITE

    };voidgotoxy(intx, inty){

    COORDc;c.X = x - 1;c.Y = y - 1;

    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);}voidclrscr(){

    COORDcoord;DWORDwritten;CONSOLE_SCREEN_BUFFER_INFOinfo;

    coord.X = 0;coord.Y = 0;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);FillConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE), ' ',

    info.dwSize.X * info.dwSize.Y, coord, &written);gotoxy (1, 1);

    }voidtextcolor(WORDcolor){

    HANDLEhConsoleOutput;hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFOscreen_buffer_info;GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);

    WORDwAttributes = screen_buffer_info.wAttributes;color &= 0x000f;wAttributes &= 0xfff0;wAttributes |= color;

    SetConsoleTextAttribute(hConsoleOutput, wAttributes);}voidSetBGColor(WORDcolor){

    HANDLEhConsoleOutput;

    hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFOscreen_buffer_info;GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);

    WORDwAttributes = screen_buffer_info.wAttributes;color &= 0x000f;color

  • 8/3/2019 How to Make Tetris Game

    12/29

    CONSOLE_CURSOR_INFOInfo;Info.bVisible = FALSE;Info.dwSize=20;SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &Info);

    }

    2/ Cu trc game

    Mnh s chn cch vit code game ny dng Structure.Mc d theo mnh thy dng class sd qun l v nhn trc quan hn.Nhng nhiu bn cha hc hng i tng (OOP) nndng Structure l hp l cho cc bn.Dng structure nn 1 s ch mnh t chc qun l chatt nn cc ban thng cm nha.ng chm em m ti nghip.

    Nh mnh ni phn I th game s c qun l chung bng 1 ma trn Board[22][10]. Do mnh s khai bo ma trn ny l kiu int ,v l bin ton cc.

    #defineMaxI 22#defineMaxJ 10intBoard[MaxI][MaxJ];

    - xc nh v tr v khung mn hnh chi game ( tng ng vi ma trn map) ln mn hnhconsole.Lu rng nh mnh ni th Board c kch thc [22][10] nhng tht s ch vln mn hnh kch thc 18x10 ta b i 4 hng u trong ma trn Board i(c index t i =0

    3).

    Ta khai bo :

    #defineLEFT 4#defineTOP 4

    d hnh dung th bn bit .Mn hnh console c kch thc l 25 hng x 80 ct .

    Sau y l hm v ci khung hin th ln mn hnh .

    voidDrawBoard(){

    inti,j;

  • 8/3/2019 How to Make Tetris Game

    13/29

    for(i=LEFT;i

  • 8/3/2019 How to Make Tetris Game

    14/29

    -Khi xp c 1 hng y th ta phi xa hng v cp nht li gi tr cho ma trn Board licho ng.

    voidCapNhatLaiToaDo(inthang){

    inti,j;for(i=hang;i>0;i--)

    for(j=0;j

  • 8/3/2019 How to Make Tetris Game

    15/29

    Structure qun l khi gch:-Nh ni tng trn,mnh s code ha cu trc nh sau:

    typedefstruct{

    int **arr;intRow,Col;intiBoard,jBoard;

    }KhoiGach;

    +arr l 1 con tr m t Ma Trn Trng Thi cho tng loi khi gch: 4x1 ,2x2,2x3 .

    Cn 2 bin Row,Col th hin kch thc ca ma trn trng thi ( arr,Row,Col s cho bithnh dng ca khi gch l hnh j).Ma trn ny dng kim tra va chm khi di chuyn khigch,xoay khi gch

    +iBoard,jBoard : cho bit v tr hin ti ca Khi Gch ang nm u trn ma trnBoard[22][10] chnh l v tr ca arr[0][0] so vi ma trn Board[22][10].Khi mi khi tokhi gch th iBoard,jBoard s nm khu vc khng c hin th.

  • 8/3/2019 How to Make Tetris Game

    16/29

    -Mnh phn tch phn I rng mnh s dng 1 con s tng trng cho tng khigch.Khi bit s i din ca n th ta ch cn dng php ton dch bt suy ra ma trn trngthi ca chng.

    +15: Thng ng

    +31: Hnh vung

    ..

  • 8/3/2019 How to Make Tetris Game

    17/29

    -Hm khi to thng s 1 khi gch tng ng vi s ID ca n:

    KhoiGach *TaoKhoiGach(intID){

    KhoiGach *pkhoigach=(KhoiGach*)malloc(sizeof(KhoiGach));switch(ID){

    case 15:pkhoigach->Row=4;pkhoigach->Col=1;pkhoigach->iBoard=0;pkhoigach->jBoard=5;break;

    case 31:pkhoigach->Row=pkhoigach->Col=2;pkhoigach->iBoard=2;pkhoigach->jBoard=5;break;

    default:pkhoigach->Row=2;pkhoigach->Col=3;pkhoigach->iBoard=2;pkhoigach->jBoard=5;break;

    }pkhoigach->arr=(int**)malloc(pkhoigach->Row*sizeof(int*));for(inti=0;iRow;i++){

    pkhoigach->arr[i]=(int*)malloc(pkhoigach->Col*sizeof(int));}for(intk=0;kCol*pkhoigach->Row;k++){

    pkhoigach->arr[k/pkhoigach->Col][k%pkhoigach->Col]=(ID>>(pkhoigach->Col*pkhoigach->Row-1-k))&1;

    }returnpkhoigach;

    }

    on :

    pkhoigach->arr=(int**)malloc(pkhoigach->Row*sizeof(int*));for(inti=0;iRow;i++){

    pkhoigach->arr[i]=(int*)malloc(pkhoigach->Col*sizeof(int));}

    Ch l cp pht b nh cho ma trn trng thi thi .Chc hn cc bn s thc mc rng nu cID=58 th sao c th to ra ma trn trng thi l:

    Rt n gin thi:

    V d : vi ID=58 th khi gch s c ma trn trng thi l 2x3 .Row=2,Col=3.

    Ban u ma trn trng thi arr:

    V Row xCol=2x3=6 (bit) .Nn ta i 58 sang s nh phn 6 di bit l: 111010

    on code:

    1 1 1

    0 1 0

    0 0 0

    0 0 0

  • 8/3/2019 How to Make Tetris Game

    18/29

    for(intk=0;kCol*pkhoigach->Row;k++){

    pkhoigach->arr[k/pkhoigach->Col][k%pkhoigach->Col]=(ID>>(pkhoigach->Col*pkhoigach->Row-1-k))&1;

    }

    +Ton t >> l ton t dch bt sang phi.

    +arr[k/Col][k%Col]=(ID dch sang phi (RowxCol-1-k) bit ) & 1 // (php AND trong tinhc chc ai cng bit)

    Vi k=0: [arr[k/Col][k%Col]=arr[0][0].

    58 dch sang phi (6-1-0) bt= 111010 dch sang phi 5 bit l 000001 .Sau kthp vi 000001&1 th kt qu s l 1. ->Vy arr[0][0]=1;

    Vi k=1: [arr[k/Col][k%Col]=arr[0][1].

    58 dch sang phi (6-1-1) bt= 111010 dch sang phi 4 bit l 000011 .Sau kthp vi 000011&1 th kt qu s l 1. ->Vy arr[0][1]=1;

    Vi k=2: [arr[k/Col][k%Col]=arr[0][2].

    58 dch sang phi (6-1-2) bt= 111010 dch sang phi 3 bit l 000111 .Sau kthp vi 000111&1 th kt qu s l 1. ->Vy arr[0][2]=1;

    Vi k=3: [arr[k/Col][k%Col]=arr[1][0].

    58 dch sang phi (6-1-3) bt= 111010 dch sang phi 2 bit l 001110 .Sau kthp vi (001110 )&1 th kt qu s l 0. ->Vy arr[1][0]=0;

    1 0 00 0 0

    1 1 0

    0 0 0

    1 1 1

    0 0 0

    1 1 1

    0 0 0

  • 8/3/2019 How to Make Tetris Game

    19/29

    Vi k=4: [arr[k/Col][k%Col]=arr[1][1].

    58 dch sang phi (6-1-4) bt= 111010 dch sang phi 1 bit l 011101 .Sau kthp vi (011101 )&1 th kt qu s l 1. ->Vy arr[1][1]=1;

    Vi k=5: [arr[k/Col][k%Col]=arr[1][2].

    58 dch sang phi (6-1-5) bt= 111010 dch sang phi 0 bit l 111010 .Sau kt

    hp vi (111010 )&1 th kt qu s l 0. ->Vy arr[1][2]=0;

    Vy cui cng: ta c ma trn trng thi dng vi con s ID=58. Vi cc khi gch mangID khc th cch lm cng tng t thi

    Hm kim tra va chm khi di chuyn khi gch sang tri ,sang phi,ri xung:

    tng:

    + xc nh xem 1 v tr i,j trn ma trn Board c di chuyn sang tri c haykhng th ta xem lin k bn tri(chnh l v tr i , j-1) ca n c gch hay cha,nu c

    gch th khng di chuyn c( a[i][j]=1 th c gch v ngc li a[i][j]=0 l khng c gch).Di chuyn sang phi hay xt ri xung cng tng t nh th thi( cng xt lin k bn

    phi i,j+1 hoc lin k bn di i+1,j)

    +Nh vy xt nguyn khi gch (gm 4 gch nh ) c th di chuyn c th ttc cc gch nh fai di chuyn c ,nu c 1 khng di chuyn c th khi gch khng th di chuyn c.

    1 1 1

    0 1 0

    1 1 1

    0 1 0

  • 8/3/2019 How to Make Tetris Game

    20/29

    intInside(inti,intj) //Xem i,j c thuc mng Board[22][10] hay khng?{

    return (i>=0&&i=0&&j0&&Inside(i,j)&&Board[i][j-1]==0) return1;return0;

    }intRight(inti,intj){

    if(jiBoard+i,pkhoigach->jBoard+j :

  • 8/3/2019 How to Make Tetris Game

    21/29

    voidSangTrai(KhoiGach *pkhoigach){

    for(inti=0;iRow;i++)for(intj=0;jCol;j++)

    if(pkhoigach->arr[i][j]==1){

    if(Left(pkhoigach->iBoard+i,pkhoigach->jBoard+j)==0||pkhoigach->iBoardjBoard-=1; //Dich vi tri cua bang trang thai sang trai 1 so voi Board[22][10].}

    voidSangPhai(KhoiGach *pkhoigach){

    for(inti=0;iRow;i++)for(intj=0;jCol;j++)

    if(pkhoigach->arr[i][j]==1){

    if(Right(pkhoigach->iBoard+i,pkhoigach->jBoard+j)==0||pkhoigach->iBoardjBoard+=1; //Dich vi tri cua bang trang thai sang phai 1 so voiBoard[22][10].}intRoiXuong(KhoiGach *pkhoigach) //0 : khng th ri xung,1 : c th ri xung.{

    for(inti=0;iRow;i++)for(intj=0;jCol;j++)

    if(pkhoigach->arr[i][j]==1){

    if(Down(pkhoigach->iBoard+i,pkhoigach->jBoard+j)==0) return 0;}

    pkhoigach->iBoard+=1; //Roi xuong 1 so voi Board[22][10] return 1;}

    Hm gn gi tr cho ma trn Board khi khi gch khng ri xung c na:Khi vinhng arr[i][j] ==1 ca ma trn trng thi th ta gn gi tr bng 1 cho Board[i][j] .Vi (i,j)l ta tng ng ca (i,j) trn ma trn Board ,m cch i mnh ni trn ri.

    voidGanGiaTri(KhoiGach* pkhoigach){

    for(inti=0;iRow;i++)for(intj=0;jCol;j++)

    if(pkhoigach->arr[i][j]==1)

    { Board[pkhoigach->iBoard+i][pkhoigach->jBoard+j]=1;}

  • 8/3/2019 How to Make Tetris Game

    22/29

    }

    -Haizz,ti y th ta cng gn xong nhng ci c bn ca game Xp Gch ri. Chng ta s tihm xoay khi gch na l coi nh xong .Ci xoay khi gch ny rt d ,bn no lm bixoay ma trn 2 chiu 1 gc 90o theo chiu kim ng h ri th ci ny rt d hiu.

    Hm xoay: Xoay khi gch thc cht cc bn ch cn xoay ma trn trng thi ca khi gch 1 gc 90o theo chiu kim ng h thi ,v ma trn y khng phi l ma trn vung nnkhi xoay th kch thc ca ma trn s b thay i Row=Col,Col=Row.Ta ch cn vit 1hm xoay duy nht th c th xoay c tt c cc loi khi gch (7 loi c bn v cc khikhi c xoay khc) .Chng ta s xoay th ma trn trng thi v sau xt xem v tr ca matrn sau khi xoay tng ng trn ma trn Board c hp l hay khng (khng c ln Board[i][j] ==1 no v khng vt ra khi gii hn ca Board).Nu hp l th mi chpnhn ,cn ngc li th vn gi nguyn ma trn trng thi nh ban u.

    +V trc v sau khi xoay th iBoard,jBoard khng thay i gi tr (vn gi nguyn) ci ny l cch mnh chn cho d( v x l ,rc ri thm) thi.Ch cc bn c th chncch khc xoay cho p hn.V cc bn coi ci hnh m t di y.

    voidXoayKhoiGach(KhoiGach* pkhoigach){

    inti,j;int ** tmpArr;inttmpRow=pkhoigach->Col;inttmpCol=pkhoigach->Row;//Cp pht b nh cho ma trn ph tmpArr.

    tmpArr=(int**)malloc(tmpRow*sizeof(int*));for( i=0;i

  • 8/3/2019 How to Make Tetris Game

    23/29

    tmpArr[i]=(int*)malloc(tmpCol*sizeof(int));}///////////////////////////////////////////////for(i=pkhoigach->Row-1;i>=0;i--)

    for(j=pkhoigach->Col-1;j>=0;j--){

    tmpArr[j][pkhoigach->Row-i-1]=pkhoigach->arr[i][j];}

    //Kim tra hp l.for (i=0;ijBoard+j)||

    Board[pkhoigach->iBoard+i][pkhoigach->jBoard+j]==1)return;

    }for(i=0;iRow;i++) free(pkhoigach->arr[i]);free(pkhoigach->arr);//Cp nht thay i sau khi xoay.pkhoigach->Col=tmpCol;pkhoigach->Row=tmpRow;pkhoigach->arr=tmpArr;

    }

    Khi lm vic vi b nh ng th cc bn nn cn thn xin cp pht xong v khi khng xina th phi gii phng b nh trnh tnh trng memory leak.

    Hm v ,xa khi gch ln mn hnh console: Mnh ni trn th mnh dng binLEFT,TOP xc nh v tr v ma trn Board ln mn hnh console.

    voidVeKhoiGach(KhoiGach* pkhoigach){

    inti;intj;for(i=0;iRow;i++)

    for(j=0;jCol;j++)if(pkhoigach->arr[i][j]==1&&(pkhoigach->iBoard+i)>3){

    textcolor(LIGHTRED);gotoxy(LEFT+pkhoigach->jBoard+j+1,TOP+pkhoigach->iBoard+i-3);cprintf("%c",2);

    }}voidXoaKhoiGach(KhoiGach *pkhoigach){

    inti;intj;for(i=0;iRow;i++)

    for(j=0;jCol;j++)if(pkhoigach->arr[i][j]==1&&(pkhoigach->iBoard+i)>3){

    textcolor(BLACK);gotoxy(LEFT+pkhoigach->jBoard+j+1,TOP+pkhoigach->iBoard+i-3);cprintf(" ");

    }}

    3/ Thng tin v im,cp ,tc .

    -Game th khng th thiu phn tnh im v thng tin level . tng tnh hp dn cho

    game.Di y mnh demo 1 cch tnh im v kh 1 cch rt n gin cho game.Ciphn ny cc bn c th ty chnh theo mnh.Mnh khai bo 1 structure lu thng tin.

  • 8/3/2019 How to Make Tetris Game

    24/29

    typedefstruct{

    intscore;intlevel;floatspeed;

    }INFO;

    +Mnh s chia game ra lm 2 cp : Cp 1 : 0->200 Cp 2 :200->300+Mi hng n c s c +10 .+Khi tng Level th speed cng nhanh hn 1 cht .+Nu c 300 tr ln th Win game.

    Cc hm b tr:

    voidInitGame(INFO *info){

    info->level=1;info->score=0;info->speed=0.4;

    }

    intCapNhat(INFO *info, intscore){

    info->score+=score;if(info->score>=200&&info->levellevel++;info->speed-=0.1;

    }return 0; //Chua win game.

    }voidVeBangDiem(INFOinfo){

    textcolor(LIGHTYELLOW);gotoxy(LEFT+MaxJ+2,10);cprintf("SCORE:%3d",info.score);gotoxy(LEFT+MaxJ+2,11);cprintf("LEVEL:%3d",info.level);gotoxy(LEFT+MaxJ+2,12);cprintf("SPEED:%3f",info.speed);

    }

    Kim tra gameover hay khng v tnh ton s hng n im:Khi khi gch khng th rixung c na th ta kim tra:

    + Game kt thc khi khi gch khng ri xung c na m iBoard vn Row-1;if(pkhoigach->iBoardscore>=300) return 0;//Windo{

    count=0;

    for(j=0;jiBoard+i][j]==1) count++;

  • 8/3/2019 How to Make Tetris Game

    25/29

    }if(count==MaxJ){

    CapNhat(infogame,20);CapNhatLaiToaDo(pkhoigach->iBoard+i);DisplayBoard();

    }else

    {i=i-1;

    }}while(i>=0);return 1;

    }

    Hm tr v -1 nu game over,tr v 0 nu ngi chi win(score>=300).V trong structureKhoiGach c s dng con tr(arr-ma trn trng thi) cp pht ng nn mnh s phi vit 1hm gii phng b nh trnh vic memory leak.

    voidHuyKhoiGach(KhoiGach* pkhoigach){

    inti;

    //Huy bo nho cua ma tran trang thai arr.for(i=0;iRow;i++) free(pkhoigach->arr[i]);free(pkhoigach->arr);///////////////////////////////////////////////////////////Sau do moi free(pkhoigach)free(pkhoigach);pkhoigach=NULL;

    }

    4/ Chn ngu nhin khi gch v khi gch tip theo s xut hin.

    Hm ny s random 1 khi gch chi. Tr v s i din cho khi gch .

    intLoai()

    { intx=rand()%7;switch(x){case 0:

    return 15;break;

    case 1:return 31;break;

    case 2:return 51;break;

    case 3:return 30;break;

    case 4:return 58;break;

    case 5:return 57;break;

    case 6:return 60;break;

    }}

    Hm v,xa khi gch tip theo s xut hin:

    voidVe_Next(intID){

    KhoiGach *pnext=TaoKhoiGach(ID);intiRoot=LEFT+MaxJ+5;intjRoot=TOP;

  • 8/3/2019 How to Make Tetris Game

    26/29

    for(inti=0;iRow;i++){

    for (intj=0;jCol;j++){

    if(pnext->arr[i][j]==1){

    textcolor(LIGHTGREEN);gotoxy(iRoot+j,jRoot+i);cprintf("%c",2);

    }}

    }HuyKhoiGach(pnext);

    }voidXoa_Next(){

    intiRoot=LEFT+MaxJ+5;intjRoot=TOP;for(inti=0;i

  • 8/3/2019 How to Make Tetris Game

    27/29

    RoiXuong();break;

    }VeKhoiGach(currKhoi);//V li khi gch sau khi cp nht thay

    i.}

    *Vng lp cho game:-Khi to gi tr ban u cho game.V khung giao din.Khi to cc tham slevel,score,speed.

    Do{

    - V li khi gch v ma trn Board ln mn hinh.-Trong khi cha ht INFO.speed th lp li qu trnh:

    Nu c s kin nhn bn phm xy ra( if(_kbhit()) ) th

    +Xa Khi gch.+X l nhn bn phm+V li khi gch sau khi thay i.

    - Cho khi gch ri xung:-Nu ri xung khng c:

    +Gn gi tr cho ma trn Board.S dng hm : voidGanGiaTri(KhoiGach*pkhoigach)

    +Kim tra thng thua v cp nht li im.Nu gameover hoc win th kt thc

    tr chi. +Hy b nh ca khi gch hin ti v sau khi to khi gch mi.

    }While(!gameover hoc !win);

    Code demo vng lp ca game l:

    do{

    VeBangDiem(info);VeKhoiGach(currKhoi);Xoa_Next();Ve_Next(IDKhoiTiepTheo);

    Start=clock();do{

    if(_kbhit()){

    c=toupper(getch());XoaKhoiGach(currKhoi);switch(c){case'W':

    XoayKhoiGach(currKhoi);break;

    case'A':SangTrai(currKhoi);break;

    case'D':SangPhai(currKhoi);break;

  • 8/3/2019 How to Make Tetris Game

    28/29

    case'S':RoiXuong(currKhoi);break;

    }VeKhoiGach(currKhoi);

    }End=clock();

    }while(float(End-Start)/CLK_TCK

  • 8/3/2019 How to Make Tetris Game

    29/29

    III/ Kt Thc

    +Vy l xong Tut hng dn vit game Tetris vi C/C++ .Cm n cc bn theo di tutny.Mnh hi vng c s ng h v kin ca cc bn ln sau c th vit 1 Tut khc hay

    v hp cc bn hn.+Hn cc bn bi vit tip theo.C th l hng dn cch lm game Line( tt c ch l nuc th ).V nu c copy bi vit ny i ni khc th xin hay ghi r ngun v tc gi.Cm nnhu nhu.

    +,mnh c nh km theo nguyn project ca game ny vit trn VS2K8.Cc bn c th tiv coi +tut ny s d hnh dung hn.

    Chng trnh ti y l ht ri.Cm n qu v quan tm theo di .Xin hn gp livo chng trnh ln sau! Cm n v cho tm bit