用c#写一个消消乐游戏
时间: 2023-07-01 19:17:28 浏览: 238
好的,下面提供一个简单的消消乐游戏的C#代码示例,你可以根据需求进行修改和扩展:
```csharp
using System;
using System.Collections.Generic;
namespace XOXOLeGame
{
class Program
{
static void Main(string[] args)
{
// 游戏面板大小
int width = 10;
int height = 10;
// 初始化游戏面板
int[,] board = new int[height, width];
Random random = new Random();
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
board[i, j] = random.Next(1, 4); // 随机生成1~3之间的整数
}
}
// 游戏循环
while (true)
{
// 输出当前游戏面板
Console.Clear();
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
Console.Write(board[i, j] + " ");
}
Console.WriteLine();
}
// 用户输入
Console.Write("请输入要消除的方块的行号和列号,用空格隔开(例如:2 3):");
string input = Console.ReadLine();
string[] parts = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 2)
{
Console.WriteLine("输入不合法,请重新输入!");
continue;
}
int row = int.Parse(parts[0]) - 1; // 输入的行号减1才是数组下标
int col = int.Parse(parts[1]) - 1; // 输入的列号减1才是数组下标
// 检查输入是否合法
if (row < 0 || row >= height || col < 0 || col >= width)
{
Console.WriteLine("输入不合法,请重新输入!");
continue;
}
// 检查是否有可消除的方块
List<Tuple<int, int>> toRemove = new List<Tuple<int, int>>();
bool[,] visited = new bool[height, width];
CheckToRemove(board, visited, row, col, toRemove);
if (toRemove.Count == 0)
{
Console.WriteLine("该方块无法消除,请重新输入!");
continue;
}
// 消除方块
foreach (var item in toRemove)
{
board[item.Item1, item.Item2] = 0;
}
// 移动方块
for (int j = 0; j < width; j++)
{
int k = height - 1;
for (int i = height - 1; i >= 0; i--)
{
if (board[i, j] != 0)
{
board[k--, j] = board[i, j];
}
}
for (; k >= 0; k--)
{
board[k, j] = 0;
}
}
// 检查是否还有方块可以消除
bool hasMore = false;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (board[i, j] == 0)
{
continue;
}
visited = new bool[height, width];
toRemove = new List<Tuple<int, int>>();
CheckToRemove(board, visited, i, j, toRemove);
if (toRemove.Count > 0)
{
hasMore = true;
break;
}
}
if (hasMore)
{
break;
}
}
// 检查游戏是否结束
if (!hasMore)
{
Console.WriteLine("游戏结束!");
break;
}
}
}
// 检查与指定方块相邻的相同方块
static void CheckToRemove(int[,] board, bool[,] visited, int row, int col, List<Tuple<int, int>> toRemove)
{
if (visited[row, col])
{
return;
}
visited[row, col] = true;
toRemove.Add(new Tuple<int, int>(row, col));
int color = board[row, col];
if (row > 0 && board[row - 1, col] == color)
{
CheckToRemove(board, visited, row - 1, col, toRemove);
}
if (row < board.GetLength(0) - 1 && board[row + 1, col] == color)
{
CheckToRemove(board, visited, row + 1, col, toRemove);
}
if (col > 0 && board[row, col - 1] == color)
{
CheckToRemove(board, visited, row, col - 1, toRemove);
}
if (col < board.GetLength(1) - 1 && board[row, col + 1] == color)
{
CheckToRemove(board, visited, row, col + 1, toRemove);
}
}
}
}
```
这是一个比较简单的消消乐游戏,玩家需要输入要消除的方块的行号和列号,程序会检查是否有相邻的相同方块可以一起消除,然后将这些方块消除并移动剩余的方块。当没有可消除的方块时,游戏结束。你可以根据自己的兴趣爱好和实际需求进行扩展和修改。
阅读全文