C# L型棋牌覆盖实现代码与效果
//Main
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ChessBoard
{
class Program
{
//谁能教教我英语啊,英语语法什么的错误之处还望海涵,
static void Main(string[] args)
{
Function obj = new Function();
Console.WriteLine("Please intput CheseBoard Size(2^size):");
int size = (int)Math.Pow(2, Convert.ToInt32(Console.ReadLine()));
if (size != 1)
{
ConsoleColor FC = Console.ForegroundColor;
//string[] Color = { "Black" , "DarkBlue" , "DarkGreen" , "DarkCyan" , "Gray",
// "DarkRed" , "DarkMagenta" , "DarkYellow" , "Red",
// "DarkGray" , "Blue" , "Green" , "Cyan", "Magenta",
// "Yellow" , "White"};
string[,] Board = new string[size, size];
//Do you know ?
String[] Colors = ConsoleColor.GetNames(typeof(ConsoleColor));
Console.WriteLine("please input special grid position (row and col):");
int rows = Convert.ToInt32(Console.ReadLine());
int cols = Convert.ToInt32(Console.ReadLine());
obj.CheseBoard(Board, size, rows, cols);
for (int r = 0; r < Board.GetLength(0); r++)
{
for (int c = 0; c < Board.GetLength(1); c++)
{
int Value = Convert.ToInt32(Board[r, c].ToString());
if (Value > 0)
{
if (Value > 15)
{
Value %= 15;
}
if ((Value %= 15) == 0)
{
Value += 1;
}
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), Colors[Value]);
}
Console.Write(Board[r, c] + " ");
// Console.ForegroundColor = FC;
Console.ResetColor();
}
Console.WriteLine();
}
}
else
{
Console.WriteLine("Bugs Bug ! ! !");
}
Console.ReadKey();
}
}
}
//Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ChessBoard
{
class Function
{
/// <summary>
/// 初始化L型骨牌
/// </summary>
private int LDominoNumberInitial = 0;
/// <summary>
/// L型骨牌棋盘覆盖
/// </summary>
/// <param name="Board"></param>
/// <param name="size"></param>
/// <param name="row"></param>
/// <param name="col"></param>
public void CheseBoard(string[,] Board, int size, int row, int col)
{
int InitialRow = 0;
int InitialCol = 0;
//不合法的输入
if (row > size - 1 || col > size - 1)
{
Console.WriteLine("Error !!!!!!!!!!");
}
//棋盘只有一个格子
else if (size == 1)
{
Console.WriteLine(Board[row, col] = "-1");
}
else
{
Board[row, col] = "-1";
DivisionBoard(Board, InitialRow, InitialCol, row, col, size);
}
}
/// <summary>
/// 大棋盘4分为小的棋盘,在没有特殊位置的小棋盘中放L骨牌一角(作为特殊位置)
/// 然后再次对每个小的4划分...至只有一个格子.
/// </summary>
/// <param name="Board"></param>
/// <param name="InitialRow"></param>
/// <param name="InitialCol"></param>
/// <param name="row"></param>
/// <param name="col"></param>
/// <param name="size"></param>
public void DivisionBoard(string[,] Board, int InitialRow, int InitialCol, int row, int col, int size)
{
if (size == 1)
{
return;
}
//It's Important....全局的骨牌数的副本
int LDominoNumber = LDominoNumberInitial++;
//判断特殊位置的界限值
size /= 2;
//left up
if (row < InitialRow + size && col < InitialCol + size)
{
//特殊位置在里面
DivisionBoard(Board, InitialRow, InitialCol, row, col, size);
}
else
{
//不在里面,在这里面放L骨牌的一角,为下次递归做准备..
if (LDominoNumber < 10)
{
Board[InitialRow + size - 1, InitialCol + size - 1] = "0" + LDominoNumber.ToString();
}
else
{
Board[InitialRow + size - 1, InitialCol + size - 1] = LDominoNumber.ToString();
}
//Console.ForegroundColor = FC;
//最左上角
DivisionBoard(Board, InitialRow, InitialCol, InitialRow + size - 1, InitialCol + size - 1, size);
}
//right up
if (row < InitialRow + size && col >= InitialCol + size)
{
DivisionBoard(Board, InitialRow, InitialCol + size, row, col, size);
}
else
{
if (LDominoNumber < 10)
{
Board[InitialRow + size - 1, InitialCol + size] = "0" + LDominoNumber.ToString();
}
else
{
Board[InitialRow + size - 1, InitialCol + size] = LDominoNumber.ToString();
}
DivisionBoard(Board, InitialRow, InitialCol + size, InitialRow + size - 1, InitialCol + size, size);
}
//left down
if (row >= InitialRow + size && col < InitialCol + size)
{
DivisionBoard(Board, InitialRow + size, InitialCol, row, col, size);
}
else
{
if (LDominoNumber < 10)
{
Board[InitialRow + size, InitialCol + size - 1] = "0" + LDominoNumber.ToString();
}
else
{
Board[InitialRow + size, InitialCol + size - 1] = LDominoNumber.ToString();
}
DivisionBoard(Board, InitialRow + size, InitialCol, InitialRow + size, InitialCol + size - 1, size);
}
//right down
if (row >= InitialRow + size && col >= InitialCol + size)
{
DivisionBoard(Board, InitialRow + size, InitialCol + size, row, col, size);
}
else
{
if (LDominoNumber < 10)
{
Board[InitialRow + size, InitialCol + size] = "0" + LDominoNumber.ToString();
}
else
{
Board[InitialRow + size, InitialCol + size] = LDominoNumber.ToString();
}
DivisionBoard(Board, InitialRow + size, InitialCol + size, InitialRow + size, InitialCol + size, size);
}
}
}
}
//程序运行结果截图
相关文章
- 这篇文章主要介绍了C++子类父类成员函数的覆盖和隐藏实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要给大家介绍了关于利用C++如何覆盖或删除指定位置的文件内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。...2020-04-25
- 这篇文章主要介绍了使用json字符串插入节点或者覆盖节点的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-11
- 这篇文章主要介绍了C++中的重载、覆盖、隐藏介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C# 函数覆盖总结学习(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 索引覆盖是一种避免回表查询的优化策略,具体的做法就是将要查询的数据作为索引列建立普通索,下面这篇文章主要给大家介绍了关于MySQL中回表和索引覆盖的相关资料,需要的朋友可以参考下...2021-09-08
- 成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防...2020-04-25
- C# L型棋牌覆盖实现代码与效果,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C++ 中函数重载、覆盖与隐藏详解的相关资料,需要的朋友可以参考下...2020-04-25
Mybatis #foreach中相同的变量名导致值覆盖的问题解决
本文主要介绍了Mybatis #foreach中相同的变量名导致值覆盖的问题解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-30- 下面小编就为大家带来一篇基于C++中覆盖,重载,隐藏的一点重要说明。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 本篇文章介绍了,在C++中概念重载、覆盖、隐藏的使用分析说明。需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了C+继承之同名覆盖,函数重写与多态,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下,希望能够给你带来帮助...2021-09-29
- 今天小编就为大家分享一篇关于C#中重载重写和覆盖的定义与区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
- 如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。这篇文章主要给大家介绍了关于MySQL覆盖索引的相关资料,需要的朋友可以参考下...2021-01-31
- 这篇文章主要给大家介绍了关于mysql如何利用覆盖索引避免回表优化查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
- 以下是对类成员函数的重载、覆盖与隐藏之间的区别进行了详细的总结分析,需要的朋友可以过来参考下。希望对大家有所帮助...2020-04-25
- 这篇文章主要介绍了PHP面向对象编程之深入理解方法重载与方法覆盖(多态)的相关资料,需要的朋友可以参考下...2015-12-25