Hướng dẫn làm game tetris bằng java

     

Tetris là game huyền thoại mà những thế hệ 8x, 9x đều biết được chơi. Từ trong năm 2000, phần đông máy gameplay đen trắng bùng nổ, xuất hiện thêm khắp hầu hết nơi, đa số trẻ em thời điểm đấy ai ai cũng master thể một số loại Game này.

Bạn đang xem: Hướng dẫn làm game tetris bằng java

Sau đây, mình sẽ hướng dẫn chúng ta làm trò chơi Tetris bằng ngữ điệu Java.

Chuẩn bị

Tiến hành

Mình sẽ tạo 2 thư mục gổm src (chứa source code) cùng textures (chứa ảnh)

Tạo một file ảnh gồm 7 khối màu

*

File hình ảnh kích thước là 210x30 nghĩa là hình ảnh gồm 7 khối, mỗi khối kích thước 30x30. Mình phóng to lớn hình cho các bạn dễ quan lại sát. Chúng ta có thể tải từ bỏ source code của bản thân file hình ảnh trên hoặc tự tạo cho mình một khối ảnh 7 color như sau:

Sử dụng thư viện pillow của Python vẽ những khối hình vuông vắn cạnh nhau rồi lưu vào thư mục textures

from PIL import Image, ImageDrawim = Image.new("RGB", (210, 30), (0, 0, 0))draw = ImageDraw.Draw(im)draw.rectangle((0, 0, 30, 30), fill=(246, 0, 0))draw.rectangle((30, 0, 60, 30), fill=(255, 140, 0))draw.rectangle((60, 0, 90, 30), fill=(255, 238, 0))draw.rectangle((90, 0, 120, 30), fill=(77, 233, 76))draw.rectangle((120, 0, 150, 30), fill=(55, 131, 255))draw.rectangle((150, 0, 180, 30), fill=(72, 21, 170))draw.rectangle((180, 0, 210, 30), fill=(255, 26, 206))im.save("textures/tiles.png", quality=100)

Chia lớp

Mình chia dễ dàng và đơn giản thành 3 phần:

Lớp Window: tạo cửa số chính, các thanh ngang trên, kích cỡ cửa số. Chạy cửa số chính, load Board game.Lớp Board: Chia những block hình ảnh màu, lưu lại thành 7 shape như trong game Tetris, random shape, vẽ các đường bảng, …Lớp Shape: Tập hợp các thuộc tính của Shape, render Shape, cập nhập Shape sau các lần xuống, vươn lên là đối Shape, thao tác phím với Shape, …

Mình vẫn đi từng bước thực hiện game Tetris như sau:

Thiết lập Window Game

*

Window có kích cỡ 306x629. Window có form size này là vì đề nghị trừ đi vài pixcel 2 bên lề trái đề xuất và xấp xỉ để ta được bên trong kích thước Board game vẫn là 300x600. Nút Close được thêm vào, ko thêm nút Resize.

Bây giờ sinh sản thêm class Board rồi thêm Board vào trong Window để load game.

import javax.swing.JFrame;/** * Window */public class Window public static final int WIDTH = 306, HEIGHT = 629; private JFrame window; private Board board; public Window() window = new JFrame("Tetris Game"); window.setSize(WIDTH, HEIGHT); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setResizable(false); window.setLocationRelativeTo(null); board = new Board(); window. Add(board); window.addKeyListener(board); window.setVisible(true); public static void main(String<> args) new Window();

Vẽ Board game

*

Với kích thước Board trò chơi là 300x600, ta chia chiều rộng thành 10 phần, bề ngang thành 20 phần. Kẻ các đường color đen phân chia tạo thành Board.

private final int blockSize = 30; private final int boardWidth = 10, boardHeight = 20; public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i

Load ảnh, phân tách Block và chế tác hình những Shape

*

Sau khi gồm Board game, ta đang load bức hình ảnh tiles.png chứa những Block 7 màu sắc như trên. Triển khai chia bức hình ảnh thành 7 block cùng với 7 màu size 30x30.

try blocks = ImageIO.read(Board.class.getResource("tiles.png")); catch (IOException e) // TODO Auto-generated catch block e.printStackTrace(); Tiếp theo, ta chế tác Shape lưu một trong những thông tin lúc này như khối màu, vị trí. Kế tiếp tạo hàm render để vẽ những khối Block cùng màu lên Board game để sản xuất thành hình những Shape.

private BufferedImage block; private int<><> coords; private Board board; public void render(Graphics g){ for (int row = 0; row các Shape tất cả 7 tạo thành hình bao gồm hình chữ O, I, S, Z, L, J, T. Các chia là họ sử dụng một ma trận form size nhỏ, đánh dấu các ô tiên phong hàng đầu nghĩa là đựng block, số 0 là không chứa block. Những ô số 1 xếp thành hình những Shape rồi ta render mang lại Shape là được.

Xem thêm: Bear Game Chúng Tôi Đơn Giản Là Gấu, Chúng Tôi Đơn Giản Là Gấu: Đường Về Nhà

shapes<0> = new Shape(blocks.getSubimage(0, 0, blockSize, blockSize), new int<><> 1, 1, 1, 1 // I shape , this, 1); shapes<1> = new Shape(blocks.getSubimage(blockSize, 0, blockSize, blockSize), new int<><> 1, 1, 0 , 0, 1, 1 // Z shape , this, 2); shapes<2> = new Shape(blocks.getSubimage(blockSize * 2, 0, blockSize, blockSize), new int<><> 0, 1, 1 , 1, 1, 0 // S shape , this, 3); shapes<3> = new Shape(blocks.getSubimage(blockSize * 3, 0, blockSize, blockSize), new int<><> 1, 1, 1 , 0, 0, 1 // J shape , this, 4); shapes<4> = new Shape(blocks.getSubimage(blockSize * 4, 0, blockSize, blockSize), new int<><> 1, 1, 1 , 1, 0, 0 // L shape , this, 5); shapes<5> = new Shape(blocks.getSubimage(blockSize * 5, 0, blockSize, blockSize), new int<><> 1, 1, 1 , 0, 1, 0 // T shape , this, 6); shapes<6> = new Shape(blocks.getSubimage(blockSize * 6, 0, blockSize, blockSize), new int<><> 1, 1 , 1, 1 // O shape , this, 7);

Tạo công dụng cho Shape

Sau lúc có các Shape việc tiếp theo cần có tác dụng là tạo thành các event Key tạo ra tác những Shape. Xử lý va tiếp xúc với border của Board.

*

Bình thường, Shape sẽ tự động hóa di chuyển từ bên trên xuống dưới. Key làm việc gồm phím trái, yêu cầu để dịch chuyển Shape sang trọng trái tuyệt phải. Phím xuống dưới dùng làm tăng vận tốc cho Shape. Bình thường thì deltaX = 0 còn deltaX = -1 hoặc 1 sẽ dịch chuyển shape sang trọng trái hoặc phải. Ở board.java: