Hướng Dẫn Làm Game Tetris Bằng Java

  -  

Tetris là game huyền thoại mà lại những cố hệ 8x, 9x phần đông biết được chơi. Từ trong thời hạn 2000, Những lắp thêm chơi trò giải trí black white bùng phát, xuất hiện thêm mọi mọi nơi, phần nhiều trẻ em thời gian đấy người nào cũng master thể loại Game này.

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

Sau phía trên, mình vẫn lí giải các bạn làm game Tetris bằng ngữ điệu Java.

Chuẩn bị

Tiến hành

Mình sẽ tạo 2 folder gổm src (chứa source code) và textures (đựng ảnh)

Tạo một file hình ảnh gồm 7 kăn năn màu

*

File hình họa form size là 210x30 tức là ảnh bao gồm 7 kăn năn, mỗi khối hận size 30x30. Mình phóng to lớn hình mang lại các bạn dễ quan liêu ngay cạnh. Quý Khách hoàn toàn có thể tải trường đoản cú source code của chính bản thân mình file ảnh bên trên hoặc từ bỏ tạo nên bản thân một khối hình họa 7 màu sắc nlỗi sau:

Sử dụng tlỗi viện pillow của Pynhỏ vẽ các kăn năn hình vuông cạnh nhau rồi giữ 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((1trăng tròn, 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))yên.save("textures/tiles.png", quality=100)

Chia lớp

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

Lớp Window: Tạo cửa ngõ số chính, các thanh hao ngang bên trên, kích cỡ cửa số. Chạy cửa số chính, load Board game.Lớp Board: Chia những bloông xã hình họa màu sắc, lưu thành 7 shape nhỏng trong game Tetris, random shape, vẽ các mặt đường bảng, …Lớp Shape: Tập phù hợp các ở trong 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 phím cùng với Shape, …

Mình vẫn đi từng bước tiến hành game Tetris nlỗi sau:

Thiết lập Window Game

*

Window gồm form size 306x629. Window tất cả size này bởi vì đề nghị trừ đi vài ba pixcel phía hai bên lề trái đề nghị và trên dưới nhằm ta được bên trong form size Board game đang là 300x600. Nút Close được cấp dưỡng, ko thêm nút Rekích cỡ.

Bây giờ sản xuất thêm class Board rồi thêm Board vào vào Window nhằm 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 cỡ Board game là 300x600, ta phân chia chiều rộng thành 10 phần, bề ngang thành trăng tròn phần. Kẻ những mặt đường màu black phân chia sinh sản thành Board.

Xem thêm: Top 16 Game Online Mobile Hay Nhất Hiện Nay 2021, Top 20 Game Online Pc Hay Nhất, Miễn Phí 2021

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 hình ảnh, phân chia Bloông xã với sản xuất hình các Shape

*

Sau khi có Board game, ta vẫn load bức ảnh tiles.png cất những Bloông xã 7 màu sắc nlỗi bên trên. Tiến hành phân tách bức ảnh thành 7 bloông xã cùng với 7 color kích thước 30x30.

try blocks = ImageIO.read(Board.class.getResource("tiles.png")); catch (IOException e) // TODO Auto-generated catch bloông xã e.printStackTrace(); Tiếp theo, ta sản xuất Shape lưu giữ một trong những thông tin ngày nay nlỗi kân hận màu, địa điểm. Sau kia sản xuất hàm render nhằm vẽ những kăn năn Block thuộc màu sắc lên Board game để tạo thành quyết 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 gồm 7 tạo hình bao gồm hình chữ O, I, S, Z, L, J, T. Các chia là chúng ta áp dụng một ma trận form size nhỏ tuổi, lưu lại những ô hàng đầu tức thị cất bloông chồng, số 0 là không cất bloông chồng. Các ô hàng đầu xếp thành hình các Shape rồi ta render cho Shape là được.

Xem thêm: Bằng Cử Nhân Tiếng Anh Là Gì ? Cử Nhân Tiếng Anh Là Gì

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 mang lại Shape

Sau Khi bao gồm các Shape việc tiếp sau đề xuất làm là sinh sản các Event 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 đã tự động hóa dịch chuyển trường đoản cú bên trên xuống dưới. Key thao tác tất cả phím trái, phải đặt dịch chuyển Shape sang trái giỏi buộc phải. Phím xuống dưới dùng để tăng vận tốc mang đến Shape. Bình hay thì deltaX = 0 còn deltaX = -1 hoặc 1 đã dịch chuyển shape thanh lịch trái hoặc buộc phải. Tại board.java: