mirror of
				https://github.com/LDDestroier/CC/
				synced 2025-10-31 15:32:59 +00:00 
			
		
		
		
	Add files via upload
This commit is contained in:
		
							
								
								
									
										213
									
								
								dodge.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								dodge.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,213 @@ | ||||
| --[[ | ||||
|   Wall Dodge! What a riveting game! | ||||
|   Dodge the walls before they kill you. | ||||
|    | ||||
|   Download with: | ||||
|    pastebin get fDTts7wz dodge | ||||
|    std PB fDTts7wz dodge | ||||
|    std ld dodge dodge | ||||
| --]] | ||||
|  | ||||
| local scr_x, scr_y = term.getSize() | ||||
| local keysDown = {} --holds all pressed keys. It's way better than using "key" event for movement | ||||
| local walls = {}    --holds all screen data for walls. I could do slants if I wanted, not just walls | ||||
| local frame = 0     --for every screen update-oh, you know what a frame is | ||||
| local maxFrame = 26 --max frames until new wall | ||||
| local fframe = 0    --not a typo. is the buffer of spaces until the spaces between walls shrinks | ||||
| local maxFFrame = 6 --max fframes until the space between walls gets slightly tighter (down to 5, good luck m8) | ||||
| local pause = false --pausing is a nice thing | ||||
| local tsv = term.current().setVisible --it is my belief that monitors and normal computers do not have the setVisible method for term.current() | ||||
| for a = 1, scr_x do | ||||
| 	table.insert(walls,{top=1,bottom=scr_y,color=colors.black}) | ||||
| end | ||||
|  | ||||
| local score = 0  --increases for every wall. | ||||
| local time = 0   --in seconds, increases in increments of 0.1 | ||||
|  | ||||
| local addNewWall = function(top,bottom,color) | ||||
| 	table.remove(walls,1) | ||||
| 	table.insert(walls,{top=top,bottom=bottom,color=color}) | ||||
| end | ||||
|  | ||||
| local guyX = 2 | ||||
| local guyY = math.floor(scr_y/2) | ||||
|  | ||||
| local maxY = scr_y-1 | ||||
| local minY = 2 | ||||
|  | ||||
| local clearLines = function(y1,y2) | ||||
| 	local _x,_y = term.getCursorPos() | ||||
| 	for a = y1, y2 or y1 do | ||||
| 		term.setCursorPos(1,a) | ||||
| 		term.clearLine() | ||||
| 	end | ||||
| 	term.setCursorPos(_x,_y) | ||||
| end | ||||
|  | ||||
| local renderTEXT = function(_txt) | ||||
| 	local txt = _txt or "YOU ARE DEAD" | ||||
| 	local midY = math.floor(scr_y/2) | ||||
| 	for a = 0, 2 do | ||||
| 		term.setBackgroundColor(colors.gray) | ||||
| 		clearLines(midY-a,midY+a) | ||||
| 		sleep(0.1) | ||||
| 	end | ||||
| 	term.setCursorPos(4,midY) | ||||
| 	term.write(txt) | ||||
| end | ||||
|  | ||||
| local trymove = function(dir) | ||||
| 	if (guyY+dir)>=minY and (guyY+dir)<=maxY then | ||||
| 		guyY = guyY + dir | ||||
| 		return true | ||||
| 	end | ||||
| 	return false | ||||
| end | ||||
|  | ||||
| local render = function() | ||||
| 	if tsv then tsv(false) end | ||||
| 	term.setBackgroundColor(colors.white) | ||||
| 	term.setTextColor(colors.white) | ||||
| 	term.clear() | ||||
| 	term.setCursorPos(guyX,guyY) | ||||
| 	term.setBackgroundColor(colors.black) | ||||
| 	term.write(" ") | ||||
| 	term.setCursorPos(1,1) | ||||
| 	term.clearLine() | ||||
| 	term.setCursorPos(1,scr_y) | ||||
| 	term.clearLine() | ||||
| 	for x = 1, #walls do | ||||
| 		term.setBackgroundColor(walls[x].color) | ||||
| 		for y = 1, walls[x].top do | ||||
| 			term.setCursorPos(x,y) | ||||
| 			term.write(" ") | ||||
| 		end | ||||
| 		for y = walls[x].bottom, scr_y do | ||||
| 			term.setCursorPos(x,y) | ||||
| 			term.write(" ") | ||||
| 		end | ||||
| 	end | ||||
| 	term.setCursorPos(2,1) | ||||
| 	term.setBackgroundColor(colors.black) | ||||
| 	term.write("SCORE: "..score.." | TIME: "..time) | ||||
| 	if tsv then tsv(true) end | ||||
| end | ||||
|  | ||||
| local keepTime = function() | ||||
| 	time = 0 | ||||
| 	while true do | ||||
| 		sleep(0.1) | ||||
| 		if not pause then | ||||
| 			time = time + 0.1 | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local doGame = function() | ||||
| 	local wf = 0 | ||||
| 	local gap = 2 | ||||
| 	local ypos, randomcol | ||||
| 	while true do | ||||
| 		if not pause then | ||||
| 			if frame >= maxFrame or wf > 0 then | ||||
| 				if frame >= maxFrame then | ||||
| 					frame = 0 | ||||
| 					fframe = fframe + 1 | ||||
| 					ypos = math.random(4,scr_y-3) | ||||
| 					wf = 3 | ||||
| 					randomcol = 2^math.random(1,14) | ||||
| 				end | ||||
| 				if wf > 0 then | ||||
| 					wf = wf - 1 | ||||
| 				end | ||||
| 				if not term.isColor() then | ||||
| 					randomcol = colors.black --Shame. | ||||
| 				end | ||||
| 				addNewWall(ypos-gap,ypos+gap,randomcol) | ||||
| 			else | ||||
| 				frame = frame + 1 | ||||
| 				addNewWall(1,scr_y,colors.black) | ||||
| 			end | ||||
| 			if fframe >= maxFFrame then | ||||
| 				fframe = 0 | ||||
| 				if maxFrame > 7 then | ||||
| 					maxFrame = maxFrame - 1 | ||||
| 				end | ||||
| 			end | ||||
| 			if keysDown[keys.up] then | ||||
| 				trymove(-1) | ||||
| 			end | ||||
| 			if keysDown[keys.down] then | ||||
| 				trymove(1) | ||||
| 			end | ||||
| 			if walls[guyX-1].top > 1 or walls[guyX-1].bottom < scr_y then | ||||
| 				if walls[guyX].top < walls[guyX-1].top or walls[guyX].bottom > walls[guyX-1].bottom then | ||||
| 					score = score + 1 | ||||
| 				end | ||||
| 			end | ||||
| 			render() | ||||
| 		end | ||||
| 		sleep(0) | ||||
| 		if guyY<=walls[guyX].top or guyY>=walls[guyX].bottom then | ||||
| 			return "dead" | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local getInput = function() | ||||
| 	while true do | ||||
| 		local evt = {os.pullEvent()} | ||||
| 		if evt[1] == "key" then | ||||
| 			if evt[2] == keys.q then | ||||
| 				return "quit" | ||||
| 			end | ||||
| 			if evt[2] == keys.p then | ||||
| 				pause = not pause | ||||
| 				if pause then | ||||
| 					local pauseMSGs = { | ||||
| 						"PAUSED", | ||||
| 						"Paused. Press 'P' to resume", | ||||
| 						"The game is paused", | ||||
| 						"GAME PAUSE !", | ||||
| 						"What, gotta catch your breath??", | ||||
| 						"Paused, the game is, hmmm?", | ||||
| 						"PAUSED GAME", | ||||
| 						"GAME PAUSED", | ||||
| 						"THE GAME IS PAUSED", | ||||
| 						"THE PAUSED IS GAME", | ||||
| 						"Buh-buh-buh-BEEP", | ||||
| 						"UNPAUSE WITH 'P'", | ||||
| 						"Tip: press UP to go up", | ||||
| 						"Tip: press DOWN to go down", | ||||
| 						"Tip: read Narbonic comic, you tool", | ||||
| 						"Tip: read Skin Horse comic, you twat", | ||||
| 						"YOU HAVE NO CHANCE TO SURVIVE MAKE YOUR TIME", | ||||
| 						"-PAUSED-", | ||||
| 						"=PAUSED=", | ||||
| 						"PAISED", | ||||
| 						"THOUST GAME BE PAUSETH", | ||||
| 						"Yon game is paused. Obvious exits are 'Q', 'CTRL+T'", | ||||
| 						"Tip: don't hit the walls", | ||||
| 						"Tip: press 'P' to pause the game", | ||||
| 					} | ||||
| 					renderTEXT(pauseMSGs[math.random(1,#pauseMSGs)]) | ||||
| 					keysDown[keys.up] = false | ||||
| 					keysDown[keys.down] = false | ||||
| 				end | ||||
| 			end | ||||
| 			keysDown[evt[2]] = true | ||||
| 		end | ||||
| 		if evt[1] == "key_up" then | ||||
| 			keysDown[evt[2]] = false | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local uut = parallel.waitForAny(getInput,doGame,keepTime) | ||||
| if uut == 2 then | ||||
| 	renderTEXT() | ||||
| end | ||||
| sleep(0.05) | ||||
| term.setCursorPos(1,scr_y) | ||||
| term.setBackgroundColor(colors.black) | ||||
| term.clearLine() | ||||
		Reference in New Issue
	
	Block a user
	 LDDestroier
					LDDestroier