Add HardMode
This commit is contained in:
parent
bbceeee889
commit
a4e2062383
7
colorizer/eraser.go
Normal file
7
colorizer/eraser.go
Normal file
|
@ -0,0 +1,7 @@
|
|||
package colorizer
|
||||
|
||||
import "fmt"
|
||||
|
||||
func ClearFromCursorToEnd() {
|
||||
fmt.Printf("\033[K")
|
||||
}
|
|
@ -15,4 +15,5 @@ type Stat struct {
|
|||
WPM float64
|
||||
// Time in milliseconds
|
||||
TimeTaken int64
|
||||
InHardMode bool
|
||||
}
|
||||
|
|
33
main.go
33
main.go
|
@ -6,6 +6,7 @@ import (
|
|||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
"tipitypy/colorizer"
|
||||
|
@ -26,7 +27,8 @@ func finish(start time.Time, stat *db.Stat, finished bool) {
|
|||
stat.WPM = float64(globalStat.Words+1) / past.Minutes()
|
||||
stat.TimeTaken = past.Milliseconds()
|
||||
fmt.Printf("\r\n%s", colorizer.Colors.Reset())
|
||||
fmt.Println(past)
|
||||
fmt.Print(past)
|
||||
fmt.Printf("\r\n")
|
||||
}
|
||||
|
||||
func ChooseToPrintColorized(r rune) string {
|
||||
|
@ -46,10 +48,11 @@ const (
|
|||
)
|
||||
|
||||
func SingleCycle() (*db.Stat, int, error) {
|
||||
source, err := reader.GetSourceLine()
|
||||
words, err := reader.GetSourceWords()
|
||||
if err != nil {
|
||||
return nil, ExitStateUnspecified, fmt.Errorf("reader.GetSourceLine: %w", err)
|
||||
}
|
||||
source := strings.Join(words, " ")
|
||||
log.Print("Start of tipitypy")
|
||||
if Color {
|
||||
colorizer.PrintColorized(source)
|
||||
|
@ -58,14 +61,18 @@ func SingleCycle() (*db.Stat, int, error) {
|
|||
}
|
||||
fmt.Printf("\r\n")
|
||||
//
|
||||
wordIdx := 0
|
||||
wordRunesI := 0
|
||||
p := []rune(source)
|
||||
i := 0
|
||||
//
|
||||
startTime := time.Now()
|
||||
finished := true
|
||||
stat := &db.Stat{}
|
||||
defer finish(startTime, stat, finished)
|
||||
stat := &db.Stat{
|
||||
InHardMode: HardMode,
|
||||
}
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
startTime := time.Now()
|
||||
defer finish(startTime, stat, finished)
|
||||
for {
|
||||
r, _, err := reader.ReadRune()
|
||||
if err != nil {
|
||||
|
@ -96,16 +103,26 @@ func SingleCycle() (*db.Stat, int, error) {
|
|||
}
|
||||
// Check
|
||||
if p[i] == r {
|
||||
if r == ' ' {
|
||||
globalStat.Words++
|
||||
}
|
||||
globalStat.Correct++
|
||||
fmt.Printf("%s", ChooseToPrintColorized(r))
|
||||
i++
|
||||
wordRunesI++
|
||||
if r == ' ' {
|
||||
globalStat.Words++
|
||||
wordIdx++
|
||||
wordRunesI = 0
|
||||
}
|
||||
if i == len(p) {
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if HardMode && r != ' ' {
|
||||
log.Printf("removing %d runes", wordRunesI)
|
||||
fmt.Printf("%s", strings.Repeat("\b", wordRunesI))
|
||||
colorizer.ClearFromCursorToEnd()
|
||||
i -= wordRunesI
|
||||
wordRunesI = 0
|
||||
}
|
||||
globalStat.False++
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,13 @@ import "os"
|
|||
var (
|
||||
IsEndless = false
|
||||
Color = true
|
||||
HardMode = false
|
||||
)
|
||||
|
||||
const (
|
||||
EndlessOpt = "-e"
|
||||
NoColorOpt = "-nc"
|
||||
HardModeOpt = "--hard"
|
||||
)
|
||||
|
||||
func ParseOptions() {
|
||||
|
@ -19,6 +21,8 @@ func ParseOptions() {
|
|||
IsEndless = true
|
||||
case NoColorOpt:
|
||||
Color = false
|
||||
case HardModeOpt:
|
||||
HardMode = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,16 +2,15 @@ package reader
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"tipitypy/db"
|
||||
)
|
||||
|
||||
func GetSourceLine() (string, error) {
|
||||
func GetSourceWords() ([]string, error) {
|
||||
dbc := db.Connect()
|
||||
var res []string
|
||||
err := dbc.Raw(`SELECT value FROM words WHERE deleted_at IS NULL ORDER BY RANDOM() LIMIT 10;`).Scan(&res).Error
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("dbc.Raw: %w", err)
|
||||
return nil, fmt.Errorf("dbc.Raw: %w", err)
|
||||
}
|
||||
return strings.Join(res, " "), nil
|
||||
return res, nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user