diff --git a/TODO.org b/TODO.org index 8e04bf3..adc473a 100644 --- a/TODO.org +++ b/TODO.org @@ -4,7 +4,7 @@ A flappy bird clone to get experience with Common Lisp and game development. -* Game Plan [9/15] +* Game Plan [10/15] - [X] Create bird, well, ball - [X] Add physics for ball movement - [X] Add inputs on key and mouse clicks @@ -14,11 +14,11 @@ A flappy bird clone to get experience with Common Lisp and game development. - [X] Add regression tests - [X] Add background - [X] Create random pipes -- [ ] Add goal after last pipe +- [X] Add goal after last pipe - [ ] Create state machine to manage start/play/finish -- [ ] Create different levels - [ ] Add scores - [ ] Add high scores - [ ] Package for Mac/Linux/(Windows?) +- [ ] Create different levels diff --git a/assets/level1/prize.png b/assets/level1/prize.png new file mode 100644 index 0000000..66a089c Binary files /dev/null and b/assets/level1/prize.png differ diff --git a/assets/level1/prize.xcf b/assets/level1/prize.xcf new file mode 100644 index 0000000..a1f4e29 Binary files /dev/null and b/assets/level1/prize.xcf differ diff --git a/flappy-ball.lisp b/flappy-ball.lisp index 1546dd2..c324b78 100644 --- a/flappy-ball.lisp +++ b/flappy-ball.lisp @@ -93,7 +93,7 @@ ;; ------------------------------------------------------------- -(defun draw_image_layer(resource scroll-x) +(defun draw-image-layer(resource scroll-x) (let ((pic (load-resource resource)) (offset (mod scroll-x 960)) ) @@ -101,16 +101,16 @@ :x 0 :y 0 :width 960 :height 540))) -(defun draw_background (scroll-x) - (draw_image_layer "assets/level1/sky.png" 0) - (draw_image_layer "assets/level1/clouds.png" (* -0.15 scroll-x)) - (draw_image_layer "assets/level1/far.png" (* 0.25 scroll-x)) - (draw_image_layer "assets/level1/middle.png" (* 0.6 scroll-x))) +(defun draw-background (scroll-x) + (draw-image-layer "assets/level1/sky.png" 0) + (draw-image-layer "assets/level1/clouds.png" (* -0.15 scroll-x)) + (draw-image-layer "assets/level1/far.png" (* 0.25 scroll-x)) + (draw-image-layer "assets/level1/middle.png" (* 0.6 scroll-x))) -(defun draw_foreground (pipes scroll-x pipe-pen height) +(defun draw-foreground (pipes scroll-x pipe-pen height) (dolist (pipe pipes) (pipe-draw pipe pipe-pen scroll-x height)) - (draw_image_layer "assets/level1/ground.png" scroll-x)) + (draw-image-layer "assets/level1/ground.png" scroll-x)) (defun random-pipes (n spacing max-height gap width) (let ((padding 25)) @@ -132,18 +132,25 @@ (ball-pen (make-pen :stroke (gray 0.5) :fill sketch:+yellow+ :weight 1)) (collision-pen (make-pen :stroke (gray 0.5) :fill sketch:+red+ :weight 1)) (pipe-pen (make-pen :stroke (gray 0.5) :fill sketch:+green+ :weight 1)) - (pipes (random-pipes 15 200 ground-level 100 20)) + (pipes-amount 5) + (pipes-spacing 200) + (pipes (random-pipes pipes-amount pipes-spacing ground-level 100 20)) (scroll-x 0.0) - (scroll-speed 0.2)) + (scroll-speed 0.2) + (target-x (- (* pipes-amount pipes-spacing) 720))) - (draw_background scroll-x) - (draw_foreground pipes scroll-x pipe-pen height) + (draw-background scroll-x) + (draw-foreground pipes scroll-x pipe-pen height) (ball-draw ball (if (some (lambda (pipe) (pipe-collides pipe ball scroll-x)) pipes) collision-pen ball-pen)) - + + (if (>= scroll-x target-x) + (let ((pic (load-resource "assets/level1/prize.png"))) + (draw pic :x (- (+ 960 target-x) scroll-x) :y 0 ))) + (setf scroll-x (+ scroll-x scroll-speed)) (setf ball (ball-move ball gravity ground-level)))