Changeset 108 for pycodeshooter/trunk/shooter/system.js
- Timestamp:
- 01/17/12 01:34:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pycodeshooter/trunk/shooter/system.js
r106 r108 22 22 }, 23 23 "message": null, 24 " boss": null,25 "player ": null,24 "enemies": new Array(), 25 "players": new Array(), 26 26 "backgroundObject": new Array(), 27 27 "deathPieces": new Array(), 28 "gameOver": false,29 28 "mainIntervalId": 0 30 29 }; … … 32 31 33 32 /* 34 * Tiun Tiun 33 * Tiun Tiun Utilities 35 34 */ 36 35 var DeathPiece = function(sizes, colors, x, y, dir, speed) { … … 55 54 }; 56 55 56 function addDeathPieces(x, y, sizes, colors, speed, way) { 57 if (way % 2) 58 way++; 59 60 var pieces = new Array(); 61 var angle = 0; 62 var delta = 2 / way; 63 64 for(var i = 0; i < way; i++) { 65 pieces.push(new DeathPiece(sizes, colors, x, y, angle * Math.PI, speed)); 66 angle += delta; 67 } 68 69 System.deathPieces.push(pieces); 70 } 71 72 function updateDeathPieces(ctx, width, height) { 73 var newObjs = new Array(); 74 75 for (var i = 0; i < System.deathPieces.length; i++) { 76 var pieces = System.deathPieces[i]; 77 var newPieces = new Array(); 78 79 for (var k = 0; k < pieces.length; k++) { 80 pieces[k].next(); 81 pieces[k].draw(ctx); 82 if (!pieces[k].vanished(width, height)) 83 newPieces.push(pieces[k]); 84 } 85 86 if (newPieces.length) 87 newObjs.push(newPieces); 88 } 89 90 System.deathPieces = newObjs; 91 } 92 57 93 58 94 /* 59 95 * Utility Functions 60 96 */ 97 function setMessage(elem, msg) { 98 if (elem) 99 elem.innerHTML = msg; 100 } 101 102 function addMessage(elem, msg) { 103 if (elem) 104 elem.innerHTML += msg; 105 } 106 61 107 function updateBackground(ctx, width, height, size, color, max) { 62 108 if (System.backgroundObject.length < max) { … … 68 114 69 115 var newObjs = new Array(); 116 70 117 for (var i = 0; i < System.backgroundObject.length; i++) { 71 118 System.backgroundObject[i].next(); … … 74 121 newObjs.push(System.backgroundObject[i]); 75 122 } 123 76 124 System.backgroundObject = newObjs; 77 }78 79 function updateDeathPieces(ctx, width, height, x, y, sizes, colors, speed, way) {80 if (System.deathPieces.length <= 0) {81 if (way % 2)82 way++;83 84 var angle = 0;85 var delta = 2 / way;86 87 for(i = 0; i < way; i++) {88 System.deathPieces.push(89 new DeathPiece(sizes, colors, x, y, angle * Math.PI, speed));90 angle += delta;91 }92 }93 94 var newObjs = new Array();95 for (var i = 0; i < System.deathPieces.length; i++) {96 System.deathPieces[i].next();97 System.deathPieces[i].draw(ctx);98 if (!System.deathPieces[i].vanished(width, height))99 newObjs.push(System.deathPieces[i]);100 }101 System.deathPieces = newObjs;102 103 return !System.deathPieces.length;104 125 } 105 126 … … 151 172 } 152 173 153 function updateTrooper(trooper, enemy) { 154 if (System.gameOver) { 155 trooper.clearBullet(); 156 enemy.clearBullet(); 157 158 drawString( 159 System.screen.ctx, "source-over", 160 "GAME OVER", 161 System.screen.width / 2, 162 System.screen.height / 2, 163 "#ACF", "24pt monospace", "center" 164 ); 165 } 166 else if (trooper.isDead()) { 167 trooper.clearBullet(); 168 enemy.clearBullet(); 169 170 System.gameOver = updateDeathPieces( 171 System.screen.ctx, 172 System.screen.width, 173 System.screen.height, 174 trooper.x, 175 trooper.y, 176 [6, 8, 10], ["#55F", "#AAF"], 3, 8 177 ); 178 } 179 else if (enemy.isDead()) { 180 trooper.draw(System.screen.ctx); 181 } 182 else { 183 trooper.update(enemy); 184 trooper.draw(System.screen.ctx); 185 } 186 } 187 188 function setMessage(elem, msg) { 189 if (elem) 190 elem.innerHTML = msg; 191 } 192 193 function addMessage(elem, msg) { 194 if (elem) 195 elem.innerHTML += msg; 174 function updateTrooper(trooper, enemyKey) { 175 trooper.update(System[enemyKey]); 176 177 var aliveEnemies = new Array(); 178 for (var i = 0; i < System[enemyKey].length; i++) { 179 var enemy = System[enemyKey][i]; 180 181 if (enemy.isDead()) { 182 addDeathPieces( 183 enemy.x, enemy.y, 184 [6, 8, 10], ["#55F", "#AAF"], 3, 8 185 ); 186 } 187 else { 188 aliveEnemies.push(enemy); 189 } 190 } 191 System[enemyKey] = aliveEnemies; 192 193 trooper.draw(System.screen.ctx); 194 } 195 196 function addEnemy(enemyData) { 197 var actList = EnemyActionLists[enemyData.mtime % EnemyActionLists.length]; 198 var shot = EnemyShots[enemyData.hitpoint % EnemyShots.length]; 199 var numAct = enemyData.agility % (EnemyActions.length - 1) + 1; 200 var numBlt = enemyData.skills.length % (EnemyBullets.length - 1) + 1; 201 var numBrrg = enemyData.skills.length % (EnemyBarrages.length - 1) + 1; 202 var acts = new Array(); 203 var brrgs = new Array(); 204 205 var bulletWay = Math.ceil(enemyData.concentration / 10); 206 var bulletInterval = Math.round(50 * 1 / Math.log(enemyData.skillpoint + 0.1)); 207 var bulletSize = Math.round(Math.log(enemyData.luck + 1)); 208 var bulletFrameWidth = (bulletSize + 5) * 2; 209 var bulletFrameHeight = (bulletSize + 5) * 4; 210 var bulletSpeed = enemyData.strength / 15; 211 212 bulletSpeed = Math.log(bulletSpeed < 1.5 ? 1.5 : bulletSpeed); 213 214 for (var i = 0; i < numAct; i++) { 215 var idx = (enemyData.agility + i) % EnemyActions.length; 216 acts.push(new EnemyActions[idx](new shot())); 217 } 218 219 for (var i = 0; i < numBrrg; i++) { 220 var idx = (enemyData.skillpoint + i * (enemyData.skills.length + 1)) % EnemyBarrages.length; 221 var brrgCls = EnemyBarrages[idx]; 222 223 for (var k = 0; k < numBlt; k++) { 224 var iidx = (enemyData.skills.length + i + k) % EnemyBullets.length; 225 brrgs.push( 226 new brrgCls( 227 EnemyBullets[iidx], 228 bulletSize, 229 "#FF3", 230 {"style": "rect", "color": "rgba(128,32,32,0.5)", 231 "width": bulletFrameWidth, "height": bulletFrameHeight}, 232 bulletInterval, 233 bulletSpeed, 234 bulletWay 235 ) 236 ); 237 } 238 } 239 240 var size = Math.ceil((System.screen.width / 2) * (1 / enemyData.defense)); 241 var enemy = new Trooper( 242 enemyData.name, 243 new actList(acts), 244 size, 245 size, 246 "#F33", 247 "#F33", 248 System.screen.width / 2, 249 System.screen.height / 7, 250 System.screen.width, 251 System.screen.height, 252 enemyData.hitpoint, 253 Math.log(enemyData.agility + 0.1) * 3, 254 0, 255 ["rgba(255,0,0,0.3)", "rgba(0,0,255,0.3)"], 256 brrgs 257 ); 258 259 System.enemies.push(enemy); 196 260 } 197 261 … … 219 283 220 284 // update/draw troopers 221 updateTrooper(System.player, System.boss); 222 updateTrooper(System.boss, System.player); 223 224 // draw player name/life 225 drawString( 226 System.screen.ctx, 227 "source-over", 228 System.player.name, 229 10, System.screen.height - 25, 230 "#ACF", "9pt monospace", "left" 231 ); 232 drawLifeGauge( 233 System.screen.ctx, 234 "lighter", 235 System.player, 236 10, 237 System.screen.height - 20, 238 System.screen.width 239 ); 240 241 // draw boss name/life 242 drawString( 243 System.screen.ctx, 244 "source-over", 245 System.boss.name, 10, 35, 246 "#FCA", "9pt monospace", "left" 247 ); 248 drawLifeGauge( 249 System.screen.ctx, 250 "lighter", 251 System.boss, 252 10, 253 10, 254 System.screen.width 255 ); 285 for (var i = 0; i < System.players.length; i++) { 286 var player = System.players[i]; 287 288 updateTrooper(player, "enemies"); 289 290 drawLifeGauge( 291 System.screen.ctx, 292 "lighter", 293 player, 294 10, 295 (System.screen.height - 20) - (i * 33), 296 System.screen.width 297 ); 298 299 drawString( 300 System.screen.ctx, 301 "source-over", 302 player.name, 303 10, 304 (System.screen.height - 23) - (i * 33), 305 "#ACF", "9pt monospace", "left" 306 ); 307 } 308 309 // update/draw enemies 310 for (var i = 0; i < System.enemies.length; i++) { 311 var enemy = System.enemies[i]; 312 313 updateTrooper(enemy, "players"); 314 315 drawLifeGauge( 316 System.screen.ctx, 317 "lighter", 318 enemy, 10, i * 33 + 10, 319 System.screen.width 320 ); 321 322 drawString( 323 System.screen.ctx, 324 "source-over", 325 enemy.name, 10, i * 33 + 33, 326 "#FCA", "9pt monospace", "left" 327 ); 328 } 329 330 updateDeathPieces(System.screen.ctx, 331 System.screen.width, 332 System.screen.height); 333 334 if (!System.players.length) { 335 drawString( 336 System.screen.ctx, "source-over", 337 "GAME OVER", 338 System.screen.width / 2, 339 System.screen.height / 2, 340 "#ACF", "24pt monospace", "center" 341 ); 342 } 256 343 } 257 344 … … 260 347 * Initializer 261 348 */ 262 function initGame(canvas, msg, bossId, bossData,playerData) {349 function initGame(canvas, msg, playerData) { 263 350 System.screen.canvas = canvas; 264 351 System.message = msg; … … 283 370 ); 284 371 285 System.player =new Trooper(372 System.players.push(new Trooper( 286 373 playerData.name, 287 374 new ActionList([new ManualAction(new ManualShot())]), … … 322 409 playerData.shotlevel + 2, 323 410 -0.5)] 324 ); 325 326 var actList = EnemyActionLists[bossData.mtime % EnemyActionLists.length]; 327 var shot = EnemyShots[bossData.hitpoint % EnemyShots.length]; 328 var numAct = bossData.agility % (EnemyActions.length - 1) + 1; 329 var numBlt = bossData.skills.length % (EnemyBullets.length - 1) + 1; 330 var numBrrg = bossData.skills.length % (EnemyBarrages.length - 1) + 1; 331 var acts = new Array(); 332 var brrgs = new Array(); 333 334 var bulletWay = Math.ceil(bossData.concentration / 10); 335 var bulletInterval = Math.round(50 * 1 / Math.log(bossData.skillpoint + 0.1)); 336 var bulletSize = Math.round(Math.log(bossData.luck + 1)); 337 var bulletFrameWidth = (bulletSize + 5) * 2; 338 var bulletFrameHeight = (bulletSize + 5) * 4; 339 var bulletSpeed = bossData.strength / 15; 340 bulletSpeed = Math.log(bulletSpeed < 1.5 ? 1.5 : bulletSpeed); 341 342 setMessage(System.message, ""); 343 addMessage(System.message, " bulletWay:" + String(bulletWay) + "<br>"); 344 addMessage(System.message, " bulletInterval:" + String(bulletInterval) + "<br>"); 345 addMessage(System.message, " bulletSize:" + String(bulletSize) + "<br>"); 346 addMessage(System.message, " bulletSpeed:" + String(bulletSpeed) + "<br>"); 347 348 addMessage(System.message, "ActionsIdx:"); 349 350 for (var i = 0; i < numAct; i++) { 351 var idx = (bossData.agility + i) % EnemyActions.length; 352 acts.push(new EnemyActions[idx](new shot())); 353 354 addMessage(System.message, String(idx) + "(" + 355 String(bossData.hitpoint % EnemyShots.length) + "),"); 356 } 357 358 addMessage(System.message, "<br>"); 359 360 for (var i = 0; i < numBrrg; i++) { 361 var idx = (bossData.skillpoint + i * (bossData.skills.length + 1)) % EnemyBarrages.length; 362 var brrgCls = EnemyBarrages[idx]; 363 364 addMessage(System.message, 365 "BarragesIdx:" + String(idx) + " / BulletsIdx:"); 366 367 for (var k = 0; k < numBlt; k++) { 368 var iidx = (bossData.skills.length + i + k) % EnemyBullets.length; 369 brrgs.push( 370 new brrgCls( 371 EnemyBullets[iidx], 372 bulletSize, 373 "#FF3", 374 {"style": "rect", "color": "rgba(128,32,32,0.5)", 375 "width": bulletFrameWidth, "height": bulletFrameHeight}, 376 bulletInterval, 377 bulletSpeed, 378 bulletWay 379 ) 380 ); 381 382 addMessage(System.message, String(iidx) + ","); 383 } 384 385 addMessage(System.message, "<br>"); 386 } 387 388 var size = Math.ceil((System.screen.width / 2) * (1 / bossData.defense)); 389 size = size < playerData.size ? playerData.size : size; 390 System.boss = new Trooper( 391 bossData.name, 392 new actList(acts), 393 size, 394 size, 395 "#F33", 396 "#F33", 397 System.screen.width / 2, 398 System.screen.height / 7, 399 System.screen.width, 400 System.screen.height, 401 bossData.hitpoint, 402 Math.log(bossData.agility + 0.1) * 3, 403 0, 404 ["rgba(255,0,0,0.3)", "rgba(0,0,255,0.3)"], 405 brrgs 406 ); 411 )); 407 412 408 413 System.backgroundObject = new Array();
Note: See TracChangeset
for help on using the changeset viewer.