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ừ trong những năm 2000, đa số máy game play đen white bùng nổ, xuất hiện khắp rất nhiều nơi, phần đông trẻ em thời khắc đấy ai ai 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 vẫn 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ẽ tạo 2 folder gổm src (chứa source code) cùng 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 kích thước 30x30. Bản thân phóng to hình cho chúng ta dễ quan liêu sát. Bạn có thể tải trường đoản cú source code của chính bản thân mình file hình ảnh trên hoặc tự tạo nên mình một khối hình ảnh 7 màu như sau:
Sử dụng tủ sách pillow của Python vẽ những khối hình vuông vắn cạnh nhau rồi lưu lại vào folder 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 và đơn giản thành 3 phần:Lớp Window: sinh sản cửa số chính, những thanh ngang trên, kích thước cửa số. Chạy cửa ngõ 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 trò chơi Tetris, random shape, vẽ những đường bảng, …Lớp Shape: Tập hợp những thuộc tính của Shape, render Shape, cập nhập Shape sau mỗi lần xuống, thay đổi đối Shape, thao tác phím cùng với Shape, …Mình đang đi từng bước thực hiện game Tetris như sau:
Thiết lập Window Game

Window có form size 306x629. Window có kích thước này là vì đề xuất trừ đi vài ba pixcel phía 2 bên lề trái đề xuất và trên dưới để ta được bên phía trong kích thước Board game vẫn là 300x600. Nút Close nhận thêm vào, không thêm nút Resize.
Bây giờ tạo ra 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 form size Board trò chơi là 300x600, ta chia bề rộng thành 10 phần, bề ngang thành đôi mươi phần. Kẻ những đường màu đen phân loại tạo thành Board.
Xem thêm: Ứng Dụng Chơi Game Ios Trên Pc, 11 Phần Mềm Giả Lập Ios Trên Windows Tốt Nhất
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à chế tác hình những Shape

Sau khi tất cả Board game, ta sẽ load bức hình ảnh tiles.png chứa các Block 7 color như trên. Thực hiện chia bức ảnh thành 7 block 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 bây giờ như khối màu, vị trí. Sau đó tạo hàm render nhằm vẽ những khối Block cùng màu lên Board game để tạo ra 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 có 7 tạo nên hình gồm hình chữ O, I, S, Z, L, J, T. Những 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à đựng block, số 0 là không cất block. Những ô số 1 xếp thành hình các Shape rồi ta render đến Shape là được.
Xem thêm: Nba Mô Hình Cầu Thủ Bóng Rổ Lebron James Và 6 Ngôi Sao Bóng Rổ Đa Năng Của Nba
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ác dụng cho Shape
Sau lúc có các Shape việc tiếp theo sau cần làm là chế tác các sự kiện Key tạo ra tác các Shape. Xử lý va chạm với border của Board.
Bình thường, Shape sẽ tự động hóa di gửi từ trên xuống dưới. Key làm việc gồm phím trái, phải để dịch rời Shape lịch sự trái giỏi phải. Phím xuống dưới dùng làm 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 chuyển shape sang trọng trái hoặc phải. Ở board.java: