spaceinvaders.zpy (3137B)
1 (struct entity) 2 (def x:int) 3 (def y:int) 4 (def width:int) 5 (def height:int) 6 (def ofx:int) 7 (def ofy:int) 8 (def exists:bool) 9 (endstruct) 10 11 //# this checks if 2 entitys are touching 12 (defun touching bool a:entity* b:entity*) 13 (def r1:Rectangle) 14 (def r2:Rectangle) 15 16 (set r1.x a->x) 17 (set r1.y a->y) 18 (set r1.width a->width) 19 (set r1.height a->height) 20 21 (set r2.x b->x) 22 (set r2.y b->y) 23 (set r2.width b->width) 24 (set r2.height b->height) 25 (return (CheckCollisionRecs r1 r2)) 26 (endfun) 27 28 //# the main loop of the program 29 (defun main int) 30 (InitWindow 800 800 "test test") 31 (SetTargetFPS 60) 32 33 (let p:entity* (alloc (sizeof entity))) 34 (set p->x 400) 35 (set p->y 700) 36 (set p->width 50) 37 (set p->height 30) 38 (set p->ofx 25) 39 (set p->ofy 15) 40 41 (let b:entity* (alloc (sizeof entity))) 42 (set b->x 400) 43 (set b->y 700) 44 (set b->width 10) 45 (set b->height 6) 46 (set b->ofx 5) 47 (set b->ofy 3) 48 (set b->exists false) 49 50 (let b2:entity* (alloc (sizeof entity))) 51 (set b2->x 400) 52 (set b2->y 700) 53 (set b2->width 10) 54 (set b2->height 6) 55 (set b2->ofx 5) 56 (set b2->ofy 3) 57 (set b2->exists false) 58 59 (let e:entity* (alloc (sizeof entity))) 60 (set e->x 400) 61 (set e->y 100) 62 (set e->width 60) 63 (set e->height 30) 64 (set e->ofx 30) 65 (set e->ofy 15) 66 (set e->exists true) 67 68 (let ehp:int 5) 69 (let edx:int 1) 70 71 (let reload:int 0) 72 73 (for i:int 0 (= (WindowShouldClose) 0) 0) 74 (if (= ehp 0)) 75 (exit 0) 76 (elif (= e->y 700)) 77 (exit 1) 78 (endif) 79 80 (if (!= reload 0) 81 (set reload (- reload 1)) 82 (endif) 83 84 (BeginDrawing) 85 (ClearBackground BLACK) 86 (DrawRectangle (- p->x p->ofx) (+ p->y p->ofy) p->width p->height GREEN) 87 (if (= b->exists true)) 88 (DrawRectangle (- b->x b->ofx) (+ b->y b->ofy) b->width b->height BLUE) 89 (endif) 90 (if (= b2->exists true)) 91 (DrawRectangle (- b2->x b2->ofx) (+ b2->y b2->ofy) b2->width b2->height PURPLE) 92 (endif) 93 (if (= e->exists true)) 94 (DrawRectangle (- e->x e->ofx) (+ e->y e->ofy) e->width e->height RED) 95 (endif) 96 (EndDrawing) 97 98 (if (IsKeyDown KEY_LEFT)) 99 (set p->x (- p->x 6)) 100 (elif (IsKeyDown KEY_RIGHT)) 101 (set p->x (+ p->x 6)) 102 (endif) 103 104 (if (IsKeyPressed KEY_SPACE)) 105 (if (= reload 0)) 106 (if (!= b->exists true)) 107 (set b->exists true) 108 (else) 109 (set b2->exists true) 110 (endif) 111 (set reload 30) 112 (endif) 113 (endif) 114 115 (if (= b->exists true)) 116 (set b->y (- b->y 10)) 117 (if (< b->y 0)) 118 (set b->y 700) 119 (set b->exists false) 120 (endif) 121 (else) 122 (set b->x p->x) 123 (endif) 124 125 (if (touching b e)) 126 (set b->y 700) 127 (set b->exists false) 128 (set ehp (- ehp 1) 129 (if (<= ehp 0)) 130 (set e->exists false) 131 (endif) 132 (endif) 133 134 (if (= b2->exists true)) 135 (set b2->y (- b2->y 10)) 136 (if (< b2->y 0)) 137 (set b2->y 700) 138 (set b2->exists false) 139 (endif) 140 (else) 141 (set b2->x p->x) 142 (endif) 143 144 (if (touching b2 e)) 145 (set b2->y 700) 146 (set b2->exists false) 147 (set ehp (- ehp 1) 148 (if (<= ehp 0)) 149 (set e->exists false) 150 (endif) 151 (endif) 152 153 (set e->x (+ (* 4 edx) e->x) 154 (if (= e->x 800)) 155 (set edx (* edx -1) 156 (set e->y (+ e->y 10)) 157 (elif (= e->x 0)) 158 (set edx (* edx -1) 159 (set e->y (+ e->y 10)) 160 (endif) 161 162 (endfor) 163 (CloseWindow) 164 (endfun)