var width = 820; var height = 700; var flippedColors = new Color[originalColors.Length]; for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { int originalIndex = col + row * width; int flippedIndex = col + (height - 1 - row) * width; flippedColors[flippedIndex] = originalColors[originalIndex]; } } 这是按照左下角开始存的吗
时间: 2024-02-10 14:17:45 浏览: 26
不完全是。这段代码实现了一种将原始像素颜色数组(originalColors)垂直翻转的方式,即从下到上将像素颜色数组中的像素行倒置。这段代码中使用的嵌套循环首先遍历所有像素行(row),然后遍历每行中的像素列(col)。
在计算翻转后的像素颜色数组中像素索引(flippedIndex)时,使用的是以下公式:
flippedIndex = col + (height - 1 - row) * width;
其中col表示当前像素列的索引,height表示原始像素颜色数组中的像素行数,row表示当前像素行的索引,width表示原始像素颜色数组中的像素列数。
这种计算方式将像素数组从左下角开始存储,但不是以左下角作为原点,而是以左上角作为原点。因此,在这种情况下,翻转后的像素数组是从左下角开始存储的,但是像素行是从顶部开始计数的,而不是从底部开始计数。
相关问题
for (var i:uint=0; i<WALL_DATA.length; i++) { row = int(i/WIDTH); col = i - row*WIDTH; switch (WALL_DATA[i]) { case 1 : var brick:Brick = new Brick(); brick.width = 30; brick.height = 30; brick.x = (col)*30; brick.y = (row)*30; addChild(brick); break; case 0 : break; } }
这段代码是一个for循环,用于根据一个一维数组WALL_DATA在舞台上绘制墙壁的砖块。具体流程如下:
1. 使用变量i遍历WALL_DATA数组中的所有元素。
2. 根据i的值计算该元素在二维坐标系中的行列位置,行位置为i除以WIDTH的整数部分,列位置为i减去行位置乘以WIDTH。
3. 根据WALL_DATA[i]的值进行判断,如果为1,则表示该位置需要绘制砖块,创建一个Brick对象并设置其属性,然后添加到舞台上;如果为0,则表示该位置为空白,不做任何处理。
4. 循环结束后,所有需要绘制的砖块都已经添加到舞台上。
该代码的作用是根据一维数组WALL_DATA在舞台上绘制一个由砖块组成的墙壁。其中,WALL_DATA数组中的元素值为1表示该位置需要绘制砖块,为0表示该位置为空白。WIDTH表示每行砖块的数量,砖块的大小为30x30。
用c#写一个消消乐游戏
好的,下面提供一个简单的消消乐游戏的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);
}
}
}
}
```
这是一个比较简单的消消乐游戏,玩家需要输入要消除的方块的行号和列号,程序会检查是否有相邻的相同方块可以一起消除,然后将这些方块消除并移动剩余的方块。当没有可消除的方块时,游戏结束。你可以根据自己的兴趣爱好和实际需求进行扩展和修改。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)