Tải bản đầy đủ (.pdf) (12 trang)

Báo cáo bài tập lớn lập trình hướng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (555.37 KB, 12 trang )

báo cáo lập trình hướng đối tượng

nhóm 19
Ngày 07 tháng 08 năm 2014

1


MỤC LỤC

1.
2.
3.
4.
5.
6.

Tổng quan ……………………………………………………………4
Phân tích thiết kế mức kiến trúc ……………………………………5
Thiết kế chi tiết ………………………………………………………6
Các vấn đề gặp phải …………………………………………………8
Kết luận đánh giá ……………………………………………………10
Tài liệu tham khảo …………………………………………………..12

2


LỜI NÓI ĐẦU
Lập trình hướng đối tượng (gọi tắt là OOP, từ chữ anh ngữ object-oriented
programing), hay còn gọi là lập trình hướng đối tượng, là kỹ thuật lập trình hỗ trợ
công nghệ hướng đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ


phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên
tập trung vào các đối tượng phần mềm ở bậc cao hơn. Ngoài ra, nhiều người còn cho
rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương
pháp trước đó.
Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao
tác viết mã nguồn cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố
bên ngoài có thể tương tác với các chương trình đó giống như là tương tác với các đối
tượng vật lý.
Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu
mà chúng được nhìn nhận như là một đơn vị duy nhất. Mỗi đối tượng có một tên riêng
biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó. Như
vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của
nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường.

3


Chương 1: Tổng quan
-

Ngôn ngữ sử dụng: JavaSE.
Sử dụng các thư viện có sẵn như: java.awt.*, java.swing.*, java.xml.*… và tham
khảo một số Game-Engine có sẵn.
Sử dụng bộ ảnh lấy từ game pacman cổ điển.
Chương trình hoàn toàn do nhóm tự thiết kế và lập trình.
Áp dụng tư duy hướng đối tượng trong thiết kế và lập trình các lớp.

4



Chương 2: Phân tích và thiết kế mức kiến trúc
2.1

Mô tả yêu cầu bài toán

Người chơi điều khiển 1 nhân vật trong game di chuyển theo bản đồ (map) có
sẵn để đến được đích đã định trước. Đến được đích người chơi sẽ chiến thắng
(victory). Khi đến được đích của map chương trình sẽ tự động chuyển map khác. Trên
đường đi sẽ xuất hiện nhiều quái vật. Nhiệm vụ của người chơi là điều khiển 4 phím
lên (up), xuống(down), trái(left), phải(right) để tránh quái vật. Khi gặp quái vật các chỉ
số tốc độ(speed), máu(blood), sức mạnh(attack) của nhân vật sẽ bị giảm xuống. Khi
một trong các chỉ số trên nhỏ hơn hoặc bằng 0 người chơi sẽ thua cuộc(Over).
2.2

Biểu đồ lớp

Charactor

Player

Ghost
Map
Position

GameData

Main

5



Region

Thread

GameCanvas

Sprite

GameLoop

GameApplication

Game

SpriteSheet

Main

Chương 3: Thiết kế chi tiết
3.1

Tổng quan về thiết kế bài toán

3.1.1 Các package trong bài toán
- Game.simpleRPG: Gồm các tất cả các class tạo người chơi(player), tạo quái
vật(ghost), tạp bản đồ(map), xử lý các chuyển động …
- org.game.engine: Gồm các engine phục vụ load ảnh, load file, và trợ giúp bắt
các sự kiện


3.1.2 Các interface

3.1.3 Các abstract class

6


- Game: Thuộc package org.game.engine. Mội đối tượng muốn vẽ lên frame
đều phải thực thi interface này. Nó có một phương thức cần được thực thi abstract
public void draw(Graphics2D g).

Game
# over: boolean
# title: String
# delay: int
+ isOver: boolean
+ getTitle: String
+ getDelay: int
+ keyPressed: void

3.2

Thiết kế phần load bản đồ(map) và các hình ảnh

- Class Main sẽ sử dụng phương thức khởi tạo để gọi đến phương thức khởi tạo
của lớp SpiteSheet.
- Phương thức khởi tạo của lớp SpiteSheet sẽ nhận đầu vào là 2 String là tên
của ảnh(images) và tên của file .txt chứa thông tin của ảnh.
- Ảnh(images) là các ảnh của người chơi(player), quái vật(ghost), các thông
báo và các bản đồ(map). File .txt chứa các tọa độ và các thông tin cần thiết của ảnh để

load ảnh ra màn hình.

3.3

Thiết kế chi tiết phần chơi game

- Trò chơi sẽ bắt đầu từ lớp Main. Lớp Main kế thừa từ lớp trừu tượng(abstract
class) Game để bắt các sự kiện từ bàn phím. Phương thức public static void main() gọi
đến phương thức của lớp GameApplication để vẽ lên Frame ban đầu.
- Lớp Main có các phương thức:

7


+ public void keyPressed(KeyEvent e) để bắt sự kiện từ bàn phím là các
phím lên, xuống, trái, phải.
+ public void update() để gọi đến các phương thức di chuyển của người
chơi và quái vật.
+ public void draw(Graphics2D g) để vẽ ra màn hình bản đồ, quái vật,
người chơi, thông số người chơi, và thông báo thất bại hay chiến thắng.
- Lớp GameData() có các phương thức:
+ private void setMap(int m) để thay đổi map mới khi qua màn.
+ public void attack(Ghost g, Player g) để tạo phương thức chiến đấu.
+ public void moveGhosts(int [] reqDirs) tạo các chuyển động của ghost
- Lớp Position xác định tọa độ của người và quái vật.
- 2 Lớp Player và Ghost kế thừa từ lớp Character các thuộc tính vị trí, attack,
blood, speed, và phương thức protected boolean move() để di chuyển.
- Lớp Map load file Mazes.txt để load đường đi cho người chơi và quái vật.
- Lớp GameLoop kế thừa từ lớp Thread để chia luông, tách luồng đặc biệt quan
trọng khi xử lý giao diện.


Chương 4: Các vấn đề gặp phải
4.1

Các vấn đề khi thiết kế vẽ map và vẽ nhân vật
Nhóm đã gặp rất nhiều vấn đề khi thiết kế phần vẽ nhân vật và tạo map.

Thứ nhất, là làm sao tìm được bộ ảnh của game khi mà trình độ sử dụng
photoshop còn nhiều hạn chế. Rất may là nhóm đã tìm được trên mạng bộ ảnh của
game pacman. Nhóm đã sử dụng thêm 1 file .text để xác định tọa độ cho việc đọc file
ảnh.

8


Thứ hai, sau khi tìm được bộ ảnh, thì có thêm vấn đề làm sao để cho người chơi
và quái vật di chuyển theo đúng đường mà map đã vẽ mà không đi lệch ra ngoài. Cuối
cùng nhóm đã quyết định dùng file .text với các ký tự 0, 1, 2, 3, 4, 5, 6, 7.. cho việc
tạo bản đồ.

9


4.3

Các vấn đề khi thiết kế phần chơi game

Thứ nhất, việc vẽ các hình ảnh lên màn hình và chuyển động như thật lúc đầu
đã làm cho nhóm gặp nhiều khó khăn. Sau đó là vấn đề khi cho đối tượng chuyển
động đi kèm với xử lý sự kiện thì đối tượng không chuyển động mà chỉ hiện ra vị trí

sau khi hết thời gian chuyển động. Qua tìm hiểu nhóm biết rằng: Thực ra, chương
trình khi chạy bắt đầu từ hàm main(), tuần tự từng dòng lệnh cho đến lệnh tạo cửa sổ
rồi hiện lên, thì phía dưới đang bắt đầu chạy ngầm 1 vòng lặp vô hạn. Vòng lặp nói
trên làm rất nhiều việc quan trọng, trong đó có 2 việc cơ bản: vẽ giao diện và đón bắt
xử lý sự kiện. Hai công việc đó không bao giờ thực hiện đồng thời tại mỗi thời điểm.
Để thực hiện được việc trên ta phải tách việc vẽ sang 1 thread song song khác.
Thứ 2 vấn đề hình ảnh chuyển động bị giật… nhóm đã sử dụng kỹ thuật
Double Buffering: Vẽ tất cả các hình ảnh vào một BufferedImage rồi mới vẽ lên màn
hình

Chương 5: Kết luận và đánh giá

5.1

Đánh giá

- Kết quả đạt được: Trong quá trình làm bài tập lớn nhóm đã hiểu sâu hơn về
ngôn ngữ lập trình java, đặc biệt là đồ họa. Thu được nhiều kinh nghiệm trong việc
thiết kế lập trình hướng đối tượng.
- Khiếm khuyết: Khó khăn trong việc phân chia công việc trong nhóm. Khó
khăn để phân chia công việc sao cho mỗi người có thể làm độc lập với nhau. Và vì hạn
chế về mặt thời gian nên chưa thực hiện được toàn bộ những chức năng mong muốn
như: hiệu ứng âm thanh, xử lý đồ họa chưa được hoàn hảo….

10


5.2

Phân chia công việc trong nhóm


- Phần công việc chung: Cả nhóm thống nhất về yêu cầu bài toán. Về việc phân
chia các package, việc lựa chọn các class trừu tượng và các class quan trọng.
- Phần công việc riêng:
+ Nguyễn Bá Duy

: Làm phần chơi game.

+ Nguyễn Khánh Hoàng

: Làm phần tạo bản đồ.

+ Hoàng Văn Giáp

: Làm phần xử lý luồng.

+ Nguyễn Trọng Quý

: Làm phần xử lý luồng.

+ Triệu Văn Dũng

: Làm phần đọc file và viết báo cáo.

+ Trần Văn Đức

: Làm phần xử lý ảnh và file info.txt.

11



Chương 6: Tài liệu tham khảo
Bộ ảnh được lấy trên mạng. Chương trình hoàn toàn do nhóm thiết kế và tự lập
trình.
Các kiến thức về lập trình java tham khảo ở:
- stackoverflow.com
- congdongjava.com
- ntu.edu.sg
- wikipedia.org
- youtube.com

12



×