(´・ω・`) 쇼본이 내려오는 커맨드를 Go 언어로 만들어 보았습니다 ⊂ 222 ( ^ω^) 2⊃
shobon
아스키 아트로 확대된 쇼본군이 화면을 위에서 아래로 내려옵니다. 스쿠쇼만으로는 모르겠지만, 그냥 내리면 됩니다.
--reverse
옵션을 지정하면 천천히 올라갑니다.이것을 베이스로 여러가지 옵션을 만들었으므로 소개해 갑니다. 소스 코드는 기주 b. 코 m / 아이모 f / 쇼본 이쪽.
go install
로 설치할 수 있어!덧붙여서 기술적으로 고도의 일은 일절하고 있지 않습니다. 이스케이프 시퀀스 정도입니다.
기본 명령 shobon
위의 스쿠쇼처럼 쇼본군이 천천히 내려옵니다. 이 부분의 코드는 이하.
func printDefaultShobon(height, width int) {
var x int = 0
if width > kaomoji.SHOBON_WIDTH {
x = (width - kaomoji.SHOBON_WIDTH) / 2
}
if height < 8 {
printShobon(x, 0, 8)
} else {
for i := 0; i < height-kaomoji.SHOBON_HEIGHT-1; i++ {
if *reverseOption {
printShobon(x, height-kaomoji.SHOBON_HEIGHT-i-2, height)
} else {
printShobon(x, i, height)
}
time.Sleep(150 * time.Millisecond)
}
}
}
func printShobon(x, y, height int) {
var indent string = strings.Repeat(" ", x)
fmt.Print("\x1b[1J")
fmt.Print("\x1b[1;1H")
fmt.Print(strings.Repeat("\n", y))
fmt.Print(indent + kaomoji.SHOBON0 + "\n")
fmt.Print(indent + kaomoji.SHOBON1 + "\n")
fmt.Print(indent + kaomoji.SHOBON2 + "\n")
fmt.Print(indent + kaomoji.SHOBON3 + "\n")
fmt.Print(indent + kaomoji.SHOBON4 + "\n")
fmt.Print(indent + kaomoji.SHOBON5 + "\n")
fmt.Print(indent + kaomoji.SHOBON6 + "\n")
fmt.Print(indent + kaomoji.SHOBON7 + "\n")
fmt.Print(strings.Repeat("\n", height-y-kaomoji.SHOBON_HEIGHT-1))
}
처음에는 이런 느낌이었습니다만 즐거워져 왔기 때문에, 조금 장난 옵션을 준비했습니다.
쇼본 군이 많이 내리는 옵션 shobon --many
한 줄에 한 명의 쇼본 군이 내려옵니다.
이것만으로는 어쩐지 어쩔 수 없는 것입니다.
구현은 상당히 더럽습니다. 신경이 쓰이면 리포지토리로 확인해 보세요. 덧붙여서 이쪽에도
shobon --too-many
옵션을 준비했습니다.올라갑니다.
쇼본 군이 점프하는 명령 --reverse
정지화상에서는 통상 커맨드와 같기 때문에 사진은 생략.
func printJumpingShobon(height, width int) {
if height < 2*kaomoji.SHOBON_HEIGHT {
fmt.Println("sorry, your terminal is too small to jump.")
return
}
var x int = 0
if width > kaomoji.SHOBON_WIDTH {
x = (width - kaomoji.SHOBON_WIDTH) / 2
}
if height < 8 {
printShobon(x, 0, 8)
} else {
for jump := 0; jump < 10; jump++ {
highest := float64(height - kaomoji.SHOBON_HEIGHT)
for i := height - kaomoji.SHOBON_HEIGHT - 1; i >= 0; i-- {
var shobonHeight float64 = float64(height - kaomoji.SHOBON_HEIGHT - i)
printShobon(x, i, height)
time.Sleep(time.Duration(math.Pow((shobonHeight-highest/2)/(highest/2), 2) * float64(40*time.Millisecond)))
}
for i := 0; i < height-kaomoji.SHOBON_HEIGHT-1; i++ {
var shobonHeight float64 = float64(height - kaomoji.SHOBON_HEIGHT - i)
printShobon(x, i, height)
time.Sleep(time.Duration(math.Pow((shobonHeight-highest/2)/(highest/2), 2) * float64(40*time.Millisecond)))
}
}
}
}
쇼본 군이 그렇게 점프합니다. 점프하고있는 것처럼 함수를 선택하는 것이 힘들었습니다. duration을 정규화한 2차 함수의 제곱으로 표현한 것입니다만, 이렇게 해서 좋은 것일까? 더 좋은 함수가 있을지도 모르지만 물리를 모른다…
⊂222( ^ω^)2⊃ shobon --jump
마지막으로 분이 내려오는 명령을 준비했습니다.
평소에 치면 분이 화면 중간을 날아갑니다. 왼쪽에서 오른쪽으로.
당연히 이쪽에도
shobon --booon
옵션이 있어,조금 늘어납니다.
이것만으로 부족하다면 물론
--many
명령도 있습니다.가득 날아갑니다.
요약
한발 재료 커맨드 재미!
사용한 기술
이스케이프 시퀀스
fmt.Print("\x1b[2J") // 画面全クリア
fmt.Print("\x1b[1;1H") // 左上(1,1)に移動
Reference
이 문제에 관하여((´・ω・`) 쇼본이 내려오는 커맨드를 Go 언어로 만들어 보았습니다 ⊂ 222 ( ^ω^) 2⊃), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aimof/items/2f7f1dc08f13bbac5488텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)