Bài báo cáo java về lập trình game "Flappy bird"

Bài báo cáo java về lập trình game "Flappy bird" của Đại học Kiên Giang giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao. Mời bạn đọc đón xem!

lOMoARcPSD|10435767
MỤC LỤC
CHƯƠNG 1. GIỚI THIỆU VỀ ĐỀ TÀI ................................................................ 1
1. 1 Tóm tắt đề tài ................................................................................................ 1
1.2 Danh sách chức năng ..................................................................................... 1
CHƯƠNG 2. DEMO CHƯƠNG TRÌNH ............................................................... 2
2.1 Chức năng tạo giao diện ................................................................................ 2
2.2 Chức năng thêm chim .................................................................................... 6
2.3 Chức năng tạo chuyển động .......................................................................... 8
2.4 Chức năng thêm mặt đất .............................................................................. 11
2.5 Chức năng giao diện khi thua ...................................................................... 14
2.6 Chức năng quay lại ...................................................................................... 15
2.7 Chức năng thêm ống khói ............................................................................ 17
2.8 Chức năng tạo sự lặp lại cho ống khói ........................................................ 20
2.9 Chức năng thua khi chạm ống khói ............................................................. 23
2.10 Chức năng tính điểm .................................................................................. 26
2.11 Chức năng thêm màu nền .......................................................................... 28
2.12 Chức năng cho ống khói xuất hiện ngẫu nhiên ......................................... 29
KẾT LUẬN ........................................................................................................... 32
TÀI LIỆU THAM KHẢO .................................................................................... 33
CHƯƠNG 1. GIỚI THIỆU VỀ ĐỀ TÀI
1. 1 Tóm tắt đề tài
Trò chơi Flappy Bird là mt trò chơi điện tphổ biến với giao diện đơn giản
nhưng lại mang tính thách thức cao. Trong trò chơi này người chơi sẽ điều
khiển một con chim bay qua các cặp cột nước cao. Mỗi lần vượt qua thành
công một cặp cột, người chơi sẽ được cộng thêm điểm.
1.2 Danh sách chức ng
- Chức năng tạo giao diện
- Chức năng thêm chim
lOMoARcPSD|10435767
- Chức năng tạo chuyn động
- Chức năng thêm mặt đất
- Chức năng giao diện khi thua
- Chức năng quay lại
- Chức năng thêm ống khói
- Chức năng tại sự lặp lại cho ống khói
- Chức năng thua khi chạm ống khói
- Chức năng tính điểm
- Chức năng thêm màu nền
- Chức năng cho ống khói xuất hiện ngẫu nhiên
CHƯƠNG 2. DEMO CHƯƠNG TRÌNH
2.1 Chức năng tạo giao diện
Chức năng tạo giao diện trong trò chơi Flappy Bird bằng ngôn ngữ Java đề
cập đến việc xây dựng các thành phần hình ảnh và tương tác của trò chơi. Đây là
một phần quan trọng trong quá trình phát triển game, bao gồm việc tạo ra các đối
tượng trong game (Như con chim trong Flappy Bird), và xử lý các sự kiện tương
tác của người chơi (như nhấp chuột để làm cho con chim bay lên).
Ví dụ minh họa code Java của chức năng tạo giao diện:
lOMoARcPSD|10435767
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
lOMoARcPSD|10435767
import java.awt.Color;
// Lp Bird đi din cho con chim trong trò chi
class Bird {
int x, y;
public Bird(int x, int y) {
this.x = x;
this.y = y;
}
// Ve con chim lên màn hình
public void draw(Graphics g) {
g.setColor(Color.RED);
g.fillOval(x, y, 20, 20);
}
}
// Lp GamePanel là ni ve lên màn hình trò chi
class GamePanel extends JPanel {
Bird bird;
public GamePanel() {
bird = new Bird(100, 300);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Ve n
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa.
// Ve con chim
bird.draw(g);
}
}
// Lp Game cha ca s trò chi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
lOMoARcPSD|10435767
2.2 Chức năng thêm chim
Chức năng thêm chim trong trò chơi Flappy Bird bằng ngôn ngữ Java đề cập
tới việc tạo và quản lí đối tượng chim trong trò chơi. Đối tượng chim là nhân vật
chính mà người chơi điều khiển, và nó cần được thêm vào trò chơi để người chơi
có thể tương tác với nó.
Trong quá trình lập trình, chúng ta sẽ cần tạo 1 lớp (Class) cho đối tượng
chim, xác định các thuộc tính của nó (như vị trí, tốc độ, hình ảnh) và các phương
thức để xử lý các hành động của nó (như di chuyển lên, rơi xuống).
Ví dụ minh họa : Code Java của chức năng thêm chim
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
// Lớp Bird đại diện cho con chim trong trò chơi
class Bird {
int x, y;
public Bird(int x, int y) {
this.x = x;
this.y = y;
}
// Vẽ con chim lên màn hình
public void draw(Graphics g) {
g.setColor(Color.RED);
g.fillOval(x, y, 20, 20);
}
}
// Lớp GamePanel là nơi vẽ lên màn hình trò chơi
class GamePanel extends JPanel {
lOMoARcPSD|10435767
Bird bird;
public GamePanel() {
bird = new Bird(100, 300); // Thêm con chim
vào trò chơi
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Vẽ nền
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Vẽ con chim
bird.draw(g);
}
}
// Lớp Game chứa cửa sổ trò chơi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
Ví dụ hình ảnh minh ha:
lOMoARcPSD|10435767
2.3 Chức năng tạo chuyển động
Chức năng tạo chuyển động trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc làm cho các đối tượng trong trò chơi di chuyển. Trong trường
hợp của Flappy Bird, đối tượng chính cần di chuyển là con chim.
Để tạo chuyển động cho con chim, chúng ta cần thay đổi giá trị y (chiều cao)
của con chim theo thời gian. Khi người chơi nhấn phím (thường phím space),
con chim sẽ bay lên (giá trị y sẽ giảm). Khi không sự tương tác nào từ người
chơi, do ảnh hưởng của trọng lực, con chim sẽ rơi xuống (giá trị y sẽ tăng).
Ví dụ minh họa: Code Java của chức năng tạo chuyển động
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
// Lp Bird đi din cho con chim trong trò chi
lOMoARcPSD|10435767
class Bird {
int x, y;
int vy; // vn tốốc theo ph
ng y
public Bird(int x, int y) {
this.x = x;
this.y = y;
this.vy = 0;
}
// Cp nht v trí ca con chim
public void update() {
vy += 1; // tăng vn tốốc do trng lc
y += vy; // cp nht v trí mi ca chim
}
// X lý s kin khi ng
i chi nhấốn phím
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
vy = -10; // gim vn tốốc khi chim bay lên
}
}
// Ve con chim lên màn hình
public void draw(Graphics g) {
g.setColor(Color.RED);
g.fillOval(x, y, 20, 20);
}
}
// Lp GamePanel là ni ve lên màn hình trò chi và x lý s kin t bàn phím
class GamePanel extends JPanel implements KeyListener {
Bird bird;
lOMoARcPSD|10435767
public GamePanel() {
bird = new Bird(100, 300); // Thêm con chim vào trò chi
addKeyListener(this); // Đăng ký x lý s kin t bàn phím
setFocusable(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Ve n
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Cp nht và ve con chim
bird.update();
bird.draw(g);
}
@Override
public void keyPressed(KeyEvent e) {
bird.keyPressed(e); // Chuyn s kin nhấốn phím cho con chim x
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
// Lp Game cha ca s trò chi
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.4 Chức năng thêm mặt đất
Chức năng thêm mặt đất trong trò chơi Flappy Bird bằng ngôn ngữ Java liên
quan đến việc tạo hiển thị mặt đất trong trò chơi. Mặt đất thường được sdụng
như một ranh giới dưới cùng của màn hình chơi, nếu con chim chạm vào mặt đất
thì trò chơi sẽ kết thúc.
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
lOMoARcPSD|10435767
Để thực hiện chức năng này, chúng ta cần tạo một đối tượng (hoặc một loạt
các đối tượng) đbiểu diễn mặt đất. Đối tượng này thể một hình ảnh hoặc
một hình học cụ thể (như một hình chữ nhật) được vẽ lên màn hình. Chúng ta
cũng cần xác định cách xử lý va chạm giữa con chim và mặt đất.
Ví dụ minh họa: Code Java của chức năng thêm mặt đất.
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
// Lp Ground đi din cho mt đấốt trong trò chi
class Ground {
int y; // v trí y ca mt đt
public Ground(int y) {
this.y = y;
}
// Ve mt đấốt lên màn hình
public void draw(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(0, y, 800, 100);
}
}
// Lp GamePanel là ni ve lên màn hình trò chi
class GamePanel extends JPanel {
Ground ground;
public GamePanel() {
ground = new Ground(500); // Thêm mt đấốt vào trò chi
lOMoARcPSD|10435767
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Ve n
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Ve mt đấốt
ground.draw(g);
}
}
// Lp Game cha ca s trò chi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
Ví dụ hình ảnh minh ha:
lOMoARcPSD|10435767
2.5 Chức năng giao diện khi thua
Chức năng giao diện khi thua trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc hiển thị một màn hình hoặc thông báo cho người chơi biết họ
đã thua cuộc. Điều này thường xảy ra khi con chim va chạm vào ống cống hoặc
mặt đất.
Giao diện khi thua thể bao gồm một thông báo về việc người chơi đã thua,
số điểm mà họ đã đạt được, và tùy chọn để chơi lại trò chơi hoặc thoát ra.
Ví dụ minh họa: Code Java của chức năng giao diện khi thua.
import javax.swing.JFrame;
import javax.swing.JOptionPane;
// Lp Game cha ca s trò chi và x lý s kin game over
public class Game {
JFrame window;
public Game() {
window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.6 Chức năng quay lại
Chức năng quay lại trong trò chơi Flappy Bird bằng ngôn ngữ Java thể đề
cập đến việc cho phép người chơi quay lại một trạng thái trước đó của trò chơi,
}
// Ph
ng thc hin th thng báo khi ng
i chi thua
public void gameOver() {
JOptionPane.showMessageDialog(window, "Game Over", "Game Over",
JOptionPane.YES_NO_OPTION);
}
public static void main(String[] args) {
Game game = new Game();
i chi đã thua đy
// Gi s ng
game.gameOver();
}
}
lOMoARcPSD|10435767
hoặc quay lại một màn hình menu hoặc tùy chọn khác. Điều này thường được
thực hiện thông qua việc tạo một nút hoặc tùy chọn trong giao diện người dùng
cho phép người chơi quay lại.
Ví dụ minh họa: Code Java chức năng quay lại.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Game {
JFrame window;
JPanel gameOverPanel;
JButton backButton;
public Game() {
window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// To panel game over
gameOverPanel = new JPanel();
gameOverPanel.setLayout(new BorderLayout());
// To nút quay li
backButton = new JButton("Quay li");
backButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// X lý s kin nhấốp vào nút quay li
//
đấy, chúng ta ch đn gin là n panel game over
gameOverPanel.setVisible(false);
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.7 Chức năng thêm ống khói
Chức năng “Thêm ống khói” trong trò chơi Flappy Bird bằng ngôn ngữ
}
});
// Thêm nút quay li vào panel game over
gameOverPanel.add(backButton, BorderLayout.SOUTH);
window.add(gameOverPanel);
window.setVisible(true);
}
public static void main(String[] args) {
new Game();
}
}
lOMoARcPSD|10435767
Java liên quan đến việc tạo quản các ống khói mà con chim cần phải bay
qua. Các ống khói này thường được tạo ra một cách động liên tục trong quá
trình chơi game, tạo ra một thách thức cho người chơi.
Để thực hiện chức năng này, chúng ta cần tạo một lớp (class) cho đối tượng
ống khói, xác định các thuộc tính của nó (như vị trí, kích thước, hình ảnh), và các
phương thức để xử lý các hành động của nó (như di chuyển sang trái, tạo mới).
Ví dụ minh họa: Code Jave của chức năng thêm ống khói
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.util.ArrayList;
// Lớp Pipe đại diện cho ống khói trong trò chơi
class Pipe {
int x, y, width, height;
public Pipe(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
// Cập nhật vị trí của ống khói
public void update() {
x -= 2; // di chuyển ống khói sang trái
}
// Vẽ ống khói lên màn hình
public void draw(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
}
lOMoARcPSD|10435767
}
// Lớp GamePanel là nơi vẽ lên màn hình trò chơi
class GamePanel extends JPanel {
ArrayList<Pipe> pipes;
public GamePanel() {
pipes = new ArrayList<Pipe>();
pipes.add(new Pipe(600, 300, 50, 200)); // Thêm ống khói vào trò chơi
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Vẽ nền
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Cập nhật và vẽ các ống khói
for (Pipe pipe : pipes) {
pipe.update();
pipe.draw(g);
}
}
}
// Lớp Game chứa cửa sổ trò chơi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.8 Chức năng tạo sự lặp lại cho ống khói
Chức năng “Tạo sự lặp lại ống khói” trong trò chơi Flappy Bird bằng ngôn
ngữ Java liên quan đến việc tạo ra một chuỗi liên tục của các ống khói con
chim cần phải bay qua. Điều này thường được thực hiện bằng cách tạo ra một ống
khói mới phía bên phải của màn hình mỗi khi một ống khói di chuyển ra khỏi
phía bên trái ca màn hình.
Ví dụ minh họa: Code Jave của chức năng tạo sự lặp lại cho ống khói
}
}
lOMoARcPSD|10435767
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.util.ArrayList;
// Lp Pipe đi din cho ốống khói trong trò chi
class Pipe {
int x, y, width, height;
public Pipe(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
// Cp nht v trí ca ốống khói
public void update() {
x -= 2; // di chuyn ốống khói sang trái
}
// Ve ốống khói lên màn hình
public void draw(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
}
}
// Lp GamePanel là ni ve lên màn hình trò chi
class GamePanel extends JPanel {
ArrayList<Pipe> pipes;
lOMoARcPSD|10435767
public GamePanel() {
pipes = new ArrayList<Pipe>();
pipes.add(new Pipe(600, 300, 50, 200)); // Thêm ốống khói đấều tiên vào trò chi
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Ve n
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Cp nht và ve các ốống khói
for (Pipe pipe : pipes) {
pipe.update();
pipe.draw(g);
// Nêu ốống khói đã di chuyn ra khi màn hình
if (pipe.x + pipe.width < 0) {
pipe.x = getWidth(); // Di chuyn ốống khói vê phía bên phi ca màn hình
pipe.y = (int)(Math.random() * getHeight()); // Đt v trí y ca ốống khói mt v
trí ngấẽu nhiên
}
}
}
}
// Lp Game cha ca s trò chi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.9 Chức năng thua khi chạm ống khói
Chức năng “Thua khi chạm ống khói” trong trò chơi Flappy Bird bằng ngôn
ngữ Java liên quan đến việc xử va chạm giữa con chim các ống khói. Khi
con chim va chạm vào một ống khói, trò chơi sẽ kết thúc và người chơi sẽ thua.
Để thực hiện chức năng này, chúng ta cần kiểm tra va chạm giữa con chim
các ống khói sau mỗi khung hình. Nếu một va chạm được phát hiện, bạn skết
thúc trò chơi.
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
lOMoARcPSD|10435767
Ví dụ minh họa: Code Java của chức năng thua khi chạm ống khói
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
// Lp Bird đi din cho con chim trong trò chi
class Bird {
int x, y, width, height;
public Bird(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
// Kim tra va chm gia con chim và mt ốống khói
public boolean collidesWith(Pipe pipe) {
Rectangle birdRect = new Rectangle(x, y, width, height);
Rectangle pipeRect = new Rectangle(pipe.x, pipe.y, pipe.width, pipe.height);
return birdRect.intersects(pipeRect);
}
}
// Lp Pipe đi din cho ốống khói trong trò chi
class Pipe {
int x, y, width, height;
public Pipe(int x, int y, int width, int height) {
lOMoARcPSD|10435767
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}
// Lp GamePanel là ni ve lên màn hình trò chi
class GamePanel extends JPanel {
Bird bird;
ArrayList<Pipe> pipes;
public GamePanel() {
bird = new Bird(100, 300, 20, 20);
pipes = new ArrayList<Pipe>();
pipes.add(new Pipe(600, 300, 50, 200));
}
// Kim tra va chm gia con chim và các ốống khói
public void checkCollisions() {
for (Pipe pipe : pipes) {
if (bird.collidesWith(pipe)) {
gameOver();
}
}
}
// Kêt thúc trò chi khi ng
i chi thua
public void gameOver() {
JOptionPane.showMessageDialog(this, "Game Over", "Game Over",
JOptionPane.YES_NO_OPTION);
System.exit(0);
}
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
2.10 Chức năng tính điểm
Chức năng điểm số giúp theo dõi hiển thị điểm số của người chơi trong
quá trình chơi game.
}
// Lp Game cha ca s trò chi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
lOMoARcPSD|10435767
Khi người chơi điều khiển con chim bay qua 1 cặp cột nước mà không va
chạm, hsđược cộng thêm 1 điểm. Điểm số sẽ được cập nhật tức thì trên màn
hình.
Ví dụ minh họa: Code Java của chức năng tính điểm.
public class FlappyBird {
private int score;
public FlappyBird() {
this.score = 0;
}
public void incrementScore() {
this.score += 1;
}
public int getScore() {
return this.score;
}
public static void main(String[] args) {
FlappyBird game = new FlappyBird();
game.incrementScore(); // Con chim bay qua mt ct
game.incrementScore(); // Con chim bay qua mt ct khác
System.out.println("Đim hin ti: " + game.getScore()); // In ra đim hin ti
}
}
Ví dụ
hình
minh
ảnh
họa:
lOMoARcPSD|10435767
2.11 Chức năng thêm màu nền
Chức năng “Thêm màu nền” trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc thiết lập màu sắc cho nền của trò chơi. Màu nền thể tạo ra
một không gian chơi phù hợp và tăng tính thẩm mỹ cho trò chơi.
Trong Java, chúng ta thể sử dụng lớp java.awt.Color để tạo và quản các
màu sắc. Để thiết lập màu nền cho cửa sổ trò chơi, chúng ta thể sử dụng phương
thức setBackground(Color c) của lớp java.awt.Component, cửa sổ trò chơi
(thường một đối tượng của lớp javax.swing.JFrame hoặc java.awt.Frame) kế
thừa.
dụ minh họa: Code Java của chức năng thêm màu nền
import java.awt.Color;
Ví dụ hình ảnh minh họa:
import javax.swing.JFrame;
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.CYAN); // thiết lập màu nền
window.setVisible(true);
}
}
lOMoARcPSD|10435767
2.12 Chức năng cho ống ki xuất hiện ngẫu nhiên
Chức năng cho ống khói xuất hiện ngẫu nhiên” trong trò chơi Flappy Bird
bằng ngôn ngữ Java liên quan đến việc tạo ra các ống khói ở các vị trí ngẫu nhiên
trên màn hình. Điều này tạo ra sự không lường trước được thách thức cho người
chơi, khiến trò chơi trở nên hấp dẫn hơn.
Để thực hiện chức năng này, chúng ta cần tạo ra các ống khói mới ở các vị
trí ngẫu nhiên sau mỗi khoảng thời gian nhất định hoặc sau khi một ống khói cụ
thể đã di chuyển qua màn hình. Chúng ta thể sử dụng lớp java.util.Random
trong Java để tạo ra các số ngẫu nhiên, sử dụng chúng để xác định vị trí của
các ống khói mới.
dụ minh họa: Code Java của chức năng cho ống khói xuất hiện ngẫu nhiên
lOMoARcPSD|10435767
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Random;
// Lp Pipe đi din cho ốống khói trong trò chi
class Pipe {
int x, y, width, height;
public Pipe(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
// Cp nht v trí ca ốống khói
public void update() {
x -= 2; // di chuyn ốống khói sang trái
}
// Ve ốống khói lên màn hình
public void draw(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
}
}
lOMoARcPSD|10435767
// Lp GamePanel là ni ve lên màn hình trò chi
class GamePanel extends JPanel {
ArrayList<Pipe> pipes;
Random random;
public GamePanel() {
pipes = new ArrayList<Pipe>();
random = new Random();
pipes.add(new Pipe(600, random.nextInt(400), 50, 200)); // Thêm ốống khói vi v trí y
ngấẽu nhiên vào trò chi
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Ve n
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Cp nht và ve các ốống khói
for (Pipe pipe : pipes) {
pipe.update();
pipe.draw(g);
// Nêu ốống khói đã di chuyn ra khi màn hình
if (pipe.x + pipe.width < 0) {
pipe.x = getWidth(); // Di chuyn ốống khói vê phía bên phi ca màn hình
pipe.y = random.nextInt(400); // Đt v trí y ca ốống khói mt v t ngấẽu nhiên
}
}
}
}
lOMoARcPSD|10435767
Ví dụ hình ảnh minh họa:
KẾT LUẬN
Ưu điểm:
- Đơn giản dễ chơi: Trò chơi Flappy Bird được lập trình bằng Java cógiao
diện đơn giản, dễ nhìn cách chơi dễ hiểu. Người chơi chỉ cần điều khiển con
chim bay qua các cặp cột nước mà không va chạm.
- Tính thách thức cao: Mặc cách chơi đơn giản nhưng trò chơi lại
mangtính thách thức cao, tạo sự hấp dẫn cho người chơi.
// Lp Game cha ca s trò chi
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird");
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new GamePanel());
window.setVisible(true);
}
}
lOMoARcPSD|10435767
- Tùy chỉnh linh hoạt: Trò chơi cho phép người chơi tùy chỉnh các thiết
lậpnhư âm thanh, độ khó,..... Giúp người chơi có thể tận hưởng trò chơi theo cách
của mình.
- Bảng xếp hạng: Người chơi thể so sánh điểm số của mình với ngườichơi
khác thông qua bảng xếp hạng, tạo thêm động lực để người chơi cố gắng đạt điểm
số cao hơn.
Hạn chế:
- Đồ họa đơn giản: Trò chơi đồ họa 2D đơn giản, không phong phú vàchi
tiết như các trò chơi hiện đại khác.
- Chức năng giới hạn: Số lượng độ phức tạp gicác chức năng trong
tròchơi khá giới hạn. Trò chơi chỉ tập trung vào việc điều khiển con chim bay qua
các cặp cột nước.
- Không có nhiều màn chơi: Trò chơi không có nhiều màn chơi khác nhauđể
người chơi khám phá. Mỗi lần chơi, người chơi sẽ lặp đi lặp lại cùng 1 màn chơi.
TÀI LIỆU THAM KHẢO
1. Cuốn sách Java: A Beginner’s Guide, Eighth Edition bởi Herbert
Schildt.
2. Cuốn sách Beginning Java Game Development with LibGDX bởi
LeeStemkoski.
3. Cuốn sách Code Complete: A Practical Handbook of
SoftwareConstruction, Second Edition bởi Steve McConnell.
4. Các diễn đàn và cộng đồng trực tuyến như Stack Overflow, GitHub,
hoặcReddit.
| 1/33

Preview text:

lOMoARcPSD| 10435767 MỤC LỤC
CHƯƠNG 1. GIỚI THIỆU VỀ ĐỀ TÀI ................................................................ 1
1. 1 Tóm tắt đề tài ................................................................................................ 1
1.2 Danh sách chức năng ..................................................................................... 1
CHƯƠNG 2. DEMO CHƯƠNG TRÌNH ............................................................... 2
2.1 Chức năng tạo giao diện ................................................................................ 2
2.2 Chức năng thêm chim .................................................................................... 6
2.3 Chức năng tạo chuyển động .......................................................................... 8
2.4 Chức năng thêm mặt đất .............................................................................. 11
2.5 Chức năng giao diện khi thua ...................................................................... 14
2.6 Chức năng quay lại ...................................................................................... 15
2.7 Chức năng thêm ống khói ............................................................................ 17
2.8 Chức năng tạo sự lặp lại cho ống khói ........................................................ 20
2.9 Chức năng thua khi chạm ống khói ............................................................. 23
2.10 Chức năng tính điểm .................................................................................. 26
2.11 Chức năng thêm màu nền .......................................................................... 28
2.12 Chức năng cho ống khói xuất hiện ngẫu nhiên ......................................... 29
KẾT LUẬN ........................................................................................................... 32
TÀI LIỆU THAM KHẢO .................................................................................... 33
CHƯƠNG 1. GIỚI THIỆU VỀ ĐỀ TÀI
1. 1 Tóm tắt đề tài
Trò chơi Flappy Bird là một trò chơi điện tử phổ biến với giao diện đơn giản
nhưng lại mang tính thách thức cao. Trong trò chơi này người chơi sẽ điều
khiển một con chim bay qua các cặp cột nước cao. Mỗi lần vượt qua thành
công một cặp cột, người chơi sẽ được cộng thêm điểm.
1.2 Danh sách chức năng
- Chức năng tạo giao diện - Chức năng thêm chim lOMoARcPSD| 10435767
- Chức năng tạo chuyển động
- Chức năng thêm mặt đất
- Chức năng giao diện khi thua - Chức năng quay lại
- Chức năng thêm ống khói
- Chức năng tại sự lặp lại cho ống khói
- Chức năng thua khi chạm ống khói - Chức năng tính điểm
- Chức năng thêm màu nền
- Chức năng cho ống khói xuất hiện ngẫu nhiên
CHƯƠNG 2. DEMO CHƯƠNG TRÌNH
2.1 Chức năng tạo giao diện
Chức năng tạo giao diện trong trò chơi Flappy Bird bằng ngôn ngữ Java đề
cập đến việc xây dựng các thành phần hình ảnh và tương tác của trò chơi. Đây là
một phần quan trọng trong quá trình phát triển game, bao gồm việc tạo ra các đối
tượng trong game (Như con chim trong Flappy Bird), và xử lý các sự kiện tương
tác của người chơi (như nhấp chuột để làm cho con chim bay lên).
Ví dụ minh họa code Java của chức năng tạo giao diện: lOMoARcPSD| 10435767 import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; lOMoARcPSD| 10435767 import java.awt.Color; // Lp B
ird đi din cho con chim trong trò chi class Bird { int x, y; public Bird(int x, int y) { this.x = x; this.y = y; }
// Veẽ con chim lên màn hình
public void draw(Graphics g) { g.setColor(Color.RED); g.fillOval(x, y, 20, 20); } } // Lp Game Panel là ni veẽ lên màn hình trò chi
class GamePanel extends JPanel { Bird bird; public GamePanel() { bird = new Bird(100, 300); } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Veẽ nêền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); lOMoARcPSD| 10435767 // Veẽ con chim bird.draw(g); } } // Lp Game cha ca s trò chi p ublic class Ga me {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa. lOMoARcPSD| 10435767
2.2 Chức năng thêm chim
Chức năng thêm chim trong trò chơi Flappy Bird bằng ngôn ngữ Java đề cập
tới việc tạo và quản lí đối tượng chim trong trò chơi. Đối tượng chim là nhân vật
chính mà người chơi điều khiển, và nó cần được thêm vào trò chơi để người chơi
có thể tương tác với nó.
Trong quá trình lập trình, chúng ta sẽ cần tạo 1 lớp (Class) cho đối tượng
chim, xác định các thuộc tính của nó (như vị trí, tốc độ, hình ảnh) và các phương
thức để xử lý các hành động của nó (như di chuyển lên, rơi xuống).
Ví dụ minh họa : Code Java của chức năng thêm chim import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color;
// Lớp Bird đại diện cho con chim trong trò chơi class Bird { int x, y; public Bird(int x, int y) { this.x = x; this.y = y; }
// Vẽ con chim lên màn hình
public void draw(Graphics g) { g.setColor(Color.RED); g.fillOval(x, y, 20, 20); } }
// Lớp GamePanel là nơi vẽ lên màn hình trò chơi
class GamePanel extends JPanel { lOMoARcPSD| 10435767 Bird bird; public GamePanel() {
bird = new Bird(100, 300); // Thêm con chim vào trò chơi } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Vẽ nền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); // Vẽ con chim bird.draw(g); } }
// Lớp Game chứa cửa sổ trò chơi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa: lOMoARcPSD| 10435767
2.3 Chức năng tạo chuyển động
Chức năng tạo chuyển động trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc làm cho các đối tượng trong trò chơi di chuyển. Trong trường
hợp của Flappy Bird, đối tượng chính cần di chuyển là con chim.
Để tạo chuyển động cho con chim, chúng ta cần thay đổi giá trị y (chiều cao)
của con chim theo thời gian. Khi người chơi nhấn phím (thường là phím space),
con chim sẽ bay lên (giá trị y sẽ giảm). Khi không có sự tương tác nào từ người
chơi, do ảnh hưởng của trọng lực, con chim sẽ rơi xuống (giá trị y sẽ tăng).
Ví dụ minh họa: Code Java của chức năng tạo chuyển động import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; // Lp B
ird đi din cho con chim trong trò chi lOMoARcPSD| 10435767 class Bird { int x, y;
int vy; // vn t ốốc theo ph n g y public Bird(int x, int y) { this.x = x; this.y = y; this.vy = 0; } // Cp n ht v t rí ca con ch im public void update() {
vy += 1; // tăng vn t ốốc do trng lc y += vy; // cp n ht v t rí mi ca ch im } // X lý s kin khi ng i chi n hấốn phím
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) { vy = -10; // gim vn tốố c khi chim bay lên } }
// Veẽ con chim lên màn hình
public void draw(Graphics g) { g.setColor(Color.RED); g.fillOval(x, y, 20, 20); } } // Lp Game Panel là ni veẽ
lên màn hình trò chi và x lý s kin t bàn p hím
class GamePanel extends JPanel implements KeyListener { Bird bird; lOMoARcPSD| 10435767 public GamePanel() {
bird = new Bird(100, 300); // Thêm con chim vào trò chi
addKeyListener(this); // Đăng ký x lý s kin t bà n ph ím setFocusable(true); } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Veẽ nêền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); // Cp n ht và veẽ con chim bird.update(); bird.draw(g); } @Override
public void keyPressed(KeyEvent e) {
bird.keyPressed(e); // Chuyn s kin nhấố n phím cho con chim x lý } @Override
public void keyReleased(KeyEvent e) {} @Override
public void keyTyped(KeyEvent e) {} } // Lp Game cha ca s trò chi lOMoARcPSD| 10435767 public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa:
2.4 Chức năng thêm mặt đất
Chức năng thêm mặt đất trong trò chơi Flappy Bird bằng ngôn ngữ Java liên
quan đến việc tạo và hiển thị mặt đất trong trò chơi. Mặt đất thường được sử dụng
như một ranh giới dưới cùng của màn hình chơi, nếu con chim chạm vào mặt đất
thì trò chơi sẽ kết thúc. lOMoARcPSD| 10435767
Để thực hiện chức năng này, chúng ta cần tạo một đối tượng (hoặc một loạt
các đối tượng) để biểu diễn mặt đất. Đối tượng này có thể là một hình ảnh hoặc
một hình học cụ thể (như một hình chữ nhật) được vẽ lên màn hình. Chúng ta
cũng cần xác định cách xử lý va chạm giữa con chim và mặt đất.
Ví dụ minh họa: Code Java của chức năng thêm mặt đất. import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color; // Lp Gro und đi din cho mt đấốt t rong trò chi class Ground { int y; // v trí y ca m t đấố t public Ground(int y) { this.y = y; } // Veẽ mt đấốt lên màn hình
public void draw(Graphics g) { g.setColor(Color.GREEN); g.fillRect(0, y, 800, 100); } } // Lp Game Panel là ni veẽ lên màn hình trò chi
class GamePanel extends JPanel { Ground ground; public GamePanel() {
ground = new Ground(500); // Thêm mt đ ấốt vào trò chi lOMoARcPSD| 10435767 } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Veẽ nêền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); // Veẽ mt đấốt ground.draw(g); } } // Lp Game cha ca s trò chi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa: lOMoARcPSD| 10435767
2.5 Chức năng giao diện khi thua
Chức năng giao diện khi thua trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc hiển thị một màn hình hoặc thông báo cho người chơi biết họ
đã thua cuộc. Điều này thường xảy ra khi con chim va chạm vào ống cống hoặc mặt đất.
Giao diện khi thua có thể bao gồm một thông báo về việc người chơi đã thua,
số điểm mà họ đã đạt được, và tùy chọn để chơi lại trò chơi hoặc thoát ra.
Ví dụ minh họa: Code Java của chức năng giao diện khi thua. import javax.swing.JFrame;
import javax.swing.JOptionPane; // Lp Game cha ca s trò chi và x lý s kin gam e ove r public class Game { JFrame window; public Game() {
window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setVisible(true); lOMoARcPSD| 10435767 } // Ph n g thc h in th thốn g báo khi ng i chi th ua public void gameOver() {
JOptionPane.showMessageDialog(window, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION); }
public static void main(String[] args) { Game game = new Game(); // Gi s ng i chi đã thua đấy game.gameOver(); } }
Ví dụ hình ảnh minh họa:
2.6 Chức năng quay lại
Chức năng quay lại trong trò chơi Flappy Bird bằng ngôn ngữ Java có thể đề
cập đến việc cho phép người chơi quay lại một trạng thái trước đó của trò chơi, lOMoARcPSD| 10435767
hoặc quay lại một màn hình menu hoặc tùy chọn khác. Điều này thường được
thực hiện thông qua việc tạo một nút hoặc tùy chọn trong giao diện người dùng
cho phép người chơi quay lại.
Ví dụ minh họa: Code Java chức năng quay lại. import javax.swing.*; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class Game { JFrame window; JPanel gameOverPanel; JButton backButton; public Game() {
window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // To p anel game over
gameOverPanel = new JPanel();
gameOverPanel.setLayout(new BorderLayout()); // To n út quay li
backButton = new JButton("Quay li") ;
backButton.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) { // X lý s kin nhấố p vào nút quay li // đ
ấy, chúng ta ch đn gin là n pane l game over
gameOverPanel.setVisible(false); lOMoARcPSD| 10435767 } }); // Thêm nút quay li vào panel game over
gameOverPanel.add(backButton, BorderLayout.SOUTH); window.add(gameOverPanel); window.setVisible(true); }
public static void main(String[] args) { new Game(); } }
Ví dụ hình ảnh minh họa:
2.7 Chức năng thêm ống khói
Chức năng “Thêm ống khói” trong trò chơi Flappy Bird bằng ngôn ngữ lOMoARcPSD| 10435767
Java liên quan đến việc tạo và quản lý các ống khói mà con chim cần phải bay
qua. Các ống khói này thường được tạo ra một cách động và liên tục trong quá
trình chơi game, tạo ra một thách thức cho người chơi.
Để thực hiện chức năng này, chúng ta cần tạo một lớp (class) cho đối tượng
ống khói, xác định các thuộc tính của nó (như vị trí, kích thước, hình ảnh), và các
phương thức để xử lý các hành động của nó (như di chuyển sang trái, tạo mới).
Ví dụ minh họa: Code Jave của chức năng thêm ống khói import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color; import java.util.ArrayList;
// Lớp Pipe đại diện cho ống khói trong trò chơi class Pipe { int x, y, width, height;
public Pipe(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; }
// Cập nhật vị trí của ống khói public void update() {
x -= 2; // di chuyển ống khói sang trái }
// Vẽ ống khói lên màn hình
public void draw(Graphics g) { g.setColor(Color.GREEN);
g.fillRect(x, y, width, height); } lOMoARcPSD| 10435767 }
// Lớp GamePanel là nơi vẽ lên màn hình trò chơi
class GamePanel extends JPanel { ArrayList pipes; public GamePanel() { pipes = new ArrayList();
pipes.add(new Pipe(600, 300, 50, 200)); // Thêm ống khói vào trò chơi } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Vẽ nền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
// Cập nhật và vẽ các ống khói for (Pipe pipe : pipes) { pipe.update(); pipe.draw(g); } } }
// Lớp Game chứa cửa sổ trò chơi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); lOMoARcPSD| 10435767 } }
Ví dụ hình ảnh minh họa:
2.8 Chức năng tạo sự lặp lại cho ống khói
Chức năng “Tạo sự lặp lại ống khói” trong trò chơi Flappy Bird bằng ngôn
ngữ Java liên quan đến việc tạo ra một chuỗi liên tục của các ống khói mà con
chim cần phải bay qua. Điều này thường được thực hiện bằng cách tạo ra một ống
khói mới ở phía bên phải của màn hình mỗi khi một ống khói di chuyển ra khỏi
phía bên trái của màn hình.
Ví dụ minh họa: Code Jave của chức năng tạo sự lặp lại cho ống khói lOMoARcPSD| 10435767 import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color; import java.util.ArrayList; // Lp Pi
pe đi din cho ốống khói trong trò chi class Pipe { int x, y, width, height;
public Pipe(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } // Cp n ht v t rí ca ốống khói public void update() { x -= 2; // di chuyn ốố ng khói sang trái }
// Veẽ ốống khói lên màn hình
public void draw(Graphics g) { g.setColor(Color.GREEN);
g.fillRect(x, y, width, height); } } // Lp Game Panel là ni veẽ lên màn hình trò chi
class GamePanel extends JPanel { ArrayList pipes; lOMoARcPSD| 10435767 public GamePanel() { pipes = new ArrayList();
pipes.add(new Pipe(600, 300, 50, 200)); // Thêm ốống khói đấều tiên vào trò ch i } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Veẽ nêền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); // Cp n
ht và veẽ các ốống khói for (Pipe pipe : pipes) { pipe.update(); pipe.draw(g);
// Nêốu ốống khói đã di chuyn ra khi màn hình
if (pipe.x + pipe.width < 0) {
pipe.x = getWidth(); // Di chuyn ốố
ng khói vêề phía bên phi c a m àn hình
pipe.y = (int)(Math.random() * getHeight()); // Đt v t rí y ca ốốn g khói mt v trí ngấẽu nhiên } } } } // Lp Game cha ca s trò chi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600); lOMoARcPSD| 10435767
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa:
2.9 Chức năng thua khi chạm ống khói
Chức năng “Thua khi chạm ống khói” trong trò chơi Flappy Bird bằng ngôn
ngữ Java liên quan đến việc xử lý va chạm giữa con chim và các ống khói. Khi
con chim va chạm vào một ống khói, trò chơi sẽ kết thúc và người chơi sẽ thua.
Để thực hiện chức năng này, chúng ta cần kiểm tra va chạm giữa con chim
và các ống khói sau mỗi khung hình. Nếu một va chạm được phát hiện, bạn sẽ kết thúc trò chơi. lOMoARcPSD| 10435767
Ví dụ minh họa: Code Java của chức năng thua khi chạm ống khói import javax.swing.*; import java.awt.*; import java.util.ArrayList; // Lp B
ird đi din cho con chim trong trò chi class Bird { int x, y, width, height;
public Bird(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } // Kim tra va chm gia
con chim và mt ốống khói
public boolean collidesWith(Pipe pipe) {
Rectangle birdRect = new Rectangle(x, y, width, height);
Rectangle pipeRect = new Rectangle(pipe.x, pipe.y, pipe.width, pipe.height);
return birdRect.intersects(pipeRect); } } // Lp Pi
pe đi din cho ốống khói trong trò chi class Pipe { int x, y, width, height;
public Pipe(int x, int y, int width, int height) { lOMoARcPSD| 10435767 this.x = x; this.y = y; this.width = width; this.height = height; } } // Lp Game Panel là ni veẽ lên màn hình trò chi
class GamePanel extends JPanel { Bird bird; ArrayList pipes; public GamePanel() {
bird = new Bird(100, 300, 20, 20); pipes = new ArrayList();
pipes.add(new Pipe(600, 300, 50, 200)); } // Kim tra va chm gia
con chim và các ốống khói
public void checkCollisions() { for (Pipe pipe : pipes) {
if (bird.collidesWith(pipe)) { gameOver(); } } }
// Kêốt thúc trò chi khi ng i chi th ua public void gameOver() {
JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION); System.exit(0); } lOMoARcPSD| 10435767 } // Lp Game cha ca s trò chi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa:
2.10 Chức năng tính điểm
Chức năng điểm số giúp theo dõi và hiển thị điểm số của người chơi trong quá trình chơi game. lOMoARcPSD| 10435767
Khi người chơi điều khiển con chim bay qua 1 cặp cột nước mà không va
chạm, họ sẽ được cộng thêm 1 điểm. Điểm số sẽ được cập nhật tức thì trên màn hình.
Ví dụ minh họa: Code Java của chức năng tính điểm. public class FlappyBird { private int score; public FlappyBird() { this.score = 0; }
public void incrementScore() { this.score += 1; } public int getScore() { return this.score; }
public static void main(String[] args) {
FlappyBird game = new FlappyBird();
game.incrementScore(); // Con chim bay qua mt c t
game.incrementScore(); // Con chim bay qua mt c t kh ác
System.out.println("Đim hin ti: " + game
.getScore()); // In ra đim hin t i } } Ví dụ hình ảnh minh họa: lOMoARcPSD| 10435767
2.11 Chức năng thêm màu nền
Chức năng “Thêm màu nền” trong trò chơi Flappy Bird bằng ngôn ngữ Java
liên quan đến việc thiết lập màu sắc cho nền của trò chơi. Màu nền có thể tạo ra
một không gian chơi phù hợp và tăng tính thẩm mỹ cho trò chơi.
Trong Java, chúng ta có thể sử dụng lớp java.awt.Color để tạo và quản lý các
màu sắc. Để thiết lập màu nền cho cửa sổ trò chơi, chúng ta có thể sử dụng phương
thức setBackground(Color c) của lớp java.awt.Component, mà cửa sổ trò chơi
(thường là một đối tượng của lớp javax.swing.JFrame hoặc java.awt.Frame) kế thừa.
Ví dụ minh họa: Code Java của chức năng thêm màu nền import javax.swing.JFrame; public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.CYAN); // thiết lập màu nền window.setVisible(true); } import java.awt.Color; }
Ví dụ hình ảnh minh họa: lOMoARcPSD| 10435767
2.12 Chức năng cho ống khói xuất hiện ngẫu nhiên
Chức năng “cho ống khói xuất hiện ngẫu nhiên” trong trò chơi Flappy Bird
bằng ngôn ngữ Java liên quan đến việc tạo ra các ống khói ở các vị trí ngẫu nhiên
trên màn hình. Điều này tạo ra sự không lường trước được và thách thức cho người
chơi, khiến trò chơi trở nên hấp dẫn hơn.
Để thực hiện chức năng này, chúng ta cần tạo ra các ống khói mới ở các vị
trí ngẫu nhiên sau mỗi khoảng thời gian nhất định hoặc sau khi một ống khói cụ
thể đã di chuyển qua màn hình. Chúng ta có thể sử dụng lớp java.util.Random
trong Java để tạo ra các số ngẫu nhiên, và sử dụng chúng để xác định vị trí của các ống khói mới.
Ví dụ minh họa: Code Java của chức năng cho ống khói xuất hiện ngẫu nhiên lOMoARcPSD| 10435767 import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Color; import java.util.ArrayList; import java.util.Random; // Lp Pi
pe đi din cho ốống khói trong trò chi class Pipe { int x, y, width, height;
public Pipe(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } // Cp n ht v t rí ca ốống khói public void update() { x -= 2; // di chuyn ốố ng khói sang trái }
// Veẽ ốống khói lên màn hình
public void draw(Graphics g) { g.setColor(Color.GREEN);
g.fillRect(x, y, width, height); } } lOMoARcPSD| 10435767 // Lp Game Panel là ni veẽ lên màn hình trò chi
class GamePanel extends JPanel { ArrayList pipes; Random random; public GamePanel() { pipes = new ArrayList(); random = new Random();
pipes.add(new Pipe(600, random.nextInt(400), 50, 200)); // Thêm ốống khói vi v trí y
ngấẽu nhiên vào trò chi } @Override
public void paintComponent(Graphics g) { super.paintComponent(g); // Veẽ nêền g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight()); // Cp n
ht và veẽ các ốống khói for (Pipe pipe : pipes) { pipe.update(); pipe.draw(g);
// Nêốu ốống khói đã di chuyn ra khi màn hình
if (pipe.x + pipe.width < 0) {
pipe.x = getWidth(); // Di chuyn ốố
ng khói vêề phía bên phi c a m àn hình
pipe.y = random.nextInt(400); // Đt v
trí y ca ốố ng khói mt v trí n gấẽ u nhiên } } } } lOMoARcPSD| 10435767 // Lp Game cha ca s trò chi public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Flappy Bird"); window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.add(new GamePanel()); window.setVisible(true); } }
Ví dụ hình ảnh minh họa: KẾT LUẬN Ưu điểm:
- Đơn giản và dễ chơi: Trò chơi Flappy Bird được lập trình bằng Java cógiao
diện đơn giản, dễ nhìn và cách chơi dễ hiểu. Người chơi chỉ cần điều khiển con
chim bay qua các cặp cột nước mà không va chạm.
- Tính thách thức cao: Mặc dù cách chơi đơn giản nhưng trò chơi lại
mangtính thách thức cao, tạo sự hấp dẫn cho người chơi. lOMoARcPSD| 10435767
- Tùy chỉnh linh hoạt: Trò chơi cho phép người chơi tùy chỉnh các thiết
lậpnhư âm thanh, độ khó,..... Giúp người chơi có thể tận hưởng trò chơi theo cách của mình.
- Bảng xếp hạng: Người chơi có thể so sánh điểm số của mình với ngườichơi
khác thông qua bảng xếp hạng, tạo thêm động lực để người chơi cố gắng đạt điểm số cao hơn. Hạn chế:
- Đồ họa đơn giản: Trò chơi có đồ họa 2D đơn giản, không phong phú vàchi
tiết như các trò chơi hiện đại khác.
- Chức năng giới hạn: Số lượng và độ phức tạp giữ các chức năng trong
tròchơi khá giới hạn. Trò chơi chỉ tập trung vào việc điều khiển con chim bay qua các cặp cột nước.
- Không có nhiều màn chơi: Trò chơi không có nhiều màn chơi khác nhauđể
người chơi khám phá. Mỗi lần chơi, người chơi sẽ lặp đi lặp lại cùng 1 màn chơi.
TÀI LIỆU THAM KHẢO 1.
Cuốn sách Java: A Beginner’s Guide, Eighth Edition bởi Herbert Schildt. 2.
Cuốn sách Beginning Java Game Development with LibGDX bởi LeeStemkoski. 3.
Cuốn sách Code Complete: A Practical Handbook of
SoftwareConstruction, Second Edition bởi Steve McConnell. 4.
Các diễn đàn và cộng đồng trực tuyến như Stack Overflow, GitHub, hoặcReddit.