Dnes je to jen malý kousek kódu, který se ovšem může hodit. Na liště OS máme běžně hodiny, ale někdy se může stát, že potřebujeme promítnout někam aktuální čas, ne z nějakého jiného důvodu chceme v konzoli vidět běžící čas. Nyní přidám jednoduché jádro, digitální hodiny. Jednoduchý kód využívající nekonečného cyklu while:
while($true)
{
cls #vyčištění konzole
$cas = Get-Date | select Hour, Minute, Second #uložení času do proměnné
Write-Host $cas.Hour ":" $cas.Minute ":" $cas.Second #výpis času v obvyklém formátu
Start-Sleep -Seconds 1 #uspání procesu na 1 sekundu
}
Ručičkové hodiny do konzole
Vykreslení ručičkových hodin s pomocí grafických knihoven .NET už na internetu a jde vytvořit v libovolném jazyce s využitím trochy goniometrie. Osobně jsem chtěl simulovat ručičkové hodiny přímo v konzole pomocí vykreslování znaků. Hodiny vykreslují polohu konců ručiček, které se pohybují spíše po nějakém kosém čtverci, nežli po kruhu, protože k vykreslení dochází vypsáním pole 30 x 30 znaků. Stejně jako digitálky výše, čtou čas z operačního systému, ze kterého následně vypočítají x a y souřadnici konce ručičky každé ručičky. Problémem je relativně pomalé překreslování příkazové řádky, takže běh nevypadá úplně hezky, ale jdou a přečíst se nechají 😉
- kolečko je hodinová ručička
- + je minutová ručička
- * je sekundová ručička
function get-sekunda{
param (
$s
)
#výpočet polohy sekund
if($s -le 15)
{
$y = $s + 15
$x = $s
$plocha[$x, $y] = '*'
}
elseif(($s -gt 15) -and ($s -le 30))
{
$y = 30 - ($s - 15)
$x = $s
$plocha[$x, $y] = '*'
}
elseif(($s -gt 30) -and ($s -le 45))
{
$y = 15 - ($s - 30)
$x = 30 - ($s - 30)
$plocha[$x, $y] = '*'
}
elseif(($s -gt 45) -and ($s -le 60))
{
$y = $s - 45
$x = 30 - ($s - 30)
$plocha[$x, $y] = '*'
}
}
function get-minuta{
param (
$m
)
#výpočet polohy minut
if($m -le 15)
{
$y = $m + 15
$x = $m
$plocha[$x, $y] = '+'
}
elseif(($m -gt 15) -and ($m -le 30))
{
$y = 30 - ($m - 15)
$x = $m
$plocha[$x, $y] = '+'
}
elseif(($m -gt 30) -and ($m -le 45))
{
$y = 15 - ($m - 30)
$x = 30 - ($m - 30)
$plocha[$x, $y] = '+'
}
elseif(($m -gt 45) -and ($m -le 60))
{
$y = $m - 45
$x = 30 - ($m - 30)
$plocha[$x, $y] = '+'
}
}
function get-hodina{
param (
$h
)
#převedení na 12 hodin režim
$h = $h % 12
#výpočet polohy hodin
switch($h)
{
0 {$plocha[0, 15] = 'o'}
1 {$plocha[5, 20] = 'o'}
2 {$plocha[10, 25] = 'o'}
3 {$plocha[15, 30] = 'o'}
4 {$plocha[20, 25] = 'o'}
5 {$plocha[25, 20] = 'o'}
6 {$plocha[30, 15] = 'o'}
7 {$plocha[25, 10] = 'o'}
8 {$plocha[20, 5] = 'o'}
9 {$plocha[15, 0] = 'o'}
10 {$plocha[10, 5] = 'o'}
11 {$plocha[5, 10] = 'o'}
12 {$plocha[0, 15] = 'o'}
}
}
$plocha = New-Object 'object[,]' 31,31
while($true)
{
cls #vyčištění konzole
$cas = Get-Date | select Hour, Minute, Second #uložení času do proměnné
#Write-Host $cas.Hour ":" $cas.Minute ":" $cas.Second #výpis času v obvyklém formátu
#inicialoizace plochy
for($i = 0; $i -le 30; $i++)
{
for($j = 0; $j -le 30; $j++)
{
$plocha[$i,$j] = ' ' #uložení mezery do pole plochy
}
}
#nastavení ciferníku
$plocha[0,15] = '12'
$plocha[15,30] = '3'
$plocha[30,15] = '6'
$plocha[15,0] = '9'
$plocha[15,15] = '*'
#výpočet polohy konců ručiček
get-hodina -h ($cas.Hour) #ručička zobrazená kolečkem
get-minuta -m $cas.Minute #ručička zobrazení plusem
get-sekunda -s $cas.Second #ručička zobrazená hvězdičkou
#vykreslení plochy
for($i = 0; $i -le 30; $i++)
{
for($j = 0; $j -le 30; $j++)
{
Write-Host $plocha[$i,$j] -NoNewline
}
Write-Host ""
}
Start-Sleep -Seconds 1 #uspání procesu na 1 sekundu
}