Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local plr1_pos=0.5
- local plr2_pos=0.5
- local plr1_score=0
- local plr2_score=0
- local ball_pos={x=0.5,y=0.5}
- local ball_def_winkel=math.rad(35+180)
- local ball_winkel=ball_def_winkel
- local ball_v=0.55
- local ball_scale=0.0025
- local zeit_zwischen_toren=0.05
- local plr_len=0.25
- local plr_with=0.025
- local function limit (v,min,max)
- return math.min(math.max(v,min),max)
- end
- local dt=1/20
- local plr1up=false
- local plr1down=false
- local plr2up=false
- local plr2down=false
- local tor_zeit=os.time()
- --multishell.launch({},"pong/plr1up.lua")
- --multishell.launch({},"pong/plr1down.lua")
- --shell.run("plr1up.lua")
- --shell.run("plr1down.lua")
- function handleplr1down()
- while true do
- local event, key, is_held = os.pullEvent("key")
- if key==keys.w then
- --print("up1")
- plr1up=true
- elseif key==keys.s then
- --print("down1")
- plr1down=true
- end
- end
- end
- function handleplr1up()
- while true do
- local event, key, is_held = os.pullEvent("key_up")
- if key==keys.w then
- --print("up0")
- plr1up=false
- elseif key==keys.s then
- --print("down0")
- plr1down=false
- end
- end
- end
- function handleplr2down()
- while true do
- local event, key, is_held = os.pullEvent("key")
- if key==keys.up then
- --print("up1")
- plr2up=true
- elseif key==keys.down then
- --print("down1")
- plr2down=true
- end
- end
- end
- function handleplr2up()
- while true do
- local event, key, is_held = os.pullEvent("key_up")
- if key==keys.up then
- --print("up0")
- plr2up=false
- elseif key==keys.down then
- --print("down0")
- plr2down=false
- end
- end
- end
- local function main()
- while true do
- sleep(dt)
- if plr1down==true then
- plr1_pos=plr1_pos+dt*0.5
- end
- if plr1up==true then
- plr1_pos=plr1_pos-dt*0.5
- end
- if plr2down==true then
- plr2_pos=plr2_pos+dt*0.5
- end
- if plr2up==true then
- plr2_pos=plr2_pos-dt*0.5
- end
- plr1_pos=limit(plr1_pos,0,1-plr_len)
- plr2_pos=limit(plr2_pos,0,1-plr_len)
- --oben und unten kollision
- if (ball_pos.y-ball_scale*0.5)<=0 or (ball_pos.y+ball_scale*0.5)>=1 then
- ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(90))*2
- end
- --spieler1 kollision
- if (ball_pos.x-ball_scale*0.5)<=plr_with and lb~="plr1"then
- local check_botton=((ball_pos.y+ball_scale*0.5)<=plr1_pos+plr_len and (ball_pos.y+ball_scale*0.5)>=plr1_pos)
- local check_top=((ball_pos.y-ball_scale*0.5)<=plr1_pos+plr_len and (ball_pos.y-ball_scale*0.5)>=plr1_pos)
- if check_botton==true or check_top==true then
- ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(0))*2
- lb="plr1"
- end
- end
- --spieler2 kollision
- if (ball_pos.x+ball_scale*0.5)>=1-plr_with and lb~="plr2"then
- local check_botton=((ball_pos.y+ball_scale*0.5)<=plr2_pos+plr_len and (ball_pos.y+ball_scale*0.5)>=plr2_pos)
- local check_top=((ball_pos.y-ball_scale*0.5)<=plr2_pos+plr_len and (ball_pos.y-ball_scale*0.5)>=plr2_pos)
- if check_botton==true or check_top==true then
- ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(0))*2
- lb="plr2"
- end
- end
- --winkel limieren
- if ball_winkel>2*math.pi then
- ball_winkel=ball_winkel-2*math.pi
- elseif ball_winkel<0 then
- ball_winkel=ball_winkel+2*math.pi
- end
- --ball update
- if os.time()-tor_zeit>=zeit_zwischen_toren then
- ball_pos.x=ball_pos.x+ball_v*dt*math.cos(-ball_winkel)
- ball_pos.y=ball_pos.y+ball_v*dt*math.sin(-ball_winkel)
- end
- --scoring
- if ball_pos.x-ball_scale*0.5<0 then
- plr2_score=plr2_score+1
- ball_pos.x=0.5
- ball_pos.y=0.5
- ball_winkel=ball_def_winkel+math.rad(180)
- tor_zeit=os.time()
- lb="none"
- elseif ball_pos.x+ball_scale*0.5>1 then
- plr1_score=plr1_score+1
- ball_pos.x=0.5
- ball_pos.y=0.5
- ball_winkel=ball_def_winkel
- tor_zeit=os.time()
- lb="none"
- end
- --draw taht shit
- --[[
- love.graphics.clear()
- local screenX,screenY=love.graphics.getWidth(),love.graphics.getHeight()
- --draw ball
- love.graphics.rectangle("fill",ball_pos.x*screenX-(screenX*ball_scale*0.5),ball_pos.y*screenY-(screenY*ball_scale*0.5),screenX*ball_scale,screenY*ball_scale)
- --draw spieler
- love.graphics.rectangle("fill",0,plr1_pos*screenY,screenX*plr_with,plr_len*screenY)
- love.graphics.rectangle("fill",screenX-(screenX*plr_with),plr2_pos*screenY,screenX*plr_with,plr_len*screenY)
- --draw spieler scores + fps
- love.graphics.printf(plr1_score,0.1*screenX,0.1*screenY,font:getWidth(plr1_score),"left",0,1,1)
- love.graphics.printf(plr2_score,0.9*screenX,0.1*screenY,font:getWidth(plr2_score),"right",0,1,1)
- love.graphics.print("fps:"..love.timer.getFPS(),0.45*screenX,0.1*screenY)
- ]]
- --monitor.clear()
- term.clear()
- local screenX,screenY=term.getSize()
- local obenlinksX=ball_pos.x*screenX-(screenX*ball_scale*0.5)
- local obenlinksY=ball_pos.y*screenY-(screenY*ball_scale*0.5)
- paintutils.drawFilledBox(obenlinksX,obenlinksY,obenlinksX+screenX*ball_scale,obenlinksY+screenY*ball_scale,colors.white)
- --paintutils.drawFilledBox(screenX*0.5,screenY*0.5,screenX,screenY,colors.white)
- paintutils.drawFilledBox(0,plr1_pos*screenY,0+screenX*plr_with,plr1_pos*screenY+plr_len*screenY,colors.white)
- paintutils.drawFilledBox(screenX-(screenX*plr_with),plr2_pos*screenY,screenX,plr2_pos*screenY+plr_len*screenY,colors.white)
- term.setBackgroundColour(colors.black)
- end
- end
- parallel.waitForAny(main, handleplr1down,handleplr1up,handleplr2down,handleplr2up)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement