Một lập trình viên già dạy bạn cách hoàn thành trò chơi Tetris C++ trong một ngày
In lạiTác giả: qq735679552Thời gian cập nhật: 27-09-2022 22:32:09324
CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này, một lập trình viên kỳ cựu hướng dẫn bạn cách hoàn thành trò chơi Tetris C++ trong một ngày, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Đầu tiên, hãy xem các kết xuất:
。
。
。
Hình 1 Quá trình chạy game
。
Quá trình sản xuất được giải thích chi tiết dưới đây.
。
1. Tài liệu chính
Các tệp này chứa ba: tetris.cpp, tetris.h và main.cpp. Công dụng của mỗi tệp như sau:
tập tin tetris.cpp: thực hiện chức năng;
tetris.h: khai báo lớp và hàm;
main.cpp: hàm chính;
。
2. Thiết kế giao diện
bool vis[100][100]; // Dùng để đánh dấu tọa độ int Co[100][100];
TRONG:
vis[100][100] dùng để đánh dấu tọa độ giao diện, true nghĩa là có nội dung, false nghĩa là trống;
Co[100][100] là màu dùng để đánh dấu tọa độ giao diện;
class T_Box{ static int Score; static int Xếp hạng; riêng tư: int x,y; // Kiểu int; // Kiểu int fg; // Đồ họa đã thay đổi của một đồ họa nhất định: T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0); static void staticNum(int num void setValue(int sx = 31 ,int sy = 3, int st = 0, int f = 0); void Move(int stepA, int stepB); bool Stop(); void printBox(); void erasBox(); (T_Box tạm thời); void Transform(); bool Judge();};
Chức năng thiết kế của các khối khác nhau như sau:
lớp Coord{ public : int x; int y; int Col;}G[10][10][10];
TRONG:
x, y là tọa độ tương đối;
Col là màu khối;
G[10] [10] [10]: Một chiều đại diện cho loại khối, hai chiều đại diện cho các ô vuông bên trong khối và ba chiều đại diện cho dạng biểu diễn của khối;
Chúng ta hãy nhìn vào thiết kế của từng khối, như hình dưới đây:
Những gì được đặt ở trên là tọa độ tương đối của từng khối và màu của khối.
。
4. Ý tưởng thiết kế
Trước tiên chúng ta hãy xem các loại khối chính, như được hiển thị bên dưới:
class T_Box{ static int Score; static int Xếp hạng; riêng tư: int x,y; // Kiểu int; // Kiểu int fg; // Đồ họa đã thay đổi của một đồ họa nhất định: T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ; static void staticNum(int num) ; 3 , int st = 0 , int f = 0) ; void Move(int stepA ,int stepB) ; bool Stop() ; void printBox() ; (T_Box tạm thời) ; void Transform() ; bool Judge() ;};
TRONG:
Điểm: thể hiện điểm số của trận đấu;
Xếp hạng: Cho biết cấp độ của trò chơi, được tính dựa trên điểm số;
Mục đích của từng chức năng như sau:
T_Box: Hàm tạo, khởi tạo kiểu tọa độ;
staticNum: Cập nhật điểm số và cấp độ, hiển thị trong hộp nhỏ phía dưới bên phải;
setValue: Đặt tọa độ ban đầu, loại và các thay đổi của khối, trong đó loại và các thay đổi là giá trị ngẫu nhiên;
Di chuyển: Di chuyển khối rơi sang trái, phải và xuống dưới;
Stop: Tính xem trò chơi đã kết thúc chưa;
printBox: Xuất đồ họa hộp ra giao diện;
erasBox: Xóa ô trên giao diện;
Mark: Đánh dấu có nội dung tại vị trí hiện tại;
Tạm dừng: Trò chơi đang tạm dừng và chờ bắt đầu;
nextBox: Hiển thị ô vuông tiếp theo ở ô vuông phía trên bên phải;
Transform: Chuyển đổi kiểu lưới trong quá trình lưới rơi xuống;
Thẩm phán: Thẩm phán xem hình vuông có thể thay đổi phong cách hay không;
Tiếp theo, hãy nói về logic thiết kế của chương trình chính như sau:
// Chương trình chính void Tetris(){ srand(time(0)); // Lấy thời gian hệ thống setBox(); // Đặt đồ họa khác nhau T_Box cd, tempA, tempB // Giá trị ban đầu của mỗi khối rơi tempB . setValue(); // Đặt giá trị ban đầu của hộp tempB.nextBox(tempA); for(int i = 0; ; ++i) { if(!(i%2)) tempA.setValue(); khác tempB.setValue(); if(i%2) tempB.nextBox(tempA), cd = tempA; khác tempA.nextBox(tempB), cd = tempB while(1) { cd.printBox (); // Xuất đồ họa if(cd.Stop()) { color(6); getCoord(20,10); cout<<" T_T Game over T_T"; } Sleep(350); cd.eraseBox(); //Xóa đồ họa cd.Move(0,1); là một nút được nhấn, nếu có thì đó có thể là nút xoay hoặc nút tăng tốc { char ch = getch() { case 'a' : cd.Move(-2,0); Di chuyển một hình vuông sang trường hợp bên trái 'd' : cd.Move(2,0) ; // Di chuyển một hình vuông sang trường hợp bên phải 'w' : cd.Transform() ; // Chuyển đổi trường hợp hình vuông '; s' : cd.Move(0,2); break; // Trường hợp hộp thả 'T' : cd.Pause() ; Nếu không, nó sẽ không được thực thi} } if(cd.Stop()) break; } cd.printBox(); cd.Mark(); // Kiểm tra xem có thể loại bỏ nó không}}
Ý tưởng thiết kế như sau:
1. Đầu tiên, thiết lập đồ họa và giao diện khác nhau;
2. Tạo hình vuông hiện tại và hình vuông tiếp theo, và hình vuông tiếp theo được hiển thị ở hộp phía trên bên phải;
3. Xuất hình vuông rơi hiện tại ra giao diện;
4. Xác định xem trò chơi đã kết thúc chưa;
5. Di chuyển hình vuông xuống dưới;
6. Giám sát việc nhập liệu của người dùng và thực hiện các thao tác do người dùng nhập vào, bao gồm: di chuyển, thả hình vuông, thay đổi kiểu hình vuông, thoát, tạm dừng, v.v.
7. Phát hiện xem hình vuông có giảm xuống đáy hay không và thực hiện theo vòng lặp cho đến khi hình vuông giảm xuống đáy;
8. Lặp lại 2 ~ 7 cho đến khi kết thúc trò chơi;
。
5. Tóm tắt
Trọng tâm của thiết kế Tetris C++ nằm ở thiết kế giao diện và logic tổng thể của trò chơi. Trong số đó, thiết kế giao diện chủ yếu là lấy tọa độ tương ứng và xuất ra đồ họa tương ứng ở tọa độ tương ứng. chu kỳ để tạo ra các hình vuông rơi xuống và chuyển động của hình vuông được thực hiện thông qua. Điều này đạt được bằng cách xóa hình vuông ở vị trí hiện tại và di chuyển tọa độ tổng thể của hình vuông theo một để hiển thị lại.
Bài viết này kết thúc tại đây, tôi hy vọng nó có thể hữu ích cho bạn và tôi hy vọng bạn có thể chú ý hơn đến nội dung của tôi! .
Liên kết gốc: https://blog.csdn.net/nyist_zxp/article/details/119559201.
Cuối cùng, bài viết về việc lập trình viên cũ dạy bạn hoàn thành trò chơi Tetris C++ trong một ngày sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về việc lập trình viên cũ dạy bạn hoàn thành trò chơi Tetris C++ trong một ngày, vui lòng tìm kiếm bài viết của CFSDN. Hoặc tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi đang làm theo hướng dẫn về dưa hấu. Đây là phần đầu tệp HUD.js của tôi. game.HUD = game.HUD || {} Tôi đã thấy điều này trước đây trong các ví dụ khác. không gian tên.some
Tôi vừa tạo trò chơi nhỏ này để người dùng có thể nhấp vào. Anh ấy có thể nhìn thấy các lượt nhấp chuột của mình, giống như "cookieclicker". Mọi thứ đều hoạt động tốt ngoại trừ một điều. Tôi đã thử rút ngắn mã của mình bằng cách tạo một dòng biến mã, điều này tôi đã lặp lại nhiều lần. tài liệu
Trong video này: http://www.youtube.com/watch?v=BES9EKK4Aw4 Notch (người tạo ra Minecraft) đang thực hiện một việc mà anh ấy gọi là "gỡ lỗi trực tiếp". Anh ấy thực sự đã chơi trò chơi trong khi sửa đổi mã thay vì
Hai năm trước, tôi đã sử dụng C# để viết trò chơi "Tetris" dựa trên MonoGame. Để biết phần giới thiệu liên quan, vui lòng tham khảo [bài viết này]. Gần đây tôi dùng thời gian rảnh rỗi của mình để xây dựng lại khung phát triển trò chơi trước đây dựa trên MonoGame nên tôi đã nhân cơ hội này để cơ cấu lại "Trò chơi Nga" trước đây.
1. Câu hỏi: Bạn và bạn của bạn đang cùng nhau chơi trò chơi Nim: Trên bàn có một đống đá. Các bạn thay phiên nhau, bạn đi trước. Mỗi ván, người đến lượt sẽ lấy đi 1 - 3 viên đá. Người loại bỏ được viên đá cuối cùng là người chiến thắng. giả thuyết
Tôi đang tạo một trò chơi nền tảng với các khối hình vuông màu đỏ (họ sẽ giết tôi) và các khối hình vuông màu trắng (nền tảng). Khi tôi chết, tôi sẽ được hồi sinh ở đầu cấp độ hiện tại. Tôi đã phát hiện va chạm nhưng nó chỉ hoạt động khi tôi di chuyển (khi tôi nhảy đến khối vuông màu đỏ
Vì vậy, tôi đang cố gắng tạo một trò chơi đột phá bằng (ngôn ngữ lập trình) nhưng không thể tìm ra chức năng kiểm tra sự va chạm với con dơi. Cho đến nay, phần tôi viết về va chạm với gậy chỉ đơn giản là va chạm quả bóng với đế và quay lại theo hướng ngược lại. Hiện nay, trò chơi là một hiện tượng không bao giờ kết thúc và quả bóng chỉ
Tôi đang cố gắng khiến kẻ thù bắn người chơi của mình nhưng vì lý do nào đó đạn không xuất hiện và cũng không bắn vào người chơi. Tôi thậm chí còn không biết tại sao, tôi thậm chí còn vẽ đạn trên cửa sổ của mình VIDEO bulls = [] Runninggame =T
Tôi đang cố gắng thêm khung trò chơi bóng bàn. Tôi muốn kích thước của quả bóng tăng lên mỗi khi nó tiếp xúc với Vợt. Đây là nỗ lực của tôi. Khối mã đầu tiên là nơi tôi nghĩ vấn đề nằm ở đó. Khối thứ hai là toàn bộ danh mục. lớp công cộng
Tôi đang tự hỏi loại toán học nào thường được yêu cầu để lập trình công cụ trò chơi 3D? Bất kỳ phép toán cụ thể nào (như hình học vectơ) hoặc thuật toán tính toán (như Biến đổi Fourier nhanh), hay tất cả đều bị DirectX/OpenGL trừu tượng hóa nên không còn cần đến phép toán phức tạp nữa? tối ưu
Tôi đang tạo một trò chơi độc đoán cho lớp của mình và tôi đã cố gắng làm điều gì đó mới bằng cách thêm nhiều hàm void nhưng vì một lý do kỳ lạ nào đó, bảng của tôi không hoạt động vì nó báo Danh tính "bảng" ký tự không được xác định, nhưng cho đến nay tôi đã có
Tôi đang gặp một số vấn đề với các sự kiện mousePressed và mouseDragged. Tôi đang cố gắng tạo một game bắn súng không gian nơi tôi muốn người chơi có thể bắn bằng cách nhấn và di chuyển chuột. Tôi nghĩ vấn đề lớn nhất là mouseDragg
Xin chào, tôi đang cố gắng triển khai chiến đấu và độ chính xác dựa trên xác suất. Đây là mã của tôi nhưng nó không hoạt động tốt lắm. public String setAttackedPartOfBodyPercent(Xác suất chuỗi) {
Vì vậy tôi phải thực hiện chiến tranh thẻ bài. Mọi thứ đều hoạt động tốt với tôi, ngoại trừ vòng lặp dừng khi nó đạt đến kích thước của một trong các thẻ (danh sách mảng). Những gì tôi muốn nó làm là lặp lại cho đến khi một trong các thẻ trống. và hướng dẫn tôi cách thực hiện việc này? Tôi biết mã của tôi có thể được rút ngắn nhưng hiện tại tôi
Tôi đang tạo một trò chơi Java bản đồ ô vuông trực giao và khi tàu của tôi di chuyển đến ranh giới x và y và tôi nhấn các phím điều hướng, nó sẽ dừng di chuyển (như mong đợi), nhưng nếu tôi tiếp tục nhấn phím, nhân vật của tôi sẽ rời đi màn hình. Đây là mã tôi đang sử dụng: @O
Đây là mã hoàn chỉnh cho các lớp Tàu, Tiểu hành tinh và BaseShapeClass. Hình dạng của Lớp tàu kế thừa từ BaseShapeClass. Lớp Asteroid là mã nguồn chính và khai báo Gra
Tôi đang phát triển trò chơi đoán số ngẫu nhiên này. Khi kết thúc trò chơi tôi muốn người dùng có quyền lựa chọn chơi lại (hoặc để người khác chơi). Tôi đã tìm thấy một số chủ đề và câu hỏi tương tự nhưng không có chủ đề và câu hỏi nào giúp tôi giải quyết vấn đề nhỏ này. Tôi khá chắc chắn rằng bằng cách nào đó tôi có thể sử dụng vòng lặp while của mình
Tôi nghĩ rằng tôi nên viết một trò chơi dựa trên javascript để thử thách mình. Tôi muốn âm thanh, hình ảnh và đầu vào. Nền mô phỏng màn hình (ví dụ: 640x480, chứa tất cả hình ảnh của tôi) rất hữu ích để tách phần còn lại của trang khỏi "trò chơi". TÔI
Tôi đang tạo một trò chơi trong đó tôi đặt các biểu tượng vào các nút của lưới và tôi đang sử dụng cấu trúc này: typedef struct node{ int x,y; // tọa độ cho đồ họa.h;
Tôi đang rèn luyện các kỹ năng trò chơi của mình (chủ yếu là mảng) để sinh ra kẻ thù và bây giờ là đạn để hạ gục chúng. Tôi có thể đặt dấu đầu dòng trong khi kiểm tra, nhưng chúng chỉ hiển thị khi tôi nhấn một phím (giả sử là dấu cách) và không có khoảng cách ở giữa, vì vậy trình duyệt không thể chấp nhận nhiều điểm đó cùng một lúc. Có gì không
Tôi là một lập trình viên xuất sắc, rất giỏi!