C# L型棋牌覆蓋實現(xiàn)代碼與效果
//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....全局的骨牌數(shù)的副本
int LDominoNumber = LDominoNumberInitial++;
//判斷特殊位置的界限值
size /= 2;
//left up
if (row < InitialRow + size && col < InitialCol + size)
{
//特殊位置在里面
DivisionBoard(Board, InitialRow, InitialCol, row, col, size);
}
else
{
//不在里面,在這里面放L骨牌的一角,為下次遞歸做準(zhǔn)備..
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);
}
}
}
}
//程序運行結(jié)果截圖
相關(guān)文章
C#/VB.NET實現(xiàn)在Word文檔中添加頁眉和頁腳
頁眉位于文檔中每個頁面的頂部區(qū)域,常用于顯示文檔的附加信息;頁腳位于文檔中每個頁面的底部的區(qū)域,常用于顯示文檔的附加信息。今天這篇文章就將為大家展示如何以編程的方式在在?Word?文檔中添加頁眉和頁腳2023-03-03
C#操作DataGridView獲取或設(shè)置當(dāng)前單元格的內(nèi)容
這篇文章介紹了C#操作DataGridView獲取或設(shè)置當(dāng)前單元格的內(nèi)容,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法
這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫及導(dǎo)入sql腳本的方法,涉及C#針對數(shù)據(jù)庫的創(chuàng)建、連接、導(dǎo)入等相關(guān)操作技巧,需要的朋友可以參考下2015-12-12
C#的Socket實現(xiàn)UDP協(xié)議通信示例代碼
本篇文章主要介紹了C#的Socket實現(xiàn)UDP協(xié)議通信示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
asp.net core項目mvc權(quán)限控制:分配權(quán)限
學(xué)習(xí)的最好方法就是動手去做,這里以開發(fā)一個普通的權(quán)限管理系統(tǒng)的方式來從零體驗和學(xué)習(xí)Asp.net Core。項目的整體規(guī)劃大致如下2017-02-02
DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法
這篇文章主要介紹了DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法,有一定實用價值,需要的朋友可以參考下2014-08-08

