Đăng ký
Cộng đồng phát triển game Việt - kết nối đam mê !

Trong loạt bài cơ bản về game chúng ta biết rằng một trong những game mà chúng ta nên bắt đầu đó là Tetris.

 

 

Nguồn hình: http://game-online-reviews.com/tetris-online/

 

Chúng ta bắt đầu chứ nhỉ?

 

+ Phân tích vấn đề:

Game bao gồm các thành phần:

  • Gạch: gồm các viên gạch có nhiều hình hài khác nhau:  I , T, E, L, . ,  ...
  • Board game: là nơi các viên gạch di chuyển trên giả sử board game có kích thước 8*8
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
    • 0 0 0 0 0 0 0 0
  • Tương tác phím: 
    • Trái: Điều khiển gạch qua trái
    • Phải: Điều khiển gạch qua phải
    • Xuống: Tăng tốc gạch rơi xuống nhanh hơn
    • Lên: Lật, chuyển trạng thái mỗi viên gạch
  • Luật game:
    • Mỗi lần sẽ có một viên gạch xuất hiện trên board game
    • Một viên gạch khác sẽ xuất hiện ở vùng chuẩn bị
    • Mỗi lần viên gạch sẽ rơi xuống một ô
    • Khi các viên gạch hợp thành một dòng thì dòng này sẽ mất và điểm được tính cho người chơi
      • Ví dụ:
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 1 1 1 1 1 1 1 1 -> dòng đã xây xong -> ghi điểm.
    • Người chơi điều khiển viên gạch: Hướng, kiểu, tốc độ bằng các phím
    • Cấp độ game càng lớn thì tốc độ của viên gạch rơi xuống càng nhanh.
Phân tích cụ thể hơn đi các bạn.
Lần cập nhật cuối tháng 4 2, 9:48 pm bởi Nguyễn Tài Hải.
Skype: hai.nguyentai<br />Gmail: hainguyentai@gmail.com

    • Khi các viên gạch hợp thành một dòng thì dòng này sẽ mất và điểm được tính cho người chơi
      • Ví dụ:
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 0 0 0 0 0 0 0 0
        • 1 1 1 1 1 1 1 1 -> dòng đã xây xong -> ghi điểm.

Trường hợp phức tạp hơn:

Ví dụ:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 1 1 1 1 0 1 1 1   (A)
  • 1 1 1 1 1 1 1 1  -> dòng đã xây xong -> ghi điểm -> bỏ
  • 1 1 0 0 1 0 0 0   (B)

Dòng đã xây dong -> ghi điểm, và kèm theo đó là dịch chuyển những dòng còn lại xuống dưới 

Như trường hợp trên thì dòng vừa được ăn điểm sẽ bị loại bỏ khỏi mảng nhưng liền sau đó ta phải dịch chuyển những phần tử có giá trị là 1 từ dòng A xuống đến cuối (như là trọng lực trong vật lýWink. Sau khi A chuyển hết xuống dưới, phần màu đỏ sẽ đi tiếp xuống dòng B, phần màu xanh ở lại -> ăn tiếp dòng B, phần màu xanh lại đi xuống dưới tiếp.

=> Các viên gạch luôn luôn dịch chuyển tiếp xuống dưới khi có khoảng trống

Nhưng đối với các viên gạch rơi thì không áp dụng quy luật trên: 

Ví dụ:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 2 2 2 0 0 0
  • 1 1 1 2 1 1 0 0
  • 1 1 1 0 1 1 0 0
Như trường hợp này, các viên số 1 là viên gạch đã rơi xuống và nằm im, viên số 2 là viên chữ T vừa mới rơi xuống lại phải nằm đứng yên như vậy. Nhưng khi 2 viên màu vàng mất đi -> mất điểm tựa (nghe như có physic :D ) -> thì 2 viên màu cam còn lại sẽ rơi tiếp xuống dưới.
=> Bắt đầu phức tạp :D 
Theo suy nghĩ của em là vậy, không biết có phải là tự làm khó mình hay không nữa.
Lần cập nhật cuối tháng 4 3, 9:18 pm bởi Huy Trần.

Line bản gốc thì không có trường hợp dồn xuống dưới. Dồn thì làm sao có những khoảng trống để mình tìm cách phá và lấp nữa.

Skype: hai.nguyentai<br />Gmail: hainguyentai@gmail.com

Khiếp quá. Đúng là không có chỗ cho những kẻ yếu tim ở đây.

Skype: hai.nguyentai<br />Gmail: hainguyentai@gmail.com

Thật vô đối mà :D

Game teris này mình đã làm 1 lần bằng C trên Console . Vẫn còn source . Nếu mọi người cần mình có thể đứng ra viết tutor về game Tetris này ?

Game teris này mình đã làm 1 lần bằng C trên Console . Vẫn còn source . Nếu mọi người cần mình có thể đứng ra viết tutor về game Tetris này ?

+1 TaiHai? Smile

Game teris này mình đã làm 1 lần bằng C trên Console . Vẫn còn source . Nếu mọi người cần mình có thể đứng ra viết tutor về game Tetris này ?

 

Cần chứ bạn, đăng tutorial đi bạn, ủng hộ bạn nhiệt tinh :D

Game teris này mình đã làm 1 lần bằng C trên Console . Vẫn còn source . Nếu mọi người cần mình có thể đứng ra viết tutor về game Tetris này ?

làm luôn đi bác

Vậy mình sẽ bắt tay làm luôn .

Game teris này mình đã làm 1 lần bằng C trên Console . Vẫn còn source . Nếu mọi người cần mình có thể đứng ra viết tutor về game Tetris này ?

 

+1. Ủng hộ hết mình luôn. làm luôn đi bác 

Đinh Cẩm Phong

Tetris là một game nặng về lý luận. Mình đang mày mò tìm cách hiện thực nó. Cũng có hướng đi nhưng chưa hoàn thiện. Rất mong chờ sự gợi ý của Quang Tú trong tutorial.

Skype: hai.nguyentai<br />Gmail: hainguyentai@gmail.com

Tetris là một game nặng về lý luận. Mình đang mày mò tìm cách hiện thực nó. Cũng có hướng đi nhưng chưa hoàn thiện. Rất mong chờ sự gợi ý của Quang Tú trong tutorial.

 

Em cũng đang bắt tay viết tut rồi đây . a đợi nhé .

   thích điều này.

Huy Trần said...

 

Trường hợp phức tạp hơn:

Ví dụ:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 1 1 1 1 0 1 1 1   (A)
  • 1 1 1 1 1 1 1 1  -> dòng đã xây xong -> ghi điểm -> bỏ
  • 1 1 0 0 1 0 0 0   (B)

Dòng đã xây dong -> ghi điểm, và kèm theo đó là dịch chuyển những dòng còn lại xuống dưới 

Như trường hợp trên thì dòng vừa được ăn điểm sẽ bị loại bỏ khỏi mảng nhưng liền sau đó ta phải dịch chuyển những phần tử có giá trị là 1 từ dòng A xuống đến cuối (như là trọng lực trong vật lýWink. Sau khi A chuyển hết xuống dưới, phần màu đỏ sẽ đi tiếp xuống dòng B, phần màu xanh ở lại -> ăn tiếp dòng B, phần màu xanh lại đi xuống dưới tiếp.

=> Các viên gạch luôn luôn dịch chuyển tiếp xuống dưới khi có khoảng trống

Nhưng đối với các viên gạch rơi thì không áp dụng quy luật trên: 

Ví dụ:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 2 2 2 0 0 0
  • 1 1 1 2 1 1 0 0
  • 1 1 1 0 1 1 0 0
Như trường hợp này, các viên số 1 là viên gạch đã rơi xuống và nằm im, viên số 2 là viên chữ T vừa mới rơi xuống lại phải nằm đứng yên như vậy. Nhưng khi 2 viên màu vàng mất đi -> mất điểm tựa (nghe như có physic :D ) -> thì 2 viên màu cam còn lại sẽ rơi tiếp xuống dưới.
=> Bắt đầu phức tạp :D 
Theo suy nghĩ của em là vậy, không biết có phải là tự làm khó mình hay không nữa.

 

Thích cái idea này của Huy,

 

Mỗi cục gạch sẽ có id khác nhau, trong trường hợp nó tạo ra khoảng trống nhưng vẫn cân bằng được thì vẫn không dồn xuống, ví dụ:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 0 0 2 2 2 0 0 0
  • 1 1 1 2 1 1 0 0
  • 1 1 1 0 1 1 0 0

Trường hợp mất cân bằng:

  • 0 0 0 0 0 0 0 0
  • 0 0 0 0 0 0 0 0
  • 3 3 0 0 0 0 0 4
  • 3 3 2 2 2 4 4 4 <-- Ghi điểm
  • 1 1 1 2 1 1 0 0
  • 1 1 1 0 1 1 0 0

Sau khi ăn điểm thì cục số 2 và cục số 4 (bên phải cùng sẽ chơi vơi), không có liên kết sẽ tự động rớt xuống theo qui luật trọng trường Smile.

 

Tiếp thêm ý tưởng của Huy, mình thấy cải tiến này nhỏ nhưng cũng khá thú vị Smile.

Lần cập nhật cuối tháng 4 6, 11:51 pm bởi Nguyễn Quang Vinh.
   thích điều này.
Múi giờ GMT +8. Bây giờ là 5:20 am.