bài tập lớn công nghệ java đề tài trò chơi flappy bird

21 0 0
Tài liệu đã được kiểm tra trùng lặp
bài tập lớn công nghệ java đề tài trò chơi flappy bird

Đ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

Trang 1

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢIKHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚNCông Nghệ Java

ĐỀ TÀI: TRÒ CHƠI FLAPPY BIRD

Trang 2

LỜI NÓI ĐẦU

Trong thời đại hiện đại, Công nghệ Thông tin đã trở thành một phầnkhông thể thiếu của cuộc sống hàng ngày của chúng ta Từ việc sửdụng điện thoại di động cho đến việc lướt web trên máy tính, chúngta luôn tiếp xúc và phụ thuộc vào các công nghệ này để giao tiếp,làm việc và giải trí.

Các thiết bị công nghệ như điện thoại thông minh, máy tính bảng vàmáy tính cá nhân không chỉ là công cụ hữu ích mà còn trở thành mộtphần của cuộc sống hàng ngày của chúng ta Chúng không chỉ giúpchúng ta kết nối với thế giới xung quanh mà còn mang lại cho chúngta những trải nghiệm giải trí đa dạng và thú vị.

Trong số các trò chơi điện tử phổ biến, Flappy Bird nổi bật với sự đơngiản và thử thách mà nó mang lại Mặc dù chỉ là một trò chơi đơngiản với cách chơi cơ bản, nhưng Flappy Bird đã gây nghiện chohàng triệu người chơi trên toàn thế giới Sự kết hợp giữa cách chơiđơn giản nhưng thách thức cao đã tạo nên sức hút đặc biệt của tròchơi này, khiến người chơi luôn muốn thử thách bản thân và cố gắngđạt được điểm số cao nhất có thể.

Với sự phát triển của công nghệ và ngành công nghiệp game, FlappyBird đã trở thành một biểu tượng của sự đơn giản và sức hút trongthế giới game điện tử, và vẫn được nhớ đến với những kỷ niệm vàtrải nghiệm độc đáo mà nó mang lại.

Em xin chân thành cảmơn!

Trang 3

MỤC LỤC

1 Tổng quan về đề tài 4

2 Luật chơi 4

3 Giao diện trò chơi 5

4 Thiết kế các đối tượng 7

Trang 4

1 Tổng quan về đề tài

Tên trò chơi: Flappy Bird( Chú chim vỗ cánh)

Giới thiệu trò chơi: Với phong cách của game cũ từ thập niên 90, Flappy Bird thu hút người chơi bởi sự kịch tính, hưng phấn khi đạt được điểm số cao Game thủ phải liên tục nhấn vào màn hình điều khiển “chú chim” vượt qua các chướng ngại vật là những ống cống màu xanh Cứ mỗi lần vượt qua một ống cống sẽ được tính 1 điểm Trò chơichỉ kết thúc khi chú chim rơi xuống hoặc va vào ống cống Nghe qua thì tưởng chừng như đơn giản, cách chơi dễ ợt, thế nhưng Flappy Bird khiến người chơi đập phá điện thoại, nổi khùng vì khó chinh phục Tuy nhiên, dù không dễ nhưng càng chơi lại càng cuốn Do đó dù đã được tạo ra từ rất lâu nhưng Flappy Bird luôn là một trong những tựa game cuốn hút

Phong cách Đồ họa và Âm thanh của Flappy Bird

Đồ họa: Flappy Bird có một phong cách đồ họa đơn giản nhưng đầy sức hút

Hình ảnh chủ yếu là một con chim nhỏ màu vàng nhẹ nhàng và các ống cống màu xanh lam Cảm giác tổng thể của trò chơi là rất retro, giống như các trò chơi điện tử cổ điển từ thập kỷ 90 Sự đơn giản của đồ họa không chỉ giúp trò chơi dễ tiếp cận mà còn tạo ra một cái nhìn đặc biệt và dễ nhận diện.

Âm thanh: Âm thanh trong Flappy Bird cũng theo phong cách đơn giản và

retro Tiếng chim vỗ cánh và tiếng va chạm khi chim va vào ống cống là nhữngâm thanh chính trong trò chơi Âm thanh nhạc nền cũng rất đơn giản và lặp lại, giúp tạo ra một bầu không khí kích thích và hấp dẫn cho người chơi Mặc dù không có những hiệu ứng âm thanh phức tạp, nhưng âm thanh trong Flappy Bird vẫn đóng vai trò quan trọng trong việc tạo ra trải nghiệm chơi game đầy thú vị.

2 Luật chơi

Bay qua các ống: Người chơi điều khiển một con chim (hoặc một loài chim

khác nhau tùy Bay qua các ống: thuộc vào phiên bản) bằng cách nhấn vào

màn hình, bàn phím, chuột, Mỗi lần nhấn, con chim sẽ nhảy lên một chút Mục tiêu là bay qua các ống mà không chạm vào chúng Càng bay được xa, điểm số càng cao.

Điểm số: Mỗi lần bạn bay qua một cặp ống mà không va chạm, bạn sẽ được

một điểm Điểm số của bạn sẽ được hiển thị ở màn hình chính và thường được sử dụng để so sánh với điểm số của bạn bè hoặc người chơi khác.

Kết thúc trò chơi: Nếu con chim của bạn chạm vào các ống hoặc va chạm vào

mặt đất, trò chơi sẽ kết thúc Bạn có thể bắt đầu lại từ đầu chinh phục trò chơi

Trang 5

Kiên nhẫn và phản xạ nhanh: Trò chơi yêu cầu người chơi có sự kiên nhẫn

và phản xạ nhanh nhạy để điều khiển con chim qua các ống một cách chính xác.

3 Giao diện trò chơi

Giao diện của trò chơi Flappy Bird vô cùng đơn giản, chỉ gồm có 3 đối tượng: con chim, mặt đất và các ống khói

Chim (Bird): Một hình chữ nhật màu vàng đại diện cho chim trong trò chơi

Chiều cao và chiều rộng của chim có thể được điều chỉnh để phù hợp với kích thước mong muốn.

Chướng Ngại Vật (Obstacle): Các ống màu xanh lá cây biểu diễn các chướng

ngại vật trong trò chơi Chướng ngại vật này di chuyển từ phải sang trái trên màn hình.

Mặt Đất (Ground): Một phần dưới cùng của màn hình được tô màu xám, biểu

diễn mặt đất mà chim phải tránh va vào.

Và ngoài ra phía sau còn có background biểu diễn bầu trời, tạo cho người chơi cảm giác thư giãn và giải trí Giao diện của trò chơi Flappy Bird vô cùng đơn giản nhưng vẫn mang lại trải nghiệm thú vị cho người chơi Sự kết hợp giữa các đối tượng như chim, chướng ngại vật và mặt đất cùng với background bầu trời tạo nên một không gian giải trí phù hợp.

5

Trang 6

3.1 Giao diện Menu

Hình 3.2 Giao diện lúc bắt đầu Game

Trang 7

Hình 3.3 Giao diện lúc kết thúc game

4 Thiết kế các đối tượng

Game được thiết kế theo cấu trúc dưới đây:

7

Trang 8

Trong đó:

Assets Là thư mục chứa tài nguyên của trò chơi như hình ảnh, âm thanh.

flappybird: Gói (package) chứa mã nguồn, đối tượng của trò chơi Flappy Bird.

BirdObject: Lớp đại diện cho đối tượng chim trong trò chơi Chứa các phương

thức và thuộc tính để điều khiển hành vi của chim.

Chimney: chịu trách nhiệm cho việc quản lý và điều khiển hành vi của các ống

trong trò chơi Flappy Bird, bao gồm việc cập nhật vị trí của chúng và xác định liệu chúng có ở phía sau chim hay không

ChimneyGroup: Lớp quản lý và vẽ nhóm các ống trong trò chơi Flappy BirdFlappyBird:

Quản lý trạng thái của trò chơi (màn hình bắt đầu, màn hình chơi, màn hình kết thúc).

Xử lý sự kiện nhấn phím và click chuột.

Quản lý và vẽ các đối tượng trong trò chơi như chim, ống, đất.Tính điểm và xử lý logic khi chim va chạm với các ống hoặc đất.Vẽ các đối tượng và giao diện người dùng trên màn hình.

Trang 9

Ground: lớp này đảm nhiệm cho việc vẽ mặt đất cho trò chơi

game_controller: Gói chứa các lớp liên quan đến quản lý trò chơi như luồng trò chơi,

danh sách hàng đợi, vv.

GameThread: Lớp thực thi một luồng riêng biệt để cập nhật và vẽ trò chơi.Objects: Gói chứa các lớp đại diện cho các đối tượng trong trò chơi như chim,

ống, mặt đất, vv.

QueueList: Lớp cài đặt một danh sách hàng đợi.

graphics_manager: Gói chứa các lớp quản lý đồ họa như màn hình trò chơi và hình

AFrameOnImage: Lớp chứa các phương thức để vẽ 1 phần của hình ảnh.GameScreen: Lớp đại diện cho màn hình trò chơi, là một cửa sổ JFrame.

Menu: Là lớp chứa các phương thức để tạo nên một menu cho game

media_manager: Gói chứa các lớp quản lý phương tiện như phát âm thanh, hiệu ứng

của game.

Animation: Lớp chứa các phương thức để tạo và điều khiển các hiệu ứng hoạt

SoundPlayer: Lớp chứa các phương thức để phát các tệp âm thanh.

Dưới đây là sơ đồ lớp để xây dựng Game:

9

Trang 10

Hình 4.1 Sơ đồ lớp của game FlappyBird

Trong đó GameThread kế thừa từ lớp có sẵn như Jpanel và interface Runnable là hai

lớp có sẵn trong thư viện javax.swing và java.lang, tương ứng.

GameScreen là lớp đại diện cho màn hình trò chơi, kế thừa từ JFrame và triển khai

giao diện KeyListener có sẵn trong thư viện của Java Swing

Lớp FlappyBird chứa phương thức main và kế thừa từ lớp ảo GameScreen Nó triển

khai các phương thức từ GameScreen như GAME_UPDATE, GAME_PAINT,

Trang 11

KEY_ACTION, MOUSE_ACTION để quản lý trạng thái trò chơi, xử lý sự kiện, vẽ đối tượng và tính điểm.

BirdObject và Chimney là các lớp kế thừa từ lớp Objects

Các quan hệ còn lại trong sơ đồ có quan hệ là sử dụng (use):

FlappyBird sử dụng đối tượng trong các lớp BirdObject, ChimneyGroup, Animation, AframeOnImage, Ground, Menu để vẽ các đối tượng trong 1 số lớp đó và

thêm hiệu ứng cho trò chơi.

BirdObject sử dụng đối tượng trong SoundPlayer để thêm âm thanh cho trò

chimneyGroup sử dụng đối tượng trong QueueList QueueList sử dụng nhiều đối tượng trong ElementObjects sử dụng đối tượng trong lớp GameScreen

5 Mô tả công nghệ sử dụng

Ngôn ngữ lập trình: JavaFramework/Thư viện sử dụng:

Java Swing: Được sử dụng để tạo giao diện đồ họa cho ứng dụng.

Java AWT: Cũng được sử dụng để hỗ trợ việc tạo giao diện đồ họa và xử lý sự kiện.

Java Sound API: Sử dụng để điều khiển và phát lại âm thanh trong trò chơi

Công cụ phát triển IDE sử dụng IntelliJ IDEA

Mô tả âm thanh:

SoundPlayer sử dụng các lớp trong Java Sound API như Clip,

AudioInputStream, và AudioSystem để thực hiện các chức năng liên quan đến phát lạiâm thanh.

InputStream là một lớp được sử dụng để đọc dữ liệu byte từ một nguồn nào đó SoundPlayer sử dụng getResourceAsStream() để lấy một InputStream từ tệp âm thanhđược chỉ định trong thư mục tài nguyên của ứng dụng.

AudioFormat là một lớp trong Java Sound API được sử dụng để mô tả các thuộc tính của một luồng âm thanh, bao gồm tỷ lệ lấy mẫu, số bit mỗi mẫu, số kênh, SoundPlayer sử dụng AudioFormat để chỉ định các thuộc tính của âm thanh được phátlại.

11

Trang 12

Mô tả hình ảnh:

Java Swing là một toolkit GUI được cung cấp bởi Java để phát triển các ứng dụng desktop Java Swing được sử dụng để tạo giao diện đồ họa cho các màn hình trò chơi, bao gồm cửa sổ và các thành phần như nút và hình ảnh.

Java AWT và Java 2D API: Lớp AFrameOnImage sử dụng các lớp và phương thức của Java AWT và Java 2D API để thực hiện các hoạt động vẽ và xử lý hình ảnh.

AffineTransform được sử dụng để thực hiện các biến đổi như xoay hình ảnh.AffineTransformOp được sử dụng để áp dụng các biến đổi được xác định bởi AffineTransform lên hình ảnh.

Phương pháp Abstract: Lớp GameScreen chứa các phương thức trừu tượng, bao gồm GAME_UPDATE, GAME_PAINT, KEY_ACTION, và MOUSE_ACTION.Phương thức này được sử dụng để định nghĩa các hành động cụ thể mà mỗi màn hình trò chơi cần thực hiện.

JFrame: GameScreen mở rộng từ JFrame, cho phép nó tạo ra một cửa sổ đồ họacho màn hình trò chơi.

BufferedImage: Trong các phương thức RegisterImage và getImageWithID, GameScreen sử dụng BufferedImage để quản lý và tải hình ảnh cho trò chơi.

6 Mô tả tính logic của trò chơi

Mô tả cách tính điểm:

Đầu tiên thiết lập trò chơi ta sẽ co điểm = 0 (point = 0)

Trong class Chimney, một thuộc tính isBehindBird được khai báo và khởi tạo

ban đầu với giá trị false.

Khi giá trị này là false, nghĩa là ống khói đang ở phía trước con chim.

Phương thức setIsBehindBird(boolean b): Phương thức này được sử dụng để thiết lập giá trị của isBehindBird Khi con chim đã vượt qua ống khói, phương thức

này sẽ được gọi và truyền vào giá trị true, đánh dấu rằng ống khói đã ở phía sau con chim.

Trang 13

Phương thức getBehindBird(): Phương thức này được sử dụng để truy xuất giá

trị của isBehindBird Khi cần kiểm tra xem con chim đã vượt qua ống khói hay chưa, phương thức này sẽ được gọi để lấy giá trị hiện tại của isBehindBird.

Trong phương thức GAME_UPDATE, khi màn hình đang ở trạng thái

GAMEPLAY_SCREEN, đoạn mã dưới đây được sử dụng để xác định xem con chim đã vượt qua một ống khói hay không và tăng điểm số tương ứng:

Vòng lặp này duyệt qua tất cả các ống khói trong chimneyGroup.

Điều kiện playerBird.getPosX() > chimneyGroup.getChimney(i).getPosX()

kiểm tra xem con chim đã vượt qua ống khói hay chưa bằng cách so sánh vị trí x của con chim với vị trí x của ống khói.

Điều kiện !chimneyGroup.getChimney(i).getBehindBird() đảm bảo rằng ống

khói chưa được đánh dấu là đã vượt qua.

Điều kiện i % 2 == 0 chỉ xử lý tính điểm cho mỗi ống khói thứ chẵn (0, 2,

4, ) Điều này có thể là một quy ước trong trò chơi để chỉ xử lý tính điểm khi con chim đi qua các ống khói chẵn.

Nếu tất cả các điều kiện đều được thỏa mãn, điểm số được tăng lên bằng cách tăng giá trị của biến point.

Âm thanh điểm số được phát bằng cách gọi phương thức play của âm thanh

Cuối cùng, phương thức setIsBehindBird(true) được gọi để đánh dấu rằng ống

khói đã được vượt qua bởi con chim.

Mô tả khi trò chơi kết thúc (game over) :

Điều kiện game over:

13

Trang 14

Trong phương thức GAME_UPDATE, có một phần mã được sử dụng để xử lý trạng thái của con chim trong trò chơi Đoạn mã này kiểm tra nếu con chim va chạm với các

ống (chimney) hoặc va chạm với mặt đất.

Đầu tiên, trong vòng lặp for đầu tiên, mã kiểm tra xem con chim có va chạm

với bất kỳ ống nào trong chimneyGroup hay không bằng cách sử dụng phương thức

intersects() của hình chữ nhật đại diện cho con chim và hình chữ nhật đại diện cho

mỗi ống trong nhóm Nếu có va chạm xảy ra, con chim được đặt vào trạng thái không

còn sống (setLive(false)) và tiếng chuông báo hiệu rơi chơi (fallSound) được phát.

Tiếp theo, mã kiểm tra xem con chim đã chạm mặt đất chưa Nếu vị trí Y của

con chim cộng với chiều cao của nó (playerBird.getPosY() + playerBird.getH()) lớn hơn vị trí Y của mặt đất (ground.getYGround()), điều này ngụ ý rằng con chim đã rơi

xuống mặt đất Trong trường hợp này, nếu con chim vẫn còn sống, tiếng chuông báo hiệu rơi được phát và biến CurrentScreen được đặt thành GAMEOVER_SCREEN để chuyển sang màn hình game over.

Cuối cùng, nếu con chim không còn sống (tức là đã va chạm với ống hoặc đã rơi xuống mặt đất), tốc độ rơi của nó được đặt thành 10 và vị trí rơi được cập nhật Nếu con chim đã rơi xuống mặt đất, biến CurrentScreen lại được đặt thành

GAMEOVER_SCREEN để kết thúc trò chơi.

Trang 15

Cách xây dựng các đối tượng trong trò chơi:

Đầu tiên xây dựng đối tượng Objects:

Lớp này có các thuộc tính posX, posY, w, và h để đại diện cho vị trí và kích thước của đối tượng.

Constructor có tham số để khởi tạo vị trí và kích thước ban đầu của đối tượng.

Phương thức setPos, setPosX, setPosY: Các phương thức này được sử dụng để

đặt vị trí của đối tượng.

Phương thức getPosX, getPosY, getW, getH: Các phương thức này được sử

dụng để trả về các giá trị về vị trí, chiều rộng và chiều cao của đối tượng.

Sau đó xây dựng lớp BirdObject kế thừa từ lớp Objects:

Xây dựng biến và các thuộc tính cho lớp BirdObject

15

Trang 16

fallSpeed: Biến lưu trữ tốc độ rơi của con chim.

isFlying: Biến boolean xác định xem con chim có đang bay hay không.rect: Đối tượng hình chữ nhật (Rectangle) đại diện cho con chim.isLive: Biến boolean xác định xem con chim còn sống hay không.

Biến gravity: biến static được thêm vào lớp BirdObject, và nó biểu diễn trọng lực trong trò chơi.

flapSound, fallSound, getPointSound: Các đối tượng SoundPlayer để phát âm thanh trong trò chơi.

Trang 17

17

Trang 18

Constructor được sử dụng để khởi tạo một đối tượng BirdObject với các giá trị ban đầu như vị trí, kích thước và các đối tượng âm thanh.

Phương thức setLive và getLive:setLive: Đặt giá trị cho biến isLive.getLive: Trả về giá trị của biến isLive.Phương thức getRect:

Trả về đối tượng hình chữ nhật đại diện cho con chim.Phương thức setFallSpeed và updateState:

setFallSpeed: Đặt giá trị cho biến fallSpeed.

updateState: Cập nhật trạng thái của con chim sau mỗi frame Tốc độ rơi của con chim được cập nhật dựa trên trọng lực (FlappyBird.gravity), và vị trí của con chim được điều chỉnh tương ứng.

Trang 19

Biến và Thuộc tính:

rect: Đối tượng hình chữ nhật (Rectangle) đại diện cho ống.

isBehindBird: Biến boolean xác định xem ống có nằm sau con chim hay không.Constructor:

Constructor được sử dụng để khởi tạo một đối tượng Chimney với các giá trị ban đầu như vị trí, kích thước và đối tượng hình chữ nhật.

Phương thức update:

Phương thức này được gọi để cập nhật vị trí của ống sau mỗi frame.

Trong phương thức này, vị trí của ống được điều chỉnh bằng cách giảm giá trị x(hoàn toàn có thể thay đổi tốc độ di chuyển bằng cách thay đổi giá trị giảm này).

19

Ngày đăng: 18/05/2024, 16:27

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan