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