spaceinvaders.zpy (3124B)
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 (if (!= reload 0) 80 (set reload (- reload 1)) 81 (endif) 82 83 (BeginDrawing) 84 (ClearBackground BLACK) 85 (DrawRectangle (- p->x p->ofx) (+ p->y p->ofy) p->width p->height GREEN) 86 (if (= b->exists true)) 87 (DrawRectangle (- b->x b->ofx) (+ b->y b->ofy) b->width b->height BLUE) 88 (endif) 89 (if (= b2->exists true)) 90 (DrawRectangle (- b2->x b2->ofx) (+ b2->y b2->ofy) b2->width b2->height PURPLE) 91 (endif) 92 (if (= e->exists true)) 93 (DrawRectangle (- e->x e->ofx) (+ e->y e->ofy) e->width e->height RED) 94 (endif) 95 (EndDrawing) 96 97 (if (IsKeyDown KEY_LEFT)) 98 (set p->x (- p->x 6)) 99 (elif (IsKeyDown KEY_RIGHT)) 100 (set p->x (+ p->x 6)) 101 (endif) 102 103 (if (IsKeyPressed KEY_SPACE)) 104 (if (= reload 0)) 105 (if (!= b->exists true)) 106 (set b->exists true) 107 (else) 108 (set b2->exists true) 109 (endif) 110 (set reload 30) 111 (endif) 112 (endif) 113 114 (if (= b->exists true)) 115 (set b->y (- b->y 10)) 116 (if (< b->y 0)) 117 (set b->y 700) 118 (set b->exists false) 119 (endif) 120 (else) 121 (set b->x p->x) 122 (endif) 123 124 (if (touching b e)) 125 (set b->y 700) 126 (set b->exists false) 127 (set ehp (- ehp 1) 128 (if (<= ehp 0)) 129 (set e->exists false) 130 (endif) 131 (endif) 132 133 (if (= b2->exists true)) 134 (set b2->y (- b2->y 10)) 135 (if (< b2->y 0)) 136 (set b2->y 700) 137 (set b2->exists false) 138 (endif) 139 (else) 140 (set b2->x p->x) 141 (endif) 142 143 (if (touching b2 e)) 144 (set b2->y 700) 145 (set b2->exists false) 146 (set ehp (- ehp 1) 147 (if (<= ehp 0)) 148 (set e->exists false) 149 (endif) 150 (endif) 151 152 (set e->x (+ (* 4 edx) e->x) 153 (if (= e->x 800)) 154 (set edx (* edx -1) 155 (set e->y (+ e->y 10)) 156 (elif (= e->x 0)) 157 (set edx (* edx -1) 158 (set e->y (+ e->y 10)) 159 (endif) 160 161 (endfor) 162 (CloseWindow) 163 (endfun)