@@ -10,6 +10,7 @@ import (
10
10
)
11
11
12
12
var (
13
+ flush = make (chan int )
13
14
meY = 12
14
15
enemyY = 12
15
16
ball = []int {40 , 12 }
@@ -59,17 +60,29 @@ func draw() {
59
60
drawLine (meX , meY + i , fmt .Sprintf ("||" ))
60
61
drawLine (enemyX , enemyY + i , fmt .Sprintf ("||" ))
61
62
}
62
- termbox . Flush ()
63
+ flush <- 1
63
64
}
64
65
65
- func keyEvent (c chan bool ) {
66
+ func termSync () {
67
+ for {
68
+ flg := <- flush
69
+ if flg == - 1 {
70
+ break
71
+ }
72
+ termbox .Flush ()
73
+ }
74
+ }
75
+
76
+ func keyEvent () {
77
+ draw ()
66
78
for {
67
79
switch ev := termbox .PollEvent (); ev .Type {
68
80
case termbox .EventKey :
69
81
switch ev .Key {
70
82
case termbox .KeyEsc , termbox .KeyCtrlC :
71
83
clear = true
72
- c <- false
84
+ draw ()
85
+ flush <- - 1
73
86
return
74
87
case termbox .KeyArrowUp :
75
88
if meY > wallTop + 1 {
@@ -82,25 +95,25 @@ func keyEvent(c chan bool) {
82
95
83
96
default :
84
97
}
85
- c <- true
98
+ draw ()
86
99
default :
87
100
}
88
101
hitTest ()
89
102
}
90
103
}
91
104
92
- func moveBall (c chan bool ) {
105
+ func moveBall () {
93
106
for {
94
107
95
108
ball [0 ] += vector [0 ]
96
109
ball [1 ] += vector [1 ]
97
110
hitTest ()
98
- c <- true
111
+ draw ()
99
112
100
113
ball [0 ] += vector [0 ]
101
114
hitTest ()
102
115
recMove ()
103
- c <- true
116
+ draw ()
104
117
105
118
if ball [1 ] <= wallTop + 1 || ball [1 ] >= wallBottom - 1 {
106
119
vector [1 ] *= - 1
@@ -115,18 +128,18 @@ func moveBall(c chan bool) {
115
128
score [0 ]++
116
129
}
117
130
initGame ()
118
- c <- true
131
+ draw ()
119
132
time .Sleep (time .Duration (500 ) * time .Millisecond )
120
133
}
121
- c <- true
134
+
122
135
time .Sleep (time .Duration (100 - level * 5 ) * time .Millisecond )
123
136
}
124
137
}
125
138
func recMove () {
126
139
shadow = append (shadow , []int {ball [0 ], ball [1 ]})
127
140
shadow = shadow [1 :]
128
141
}
129
- func moveEnemy (c chan bool ) {
142
+ func moveEnemy () {
130
143
vec := 0
131
144
for {
132
145
@@ -139,7 +152,7 @@ func moveEnemy(c chan bool) {
139
152
enemyY ++
140
153
}
141
154
hitTest ()
142
- c <- true
155
+ draw ()
143
156
144
157
switch true {
145
158
case ball [0 ] < 30 :
@@ -191,21 +204,10 @@ func main() {
191
204
panic (err )
192
205
}
193
206
194
- signal := make (chan bool )
195
-
196
- go moveBall (signal )
197
- go moveEnemy (signal )
198
- go keyEvent (signal )
199
-
200
- for {
201
- s := <- signal
202
- draw ()
203
- if s == false {
204
- close (signal )
205
- break
206
- }
207
- }
208
-
207
+ go moveBall ()
208
+ go moveEnemy ()
209
+ go termSync ()
209
210
defer termbox .Close ()
210
211
212
+ keyEvent ()
211
213
}
0 commit comments