Advertisement
dengmahalYT

CCpong

Jul 24th, 2024 (edited)
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.29 KB | Software | 0 0
  1. local plr1_pos=0.5
  2. local plr2_pos=0.5
  3. local plr1_score=0
  4. local plr2_score=0
  5.  
  6. local ball_pos={x=0.5,y=0.5}
  7. local ball_def_winkel=math.rad(35+180)
  8. local ball_winkel=ball_def_winkel
  9. local ball_v=0.55
  10. local ball_scale=0.0025
  11.  
  12. local zeit_zwischen_toren=0.05
  13.  
  14. local plr_len=0.25
  15. local plr_with=0.025
  16. local function limit (v,min,max)
  17.     return math.min(math.max(v,min),max)
  18. end
  19.  
  20. local dt=1/20
  21. local plr1up=false
  22. local plr1down=false
  23. local plr2up=false
  24. local plr2down=false
  25. local tor_zeit=os.time()
  26.  
  27. --multishell.launch({},"pong/plr1up.lua")
  28. --multishell.launch({},"pong/plr1down.lua")
  29. --shell.run("plr1up.lua")
  30. --shell.run("plr1down.lua")
  31.  
  32.  
  33.  
  34. function handleplr1down()
  35.     while true do
  36.         local event, key, is_held = os.pullEvent("key")
  37.         if key==keys.w then
  38.             --print("up1")
  39.             plr1up=true
  40.         elseif key==keys.s then
  41.             --print("down1")
  42.             plr1down=true
  43.         end
  44.       end
  45. end
  46. function handleplr1up()
  47.     while true do
  48.         local event, key, is_held = os.pullEvent("key_up")
  49.         if key==keys.w then
  50.             --print("up0")
  51.             plr1up=false
  52.         elseif key==keys.s then
  53.             --print("down0")
  54.             plr1down=false
  55.         end
  56.     end
  57. end
  58.  
  59. function handleplr2down()
  60.     while true do
  61.         local event, key, is_held = os.pullEvent("key")
  62.         if key==keys.up then
  63.             --print("up1")
  64.             plr2up=true
  65.         elseif key==keys.down then
  66.             --print("down1")
  67.             plr2down=true
  68.         end
  69.       end
  70. end
  71. function handleplr2up()
  72.     while true do
  73.         local event, key, is_held = os.pullEvent("key_up")
  74.         if key==keys.up then
  75.             --print("up0")
  76.             plr2up=false
  77.         elseif key==keys.down then
  78.             --print("down0")
  79.             plr2down=false
  80.         end
  81.     end
  82. end
  83.  
  84. local function main()
  85.     while true do
  86.         sleep(dt)
  87.         if plr1down==true then
  88.             plr1_pos=plr1_pos+dt*0.5
  89.         end
  90.         if plr1up==true then
  91.              plr1_pos=plr1_pos-dt*0.5
  92.         end
  93.         if plr2down==true then
  94.             plr2_pos=plr2_pos+dt*0.5
  95.         end
  96.         if plr2up==true then
  97.              plr2_pos=plr2_pos-dt*0.5
  98.         end
  99.         plr1_pos=limit(plr1_pos,0,1-plr_len)
  100.         plr2_pos=limit(plr2_pos,0,1-plr_len)
  101.         --oben und unten kollision
  102.         if (ball_pos.y-ball_scale*0.5)<=0 or (ball_pos.y+ball_scale*0.5)>=1 then
  103.             ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(90))*2
  104.         end
  105.         --spieler1 kollision
  106.         if (ball_pos.x-ball_scale*0.5)<=plr_with and lb~="plr1"then
  107.             local check_botton=((ball_pos.y+ball_scale*0.5)<=plr1_pos+plr_len and (ball_pos.y+ball_scale*0.5)>=plr1_pos)
  108.             local check_top=((ball_pos.y-ball_scale*0.5)<=plr1_pos+plr_len and (ball_pos.y-ball_scale*0.5)>=plr1_pos)
  109.             if check_botton==true or check_top==true then
  110.                 ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(0))*2
  111.                 lb="plr1"
  112.             end
  113.         end
  114.         --spieler2 kollision
  115.         if (ball_pos.x+ball_scale*0.5)>=1-plr_with and lb~="plr2"then
  116.             local check_botton=((ball_pos.y+ball_scale*0.5)<=plr2_pos+plr_len and (ball_pos.y+ball_scale*0.5)>=plr2_pos)
  117.             local check_top=((ball_pos.y-ball_scale*0.5)<=plr2_pos+plr_len and (ball_pos.y-ball_scale*0.5)>=plr2_pos)
  118.             if check_botton==true or check_top==true then
  119.                 ball_winkel=ball_winkel+math.rad(180)-(ball_winkel-math.rad(0))*2
  120.                 lb="plr2"
  121.             end
  122.         end
  123.  
  124.         --winkel limieren
  125.         if ball_winkel>2*math.pi then
  126.             ball_winkel=ball_winkel-2*math.pi
  127.         elseif ball_winkel<0 then
  128.             ball_winkel=ball_winkel+2*math.pi
  129.         end
  130.  
  131.         --ball update
  132.         if os.time()-tor_zeit>=zeit_zwischen_toren then
  133.             ball_pos.x=ball_pos.x+ball_v*dt*math.cos(-ball_winkel)
  134.             ball_pos.y=ball_pos.y+ball_v*dt*math.sin(-ball_winkel)
  135.         end
  136.         --scoring
  137.         if ball_pos.x-ball_scale*0.5<0 then
  138.             plr2_score=plr2_score+1
  139.             ball_pos.x=0.5
  140.             ball_pos.y=0.5
  141.             ball_winkel=ball_def_winkel+math.rad(180)
  142.             tor_zeit=os.time()
  143.             lb="none"
  144.         elseif ball_pos.x+ball_scale*0.5>1 then
  145.             plr1_score=plr1_score+1
  146.             ball_pos.x=0.5
  147.             ball_pos.y=0.5
  148.             ball_winkel=ball_def_winkel
  149.             tor_zeit=os.time()
  150.             lb="none"
  151.         end
  152.  
  153.         --draw taht shit
  154.  
  155.         --[[
  156.         love.graphics.clear()
  157.         local screenX,screenY=love.graphics.getWidth(),love.graphics.getHeight()
  158.         --draw ball
  159.         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)
  160.  
  161.         --draw spieler
  162.         love.graphics.rectangle("fill",0,plr1_pos*screenY,screenX*plr_with,plr_len*screenY)
  163.         love.graphics.rectangle("fill",screenX-(screenX*plr_with),plr2_pos*screenY,screenX*plr_with,plr_len*screenY)
  164.  
  165.         --draw spieler scores + fps
  166.         love.graphics.printf(plr1_score,0.1*screenX,0.1*screenY,font:getWidth(plr1_score),"left",0,1,1)
  167.         love.graphics.printf(plr2_score,0.9*screenX,0.1*screenY,font:getWidth(plr2_score),"right",0,1,1)
  168.         love.graphics.print("fps:"..love.timer.getFPS(),0.45*screenX,0.1*screenY)
  169.         ]]
  170.         --monitor.clear()
  171.         term.clear()
  172.         local screenX,screenY=term.getSize()
  173.         local obenlinksX=ball_pos.x*screenX-(screenX*ball_scale*0.5)
  174.         local obenlinksY=ball_pos.y*screenY-(screenY*ball_scale*0.5)
  175.         paintutils.drawFilledBox(obenlinksX,obenlinksY,obenlinksX+screenX*ball_scale,obenlinksY+screenY*ball_scale,colors.white)
  176.         --paintutils.drawFilledBox(screenX*0.5,screenY*0.5,screenX,screenY,colors.white)
  177.        
  178.         paintutils.drawFilledBox(0,plr1_pos*screenY,0+screenX*plr_with,plr1_pos*screenY+plr_len*screenY,colors.white)
  179.         paintutils.drawFilledBox(screenX-(screenX*plr_with),plr2_pos*screenY,screenX,plr2_pos*screenY+plr_len*screenY,colors.white)
  180.  
  181.        
  182.         term.setBackgroundColour(colors.black)
  183.     end
  184. end
  185.  
  186.  
  187. parallel.waitForAny(main, handleplr1down,handleplr1up,handleplr2down,handleplr2up)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement