Làm thế nào để bạn tạo một trò chơi 2048 trong python?
⚠️LƯU Ý⚠️. Chúng tôi sẽ không chấp nhận bất kỳ đóng góp/thay đổi nào đối với dự án nữa. Nó bây giờ là chỉ đọc Show Dựa trên trò chơi nổi tiếng 2048 của Gabriele Cirulli. Mục tiêu của trò chơi là trượt các ô được đánh số trên một lưới để kết hợp chúng để tạo ô có số 2048. Đây là phiên bản Python sử dụng TKinter Để bắt đầu trò chơi, hãy chạy người đóng góp
Trong hướng dẫn này, chúng tôi sẽ xây dựng trò chơi 2048 bằng Python. Chúng tôi sẽ trải qua các bước di chuyển khác nhau trong quá trình xây dựng trò chơi *Tôi sẽ sử dụng ma trận 4×4 để giải thích trò chơi này trong bối cảnh này* Một số chi tiết về trò chơi 2048Trong trò chơi này ban đầu, chúng tôi đã được cung cấp hai số 2 ở vị trí ngẫu nhiên trong ma trận Khi di chuyển lên, xuống, trái hoặc phải, nó sẽ hợp nhất với các số tương tự duy nhất có trên đường đi của nó Ví dụ, bên dưới là ảnh chụp màn hình của trò chơi Sau đó, nếu chúng ta nhấn phím 'W' hoặc di chuyển lên, chúng ta sẽ thực hiện các thay đổi sau
Điều này sẽ dẫn đến ma trận sau Tôi khuyên bạn nên chơi trò chơi này của bạn 3-4 lần để hiểu kỹ về nóTrước tiên chúng ta hãy đi qua các chức năng khác nhau sẽ được sử dụng, tôi sẽ giải thích chúng sau Néndef compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat hợp nhấtdef merge(mat): for i in range(4): for j in range(3): if mat[i][j]==mat[i][j+1] and mat[i][j]!=0: mat[i][j]+=mat[i][j]. #This merge function is for left move. mat[i][j+1]=0 return mat Đảo ngượcdef reverse(mat): new_mat=[] for i in range(4): new_mat.append([]) for j in range(4): new_mat[i].append(mat[i][3-j]) return new_mat chuyển vịdef transp(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): for j in range(4): new_mat[i][j]=mat[j][i] return new_mat Bốn chức năng này chủ yếu được sử dụng trong toàn bộ trò chơiNói một cách đơn giản, chức năng nén hoàn thành khoảng cách giữa các số được yêu cầu hoặc tạo các số quan trọng mà chúng tôi muốn thực hiện các hành động tiếp theo, đóng Chức năng hợp nhất, hợp nhất các số tương tự hiện tại so sánh ma trận tiếp theo Các chức năng đảo ngược và chuyển đổi đồng thời đảo ngược và chuyển đổi ma trận Ngoài ra, đọc. Cách chuyển đổi hình ảnh thành ma trận bằng Python
Ban đầu, các chức năng hợp nhất và nén được mã hóa cho bước di chuyển bên trái, chúng ta có thể sử dụng cùng một chức năng cho các bước di chuyển khác nhau bằng cách sử dụng các chức năng đảo ngược và chuyển vị. Các chức năng khác nhau cho các bước di chuyển khác nhau như sau Di chuyển trái
di chuyển phải
Trong trường hợp này, bằng cách đảo ngược và đảo ngược lại, hãy tạo một ma trận để xử lý nó giống như Di chuyển trái di chuyển lên
Chức năng chuyển đổi làm cho ma trận hoạt động như Di chuyển trái, sau đó chuyển đổi nó một lần nữa để hoạt động hoàn hảo Di chuyển xuống
Chuyển đổi và đảo ngược làm cho ma trận hoạt động giống như di chuyển trái Đây là cách chúng tôi viết mã cho các nước đi khác nhau Đây là cách phần logic hoạt động cho trò chơi 2048 Một số thay đổi khácSau khi hoàn thành mọi công việc trên trò chơi này hoặc bất cứ khi nào chức năng nén hoặc hợp nhất hoạt động, 2 mới ở vị trí ngẫu nhiên sẽ được thêm vào trò chơi của chúng tôi Chào các bạn. Trong bài viết này, chúng ta sẽ xem xét mã Python và logic để thiết kế trò chơi 2048 mà bạn đã chơi rất thường xuyên. Nếu bạn chưa quen với trò chơi, bạn nên chơi trò chơi trước để có thể hiểu chức năng cơ bản của nó 😉 điều kiện tiên quyết
Hãy viết mãTạo bảngTrước khi làm bất cứ điều gì, chúng ta cần cài đặt các mô-đun cần thiết
Tất cả các thiết lập. Bây giờ, chúng ta phải tạo def reverse(mat): new_mat=[] for i in range(4): new_mat.append([]) for j in range(4): new_mat[i].append(mat[i][3-j]) return new_mat0 cho bảng như sau
Trước hết, hãy tìm hiểu các biến chúng ta đã sử dụng là gì
Tiếp theo. Hãy viết mã các chức năng trong Board def compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat3 Không, không hiểu điều này không khó chút nào. Hãy phá vỡ các chức năng này
Đó là về lớp học def compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat34 Tạo trò chơiLớp này không có nhiều biến, nó chỉ có một số biến Boolean biểu thị trạng thái trò chơi. Vì vậy, hãy viết một số chức năng khác def merge(mat): for i in range(4): for j in range(3): if mat[i][j]==mat[i][j+1] and mat[i][j]!=0: mat[i][j]+=mat[i][j]. #This merge function is for left move. mat[i][j+1]=0 return mat3 Giản dị 6. Đó là hàm tạo. Nó khởi tạo tất cả các biến với các giá trị mặc định phù hợpdef compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat36. Nó gọi random_cell hai lần để gán '2' cho giá trị gridCell của hai ô ngẫu nhiên, sau đó nó vẽ lưới và sau đó, nó gọi link_keys để liên kết các phím lên, xuống, trái và phải def compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat37. Trước hết, nó kiểm tra xem trò chơi đã thắng hay thua, và nếu đúng như vậy, nó sẽ thực hiện câu lệnh return mà không cần làm gì cả. Mặt khác, nó tiếp tục thực hiện def merge(mat): for i in range(4): for j in range(3): if mat[i][j]==mat[i][j+1] and mat[i][j]!=0: mat[i][j]+=mat[i][j]. #This merge function is for left move. mat[i][j+1]=0 return mat7 Đây là những điều khiển chính của trò chơi. Trò chơi này được chơi bằng các phím mũi tên. Vì vậy, chúng ta phải kiểm soát vì nó Tiếp theo, chúng ta cần thực hiện phần Game over và hoàn thành. Nếu các ô tạo thành số def compress(mat): new_mat=[[0 for i in range(4)] for i in range(4)] for i in range(4): pos=0 for j in range(4): if mat[i][j]!=0: new_mat[i][pos]=mat[i][j] #This compress function is for lest move. pos+=1 return new_mat38 thì số đó sẽ thắng (rất hiếm khi). Nếu không, nó là trò chơi kết thúc Bạn có thể nhận được 4096 2048?Có thể kết hợp các giá trị này từ phải sang trái để có được 4096. Đó là tổng cộng 12 gạch. Vì đó là ít hơn 16 (số ô tối đa có thể vừa), nên 4096 là có thể .
Logic của trò chơi 2048 là gì?Mục tiêu của trò chơi là trượt các ô được đánh số trên một lưới để kết hợp chúng lại với nhau để tạo ô có số 2048 ; .
Có một thuật toán cho năm 2048?Giải trò chơi này là một bài toán thú vị vì nó có yếu tố ngẫu nhiên. Không thể dự đoán chính xác không chỉ vị trí đặt mỗi ô mới mà còn dự đoán đó sẽ là “2” hay “4”. Như vậy, không thể có thuật toán giải câu đố chính xác mọi lúc .
Bạn có thể tạo trò chơi pixel bằng Python không?Pyxel là công cụ trò chơi cổ điển dành cho Python . Nhờ các thông số kỹ thuật đơn giản lấy cảm hứng từ máy chơi game cổ điển, chẳng hạn như chỉ có thể hiển thị 16 màu và chỉ có thể phát lại 4 âm thanh cùng lúc, bạn có thể thoải mái tận hưởng việc tạo các trò chơi theo phong cách nghệ thuật pixel. |