View difference between Paste ID: viN48mAx and iE6b4Lku
SHOW: | | - or go back to the newest paste.
1
2
local lives = 3
3
4
local mon = term
5
6
local timerLength = 0.25
7
local ballX, ballY
8
local paddleX = 25
9
local paddleY = 19
10
local paddleWidth = 7
11-
local paddleString = "   "
11+
12
local paddleString = "       "
13
local ballVelX, ballVelY
14
local boardWidth = 51
15
local boardHeight = 19
16
local boardColor = colors.black
17
local ballColor = colors.white
18
local paddleColor = colors.gray
19
20
local blockColor = {colors.red, colors.blue, colors.green}
21
local numBlockColors = 3
22-
	local newX, newY
22+
23
local boardArray = {}
24
25
local function breakBlock(px, py)
26
	minX = px
27
	color = boardArray[px][py]
28
	while boardArray[minX - 1][py] == color do minX = minX - 1 end
29
	mon.setBackgroundColor(boardColor)
30
	mon.setCursorPos(minX, py)
31
	mon.write("     ")
32
	maxX = minX + 4
33
	for x = minX, maxX do
34
		boardArray[x][py] = boardColor
35
	end
36-
			bounced = false
36+
end
37
38
local function main()
39
40
	local event, param1, param2, xPos, yPos
41
	local oldX, oldY, newX, newY
42
43
44
	ballX = boardWidth / 2
45
	ballY = paddleY - 1
46
	ballVelX = math.random(-1, 1)
47
	ballVelY = -1
48
	paddleX = boardWidth / 2
49
	
50
	timer1 = os.startTimer(timerLength)
51
	while lives > -1 do			
52
		event, param1, xPos, yPos = os.pullEvent()
53
54
		if event == "timer" and param1 == timer1 then 
55
			oldX = math.floor(ballX)
56
			oldY = math.floor(ballY)
57
			repeat
58
				bounced = false
59
				newX = math.floor(ballX + ballVelX)
60
				newY = math.floor(ballY + ballVelY)
61
				if newX < 1 then
62
					ballVelX = ballVelX * -1
63
					bounced = true
64
				end
65
				if newX > boardWidth then
66
					ballVelX = ballVelX * -1
67
					bounced = true
68
				end
69
				if newY < 1 then
70
					ballVelY = ballVelY * -1
71-
			mon.setCursorPos(ballX, ballY)
71+
72
				end
73
				if newY == paddleY and math.abs(newX - paddleX) <= paddleWidth2 then
74
					ballVelY = ballVelY * -1
75
					bounced = true
76-
			mon.setCursorPos(ballX, ballY)
76+
77
				if boardArray[oldX][newY] ~= boardArray then
78
					breakBlock(oldX, newY)
79
					ballVelY = ballVelY * -1
80
					bounced = true
81
				end
82
				if boardArray[newX][oldY] ~= boardArray then
83
					breakBlock(oldX, newY)
84
					ballVelY = ballVelY * -1
85
					bounced = true
86
				end
87
				if newY > boardHeight then
88
					lives = lives - 1
89
					mon.setCursorPos(ballX, ballY)
90
					mon.setBackgroundColor(boardColor)
91
					mon.write(" ")
92
					ballX = paddleX
93
					ballY = paddleY - 1
94
					ballVelX = math.random(-1, 1)
95
					ballVelY = -1
96
					mon.setCursorPos(ballX, ballY)
97
					mon.setBackgroundColor(ballColor)
98
					mon.write(" ")
99
				end
100
			until not bounced
101
102
			mon.setCursorPos(oldX, oldY)
103
			mon.setBackgroundColor(boardColor)
104
			mon.write(" ")
105
			ballX = ballX + ballVelX
106
			ballY = ballY + ballVelY
107
			mon.setCursorPos(newX, newY)
108
			mon.setBackgroundColor(ballColor)
109
			mon.write(" ")
110
111
			timer1 = os.startTimer(timerLength)
112
		end
113
114
		if event == "mouse_drag" or event == "mouse_click" then
115
			mon.setCursorPos(paddleX - paddleWidth2, paddleY)
116
			mon.setBackgroundColor(boardColor)
117
			mon.write(paddleString)
118
			paddleX = xPos
119
			if paddleX - paddleWidth2 < 1 then paddleX = paddleWidth2 + 1 end
120
			if paddleX + paddleWidth2 > boardWidth then paddleX = boardWidth - paddleWidth2 end
121
			mon.setCursorPos(paddleX - paddleWidth2, paddleY)
122
			mon.setBackgroundColor(paddleColor)
123
			mon.write(paddleString)
124
		end
125
126
		if event == "key" then
127
			if param1 == 203 then --left
128
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
129
				mon.setBackgroundColor(boardColor)
130
				mon.write(paddleString)
131
				paddleX = paddleX - 1
132-
end
132+
133
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
134
				mon.setBackgroundColor(paddleColor)
135
				mon.write(paddleString)
136
			elseif param1 == 205 then --right
137
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
138
				mon.setBackgroundColor(boardColor)
139
				mon.write(paddleString)
140
				paddleX = paddleX + 1
141
				if paddleX + paddleWidth2 > boardWidth then paddleX = boardWidth - paddleWidth2 end
142
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
143
				mon.setBackgroundColor(paddleColor)
144
				mon.write(paddleString)
145
			elseif param1 == 28 then --enter
146
				term.setBackgroundColor(colors.black)
147
				term.setCursorPos(1, 1)
148
				term.write("Paused")
149
				
150
				repeat
151
					event, param = os.pullEvent()
152
				until event == "key" and param == 28
153
154
				term.setCursorPos(1, 1)
155
				term.write("      ")
156
				timer1 = os.startTimer(timerLength)
157
			end
158
		end
159
	end
160
end
161
162
local function board1()
163
	local color, prevColor = boardColor
164
	for y = 1, 3 do
165
		for x = 1, boardWidth do
166
			boardArray[x][y] = boardColor
167
		end
168
	end
169
	for y = 4, 10 do
170
		for x = 1, boardWidth, 5 do
171
			repeat
172
				color = blockColor[math.floor(math.random(1, numBlockColors + 0.999))]
173
			until color ~= prevColor
174
			for x2 = x, x + 4 do
175
				boardArray[x][y] = color
176
			end
177
		end
178
	end
179
	for y = 11, boardHeight do
180
		for x = 1, boardWidth do
181
			boardArray[x][y] = boardColor
182
		end
183
	end
184
end
185
186
local function drawBoard()
187
	for y = 1, boardHeight do
188
		mon.setCursorPos(1, y)
189
		for x = 1, boardWidth do
190
			mon.setBackgroundColor(boardArray[x][y])
191
			mon.write(" ")
192
		end
193
	end
194
end
195
196
for x = 1, boardWidth do
197
	boardArray[x] = {}
198
end
199
200
201
board1()
202
drawBoard()
203
main()