Advertisement
here2share

# ray_casting_with_turtle.py ZZZ

Jan 29th, 2021
1,280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.51 KB | None | 0 0
  1. # ray_casting_with_turtle.py ZZZ
  2.  
  3. import turtle
  4. from math import *
  5.  
  6. t=turtle.Turtle()
  7. turtle.speed(0) # 5000
  8. turtle.bgcolor("black")
  9. loc=turtle.Turtle()
  10. px=float(5.5)
  11. py=float(5.5)
  12. pa=float(0)
  13. sw=int(120)
  14. sh=int(40)
  15. my=int(16)
  16. mx=int(16)
  17. fov=float(0.15)
  18. fd=float(10)
  19. tx=0
  20. turtle.setworldcoordinates(-300,200,-72,0)
  21. hit=False
  22. t.pu()
  23. t.pensize(7)
  24. t.goto(-300,200)
  25. t.right(90)
  26. t.pd()
  27. ty=0
  28. t.pendown()
  29. turtle.tracer(120)
  30. h=float(0)
  31. loc.goto(5.5,5.5)
  32. loc.penup()
  33. loc.ht()
  34. t.ht()
  35.  
  36. ma1 = ['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x',
  37.  
  38.       'x','.','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  39.  
  40.       'x','.','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  41.  
  42.       'x','.','.','.','.','.','.','.','.','.','x','x','x','x','.','x',
  43.  
  44.       'x','.','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  45.  
  46.       'x','.','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  47.  
  48.       'x','x','x','.','.','.','.','.','.','.','.','.','.','.','.','x',
  49.  
  50.       'x','x','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  51.  
  52.       'x','.','.','.','.','.','.','.','.','.','x','.','.','x','x','x',
  53.  
  54.       'x','.','.','.','.','.','.','.','.','.','x','.','.','.','.','x',
  55.  
  56.       'x','.','.','.','.','x','.','.','.','.','x','.','.','.','.','x',
  57.  
  58.       'x','.','.','.','.','x','.','.','.','.','.','.','.','.','.','x',
  59.  
  60.       'x','.','.','.','.','x','.','.','.','.','.','.','.','.','.','x',
  61.  
  62.       'x','.','.','.','.','x','.','.','.','.','.','.','.','.','.','x',
  63.  
  64.       'x','.','.','.','.','.','.','.','.','.','.','.','.','.','.','x',
  65.  
  66.       'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x']
  67.  
  68.  
  69. turtle.tracer(0,1)
  70.  
  71. wn = turtle.Screen()
  72.  
  73. keyboard = ''
  74. def up():
  75.     global keyboard
  76.     keyboard = 'U'
  77.  
  78. def down():
  79.     global keyboard
  80.     keyboard = 'D'
  81.    
  82. def left():
  83.     global keyboard
  84.     keyboard = 'L'
  85.  
  86. def right():
  87.     global keyboard
  88.     keyboard = 'R'
  89.  
  90. wn.listen()
  91. wn.onkey(up, 'Up')
  92. wn.onkey(down, 'Down')
  93. wn.onkey(left, 'Left')
  94. wn.onkey(right, 'Right')
  95.  
  96. def everything():  
  97.     global hit
  98.     global py
  99.     global px
  100.     global pa
  101.     global keyboard
  102.     while True:
  103.         for i in range (int(sw)):
  104.             if keyboard == 'L':
  105.                 loc.left(0.1)
  106.                
  107.             elif keyboard == 'R':
  108.                 loc.right(0.1)
  109.                    
  110.             elif keyboard == 'U':
  111.                 loc.backward(0.01)
  112.                 if (ma1[int(px-0.1) * mx + int(py-0.1)] == 'x'):
  113.                     loc.backward(-0.01)
  114.                    
  115.             elif keyboard == 'D':
  116.                 loc.forward(0.01)
  117.                 if (ma1[int(px-0.1) * mx + int(py-0.1)] == 'x'):
  118.                     loc.forward(-0.01)
  119.                        
  120.             ra=float(((pa-fov/2)+(i)/(mx)*fov))
  121.            
  122.             ex=float(sin(ra))
  123.             ey=float (cos(ra))
  124.             dis=float (0)
  125.             while hit ==False and dis< fd:
  126.                
  127.                 dis=dis+0.1
  128.                 tx=int(px+ex*dis)
  129.                 ty=int(py+ey*dis)
  130.                 if tx<0 or tx>=mx or ty<0 or ty>= my:
  131.                     hit=True
  132.                    
  133.                 else:
  134.                
  135.                     if(ma1[(tx*mx+ty)]=="x"):
  136.                         hit=True
  137.             if dis>= fd:
  138.                 hit=True
  139.                        
  140.             if hit ==True:
  141.                 if keyboard in 'UDLR':
  142.                    
  143.                     t.color("black")
  144.                     h=40-(dis*4)
  145.                     t.forward((((40-h)/2)*5))
  146.                     turtle.colormode(255)
  147.                     t.pencolor((255-(int(dis*1.2*12.75))),0,0)
  148.                    
  149.                     t.forward((h)*5)
  150.                     t.color("black")
  151.                     t.fd((((40-h)/2))*5)
  152.                        
  153.                     t.pu()
  154.                     t.goto((-300)+i*2,200)
  155.                     t.pd()
  156.                     dis=0
  157.                     hit=False
  158.                     px=loc.pos()[1]
  159.                     py=loc.pos()[0]
  160.                     pi=22/7
  161.                     radian = (loc.heading()-40)*(pi/180)
  162.                     pa=radian
  163.  
  164.         if keyboard: print keyboard
  165.         keyboard = ''  
  166.         turtle.update()
  167. while True:
  168.     turtle.ontimer(everything(),0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement