174 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			174 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // For more tutorials: https://blog.learngoprogramming.com | ||
|  | // | ||
|  | // Copyright © 2018 Inanc Gumus | ||
|  | // Learn Go Programming Course | ||
|  | // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ | ||
|  | // | ||
|  | 
 | ||
|  | // --------------------------------------------------------- | ||
|  | // EXERCISE: Refactor | ||
|  | // | ||
|  | //  Goal is refactoring the clock project by moving some of its parts to | ||
|  | //  a new file in the same package. | ||
|  | // | ||
|  | //  1. Create a new file: placeholders.go | ||
|  | //  2. Move the placeholder type to placeholder.go | ||
|  | //  3. Move all the placeholders (zero to nine and the colon) to placeholder.go | ||
|  | //  4. Move the digits array to placeholders.go | ||
|  | // | ||
|  | // HINT | ||
|  | //  + placeholders.go file should belong to main package as well | ||
|  | // | ||
|  | //    To remember how to do so: Rewatch the "PART I — Packages, Scopes and Importing" | ||
|  | //    section. | ||
|  | // | ||
|  | //  + Short declaration won't work in the package scope. | ||
|  | //    Remember why by watching: "Short Declaration: Package Scope" lecture | ||
|  | // | ||
|  | //  + If you receive the following error and you don't know what to do watch: | ||
|  | //    "Packages - Learn how to run multiple files" lecture. | ||
|  | // | ||
|  | //    # command-line-arguments | ||
|  | //    undefined: placeholder | ||
|  | //    undefined: colon | ||
|  | // | ||
|  | // EXPECTED OUTPUT | ||
|  | //  The same output before the refactoring. | ||
|  | // --------------------------------------------------------- | ||
|  | 
 | ||
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"time" | ||
|  | 
 | ||
|  | 	"github.com/inancgumus/screen" | ||
|  | ) | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	type placeholder [5]string | ||
|  | 
 | ||
|  | 	zero := placeholder{ | ||
|  | 		"███", | ||
|  | 		"█ █", | ||
|  | 		"█ █", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	one := placeholder{ | ||
|  | 		"██ ", | ||
|  | 		" █ ", | ||
|  | 		" █ ", | ||
|  | 		" █ ", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	two := placeholder{ | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"███", | ||
|  | 		"█  ", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	three := placeholder{ | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	four := placeholder{ | ||
|  | 		"█ █", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"  █", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	five := placeholder{ | ||
|  | 		"███", | ||
|  | 		"█  ", | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	six := placeholder{ | ||
|  | 		"███", | ||
|  | 		"█  ", | ||
|  | 		"███", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	seven := placeholder{ | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"  █", | ||
|  | 		"  █", | ||
|  | 		"  █", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	eight := placeholder{ | ||
|  | 		"███", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	nine := placeholder{ | ||
|  | 		"███", | ||
|  | 		"█ █", | ||
|  | 		"███", | ||
|  | 		"  █", | ||
|  | 		"███", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	colon := placeholder{ | ||
|  | 		"   ", | ||
|  | 		" ░ ", | ||
|  | 		"   ", | ||
|  | 		" ░ ", | ||
|  | 		"   ", | ||
|  | 	} | ||
|  | 
 | ||
|  | 	digits := [...]placeholder{ | ||
|  | 		zero, one, two, three, four, five, six, seven, eight, nine, | ||
|  | 	} | ||
|  | 
 | ||
|  | 	screen.Clear() | ||
|  | 
 | ||
|  | 	for { | ||
|  | 		screen.MoveTopLeft() | ||
|  | 
 | ||
|  | 		now := time.Now() | ||
|  | 		hour, min, sec := now.Hour(), now.Minute(), now.Second() | ||
|  | 
 | ||
|  | 		clock := [...]placeholder{ | ||
|  | 			digits[hour/10], digits[hour%10], | ||
|  | 			colon, | ||
|  | 			digits[min/10], digits[min%10], | ||
|  | 			colon, | ||
|  | 			digits[sec/10], digits[sec%10], | ||
|  | 		} | ||
|  | 
 | ||
|  | 		for line := range clock[0] { | ||
|  | 			for index, digit := range clock { | ||
|  | 				// colon blink | ||
|  | 				next := clock[index][line] | ||
|  | 				if digit == colon && sec%2 == 0 { | ||
|  | 					next = "   " | ||
|  | 				} | ||
|  | 				fmt.Print(next, "  ") | ||
|  | 			} | ||
|  | 			fmt.Println() | ||
|  | 		} | ||
|  | 
 | ||
|  | 		time.Sleep(time.Second) | ||
|  | 	} | ||
|  | } |