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

đồ án công nghệ thông tin Lập trình game trên di động với lớp Game Canvas

40 1,2K 4

Đ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 40
Dung lượng 483 KB

Nội dung

Nhiều công nghệ engine đã ra đời để phục vụ cho việc phát triển game như Unreal Engine , Cry Engine … mỗi công nghệ đều có ưu nhược điểm riêng cũng như những game đi kèm với các công ngh

Trang 1

Lời cảm ơn

Trước hết em xin gửi lời cảm ơn thầy Lê Tấn Hùng , giáo viên hướng dẫn

em trong đợt thực tập cơ sở này Cám ơn các bài tập của thầy giúp em có được những định hướng vững vàng đi đến kết thúc đợt thực tập

Cảm ơn các anh chị trong ban lãnh đạo công ty Sunnet , cảm ơn các anh chị , các bạn đang làm việc hay đang thực tập tại công ty , mọi người đã có những góp ý quý báu giúp em hoàn tất đợt thực tập cơ sở này

Em mong muốn các anh chị chỉ bảo cho em nhiều hơn nữa , giúp em tự nâng cao kỹ thuật bản thân , để cảm thấy tự tin hơn mỗi khi tiếp nhận một

đề tài khó

Em đã có được 2 tháng thực tập cơ sở vô cùng vui vẻ và thú vị ,Cảm ơn mọi người rất nhiều !

Trang 2

Chương 1

Sơ lược về Game và lập trình Game

I Giới thiệu về phát triển Game

Ngành công nghiệp game đang phát triển rất mạnh mẽ , và các sản phẩm game làm ra ngày càng có ảnh hưởng lớn đến đời sống tinh thần của mọi người , game đã không chỉ đơn thuần là một sản phẩm giải trí nữa , game là một thế giới của công nghệ và cảm xúc , và thậm chí người

ta còn xây dựng nên hẳn một văn hóa mới - văn hóa game

Được coi như là một ngành công nghiệp , việc phát triển game cũng phải tuân theo những quy trình khắt khe nhất từ khâu ý tưởng chuẩn bị cho đến lúc ra sản phẩm Nhiều công nghệ engine đã ra đời để phục vụ cho việc phát triển game như Unreal Engine , Cry Engine … mỗi công nghệ đều

có ưu nhược điểm riêng cũng như những game đi kèm với các công nghệ

đó hoặc là hướng đến một thế giới với hình ảnh lung linh , huyền ảo hoặc một thế giới chân thực , gần gũi , nhưng tất cả đều có một điểm chung : phát triển không ngừng nghỉ

Lập trình Game là một công việc vô cùng thú vị , bạn hãy thử tưởng

tượng bạn múa tay trên bàn phím , và từ từ một thế giới ảo do chính bạn sáng tạo ra dần dần hình thành Và thế giới đó là thế giới của bạn , có

những con người bạn xây dựng , có những thông điệp bạn muốn truyền đạt

Trang 3

và có những cảm xúc bạn muốn gửi gắm Nhưng đồng thời đó cũng là một công việc “ nguy hiểm “ khi mà ngành game công nghiệp đang cạnh tranh ngày càng khốc liệt , nếu bạn không tiến lên thì có nghĩa là bạn đang thụt lùi

II Phân loại Game

Game thường được phân chia theo nội dung , tính chất game- play , tuy nhiên cách phân loại game cũng chỉ hướng người chơi đến nội dung ,

phong cách chủ đạo chính của game , bởi vì một game thường có sự kết hợp nhiều phong cách với nhau , tạo thành bữa tiệc phong phú và phù hợp với nhiều “ khẩu vị “ khác nhau Bên cạnh đó game còn được phân loại ESRB - Entertainment Software Rating Board , một cách phân loại cho đối tượng chơi game

Dưới đây là một số cách phần loại game

Với RPG, người chơi vào vai một nhân vật hoặc một nhóm để tham giacác

sự kiện, giao tiếp với các nhân vật “phụ” NPC (non-player characters)

Trang 4

tham gia các cuộc chiến (theo lượt hoặc thời gian thực) với một quá trình xây dựng nhân vật thông qua việc tăng cấp độ (level up), phát triển các kỹ năng (skill), tính cách Thế giới trong RPG thường lấy bối cảnh châu Âu xưa với các phép màu huyền bí, hoặc lấy bối cảnh giả tưởng đậm chất

“fantasy”

Ví dụ : Final Fantasy , Dragon Quest , Fire Emblem , Diablo ,…

Adventure (phiêu lưu)

Nét cơ bản của adventure là khám phá các vùng đất, tìm các vật dụng vàgiải đố; có rất ít hoặc không có các cảnh mang tính “hành động” Khácvới RPG, adventure có rất ít hoặc không có sự phát triển nhân vật, cũngnhư không tăng cấp độ

Ví dụ : Siberia , Monkey Island …

Strategy (chiến thuật)

Strategy chú trọng cách quản lý nguồn tài nguyên và quân đội trước

những đối thủ do máy hoặc người chơi khác điều khiển và hầu hết đều

“dính dáng” chiến tranh Nhìn chung, có 2 dạng phân biệt được là realtimestrategy (chiến thuật thời gian thực, RTS) và turn-based strategy (chiến thuật theo lượt, TBS)

Ví dụ : WarCraft , StarCraft , AOE ( Age of Empire ) …

Trang 5

Racing (đua xe)

Phân loại Game theo ESRB -Entertainment Software Rating Board

EC - Early Childhood: Nội dung phù hợp cho trẻ em từ 3 tuổi trở lên

E — Everyone: Nội dung thích hợp cho gamer trên 6 tuổi

E10+ — Everyone 10 and older: Gamer trên 10 tuổi

T — Teen: Gamer trên 13 tuổi

M — Mature: Gamer trên 17 tuổi

AO — Adults Only: Gamer 18+

RP — Rating Pending: Sản phẩm đã gửi lên ESRB nhưng chưa có quyếtđịnh

Trang 6

CHƯƠNG 2 Những vấn đề đã nghiên cứu được trong đợt

thực tập

I Kỹ thuật lập trình di động với J2ME

Sau khi nghiên cứu tài liệu “ Lập trình trên di động với J2ME “ cùng với các bài tập thực hành thực tế trên công ty Sunnet , em đã có một số kĩ năng cơ bản với lập trình trên di động Cụ thể

- hiểu biết sơ lược về ứng dụng MIDP ( Mobile Information Device

Profile )

- các thành phần giao diện ở mức cao của ứng dụng MIDP

+ Đối tượng Display , Displayable , Screens

+ Thành phần Form và Items : DateField , Gauge , StringItem ,

TextField , ChoiceGroup , Spacer , Image , ImageItem

+ Thành phần List , TextBox , Alert , Ticker

- các thành phần giao diện ở mức thấp của ứng dụng MIDP

+ các hàm API(Application programming interface ) ở mức thấp : Lớp Canvas và lớp Graphics

Trang 7

Lớp Canvas cung cấp một khung vẽ cho phép tạo ra giao diện tùy biến người dùng , một số lượng lớn các phương thức trong lớp này sẽ dùng để

xử lí sự kiện , vẽ ảnh và chuỗi lên thiết bị hiển thị : hệ thống trục tọa độ , tạo một đối tượng Canvas , vẽ trên đối tượng Canvas , Sự kiện hành động ,

mã phím , các hành động xử lí các trò chơi …

Chúng ta sử dụng đối tượng Graphics để vẽ lên một Canvas : hỗ trợ màu , loại nét vẽ , vẽ cung , vẽ hình chữ nhật , đường chéo , font chữ , điểm neo ,

vẽ các chuỗi kí tự , vẽ ảnh…

- Xử lí sự kiện : đối tượng Command , đối tượng Item

- Record Management System : tính năng cho phép lưu trữ dữ liệu

Sau đây em xin đi sâu hơn một chút về J2ME

1.Lịch sử phát triển của J2ME

J2ME được coi là ngôn ngữ lập trình trên các thiết bị có tính chất nhỏ gọn như Mobile (di động) hay PDA ( thiết bị trợ giúp cá nhân), được phát triển

từ kiến trúc Java Card ,Embeded Java và Personal Java của phiên bản Java 1.1

Java ban đầu được thiết kế cho các máy với tài nguyên bộ nhớ hạn chế Lúc đó thị trường của J2ME được mở rộng cho các thiết bị như:

-Các loại thẻ cá nhân như Java Card-Máy điện thoại di động

-PDA (Personal Digital Assistant) :các thiết bị trợ giúp cá nhân cầm tay

Trang 8

Hiện nay có một số cung cụ hỗ trợ phát triển J2ME như

-Netbean IDE

-Sun J2ME Wirless Toolkit 2.5v

-Borland JBuilder

-Eclipse với các EclipseME có plug in

2 Kiến trúc của J2ME

2.1 Mô hình phát triển

Trong đó :

- CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết nối giới hạn) : được thiết kế để nhắm đến các thiết bị cấp thấp như các thiết bị di động hoặc PDA có bộ nhớ trong bé hơn 512 Kb

-CDC (Connected Device Configuration -Cấu hình thiết bị kết nối ) : được đưa ra để nhắm đến các thiết bị có tính năng mạnh hơn CLDC nhưng vẫn ít hơn các thiết bị để bàn sử dụng J2SE Những thiết bị thuộc dòng CDC có bộ nhớ trong lớn hơn 2Mb và có bộ xử lý mạnh hơn

Trang 9

-MIDP (Mobile Information Device Profile ) :profile này được sử dụng các tính năng kết nối các thành phần hỗ trợ giao diện người dùng MIDP cung cấp một giao diện điên thoại đơn giản với các tình năng mạng đơn giản dựa trên giao thức HTTP

2.2 Giới thiệu về MIDP

2.2.1 Định nghĩa

MIDP là profile được định nghĩa dành riêng cho các thiết bị di động và là thành phần chính trong J2ME , nó cung cấp các chức năng cơ bản cho hầu hết các dòng thiết bị di động khá phổ biến hiện nay

Đối tượng của MIDP hướng đến chính là các dòng máy cấu hình thấp , do

Trang 10

-Phần lớn các thư viện trong API cho SWING và AWT không thế sử dụng cho MIDP

-Không hỗ trợ các tính năng quản lý file và thư mục

b Những chức năng MIDP cung cấp

-Các lớp và các kiểu dữ liệu : các lớp trong gói java,util như Stack , Vector hay Hastable

-Hỗ trợ đối tượng Display

-Hỗ trợ Form và giao diện người dùng

-Thêm các thư viên hỗ trợ Multimedia

-Mở rộng tính năng của FORM Nhiều cải tiến được đưa thêm vào API

Trang 11

3 Các thành phần của J2ME

Trong cuốn tài liệu kèm theo trong CD ( lập trình trên di động với J2ME )

có hướng dẫn rất chi tiết về vấn đề này

Việc đi sâu vào chi tiết cách sử dụng các thành phần của J2ME không phải

là trọng tâm của báo cáo này , do đó em xin phép chỉ đửa ra mô hình mô tả các thành phần và quan hệ giữa chúng như ở hình bên

II Lập trình game trên di động với lớp Game Canvas

Lập trình game trên điện thoại di động có những lớp tiện ích và các rất quan trọng chẳng hạn như là GameDesign , Sprite , TiledLayer hay là

LayerManager

Trang 12

Em xin phép giới thiệu sơ lược qua

- Các thao tác với các sprite , tiledlayer và layermanager

+ các sprite là các nhân vật trong game nói chung , sprite có thể được điều khiển hoặc cũng có thể đứng làm phông cảnh , các phương thức của lớp sprite như là : đặt vị trí , xét va chạm , thể hiện hình ảnh , thể hiện các chuyển động liên tiếp

+ các tiledlayer được dùng làm background , có thể xem tiledlayer là mở rộng của sprite : nó bao gồm một loạt các sprite đứng yên phía sau các sprite chuyển động, tuy nhiên cũng có các animated tiledlayer - các

tiledlayer có các cell động

- cách bắt sự kiện và các thao tác hiển thị hình ảnh lên thiết bị trong game canvas: các hình ảnh trong game canvas hiển thị lên thiết bị một cách liên tục qua hàm gọi flushGraphics ( ) , do đó game canvas thích hợp với

nhưng game có nhiều chuyển động nối tiếp và ghép thành hình ảnh liên tục trên mắt người quan sát

2 đoạn code dưới đây cung cấp cái nhìn cơ bản về cách thức sử dụng và hoạt động của sprite , layermanager và tiledlayer

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

Trang 13

public class ExampleGameCanvas extends GameCanvas implements

Runnable {

private boolean isPlay; // Game Loop runs when isPlay is true

private long delay; // To give thread consistency

private int currentX, currentY; // To hold current position of the 'X' private int width; // To hold screen width

private int height; // To hold screen height

// Sprites to be used

private Sprite playerSprite;

private Sprite backgroundSprite;

// Layer Manager

private LayerManager layerManager;

// Constructor and initialization

public ExampleGameCanvas() throws Exception {

super(true);

width = getWidth();

height = getHeight();

currentX = width / 2;

Trang 14

currentY = height / 2;

delay = 20;

// Load Images to Sprites

Image playerImage = Image.createImage("/transparent.png"); playerSprite = new Sprite (playerImage,32,32);

Image backgroundImage =

Image.createImage("/background.png");

backgroundSprite = new Sprite(backgroundImage);

layerManager = new LayerManager();

layerManager.append(playerSprite);

layerManager.append(backgroundSprite);

}

// Automatically start thread for game loop

public void start() {

isPlay = true;

Thread t = new Thread(this);

t.start();

}

Trang 15

public void stop() { isPlay = false; }

// Main Game Loop

public void run() {

// Method to Handle User Inputs

private void input() {

int keyStates = getKeyStates();

playerSprite.setFrame(0);

// Left

if ((keyStates & LEFT_PRESSED) != 0) {

Trang 16

currentX = Math.max(0, currentX - 1);

if ((keyStates & UP_PRESSED) != 0) {

currentY = Math.max(0, currentY - 1);

Trang 17

currentY = Math.min(height, currentY + 1);

playerSprite.setFrame(4);

}

}

// Method to Display Graphics

private void drawScreen(Graphics g) {

g.setColor(0x00C000);

g.fillRect(0, 0, getWidth(), getHeight());

// updating player sprite position

Trang 18

Còn đoạn code dưới đây giới thiệu về phương khởi tạo ra một TiledLayer đơn giản

public class ExampleGameCanvas extends GameCanvas implements

Runnable {

private LayerManager layerManager;

private TiledLayer tiledBackground;

Trang 19

// Constructor and initialization

public ExampleGameCanvas() throws Exception {

private TiledLayer initBackground() throws Exception {

Image tileImages = Image.createImage("/tiles.png");

TiledLayer tiledLayer = new

Trang 21

Hiện tại em đã hoàn thành được 3 sản phẩm : game Chicken Invaders (bắn

gà ) ,game Doctris Deluxe ( xếp thuốc ) game Mummy Deluxe ( game xác ướp - thể loại giải đố )

Dưới đây là một số hình ảnh

Trang 23

I Về game bắn gà Chicken Invaders

Dưới sự hướng dẫn của anh Bình , phó giám đốc công ty Sunnet ICT

Solution , em đã hoàn thành được game đầu tay của riêng mình Qua sản phẩm đầu tay này , em đã tự rút ra được một số kinh nghiệm cho bản thân

về cách bắt các sự kiện nhân vật , xử lí các lệnh command và các form menu screen , hay là một số vấn đề gặp phải khi xử lí các file âm thanh trên điện thoại thật Game đầu tiên quả thật mất rất nhiều thời gian ,

nhưng từ những gì rút ra được , tiến độ làm việc với các game sau này quả thực nhanh hơn rất nhiều

J2ME cung cấp cho chúng ta một lớp Game Builer vô cùng tiện lợi để xử

lí các sprite , các tiledlayer hay là tạo các scene cho game

Tuy rằng lớp Game Builder ngay trên phiên bản NetBeans 6.8 mới nhất vẫn tồn tại một số thiếu sót gây khó chịu cho người dùng : ví dụ như khi bạn vào Game Builder mà không tìm thấy các sprite mà mình tạo ra thì phải khởi động lại NetBeans mới nhìn thấy được

Một số hình ảnh các sprite được tạo dựng trong game

Trang 25

Việc tạo dựng các sprite giống như là việc đi tìm diễn viên cho một bộ phim vậy , vấn đề ở đây là hãy chọn các diễn viên có “ diện mạo “ đẹp và quan trọng nhất là “ catxê thấp “ ( dung lượng ảnh nhỏ ), bởi thiết bị

mobile phần lớn vẫn còn bị hạn chế về bộ nhớ ,chọn lựa các sprite phù hợp với kích thước của mobile thường tốn khá nhiều thời gian , bởi có nhiều dòng máy và nhiều kích thước khác nhau,chế độ xử lí hình ảnh cũng khác nhau ( một số dòng máy quá thấp sẽ làm mất màu hình ảnh ) , khó

mà chọn được hình ảnh phù hợp cho tất cả dòng máy

Với game Chicken Invader , kích thước cho phần lớn các Image là 20x20

Số lượng gà theo hàng ngang và hàng dọc đã được tùy chỉnh tự động theo kích thước máy ảnh và không hề cố định Tuy nhiên một số máy kích thước quá bé sẽ làm số gà trở nên rất ít , cho nên cần thiết phải có thêm một bộ ảnh với kích thước nhỏ hơn nữa là 10x10

Chuyển động của các con gà thể hiện tùy vào thuật toán của mỗi người , nhưng trong game này , em đã thể hiện 2 chuyển động chủ đạo chính và qua mỗi cửa có sự kết hợp chúng lại

- chuyển động qua lại trái phải ( hàm animatedTiledLayer() )

- chuyển động lên xuống ( hàmanimatedTiledLayer( boolean ) )

Chuyển động của phi thuyền do người chơi điều khiển (hàm input() )

Trang 26

Các viên đạn hay các quả trứng được quản lí bởi một vector , khi viên đạn hay quả trứng rơi khỏi màn hình , vector sẽ giải phóng chúng để thu hồi bộ nhớ

Mỗi khi bấm phím Up viên đạn sẽ được bắn ra , để các viên đạn bắn ra được đều và đẹp tùy vào thời điểm “ nạp đạn “ của mỗi người , mỗi khi

em bắn ra một viên đạn thì cũng là lúc nạp đạn vào , em tạo một biến đếm

để nạp đạn , tránh cho việc nạp đạn liên tục lãng phí bộ nhớ

Chuyển động của boss đi theo hình zic-zac, boss thả trứng một cách ngẫu nhiên nhưng cũng theo thuật toán thả trứng của gà con , trứng của boss cũng được quản lí bởi một vector

Lớp GameDesign : 1 số phương thức chính của lớp GameDesign

Lấy về hình ảnh các nhân vật

+getBoss() : lấy về hình ảnh Boss

+getCHICKEN() : lấy về hình ảnh Enemy

+getBullet2() : lấy về hình ảnh đạn

+getDestroy() : hình ảnh nổ - gameover

Lớp Level kế thừa từ lớp game Canvas : một số phương thức quan

trọng

Ngày đăng: 24/04/2015, 22:12

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w