Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9517

【C#】リバーシやテトリスとかに使える簡単なコンソール描画

$
0
0

目的

コンソール画面でアルゴリズムを視覚化するための描画処理の作成

目次

  1. 目標
  2. 作成
  3. 完成
  4. 応用
  5. まとめ

目標

  • コンソール画面に四角形を複数表示ができる
  • 縦と横の四角形の数を指定できる
  • 並べた四角形の色を自由に設定できる

作成

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

/// <summary>
/// コンソール描画
/// </summary>
namespace ConsoleDrawer
{
    /// <summary>
    /// 四角形描画処理
    /// </summary>
    public class SquareDrawer
    {
        private ConsoleColor[,] canvas;
        private int width;
        private int height;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        public SquareDrawer(int width, int height)
        {
            Console.CursorVisible = false;
            Console.BackgroundColor = ConsoleColor.Black;
            this.width = width;
            this.height = height;
            canvas = new ConsoleColor[height, width];

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    canvas[i, j] = ConsoleColor.Black;
                }
            }
        }

        /// <summary>
        /// 四角形描画
        /// </summary>
        /// <param name="color">文字色</param>
        private void DrawSquare(ConsoleColor color)
        {
            Console.ForegroundColor = color;
            Console.Write("■");
        }

        /// <summary>
        /// すべての四角形の描画
        /// </summary>
        public void DrawAllSquare()
        {
            Console.ForegroundColor = ConsoleColor.Black;
            Console.SetCursorPosition(0, 0);

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    DrawSquare(canvas[i, j]);
                }
                Console.Write("\n");
            }
        }

        /// <summary>
        /// 文字色の指定
        /// </summary>
        /// <param name="color">文字色</param>
        /// <param name="position">位置</param>
        public void SetColor(ConsoleColor color, Point position)
        {
            canvas[position.Y, position.X] = color;
        }

        /// <summary>
        /// 文字色の指定
        /// </summary>
        /// <param name="color"></param>
        /// <param name="x">横の位置</param>
        /// <param name="y">縦の位置</param>
        public void SetColor(ConsoleColor color, int x, int y)
        {
            SetColor(color, new Point(x, y));
        }
    }
}

完成

using System;
using System.Threading;
using System.Drawing;
using ConsoleDrawer;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "テスト";
            SquareDrawer drawer = new SquareDrawer(6, 6);

            while (true)
            {
                // アルゴリズムはこの中で動かす

                // 色を指定
                drawer.SetColor(ConsoleColor.White, 0, 1);
                drawer.SetColor(ConsoleColor.Yellow, 0, 0);
                drawer.SetColor(ConsoleColor.Blue, 5, 0);
                drawer.SetColor(ConsoleColor.Green, 5, 5);

                drawer.DrawAllSquare();
                Thread.Sleep(500);
            }
        }
    }
}

描画するとこんな感じになります。
キャプチャ.PNG

応用

  • 四角形ではなく丸に
    • リバーシにも使える
  • 任意の図形に変更
    • より広くいろいろなアルゴリズムを扱えるようになる?

まとめ

アルゴリズムを純粋に考えたい時ように今回のものをつくりました。
c#独自のものはあまり使っていないので、他の言語にも参考になればいいと思っています。


Viewing all articles
Browse latest Browse all 9517

Trending Articles