闲谈-从35行的贪吃蛇说起

明天就是上学期的最后一门考试了(感觉哪里怪怪的XD),考完以后白天就闲下来,可以做自己的事情了。本来小学期计划好多的说,结果这么快已经过半了,选上了某老师的linux课,说是上三周课(一周两次),结果第三次上课了有个妹子还没装linux_(:3JL)_。所以只能靠自己了,两本鸟哥看完半本了,然并卵,都是会的,估计不会的都在剩下的部分里面。

打算上一门函数式编程的,在上一篇已经说过了,选定了clojure,在图书馆借了一本《clojure程序设计》,被里面提到的35行贪吃蛇吓哭了。

代码:

       
      
      
      
1
2
3
4
5
6
7
8
9
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
       
      
      
      
( import '( java.awt Color) '( javax.swing JPanel JFrame Timer)
'( java.awt.event KeyEvent ActionListener KeyListener))
( defn gen-apple [_] [( rand-int 750) ( rand-int 550)])
( defn move [{ :keys [body dir] :as snake} & grow]
( assoc snake :body ( cons ( vec ( map #( + ( dir %) (( first body) %)) [ 0 1]))
( if grow body ( butlast body)))))
( defn turn [snake newdir] ( if newdir ( assoc snake :dir newdir) snake))
( defn collision? [{[b] :body} a]
( every? #( <= ( - ( a %) 10) ( b %) ( + 10 ( a %))) [ 0 1]))
( defn paint [g p c] ( .setColor g c) ( .fillRect g ( p 0) ( p 1) 10 10))
( def dirs {KeyEvent/VK_LEFT [ -10 0] KeyEvent/VK_RIGHT [ 10 0]
KeyEvent/VK_UP [ 0 大专栏  闲谈-从35行的贪吃蛇说起ass="number">-10] KeyEvent/VK_DOWN [ 0 10]})
( def apple ( atom ( gen-apple nil)))
( def snake ( atom { :body ( list [ 10 10]) :dir [ 10 0]}))
( def colors { :apple ( Color. 210 50 90) :snake ( Color. 15 160 70)})
( def panel ( proxy [JPanel ActionListener KeyListener] []
( paintComponent [g] ( proxy-super paintComponent g)
( paint g @apple ( colors :apple))
( doseq [p ( :body @snake)]
( paint g p ( colors :snake))))
( actionPerformed [e] ( if ( collision? @snake @apple)
( do ( swap! apple gen-apple)
( swap! snake move :grow))
( swap! snake move))
( .repaint this))
( keyPressed [e] ( swap! snake turn ( dirs ( .getKeyCode e))))
( keyReleased [e])
( keyTyped [e])))
( doto panel ( .setFocusable true)( .addKeyListener panel))
( doto ( JFrame. "Snake")( .add panel)( .setSize 800 600)( .setVisible true))
( .start ( Timer. 75 panel))

游戏截图:

嗯……教练我要学lisp……(然而我写的clojure都是命令式的我会乱说?)

除了lisp,原本打算处理的课程还有编译器(然而根本看不懂,你们能不能讲点实际的啊摔),现在打算放弃了,过段时间再看,因为找到了貌似更好玩的opengl,图形学板载!


本博的原创作品作品采用知识共享署名 2.5 中国大陆许可协议 进行许可,欢迎转载,但转载请注明出处,并保持转载后文章内容的完整。
本文链接:http://fallenwood.github.io/2015/07/14/35-lines-snake/

你可能感兴趣的:(闲谈-从35行的贪吃蛇说起)