View difference between Paste ID: Vmf14zj0 and viN48mAx
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 paddleWidth2 = 3
12
local paddleString = "       "
13
local ballVelX, ballVelY
14-
local boardWidth = 51
14+
local boardWidth = 50
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
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
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
				elseif newX > boardWidth then
65-
				if newX > boardWidth then
65+
66
					bounced = true
67
				elseif newY < 1 then
68
					ballVelY = ballVelY * -1
69-
				if newY < 1 then
69+
70
				elseif newY == paddleY and math.abs(newX - paddleX) <= paddleWidth2 then
71
					ballVelY = ballVelY * -1
72
					bounced = true
73-
				if newY == paddleY and math.abs(newX - paddleX) <= paddleWidth2 then
73+
				elseif newY > boardHeight then
74
					lives = lives - 1
75
					mon.setCursorPos(ballX, ballY)
76
					mon.setBackgroundColor(boardColor)
77-
				if boardArray[oldX][newY] ~= boardArray then
77+
78
					ballX = paddleX
79
					ballY = paddleY - 1
80
					ballVelX = math.random(-1, 1)
81
					ballVelY = -1
82-
				if boardArray[newX][oldY] ~= boardArray then
82+
83
					mon.setBackgroundColor(ballColor)
84
					mon.write(" ")
85
				elseif boardArray[oldX][newY] ~= boardColor then
86
					breakBlock(oldX, newY)
87-
				if newY > boardHeight then
87+
88
					bounced = true
89
				elseif boardArray[newX][oldY] ~= boardColor then
90
					breakBlock(oldX, newY)
91
					ballVelX = ballVelX * -1
92
					bounced = true
93
				end
94
			until not bounced
95
96
			mon.setCursorPos(oldX, oldY)
97
			mon.setBackgroundColor(boardColor)
98
			mon.write(" ")
99
			ballX = ballX + ballVelX
100
			ballY = ballY + ballVelY
101
			mon.setCursorPos(newX, newY)
102
			mon.setBackgroundColor(ballColor)
103
			mon.write(" ")
104
105
			timer1 = os.startTimer(timerLength)
106
		end
107
108
		if event == "mouse_drag" or event == "mouse_click" then
109
			mon.setCursorPos(paddleX - paddleWidth2, paddleY)
110
			mon.setBackgroundColor(boardColor)
111
			mon.write(paddleString)
112
			paddleX = xPos
113
			if paddleX - paddleWidth2 < 1 then paddleX = paddleWidth2 + 1 end
114
			if paddleX + paddleWidth2 > boardWidth then paddleX = boardWidth - paddleWidth2 end
115
			mon.setCursorPos(paddleX - paddleWidth2, paddleY)
116
			mon.setBackgroundColor(paddleColor)
117
			mon.write(paddleString)
118
		end
119
120
		if event == "key" then
121
			if param1 == 203 then --left
122
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
123
				mon.setBackgroundColor(boardColor)
124
				mon.write(paddleString)
125
				paddleX = paddleX - 1
126
				if paddleX - paddleWidth2 < 1 then paddleX = paddleWidth2 + 1 end
127
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
128
				mon.setBackgroundColor(paddleColor)
129
				mon.write(paddleString)
130
			elseif param1 == 205 then --right
131
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
132
				mon.setBackgroundColor(boardColor)
133
				mon.write(paddleString)
134
				paddleX = paddleX + 1
135
				if paddleX + paddleWidth2 > boardWidth then paddleX = boardWidth - paddleWidth2 end
136
				mon.setCursorPos(paddleX - paddleWidth2, paddleY)
137
				mon.setBackgroundColor(paddleColor)
138
				mon.write(paddleString)
139
			elseif param1 == 28 then --enter
140
				term.setBackgroundColor(colors.black)
141
				term.setCursorPos(1, 1)
142
				term.write("Paused")
143
				
144
				repeat
145
					event, param = os.pullEvent()
146
				until event == "key" and param == 28
147
148
				term.setCursorPos(1, 1)
149
				term.write("      ")
150
				timer1 = os.startTimer(timerLength)
151
			end
152
		end
153
	end
154
end
155
156
local function board1()
157
	local color, prevColor = boardColor
158
	for y = 1, 3 do
159
		for x = 1, boardWidth do
160
			boardArray[x][y] = boardColor
161
		end
162
	end
163
	for y = 4, 10 do
164
		for x = 1, boardWidth, 5 do
165
			repeat
166
				color = blockColor[math.floor(math.random(1, numBlockColors + 0.999))]
167
			until color ~= prevColor
168
			for x2 = x, x + 4 do
169
				boardArray[x2][y] = color
170
			end
171
		end
172
	end
173
	for y = 11, boardHeight do
174
		for x = 1, boardWidth do
175-
				boardArray[x][y] = color
175+
176
		end
177
	end
178
end
179
180
local function drawBoard()
181
	for y = 1, boardHeight do
182
		mon.setCursorPos(1, y)
183
		for x = 1, boardWidth do
184
			mon.setBackgroundColor(boardArray[x][y])
185
			mon.write(" ")
186
		end
187
	end
188
end
189
190
for x = 1, boardWidth do
191
	boardArray[x] = {}
192
end
193
194
195
board1()
196
drawBoard()
197
main()