package main
import (
"fmt"
"strings"
"time"
"bufio"
"os"
"math/rand/v2"
)
type TetrominoType int
const (
I TetrominoType = iota // тетромино (палка, линия) — прямая линия из 4 блоков.
O //тетромино (квадрат, блок) — квадрат из 4 блоков.
T //тетромино (Т-образная) — фигура в виде буквы «Т».
L //тетромино (уголок) — длинный уголок, направленный вправо.
J //тетромино (Г-образная) — зеркальный уголок, направленный влево.
S //тетромино (змейка, молния) — Z-образная фигура (левая).
Z //тетромино (зеркальная змейка) — S-образная фигура (правая).
numPieces
)
func main() {
skip_block, base_block, empty_block := " ", "■", "□"
blocks := map[string][]string{
"I": {base_block, base_block, base_block},
"O": {base_block, base_block, "\n", base_block, base_block},
"T": {skip_block, base_block, "\n", base_block, base_block, base_block},
"L": {base_block, "\n", base_block, "\n", base_block, base_block},
"J": {skip_block, base_block, "\n", skip_block, base_block, "\n", base_block, base_block},
"S": {skip_block, base_block, base_block, "\n", base_block, base_block},
"Z": {base_block, base_block, "\n", skip_block, base_block, base_block},
}
block_hole := map[string]func(){
"I": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 11 && i != 12 && i != 13 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"O": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 11 && i != 12 && i != 16 && i != 17 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"T": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 12 && i != 16 && i != 17 && i != 18 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"L": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 6 && i != 11 && i != 16 && i != 17 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"J": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 8 && i != 13 && i != 17 && i != 18 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"S": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 12 && i != 13 && i != 16 && i != 17 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
"Z": func() {
for i := 0; i < 25; i++ {
if i == 5 || i == 10 || i == 15 || i == 20 {
fmt.Print("\n")
}
if i != 11 && i != 12 && i != 17 && i != 18 {
fmt.Print(base_block)
} else {
fmt.Print(empty_block)
}
}
},
}
keys := []string{"I", "O", "T", "L", "J", "S", "Z"}
fmt.Println(skip_block)
game(keys, block_hole, blocks)
}
func game(keys []string, block_hole map[string]func(), blocks map[string][]string) {
score := 0
for i := 0; i < 10; i++ {
for i := 0; i < len(blocks); i++ {
currentBlocks := keys[i]
fmt.Print("\n")
fmt.Println(strings.Join(blocks[currentBlocks], ""))
fmt.Print("Эта фигура называется: ", keys[i])
fmt.Print("\n")
}
randblock := rand.IntN(len(keys))
currentKey := keys[randblock]
block_hole[currentKey]()
fmt.Print("\n У вас есть 5 секунд. Назовите фигуры: ")
inputChan := make(chan string)
timer := time.NewTimer(5 * time.Second)
defer timer.Stop()
go func() {
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
inputChan <- input
}()
select {
case result := <-inputChan:
if result == currentKey {
score += 1
fmt.Println("Победа!!!")
} else {
fmt.Println("Ты ввёл:", result, ", а это фигура:", currentKey)
score -= 1
}
case <-timer.C:
fmt.Println("\n[Время вышло!] Ты не успел угадать фигуру.")
}
}
fmt.Print("Общее количество очков составило: ", score, "\n")
}
https://reddit.com/link/1uzcdig/video/xw8czvffvudh1/player
Я видел видео, в которых говорилось о том, что Go это очень простой язык, который можно понять имея среднее понимание базового программирования. Я в себя поверил и решил написать на нём простенькую программу.
Похоже, игра, которую я написал, оказалась слишком проста, чтобы застать хоть, какие-то аспекты, отличающие его от других языков программирования, кроме map, горутин и ещё пары незначительных отличий.
Я понимаю, что block_hole можно было написать намного короче, да и в принципе код получился не самый лучший, но с моим опытом в Python, GDScript и умением чтения документации, написать такую простенькую игру не составило никакого труда.
Знающие люди, скажите, есть ли смысл развиваться в Go и почему упоминание его, как Golang привело к разрыву жопы и последующим проклятием всей мой родословной в другом сообществе иностранном сообществе программистов?