- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
import System.Exit
import Graphics.UI.GLUT
import Control.Monad
import Control.Applicative
import Control.Arrow
import Control.Concurrent
import Graphics.Rendering.OpenGL
import Data.IORef
import Data.List
import Data.Maybe
initial = ((0,0),(0.005,-0.03),(0,0),([(-0.4,-0.9),(-0.4,-0.85),(0.4,-0.85),(0.4,-0.9),(-0.4,-0.9)],(0,0)),liftM2 (,) [-0.9,-0.7..0.9] [0.5,0.7,0.9])
ws = dzip [(-1,-1),(-1,1),(1,1),(1,-1)] ; r = 0.1 :: GLfloat
main = initialWindowSize $= Size 777 777 >> initialWindowPosition $= Position 100 100 >> initialDisplayMode $= [DoubleBuffered] >> createWindow "ursula" >>
newIORef initial >>= \ior -> keyboardMouseCallback $= Just (kbd ior) >> displayCallback $= dlay ior >> idleCallback $= Just (anime ior) >> mainLoop
dlay ior = clearColor $= Color4 1 1 1 1 >> clear [ColorBuffer] >> readIORef ior >>= drawDoxyq >> swapBuffers
kbd _ (Char 'q') Down _ _ = exitWith ExitSuccess
kbd s (Char x) Down _ _ = modifyIORef' s $ \(a,b,t,(d,e),cs) -> (a,b,t,(d,(if x == '[' then -0.05 else if x == ']' then 0.05 else fst e,0)),cs)
kbd _ _ _ _ _ = return ()
draw c = renderPrimitive c . mapM_ (vertex . uncurry Vertex2)
touch xy s xy' = guard ((xy ==== xy') <= r+r && (s .*. (xy.-.xy')) <= 0) >> Just (xy.-.xy')
drawDoxyq ((x,y),_,(t,_),(bd,_),cs) = currentColor $= Color4 0.3 0.4 0.8 0 >> mapM_ (mapM_ (draw LineLoop) . sta) cs >>
currentColor $= Color4 0.7 0.1 0.2 1 >> mapM_ (draw LineStrip) swa >> currentColor $= Color4 0 0 0 1 >> draw Polygon bd where
swa = [[(x,y),(x + r/1.8*cos (th+pi/4),y + r/1.8*sin (th+pi/4)),(x + r/1.2*cos th,y + r/1.2*sin th)] | th <- [t,t+pi/2..t+1.6*pi]]
sta (x,y) = [[(x,y+r/2),(x-r/2,y-r/2),(x+r/2,y-r/2)],[(x+r/2,y+r/2-0.03),(x-r/2,y+r/2-0.03),(x,y-r/2-0.03)]]
frame (xy,v,(tt,tr),(b,s),cs) = if snd xy <= r-0.99 || null cs then error "GAME OVER" else (xy.+.v',v',(tt+tr',tr'),(b',s'),cs') where
v' = listy v (\us -> rV (2*negv v .>. foldl1' (.+.) us + tr/11) $ negv v) $ mapMaybe (cutSect xy v) (ws ++ dzip b') ++ mapMaybe (touch xy v) cs
s' = 0.93 *. if any ((1<=) . (*signum (fst s)) . fst) b then negv s else s
b' = map (.+.s') b ; cs' = filter (isNothing . touch xy v) cs
tr' = if v .=. v' then tr else (v' .>. v)/19
listy d f x = if null x then d else f x
rV t (x,y) = (x*cos t - y*sin t,y*cos t + x*sin t)
anime ior = modifyIORef' ior frame >> threadDelay 30000 >> postRedisplay Nothing
cutSect xy s c@(u,v) = guard (xy ./ l <= r && w `oncut` c && (s .*. (xy.-.w)) <= 0) >> Just (xy.-.w) where
l = ln u (u.-.v) ; w = xy .-| l
oncut u (v,w) = 0 <= (u.-.v) .*. (w.-.u) && 0 <= (u.-.w) .*. (u.-.w) && ((u.-.w) .<>. (v.-.w)) # 0
ln xy w = (snd w,-fst w,w.<>.xy)
(x,y) .-| (a,b,c) = ((b^2*x - a*c - a*b*y)/(a^2 + b^2),-(b*c + a*b*x - a^2*y)/(a^2 + b^2))
p ./ ln = p ==== p .-| ln ; pop f (a,b) (c,d) = (f a c,f b d)
(.+.) = pop (+) ; (.-.) = pop (-) ; (.=.) = (uncurry (&&) .) . pop (#)
(*.) = tmap . (*) ; (.*.) = (uncurry (+) .) . pop (*)
(.<>.) = (uncurry (-) .) . (. uncurry (flip (,))) . pop (*) ; v .>. u = atan2 (v .<>. u) (v .*. u)
norm = sqrt . join (.*.) ; a ==== b = norm $ a.-.b ; negv = tmap negate
infix 4 #,*. ; infix 3 .+.,==== ; infix 8 .>.
x # y = abs (x-y) < 0.00001 ; tmap = join (***)
dzipWith = (<*> drop 1) . zipWith ; dzip = dzipWith (,)
Abbath 22.04.2014 19:22 # +6
guest8 14.05.2020 23:04 # −999
guest8 14.05.2020 23:05 # −999
LispGovno 22.04.2014 19:22 # +4
LispGovno 22.04.2014 19:32 # +3
1) его неопытность - человек просто не умеет писать программы. Использует всякого рода функциональные плюшки там где они не уместны. Например АТД или туплы. В то время как нужны например объекты. Или адское поинт фри, да комбинаторы.
2) функциональный калека - он начинает просто из-за того что это круто использовать всегда и везде всякого рода катаморфизмы и комбинаторы из разряда бесполезных.
GovnoGovno 24.04.2014 06:24 # +6
LispGovno 24.04.2014 12:27 # +1
Ты ведь тот второй, что HaskellGovno или тот гуест, что на тему функциональщины отписывается все время или Yuuri или очередной аспект Борманда?
GovnoGovno 24.04.2014 13:09 # +1
нет нет
MAKAKA 14.05.2020 15:25 # 0
MAKAKA 08.07.2020 05:24 # 0
nemyx 08.07.2020 11:12 # 0
kcalbCube 27.05.2022 04:52 # 0
brutushafens 22.04.2014 19:54 # +5
guest 22.04.2014 21:40 # +1
Elvenfighter 23.04.2014 00:56 # +3
Fai 23.04.2014 05:15 # +1
GovnoGovno 24.04.2014 03:48 # +3
wvxvw 23.04.2014 10:21 # 0
3Doomer 23.04.2014 11:32 # +4
TarasB 23.04.2014 11:45 # −1
roman-kashitsyn 23.04.2014 11:50 # +4
TarasB 23.04.2014 11:59 # +1
Если б не подходил, не был бы таким говном.
Abbath 25.04.2014 20:09 # +3
guest8 14.05.2020 23:07 # −999
GovnoGovno 24.04.2014 03:34 # +1
LispGovno 24.04.2014 12:28 # +1
GovnoGovno 24.04.2014 13:08 # +1
так запусти же
с сейчасной платформой работает
roman-kashitsyn 24.04.2014 13:21 # +3
Ubuntu 14.04, ghc 7.6.3, haskell-platform-2013.2.0.0.debian3
Не самая свежатина, но не из репы ставить лень. Так что лучше почини код.
roman-kashitsyn 24.04.2014 13:29 # +3
GovnoGovno 24.04.2014 13:32 # +2
выход q
roman-kashitsyn 24.04.2014 13:37 # +2
GovnoGovno 24.04.2014 13:30 # +1
я хз что за glutInit
пробуй:
http://ideone.com/YXBWZ7
14. строчка
roman-kashitsyn 24.04.2014 13:32 # +4
LOL ржу нимагу
MAuCKuu_nemyx 01.05.2021 22:24 # 0
guest8 14.05.2020 23:07 # −999
ropuJIJIa 15.05.2020 12:15 # 0
_PHP_ 01.05.2021 21:11 # +1