Недавно я пытался написать более простую версию Doom для Wolfstein в стиле Wolfstein для HP Prime Graphing Calculator. Я использовал Python для этого и успешно получил простую 3D -работу с помощью RayCasting. Тем не менее, графический калькулятор быстро вылетает через несколько секунд после запуска программы. После некоторого устранения неполадок, кажется, что оперативная память калькулятора полностью исчерпана. Я пытался возиться с сбором мусора, но когда порог корректируется, он часто запускает ошибки, по -видимому, удаляя фактические объекты, используемые в коде, такие как функции. немного помог, но это не хорошее решение из -за тяжелого количества времени, которое займет большое количество лучей.#PYTHON Doom
import math
import hpprime
from builtins import *
grid = [
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
]
class Player:
def __init__(self,hp,x,y,r,fov=(60),density=10):
self.hp = hp
self.x = x
self.y = y
self.r = r
self.density = density
self.fov = fov * math.pi/180
self.fov2 = self.fov/2
self.fov3 = (self.fov/self.density)
def cast(self):
res = []
for i in range(self.density):
tmp = Ray(self.x,self.y,(self.r-self.fov2)+(self.fov3*i),0.2)
tmp.seek()
res.append(math.sqrt(((tmp.x-self.x)**2)+( (tmp.y-self.y)**2))*math.cos(tmp.r-self.r))
return res
class Ray:
def __init__(self,x,y,r,i):
self.x = x
self.y = y
self.r = r
self.i = i
self.sr = math.sin(self.r) * self.i
self.cr = math.cos(self.r) * self.i
def step(self):
self.x -= self.sr
self.y -= self.cr
if (self.x > len(grid[0])-1) or (self.y > len(grid)-1) or (self.x < 0) or (self.y < 0):
return True #ray is out of bounds
if grid[int(self.y)][int(self.x)] == 1:
return True
return False
def seek(self):
tmp = self.step()
while not tmp:
tmp = self.step()
hpprime.eval("WAIT(0.0003);")
return tmp
hpprime.dimgrob(1,320,240,0)
e = Player(100,3,3,0)
e320 = 320/e.density
while True:
hpprime.eval("WAIT(0.015);")
hits = e.cast()
p = []
p2 = []
for t in hits:
c+=1
p.append((8-(t))*12)
b = (t*30)*(t/10)
if b > 255:
b = 255
if b < 0:
b = 0
p2.append(b)
for i in range(e.density-1):
x0= (e320)*(i+0.5)
y0= 120+p
x1= (e320)*(i+1.5)
y1= 120+p[i+1]
x2= (e320)*(i+1.5)
y2= 120-p[i+1]
x3= (e320)*(i+0.5)
y3= 120-p
co1=[x0,y0,x1,y1,x2,y2,x3]
co2=""
for v in co1:
co2+=str(v)
co2+=","
co2+=str(y3)
del co1
#end
EXPORT DOOM()
BEGIN
PYTHON(Doom);
END;
Подробнее здесь: https://stackoverflow.com/questions/796 ... calculator
Raycasting периодически сбоят HP Prime Calculator [закрыто] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблемы с Raycasting, это работает только в некотором направлении [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-