-
Notifications
You must be signed in to change notification settings - Fork 669
/
Copy pathmain.go
110 lines (92 loc) · 2.89 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"fmt"
"math/rand"
"time"
)
// rnd - генератор псевдослучайных чисел
var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
// randNum возвращает случайное число в интервале [min, max]
func randNum(min, max int) int {
return rnd.Intn(max-min+1) + min
}
// input запрашивает и возвращает ввод пользователя в консоли
func input(title string) string {
fmt.Print(title)
var s string
_, err := fmt.Scanln(&s)
if err != nil {
fmt.Println(err)
}
return s
}
func setEnemyHealth() int {
return randNum(80, 120)
}
func getLiteAttack() int {
return randNum(2, 5)
}
func getMidAttack() int {
return randNum(15, 25)
}
func getHardAttack() int {
return randNum(30, 40)
}
func compareValues(enemyHealth, userTotalAttack int) bool {
pointDifference := enemyHealth - userTotalAttack
if pointDifference < 0 {
pointDifference = -pointDifference
}
return pointDifference <= 10
}
func getUserAttack() int {
total := 0
for i := 0; i < 5; i++ {
inputAttack := input("Введи тип атаки: ")
var attackValue int
switch inputAttack {
case "lite":
attackValue = getLiteAttack()
case "mid":
attackValue = getMidAttack()
case "hard":
attackValue = getHardAttack()
default:
fmt.Println("Неизвестный тип атаки:", inputAttack)
continue
}
fmt.Println("Количество очков твоей атаки:", attackValue)
total += 1
}
return total
}
func runGame() bool {
enemyHealth := setEnemyHealth()
userTotalAttack := getUserAttack()
fmt.Println("Тобой нанесён урон противнику равный", userTotalAttack)
fmt.Println("Очки здоровья противника до твоей атаки", enemyHealth)
if compareValues(enemyHealth, userTotalAttack) {
fmt.Println("Ура! Победа за тобой!")
} else {
fmt.Println("В этот раз не повезло :( Бой проигран.")
}
answer := input("Чтобы сыграть ещё раз, введи букву [y] или [Y]: ")
return answer == "Y"
}
func main() {
intro := `РАССЧИТАЙ И ПОБЕДИ!
Загрузка...
Твоя цель — за 5 ходов набрать такое количество очков урона противнику,
которое попадет в диапазон +– 10 от значения здоровья противника.
Значение здоровья противника генерируется случайным образом
в диапазоне от 80 до 120 очков.
В твоём распоряжении три вида атак:
lite — урон от 2 до 5 очков;
mid — урон от 15 до 25 очков;
hard — урон от 30 до 40 очков.
ВПЕРЁД К ПОБЕДЕ!!!
`
fmt.Println(intro)
for runGame() {
}
}