Hướng dẫn làm game tetris bằng java
Tetris là game huyền thoại mà các thế hệ 8x, 9x đều hiểu rằng chơi. Từ những năm 2000, gần như máy game play đen trắng bùng nổ, xuất hiện khắp các nơi, hầu hết trẻ em thời điểm đấy người nào cũng master thể các loại Game này.
Bạn đang xem: Hướng dẫn làm game tetris bằng java
Sau đây, mình đang hướng dẫn chúng ta làm trò chơi Tetris bằng ngôn ngữ Java.
Chuẩn bị
Tiến hành
Mình sẽ khởi tạo 2 thư mục gổm src (chứa source code) với textures (chứa ảnh)
Tạo một file hình ảnh gồm 7 khối màu

File ảnh kích thước là 210x30 nghĩa là hình ảnh gồm 7 khối, mỗi khối size 30x30. Bản thân phóng to lớn hình cho các bạn dễ quan tiền sát. Chúng ta cũng có thể tải từ bỏ source code của chính mình file ảnh trên hoặc tự tạo cho mình một khối hình ảnh 7 màu sắc như sau:
Sử dụng tủ sách pillow của Python vẽ những khối hình vuông cạnh nhau rồi giữ vào thư mục texturesfrom 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 thành 3 phần:Lớp Window: sản xuất cửa số chính, những thanh ngang trên, size cửa số. Chạy cửa số chính, load Board game.Lớp Board: Chia các block hình ảnh màu, lưu lại thành 7 shape như trong game Tetris, random shape, vẽ những đườ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, trở thành đối Shape, thao tác làm việc phím với Shape, …Mình sẽ đi từng bước tiến hành game Tetris như sau:
Thiết lập Window Game

Window có size 306x629. Window có form size này là vì đề nghị trừ đi vài pixcel 2 bên lề trái buộc phải và trên dưới để ta được bên trong kích thước Board game đang là 300x600. Nút Close nhận thêm vào, không thêm nút Resize.
Bây giờ tạo thêm class Board rồi thêm Board vào vào 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 size Board game là 300x600, ta chia bề rộng thành 10 phần, bề ngang thành 20 phần. Kẻ những đường màu đen phân loại tạo thành Board.
Xem thêm: Brown Sugar Là Gì - Và Những Loại Đường Cần Biết Khi Làm Bánh
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 chia Block và sản xuất hình các Shape

Sau khi bao gồm Board game, ta sẽ load bức hình ảnh tiles.png chứa các Block 7 màu sắc như trên. Thực hiện chia bức ảnh thành 7 block với 7 màu kích thước 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ạo Shape lưu một số trong những thông tin hiện tại như khối màu, vị trí. Tiếp nối tạo hàm render để vẽ những khối Block thuộc màu lên Board game để sinh sản 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 những Shape tất cả 7 tạo thành hình gồm hình chữ O, I, S, Z, L, J, T. Các chia là bọn họ sử dụng một ma trận kích thước nhỏ, đánh dấu các ô hàng đầu nghĩa là chứa block, số 0 là không đựng block. Các ô tiên phong hàng đầu xếp thành hình các Shape rồi ta render cho Shape là được.
Xem thêm: Cách Đổi Tên Fanpage Trên 200 Like 2017, Top 3 Hướng Dẫn Đổi Tên Fanpage Trên 200 Like
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 tính năng cho Shape
Sau khi có những Shape việc tiếp theo sau cần có tác dụng là tạo ra các sự kiện Key sản xuất tác các Shape. Xử lý va tiếp xúc với border của Board.
Bình thường, Shape sẽ auto di đưa từ bên trên xuống dưới. Key làm việc gồm phím trái, phải để di chuyển Shape sang trọng trái giỏi phải. Phím xuống dưới dùng để tăng vận tốc cho Shape. Thông thường thì deltaX = 0 còn deltaX = -1 hoặc 1 sẽ dịch rời shape thanh lịch trái hoặc phải. Ở board.java: