Nghiên cứu phát triển game Mario Ngày nay sự phát triển của kĩ thuật công nghệ trên thế giới nói chung và Việt Nam nói riêng đang trên đà phát triển mạnh mẽ. Đặc biệt là ngành công nghệ thông tin với sự phát triển vượt bậc của máy tính và các ứng dụng được xây dựng trên đó.
I. Mở đầu. Ngày nay sự phát triển của kĩ thuật công nghệ trên thế giới nói chung và Việt Nam nói riêng đang trên đà phát triển mạnh mẽ. Đặc biệt là ngành công nghệ thông tin với sự phát triển vượt bậc của máy tính và các ứng dụng được xây dựng trên đó. Một trong những phát minh vĩ đại của ngành công nghệ thông tin đó là sự xuất hiện của game. Hiện nay, các sản phẩm giải trí mà đặc biệt là game đã đem lại một nguồn lợi nhuận cho ngành công nghiệp máy tính. Do nhu cầu của thị trường tăng cao, ngày càng nhiều game được ra đời và chất lượng của chúng càng được nâng cao. Bên cạnh đó các thiết bị chuyên dụng cho game ngày càng phát triển phục vụ cho nhu cầu giải trí của con người. Do đó, hiện nay phát triển game đang là một hướng đi được nhiều người quan tâm đến. Phải công nhận rằng chơi game đã là một sự hấp dẫn, nhưng chơi game do chính mình làm ra thì còn hấp dẫn hơn nhiều. Cùng với những đam mê và được sự hướng dẫn của thầy Ngô Thanh Hùng chúng em đã chọn và thực hiện game Mario. Còn gặp khó khăn trong quá trình tiềm hiểu và áp dụng công nghệ, nhưng chúng em cũng đã cố gắng và đã hoàn thành được game. Chúng em xin chân thành cảm ơn sự hướng dẫn của thầy và sự chia sẽ kinh nghiệm của các bạn để chúng em có thể hoàn thành tốt đồ án được giao! II. Mario 1. Các class chính Class GameApp: Là class quan trọng nhất trong game, nhiệm vụ tạo ra một thể hiện duy nhất là đối tượng Mario chịu trách nhiệm khởi tạo game, update game,render game và kết thúc game. Class Input: Nhận sự kiện Input từ người chơi. Class Suface: Load suface cho game. Class Texture: Load texture cho game. Class Sprite: Tạo đối tượng Sprite cho game. Class Audio:Cung cấp các chức năng load, play, stop các file audio thông dung. Cùng lúc có thể play 100 file. Class Font: Cung cấp chức năng in một đoạn text hay số ra màn hình. Class Static_Object: Tạo đối tượng tĩnh trong game như: Block, Scenery, Mark trong game. Class Super_Object: Kế thừa từ class Static_Object, tạo các đối tượng động trong game như: item, box, enemy, bullet. Class Item: Quản lý các item trong game, cung cấp chức năng : animation, move item. Class Enemy: Quản lý các enemy trong game, chung cấp các chức năng animation, move các enemy là class cơ sở cho các class Enemy cụ thể khác để xử lý các đối tượng tương ứng như: Class ConRua,Class KhungLong, class Eato, class otherE, class BulletE, class BulletP. Class EnemyDie: Tạo hiệu ứng khi enemy chết. Class ExplodeGach: tạo hiệu ứng vỡ gạch. Class Scores: Tạo hiệu ứng chạy chữ khi đạt điểm. Class ShowCoin: Tạo hiệu ứng chạy đồng tiền khi ăn đồng tiền từ hộp. Class Form: Tạo ra đối tượng form để hiện thị thông tin dùng trong MapEditor, cung cấp các chức năng vẽ form, bắt các xự kiên input từ người dùng, là class cơ sở của các class FormBlock, FormBonus, FormBuddiels, FormMark, FormMenu, FormScenery, FormPref, FormTool, FormEditor. Class StopWatch: Xác định thời gian trong game, tính khoảng thời gian giữa 2 frame, đảm bảo cố định số frame per second. Class Image: Tạo thể hiên duy nhất là g_Image để load toàn bộ resource của game. Class RectMana: Lưu thông tin về kích thước của các đối tượng trong game như: enemy, item, block, scenery. Class __Node: Lưu thông tin của một node trong quadtree, bao gồm danh sách các object trong node và 4 node con (nếu có). Class __QuadTree: Chứa các __Node trong game dùng để tạo bảng đồ. Cung cấp các chức năng cho phép cập nhật các object trong quadtree. Class Player: Tạo ra đối tượng nhân vật mario, cung cấp các chức năng nhận input từ người chơi điều khiển nhân vật mario, kiểm tra va chạm với các object khác trong map tạo nên game. Player là class cơ sở của các class PlayerTo, PlayerSung, SuperMan, SuperManBe, PlayerDie để xử lý tương ứng từng trạng thái của mario. Class State: Tạo từng state khác nhau của game, là class cơ sở của các class GamePlay,GameMenu,GameHepl, GamePause,GameMenuEnd, Editor, GameLoad,GameSave để thực hiện các chức năng của từng màn chơi tương ứng. 2. Xây dựng Map a. Các object trong map Có 5 loại object: Block, Scenery, Mark, Enemy, Bonus. Các objetc trong game được chia làm 2 loại lớn là Static Object và superOject. - StaticObject gồm: Block, Scenery, Mark. Đặt điểm là không animation, không di chuyển. - SuperObject gồm: Enemy, Bonus. Đặt điểm là có animation và di chuyển. • Đặt điểm của Object: • Block: Tạo đường đi và các chướng ngại vật trong game. • Scenery: Tạo cảnh trong game như cây cối, bảng chỉ dẫn, scenery không xét va chạm. • Mark : Tạo các điểm kết thúc game hay tạo quỹ đạo chuyển động cho các enemy. • Enemy: Các enemy trong game. • Bonus: bao gồm gạch, item, box, coin trong game. • Các Object này phân biệt với nhau bởi thuộc tính Type. Các object con cụ thể được phân biệt bởi thuộc tính ID. b. Cấu trúc lưu Map từ file <Map> <Name>Save9</Name> Tên map <Data>31/0/2011 14:9</Data> ngày giờ tạo map <MapX>0</MapX> Tọa độ x của camera lúc bắt đầu <MapY>5800</MapY> Tọa độ y của camera lúc bắt đầu. <MarioX>50</MarioX> Tọa độ x của mario lúc bắt đầu <MarioY>6240</MarioY> Tọa độ y của mario lúc bắt đầu <MarioState>0</MarioState> trạng thái của mario lúc bắt đầu <Coins> <Gach ID="4" Type="4" x="3100" y="6100" Left="3100" Right="3150" Top="6100" Bottom="6150"/> Danh sách gach có đồng tiền </Coins> <Congs> <Cong x="3625" y="5700" xx="125" yy="4450"/> Danh sách các cống </Congs> <Objects> <Object ID="7" Type="0" x="0" y="4350" Left="0" Right="50" Top="4350" Bottom="4400"/> Danh sách các object </Objects> </Map> Kiểm tra FPS Xử lý Input Cập nhật game Render Kiểm tra trong lực Xử lý Input tương ứng Animation tương ứng Cập nhật lọa vị trí camera • Thông tin object gồm: Type: loai object. ID: Định danh object. X,Y: Tọa độ Object trong map. Left, Right, Top, Bottom: hình chữ nhật của object để xét va cham. • Thông tin cống gồm: X,Y: Tọa độ đầu vào. XX,YY: tọa độ đầu ra. c. Save và load game: Cấu trúc file save game và wordmap là như nhau. Khi save game sẽ lưu toàn bộ thông tin trong quadtree xuống file save tương ứng. khi load lên thì load từ file đã save như load wordmap. 3. Mô hình hoạt động của game Mô hình hoạt động của game: • Xử lý Input: bắt các sự kiện input từ người chơi, xử lý các sự kiện tương ứng đó. • Cập nhật game: Animation, move các object trong game. • Render: Vẽ tất cả các object ra man hình Mô hình hoạt động của mario: Animation Kiểm tra trọng lực Tìm điểm di chuyển thích hợp Di chuyển Mô hình hoạt động của Object: Mô hình vật lý trong game: Áp dụng định luật 3 của Niuton. Nội dung định luât: “Đối với mỗi lực tác động bao giờ cũng có một phản lực cùng độ lớn, nói cách khác, các lực tương tác giữa hai vật bao giờ cũng là những cặp lực cùng độ lớn và ngược chiều.” Object đang đứng yên muốn chuyển động phải có phản lực tác dụng lên nó, phản lực trong trường hợp này xuất phát từ mặt đất mà Object đang đứng. P Với: Delta t là khoảng thời gian giữa 2 frame. Các bước để cho object chuyển động: Kiểm tra xem bên đưới Object có đất hay không. Nếu có đất: Cho Object chuyển động theo phương ngang theo công thức: Có thể bắt đầu nhảy. Nếu không có đất. Nếu đang nhảy: Chuyển động gồm 2 chuyển động thành phần: - Theo phương x - Theo phương y: Với: T là thời gian từ lúc Object bắt đầu rơi tự do. Nếu không đang nhảy: Object rơi tự do theo công thức: 4. Các thuật toán trong game • Xét va chạm giữa các Object: Để đơn giản trong việc xác va chạm giữa các object, mỗi object được đại diện bởi một hình chữ nhật, lúc đó xác định va chạm giữa các object chính là xác định va chạm giữa các hình chữ nhật đó • Thuật toán xét va chạm giữa 2 hình chữ nhật. Bốn trường hợp ABCD không va cham với EFGH: • C.x <= E.x. • A.x >= G.x S = Vx*∆t S = Vx*∆t S = Vy*∆t – ½*T 2 S = g*T H • C.y <= E. • A.y >= C.y • Các thuật toán trong cây tứ phân. Thông tin một node: Thuộc Tính: - _TL,_TR,_BL,_BR : lưu địa chỉ 4 node con. - _IsFull : giới hạn hiện tại của Node. - ListObject : lưu danh sách Object trong Node. Phương thức: - ChiaNodeCon(): Cấp phát bộ nhớ và đẩy Object xuống node con. - Insert(): Chèn Object vào cây tứ phân. - Update() : cập nhât trạng thái mới cho các Object - End(): Giải phóng bộ nhớ. H H H Thuật toán Insert Object vào node: Insert(StaticObj* obj) { if (ListSection rỗng)//node lá { Thêm obj vào node. If(Node đầy) { Chia node con Thêm các object của node vào node con } } Else { Tìm node con A chứa obj. + Tìm thấy A: A->Insert(obj) + Không thấy A: thêm vào tai node. } } Thuật toán lấy Object trong pham vi Rectangle GetObject(list<StaticObj*> *_list, RECT Screen) { • Duyệt từng Obj trong node . Nếu va cham với Screen thì them vào _list. • Nếu node là node lá Thoát • Nếu không phải node lá : Tìm node con A của node chứa Screen o Tìm thấy A: A->GetObject(_list,Screen). o Không tìm thấy A: Gọi R1,R2,R3,R4 là phần giao nhau giữa Screen với 4 node con. iF(R1 tồn tại) _TL->GetObject(_list,R1) iF(R2 tồn tại) _TR->GetObject(_list,R2) iF(R3 tồn tại) _BL->GetObject(_list,R3) iF(R4 tồn tại) _BL->GetObject(_list,R4) } 5. Kết quả: a. Menu: Dùng phìm Up,Down để di chuyển, Enter để chọn. b. Begin: thông tin bất đầu màn chơi. • Play Mario nhỏ: Mario To: [...]... từ project Mario nên về kiến trúc chương trình tương đối giống Mario 1 Các class chính Class GameApp: Là class quan trọng nhất trong game, nhiệm vụ tạo ra một thể hiện duy nhất là đối tượng Mario chịu trách nhiệm khởi tạo game, update game, render game và kết thúc game Class Input: Nhận sự kiện Input từ người chơi Class Suface: Load suface cho game Class Texture: Load texture cho game Class... hiểu biển kiến thức 3D, nên nhóm chỉ sử dụng những kiến thức căn bản nhất để làm game o Góc đặt camera chưa thất tốt, thiết lập ánh sáng còn hạn chế o Chưa tạo được background 3D • Hướng phát triển: o Khắc phục các khuyết điểm o Thêm các hiệu ứng particle để game thêm đẹp mắt o Phát triển play online IV Kết luận đề tài Game là một lĩnh vực đầy thú vị nhưng cũng đầy gian khổ, tuy không nhiều nhưng chúng... load các image của game Class Map: lưu trữ các Block đã rơi Class Block: Lưu trữ hình dạng các block, cung cấp chức năng xoay khối, render, xoay theo thời gian Đây là class cơ sở của các class BlockVuong, BlockDai, BlockLTrai, BlockLPhai, BlockT, BlockZTrai, BlockZPhai Class State: Tạo từng state khác nhau của game, là class cơ sở của các class GamePlay,GameMenu,GameHepl, GamePause để thực hiện... chạm không? Nếu không thì xoay 3 Kết Quả: a Menu: b New Game c Pause game d High Score 4 Kết luận • Ưu điểm: o Cơ bản hoàn thành các chức năng của game, thêm item làm game thêm sinh động o Các Block, Map, item được vẽ hoàn toàn bằng 3D o Tuy là một game nhỏ, nhưng nó đã giúp nhóm làm quen với công nghệ 3D, hiểu được các khái niệm căn bản của một game viết 3D bằng DirectX • Khuyết điểm: o Một tuần là...• Mario có súng: d Load save game: e Save game: f Map Editor: 6 Đánh giá • Ưu điểm: Nhìn chung, chương trình đã hoàn thành tốt các yêu cầu cơ bản được đặt ra, đã xây dựng được một game chạy gần hoàn chỉnh về các chức năng Nhân vật mario di chuyển tương đối khá, nhảy, va chạm với các vật cản trên map tương đối khá Về phần bản đồ thì đã thể hiện được khung cảnh của game: có nhân vật chính,... Trong game hầu hết việc xử lý va chạm chỉ giữa sprite, với mỗi sprite là một hình chữ nhật Nhưng mỗi nhân vật có hình dáng khác nhau nên nhiều lúc va chạm không chính xác o Chưa có option tùy chỉnh kích thước màn hình, âm thanh o Mắc một số lỗi va chạm khi biến hình • Hướng phát triển: khắc phục các khuyết điểm còn tồn tại, đồng thời hướng đến xây dựng trên nền tảng 3D III.Tetris 3D: Tetris đươc phát triển. .. hiểm, rùa, khung long Hiệu suất của game tương đối khá, việc load game tương đối nhanh, hình ảnh rất rõ không gây phản cảm cho người sử dụng Ngoài ra, việc bố trí các phím chức năng khá hợp giúp cho người chơi dễ dàng làm quen với game Map Editor có thể chạy thử thuận lợi cho người chơi tạo ra các map riêng cho mình • Khuyết điểm: o Bên cạnh những thành công đã đạt được, game còn bị một số khuyết điểm như... • Jonathan S Harbour (2007) – Beginning Game Programming Second Edition • Jonathan S Harbour (2006) – Advanced 2D Game Development • Frank D.Luna (2003) – Introduction to 3D Game Programming with DirectX 9.0 • James W Cooper (2002) – Introduction to Design Patterns in C# • http://www.uitse.com • http://dofactory.com • http://www.thuvienvatly.org • http://www.gamedev.net ... hoàn hảo nhưng với mario và tetris 3D là sản phẩm đầu tay của chúng em, là thực tế của những gì được học Chúng em chân thành cảm ơn sự nhiệt tình chỉ dạy của thầy Hùng, thầy Dũng đã giúp chúng em có những kiến thức đầu tiên trên con đường chinh phục con đường đầy khó khăn này Dù khó khăn, nhưng với lòng say mê với game, chúng em tin chắc mình có thể tiến xa hơn, sẽ cải thiện được 2 game này tốt hơn,... update game, render game và kết thúc game Class Input: Nhận sự kiện Input từ người chơi Class Suface: Load suface cho game Class Texture: Load texture cho game Class Sprite:Tạo đối tượng Sprite cho game Class Audio:Cung cấp các chức năng load, play, stop các file audio thông dung Cùng lúc có thể play 100 file Class Font: Cung cấp chức năng in một đoạn text hay số ra màn hình Class Item: Quản . từng trạng thái của mario. Class State: Tạo từng state khác nhau của game, là class cơ sở của các class GamePlay,GameMenu,GameHepl, GamePause,GameMenuEnd, Editor, GameLoad,GameSave để thực. đầu. <MarioX>50</MarioX> Tọa độ x của mario lúc bắt đầu <MarioY>6240</MarioY> Tọa độ y của mario lúc bắt đầu <MarioState>0</MarioState> trạng thái của mario. giao! II. Mario 1. Các class chính Class GameApp: Là class quan trọng nhất trong game, nhiệm vụ tạo ra một thể hiện duy nhất là đối tượng Mario chịu trách nhiệm khởi tạo game, update game, render game