C # tạo ra một trò chơi rắn đơn giản


12

Tôi đã suy nghĩ về việc tạo ra một trò chơi rắn với C #, vì vậy tôi đã chạy ý tưởng trong đầu và một số vấn đề đã xuất hiện.

Làm cách nào tôi có thể theo dõi và xuất ra đúng vị trí các khối chạy sau đầu rắn?

Nếu con rắn được xây dựng năm khối và người dùng bắt đầu đi theo vòng tròn, làm thế nào tôi có thể in cơ thể con rắn ở đúng vị trí?

Ngoài ra, làm thế nào tôi có thể tạo một hành động sẽ chạy trên nền, điều này sẽ di chuyển con rắn về phía trước, bất kể người dùng làm gì?

Mã của tôi nên có cấu trúc gì? (cấu trúc thiết kế mã)

Đây phải là một ứng dụng giao diện điều khiển, vì đó là khung duy nhất tôi quen thuộc.

Tôi không tìm kiếm mã hoàn thành, vì tôi muốn thực sự hiểu nó nên hoạt động như thế nào.

Câu trả lời:


23

Đại diện cho rắn

Tạo một trò chơi Snake khá đơn giản. Điều đầu tiên bạn cần là một cách để thể hiện cơ thể con rắn của bạn. Nếu bạn coi con rắn của mình được tạo thành từ các khối hoặc gạch, cơ thể bạn có thể chỉ đơn giản là một danh sách các tọa độ khối này.

Trong trường hợp của bạn, nếu bạn có ý định làm một ứng dụng bàn điều khiển, thì mỗi ứng dụng này sẽ là một ký tự trên bàn điều khiển và vị trí sẽ tương ứng với một dòng hoặc một hàng của đầu ra giao diện điều khiển. Vì vậy, bạn bắt đầu với điều này:

// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();

Tại thời điểm này, danh sách của bạn trống, vì vậy con rắn của bạn không có cơ thể. Giả sử bạn muốn một con rắn có chiều dài 5 và đầu nên bắt đầu ở vị trí (5,2) và phát triển về phía dưới. Chỉ cần thêm các vị trí đó vào danh sách khi trò chơi bắt đầu, ví dụ:

// Initialize the snake with 5 blocks starting downwards from (5,2)
for(int i=0; i<5; ++i)
{
    body.Add(new Point(5, 2 + i));
}

Kết xuất con rắn

Để kết xuất, chỉ cần vẽ một ký tự ở mỗi vị trí trên danh sách cơ thể. Ví dụ trên có thể được rút ra là:

...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
     |
     x = 5

Bạn có thể trở nên phức tạp hơn bằng cách chọn các ký tự khác nhau cho đầu của nhân vật (yếu tố đầu tiên trong danh sách) và đuôi (yếu tố cuối cùng trong danh sách) và thậm chí định hướng chúng tùy thuộc vào vị trí của các khối liền kề. Nhưng đối với người mới bắt đầu, chỉ cần kết xuất mọi thứ như một #hoặc một cái gì đó.

Chẳng hạn, bạn có thể bắt đầu với một mảng char 2D chứa nền như thế này:

// Array with map characters
char[,] render = new char[width, height];

// Fill with background
for(x=0; x<width; ++x)
    for(y=0; y<height; ++y)
        render[x,y] = '.';

Và sau đó lặp đi lặp lại trên cơ thể con rắn vẽ nó vào mảng:

// Render snake
foreach(Point point in body)
    render[point.X, point.Y] = '#';

Và cuối cùng lặp lại trên mảng một lần nữa và viết từng ký tự vào bảng điều khiển, với một dấu ngắt dòng ở cuối mỗi hàng.

// Render to console
for(y=0; y<height; ++y)
{
    for(x=0; x<width; ++x)
    {
        Console.Write(render[x,y]);
    }
    Console.WriteLine();
}

Di chuyển con rắn

Cuối cùng là phong trào. Điều đầu tiên bạn cần là theo dõi Directioncon rắn đang di chuyển. Đây có thể là một enum đơn giản:

// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }

Và hành động di chuyển con rắn có thể được thực hiện chỉ bằng cách loại bỏ khối cuối cùng khỏi danh sách và thêm nó vào mặt trước, theo đúng hướng . Nói cách khác, một cái gì đó như:

// Remove tail from body
body.RemoveAt(body.Count - 1);

// Get head position
Point next = body[0];

// Calculate where the head should be next based on the snake's direction
if(direction == Direction.Left) 
    next = new Point(next.X-1, next.Y);
if(direction == Direction.Right) 
    next = new Point(next.X+1, next.Y);
if(direction == Direction.Up) 
    next = new Point(next.X, next.Y-1);
if(direction == Direction.Down) 
    next = new Point(next.X, next.Y+1);

// Insert new head into the snake's body
body.Insert(0, next);

5
Cuộc gọi tốt về việc di chuyển khối cuối cùng lên phía trước để di chuyển!
SpartanDovy

Câu trả lời chính xác. Tôi thích cách bạn di chuyển con rắn - nó khá thanh lịch.
Cypher

-3
  1. Mỗi khi đồng hồ bấm giờ bạn cập nhật vị trí của con rắn và vẽ hình ở vị trí mới

  2. Sử dụng System.Windows.Forms.Timer cho hành động nền để kích hoạt trò chơi để di chuyển con rắn xung quanh.

  3. Sử dụng các lớp và kế thừa cho cấu trúc


Đây là một câu trả lời rất mơ hồ. Bước số ba là đặc biệt như vậy.
MichaelHouse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.