用c#做一个俄罗斯方块的游戏
时间: 2023-12-31 07:06:15 浏览: 25
好的,以下是一个简单的俄罗斯方块游戏的 C# 代码示例:
```csharp
using System;
using System.Threading;
class Program {
static int[,] board = new int[20, 10];
static int[] currentBlock = new int[4];
static int currentBlockType = 0;
static int currentBlockColor = 0;
static int currentBlockX = 0;
static int currentBlockY = 0;
static bool gameover = false;
static int score = 0;
static void Main(string[] args) {
Console.CursorVisible = false;
Console.SetWindowSize(22, 22);
Console.SetBufferSize(22, 22);
Console.Title = "俄罗斯方块";
while (!gameover) {
InitBoard();
InitBlock();
while (true) {
DrawBoard();
DrawBlock();
if (IsCollide(currentBlockX, currentBlockY + 1)) {
AddBlockToBoard();
CheckLines();
break;
}
else {
Thread.Sleep(1000);
currentBlockY++;
}
}
if (IsGameOver()) {
gameover = true;
}
}
Console.Clear();
Console.WriteLine("游戏结束,得分:" + score);
Console.ReadLine();
}
static void InitBoard() {
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 10; j++) {
board[i, j] = 0;
}
}
}
static void InitBlock() {
Random r = new Random();
currentBlockType = r.Next(7);
currentBlockColor = r.Next(1, 8);
currentBlockX = 4;
currentBlockY = 0;
switch (currentBlockType) {
case 0:
currentBlock[0] = 1; currentBlock[1] = 1; currentBlock[2] = 1; currentBlock[3] = 1;
break;
case 1:
currentBlock[0] = 1; currentBlock[1] = 1; currentBlock[2] = 0; currentBlock[3] = 0;
break;
case 2:
currentBlock[0] = 1; currentBlock[1] = 1; currentBlock[2] = 0; currentBlock[3] = 1;
break;
case 3:
currentBlock[0] = 1; currentBlock[1] = 0; currentBlock[2] = 0; currentBlock[3] = 0;
break;
case 4:
currentBlock[0] = 1; currentBlock[1] = 1; currentBlock[2] = 1; currentBlock[3] = 0;
break;
case 5:
currentBlock[0] = 1; currentBlock[1] = 1; currentBlock[2] = 1; currentBlock[3] = 0;
break;
case 6:
currentBlock[0] = 0; currentBlock[1] = 1; currentBlock[2] = 1; currentBlock[3] = 0;
break;
}
}
static void DrawBoard() {
Console.Clear();
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(0, 0);
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 10; j++) {
if (board[i, j] == 0) {
Console.Write(" ");
}
else {
Console.ForegroundColor = (ConsoleColor)board[i, j];
Console.Write("■");
Console.ForegroundColor = ConsoleColor.White;
}
}
Console.WriteLine();
}
Console.WriteLine("得分:" + score);
}
static void DrawBlock() {
Console.ForegroundColor = (ConsoleColor)currentBlockColor;
for (int i = 0; i < 4; i++) {
Console.SetCursorPosition((currentBlock[i] % 2) + currentBlockX * 2, (currentBlock[i] / 2) + currentBlockY);
Console.Write("■");
}
Console.ForegroundColor = ConsoleColor.White;
}
static bool IsCollide(int x, int y) {
for (int i = 0; i < 4; i++) {
int bx = currentBlock[i] % 2 + x;
int by = currentBlock[i] / 2 + y;
if (bx < 0 || bx > 9 || by < 0 || by > 19 || board[by, bx] != 0) {
return true;
}
}
return false;
}
static void AddBlockToBoard() {
for (int i = 0; i < 4; i++) {
int bx = currentBlock[i] % 2 + currentBlockX;
int by = currentBlock[i] / 2 + currentBlockY;
board[by, bx] = currentBlockColor;
}
}
static void CheckLines() {
for (int i = 19; i >= 0; i--) {
bool full = true;
for (int j = 0; j < 10; j++) {
if (board[i, j] == 0) {
full = false;
break;
}
}
if (full) {
score += 10;
for (int k = i; k > 0; k--) {
for (int j = 0; j < 10; j++) {
board[k, j] = board[k - 1, j];
}
}
i++;
}
}
}
static bool IsGameOver() {
for (int i = 0; i < 10; i++) {
if (board[0, i] != 0) {
return true;
}
}
return false;
}
}
```
该代码使用控制台实现了一个简单的俄罗斯方块游戏,玩家可以使用方向键控制方块的移动和旋转,尝试拼出完整的行来获得得分。