-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdriver.bak
More file actions
135 lines (113 loc) · 3.61 KB
/
Copy pathdriver.bak
File metadata and controls
135 lines (113 loc) · 3.61 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#lang racket
(require lang/posn)
(require 2htdp/image)
(require 2htdp/universe)
;(include main file here)
;enemy tank
find good guy()
make sure enemy is not in the way
get location
fire
Random Movement( Enemies )
(map
(lamnda ( enemny )
(if (= alive #t)
( )
( )
)
)
Enemies
)
sort through enemies unitl they all die or end of level --
if current enemy is alive
yes
is clock running ?
yes
\\wait until time frame is complete
if time <= 1
set clock running value false
decrease time
execute movement
no
choose a random time for clock between acceptable times
choose a random movement (acceptable speeds)
no enemy is dead check for next.
)
(define E-sprite (scale 2 (bitmap/file (build-path ImgDir "P1_tank.png"))))
(define (make-etank pos angle pnum)
(define tank (make-entity (rotate angle sprite) #t pos angle pnum))
(define speed 0)
(define trn-spd 10)
(define spd-up #f)
(define slw-dwn #f)
(define trn-l #f)
(define trn-r #f)
(define clockRunning #f)
(define time 0)
(define alive #t)
(define health 5)
;; taken from player class
(define (move-tank)
(define (inbounds x y)
(cond ((< x 0) (set! x (+ x WIDTH)))
((> x WIDTH) (set! x (- x WIDTH))))
(cond ((< y 0) (set! y (+ y HEIGHT)))
((> y HEIGHT) (set! y (- y HEIGHT))))
((tank 'set-x) x)
((tank 'set-y) y))
(inbounds (inexact->exact (round (+ (tank 'x)
(* speed (cos (deg-to-rad (tank 'dir)))))))
(inexact->exact (round (+ (tank 'y)
(* speed (sin (deg-to-rad (tank 'dir)))))))))
(define (accelerate)
(cond ((< speed 10) (set! speed (+ speed 1))))
(move-tank))
(define (decelerate)
(cond ((> speed -10) (set! speed (- speed 1))))
(move-tank))
(define (coast)
(cond ((< speed 0) (set! speed (+ speed 1)))
((> speed 0) (set! speed (- speed 1))))
(move-tank))
(define (turn-right)
(if (> (+ (tank 'dir) trn-spd) 360)
((tank 'set-dir) (- (+ (tank 'dir) trn-spd) 360))
((tank 'set-dir) (+ (tank 'dir) trn-spd)))
((tank 'set-spr) (* -1 trn-spd)))
(define (turn-left)
(if (< (- (tank 'dir) trn-spd) 0)
((tank 'set-dir) (+ (- (tank 'dir) trn-spd) 360))
((tank 'set-dir) (- (tank 'dir) trn-spd)))
((tank 'set-spr) trn-spd))
(define (shoot)
(set! projectiles (append projectiles (list (make-projectile (tank 'pnum))))))
(define (update)
(cond ((and spd-up (not slw-dwn)) (accelerate))
((and (not spd-up) slw-dwn) (decelerate))
((and (not spd-up) (not slw-dwn)) (coast)))
(cond ((and trn-l (not trn-r)) (turn-left))
((and (not trn-l) trn-r) (turn-right))))
(define (dispatch obj)
(cond ((eq? obj 'update) update)
((eq? obj 'spd-up) (set! spd-up #t) (set! slw-dwn #f))
((eq? obj 'slw-dwn) (set! spd-up #f) (set! slw-dwn #t))
((eq? obj 'coast) (set! spd-up #f) (set! slw-dwn #f))
((eq? obj 'turn-left) (set! trn-l #t) (set! trn-r #f))
((eq? obj 'turn-right) (set! trn-l #f) (set! trn-r #t))
((eq? obj 'stop-turn) (set! trn-l #f) (set! trn-r #f))
((eq? obj 'fire) (begin (shoot)))
(else (tank obj))))
dispatch)
)
(define (CreateEnemies amount)
(if (< amount 1)
()'
(cons (make-etank E-sprite (cons (random 1 800) (random 1 900)) (random 0 360) 0) (CreateEnemies (- amount 1) ))
)
)
(define (amountOfenemies level)
(if (= level 0 )
(amountOfenemies 1)
(* level 10)
)
)