1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu phát triển game Mario

20 1,8K 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 2,91 MB

Nội dung

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 đó.

Trang 1

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

Trang 2

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à

Trang 3

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:

scenery không xét va chạm

động cho các enemy

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

Trang 4

Kiểm tra FPS

Xử lý Input

Cập nhật game

Render

</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>

Thông tin object gồm:

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

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

Trang 5

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

Animation

Kiểm tra trọng lực

Tìm điểm di chuyển thích hợp

Di chuyển

Á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.”

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

Trang 6

Với: Delta t là khoảng thời gian giữa 2 frame.

Kiểm tra xem bên đưới Object có đất hay không

công thức:

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

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:

P

S = g*T

S = Vx*∆t

S = Vy*∆t – ½*T2

S = Vx*∆t

H

Trang 7

 C.y <= E.

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ớ.

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

}

}

H

H

H

Trang 8

Thuật toán lấy Object trong pham vi Rectangle

GetObject(list<StaticObj*> *_list, RECT Screen) {

them vào _list

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.

Trang 9

b Begin: thông tin bất đầu màn chơi.

Trang 10

Mario nhỏ:

Mario To:

Trang 11

Mario có súng:

d Load save game:

Trang 12

e Save game:

f Map Editor:

Trang 13

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, gạch, cỏ, vàng (tiền), hố sâu nguy 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:

khuyết điểm như sau:

o Vấn đề va chạm xử lý chưa mượt 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

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

Trang 14

III.Tetris 3D:

Tetris đươc phát triển 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 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 lý các item xuất hiện theo thời gian, có 2 item: tăng

scores và clear map

Class DongHo: Quản lý thời gian thực để tăng level theo thời gian.

Class Xfile: chức năng load và vẽ các file *.x

Class ImageScr: 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

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ấu trúc của Block:

Hình dạng Block đươc lưu trong một mảng 2 chiều Có 4 trạng thái, mỗi trạng thái tương ứng với một mảng 1 chiều có 4 phần tử lưu

vị trí 4 khối con của Block trong ma trận 4x4 , và một biến kiểu int để lưu màu của block

Ví dụ:

Trang 15

Int **Info; int _Color;

Info[0]= {1,2,6,10};

Info[1] = {3,5,6,7};

Info[2] = {2,6,10,11};

Info[3] = {5,6,7,9};

b Cấu trúc Map:

Map được lưu bằng một mảng 2 chiều thể hiện ma trân như sau:

o Ô còn trống là -1

o Ô khác -1 đã chứa block, giá trị là màu của block

o Ô có giá trị là 0 ở bên trái, bên phải và phía dưới có sãn trong map để xét va chạm, tránh làm cho block di chuyển ra khỏi Map Các ô này không được vẽ

Trang 16

c Di chuyển Block:

Block được chứa trong ma trận 4x4, ma trận 4x4 được chứa trong Map là ma trân 20x14

Di chuyển Block chính là di chuyển ma trận 4x4

d Xét va chạm:

Tìm vị trí của các ô của block trong ma trận 20x14 Lần lượt kiểm tra các vị trí đó trong Map đã chứa block chưa, nếu có tức là va chạm,

và ngược lại

Ví dụ:

Info[0]= {1,2,6,10};

Vị trí của Block trong ma trận 4x4 là : {0,1} , {0,2} , {1,2} , {2,2}

Ma trận 4x4 có vị trí {5,7} trong ma trận 20x14

Vị trí của Block trong ma trân 20x14 là: {5,8} , {5,9} , {6,9} , {7,9}

Kiểm tra tại các vị trí: {5,8} , {5,9} , {6,9} , {7,9} Nếu tồn tại một điểm khác -1 va chạm

e Xét di chuyển Block:

Xét vị trí sắp di chuyển có va chạm không? Nếu không thì va chạm

f Xét xoay Block

Xét trạng thái sắp xoay của Block có va chạm không? Nếu không thì xoay

3 Kết Quả:

Trang 17

a Menu:

b New Game

c Pause game

Trang 18

d High Score

Trang 19

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à một thời gian không nhiều để tìm 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 em đã nếm trãi cái cảm giác đó Khi thì rối bời, chẳng có ý tưởng gì, sao mà khởi tạo window hoài không xong? Để rồi khi load được một tấm ảnh đầu tiên và render nó ra, lúc đó là một cảm vui mừng không thể nào tả hết Thế là chu kỳ đó

cứ tiếp diễn bí đường rồi lại tìm ra, nỗi buồn thất bại đan xen niềm vui chiến thắng, có lẽ những người trong cuộc mới hiểu được cảm giác này! Tuy chưa thật 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, để đồ án môn học không chỉ còn là đồ án môn học Và để thực hiện được điều này chúng em rất cần sự giúp đỡ của các thầy

Trang 20

V Tài liệu tham khảo

Second Edition

Development

with DirectX 9.0

C#

Ngày đăng: 19/08/2014, 23:42

HÌNH ẢNH LIÊN QUAN

Hình dạng Block đươc lưu trong một mảng 2 chiều. Có 4 trạng  thái, mỗi trạng thái tương ứng với một mảng 1 chiều có 4 phần tử lưu - Nghiên cứu phát triển game Mario
Hình d ạng Block đươc lưu trong một mảng 2 chiều. Có 4 trạng thái, mỗi trạng thái tương ứng với một mảng 1 chiều có 4 phần tử lưu (Trang 14)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w