This repository has been archived on 2025-05-23. You can view files and clone it, but cannot push or open issues or pull requests.
Files
aclock-sharp/aclock#/Program.cs
2016-12-29 22:01:48 +00:00

154 lines
5.3 KiB
C#

//
// Author:
// Natalia Portillo claunia@claunia.com
//
// Copyright (c) 2016, © Claunia.com
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
// the documentation and/or other materials provided with the distribution.
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
using System;
using System.Threading;
namespace aclock_sharp
{
class MainClass
{
const int FontWH_Ratio = 2;
static void DrawCircle(int handMax, int sYcen, int sXcen)
{
int x, y, r;
char c;
for(r = 0; r < 60; r++)
{
x = (int)(Math.Cos(r * Math.PI / 180 * 6) * handMax * FontWH_Ratio + sXcen);
y = (int)(Math.Sin(r * Math.PI / 180 * 6) * handMax + sYcen);
switch(r)
{
case 0:
case 5:
case 10:
case 15:
case 20:
case 25:
case 30:
case 35:
case 40:
case 45:
case 50:
case 55:
c = 'o';
break;
default:
c = '.';
break;
}
Console.SetCursorPosition(x, y);
Console.Write(c);
}
}
static void DrawHand(int minute, int hlength, char c, int sXcen, int sYcen)
{
int x, y, n;
double r = (minute - 15) * (Math.PI / 180) * 6;
for(n = 1; n < hlength; n++)
{
x = (int)(Math.Cos(r) * n * FontWH_Ratio + sXcen);
y = (int)(Math.Sin(r) * n + sYcen);
Console.SetCursorPosition(x, y);
Console.Write(c);
}
}
static void PrintCopyr()
{
Console.Clear();
Console.WriteLine("Copyright (c) 1994-2013 Antoni Sawicki <as@tenoware.com>");
Console.WriteLine("Copyright (c) 2016 Natalia Portillo <claunia@claunia.com>");
Console.WriteLine("Version 2.4 (.net); Canary Islands, December 2016");
}
static bool KeepRunning = true;
public static void Main()
{
PrintCopyr();
Thread.Sleep(2000);
int sXmax, sYmax, smax, handMax, sXcen, sYcen;
DateTime ltime;
sXmax = sYmax = handMax = sXcen = sYcen = 0;
Console.Clear();
Console.CursorVisible = false;
Console.Title = ".:ACLOCK:.";
Console.CancelKeyPress += (sender, e) =>
{
e.Cancel = false;
KeepRunning = false;
};
while(true)
{
if(!KeepRunning)
break;
ltime = DateTime.Now;
sXmax = Console.WindowWidth;
sYmax = Console.WindowHeight;
if(sXmax / FontWH_Ratio <= sYmax)
smax = sXmax / FontWH_Ratio;
else
smax = sYmax;
handMax = (smax / 2) - 1;
sXcen = sXmax / 2;
sYcen = sYmax / 2;
Console.Clear();
DrawCircle(handMax, sYcen, sXcen);
DrawHand((ltime.Hour * 5) + (ltime.Minute / 10), 2 * handMax / 3, 'h', sXcen, sYcen);
DrawHand(ltime.Minute, handMax - 2, 'm', sXcen, sYcen);
DrawHand(ltime.Second, handMax - 1, '.', sXcen, sYcen);
Console.SetCursorPosition(sXcen - 5, sYcen - (3 * handMax / 5));
Console.Write(".:ACLOCK:.");
Console.SetCursorPosition(sXcen - 5, sYcen + (3 * handMax / 5));
Console.Write("{0:D2}:{1:D2}:{2:D2}", ltime.Hour, ltime.Minute, ltime.Second);
Thread.Sleep(1000);
}
PrintCopyr();
Console.CursorVisible = true;
Console.Title = null;
}
}
}