フルーツ王子(シンプルアクションゲーム)のプログラムを公開します。
【ご注意】
・本プログラムの動作等に関する質問にはお答えできません。
・本プログラムの使用により、何らかの障害が発生した場合にも、当方は一切の責任を負いません。
・本プログラムの転載、二次配布を禁止します。
→トップページ(ゲーム)に戻る
スポンサードリンク
↑制作の際、この本を参考にしました。
<body oncontextmenu='return false;'> <!-- Android端末で長押しした時に「画像を保存」等のメニューを表示させないための処理 -->
<!-- 背景タイル -->
<div id="background" style="position: absolute; left: 0px; top: 0px; width: 540; height: 540px; background-image: url(ground.jpg);">
</div>
<!-- フルーツ -->
<div id="div_fruit0" style="position: absolute; left: -60px; top: -60px;">
<img src="strawberry.gif" id="img_fruit0" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit1" style="position: absolute; left: -60px; top: -60px;">
<img src="orange.gif" id="img_fruit1" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit2" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit2" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit3" style="position: absolute; left: -60px; top: -60px;">
<img src="pear.gif" id="img_fruit3" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit4" style="position: absolute; left: -60px; top: -60px;">
<img src="banana.gif" id="img_fruit4" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit5" style="position: absolute; left: -60px; top: -60px;">
<img src="grape.gif" id="img_fruit5" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit6" style="position: absolute; left: -60px; top: -60px;">
<img src="peach.gif" id="img_fruit6" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit7" style="position: absolute; left: -60px; top: -60px;">
<img src="pineapple.gif" id="img_fruit7" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit8" style="position: absolute; left: -60px; top: -60px;">
<img src="watermelon.gif" id="img_fruit8" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit9" style="position: absolute; left: -60px; top: -60px;">
<img src="melon.gif" id="img_fruit9" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit10" style="position: absolute; left: -60px; top: -60px;">
<img src="item0.gif" id="img_fruit10" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit11" style="position: absolute; left: -60px; top: -60px;">
<img src="item1.gif" id="img_fruit11" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit12" style="position: absolute; left: -60px; top: -60px;">
<img src="item2.gif" id="img_fruit12" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit13" style="position: absolute; left: -60px; top: -60px;">
<img src="item3.gif" id="img_fruit13" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit14" style="position: absolute; left: -60px; top: -60px;">
<img src="item4.gif" id="img_fruit14" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit15" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit15" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit16" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit16" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit17" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit17" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit18" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit18" style="width: 60px; height: 60px;">
</div>
<div id="div_fruit19" style="position: absolute; left: -60px; top: -60px;">
<img src="apple.gif" id="img_fruit19" style="width: 60px; height: 60px;">
</div>
<!-- タコ -->
<div id="div_octopus0" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus0" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus1" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus1" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus2" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus2" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus3" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus3" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus4" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus4" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus5" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus5" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus6" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus6" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus7" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus7" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus8" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus8" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus9" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus9" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus10" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus10" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus11" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus11" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus12" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus12" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus13" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus13" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus14" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus14" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus15" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus15" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus16" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus16" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus17" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus17" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus18" style="position: absolute; left: -60px; top: -60px;">
<img src="octopus.gif" id="img_octopus18" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus19" style="position: absolute; left: -60px; top: -60px;">
<img src="item5.gif" id="img_octopus19" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus20" style="position: absolute; left: -60px; top: -60px;">
<img src="item4.gif" id="img_octopus20" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus21" style="position: absolute; left: -60px; top: -60px;">
<img src="item3.gif" id="img_octopus21" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus22" style="position: absolute; left: -60px; top: -60px;">
<img src="item2.gif" id="img_octopus22" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus23" style="position: absolute; left: -60px; top: -60px;">
<img src="ground_bright.jpg" id="img_octopus23" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus24" style="position: absolute; left: -60px; top: -60px;">
<img src="ground_dark.jpg" id="img_octopus24" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus25" style="position: absolute; left: -60px; top: -60px;">
<img src="king_right_flash.gif" id="img_octopus25" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus26" style="position: absolute; left: -60px; top: -60px;">
<img src="king_left_flash.gif" id="img_octopus26" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus27" style="position: absolute; left: -60px; top: -60px;">
<img src="king_left.gif" id="img_octopus27" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus28" style="position: absolute; left: -60px; top: -60px;">
<img src="bee_left.gif" id="img_octopus28" style="width: 60px; height: 60px;">
</div>
<div id="div_octopus29" style="position: absolute; left: -60px; top: -60px;">
<img src="prince_left.gif" id="img_octopus29" style="width: 60px; height: 60px;">
</div>
<!-- キング -->
<div id="div_king" style="position: absolute; left: -60px; top: -60px;">
<img src="king_right.gif" id="img_king" style="width: 60px; height: 60px;">
</div>
<!-- アイテム -->
<div id="div_item" style="position: absolute; left: -60px; top: -60px;">
<img src="item1.gif" id="img_item" style="width: 60px; height: 60px;">
</div>
<!-- ビッグフルーツ -->
<div id="div_bigfruit" style="position: absolute; left: -120px; top: -120px;">
<img src="strawberry.gif" id="img_bigfruit" style="width: 120px; height: 120px;">
</div>
<!-- ハチ -->
<div id="div_bee" style="position: absolute; left: -60px; top: -60px;">
<img src="bee_right.gif" id="img_bee" style="width: 60px; height: 60px;">
</div>
<!-- 王子 -->
<div id="div_prince" style="position: absolute; left: -60px; top: -60px;">
<img src="prince_right.gif" id="img_prince" style="width: 60px; height: 60px;">
</div>
<!-- 無敵リング -->
<div id="div_muteki" style="position: absolute; left: -60px; top: -60px;">
<img src="muteki.gif" id="img_muteki" style="width: 60px; height: 60px;">
</div>
<!-- スタート矢印 -->
<div id="div_arrows" style="position: absolute; left: -60px; top: -60px; opacity: 0;">
<img src="arrows.gif" id="img_arrows" style="width: 180px; height: 180px;">
</div>
<!-- フルーツ得点表示用 -->
<div id="div_fruitscore" style="position: absolute; left: -180px; top: -60px; width: 180px; text-align: center;">
<span id="fruitscore"></span>
</div>
<!-- ダメージ表示用 -->
<div id="div_damage" style="position: absolute; left: -180px; top: -60px; width: 180px; text-align: center; color: red;">
<span id="damage1"></span>
</div>
<!-- アイテム表示用 -->
<div id="div_item_hyoji" style="position: absolute; left: -180px; top: -60px; width: 180px; text-align: center; color: blue;">
<span id="item1"></span>
</div>
<!-- ビッグフルーツ得点表示用 -->
<div id="div_bigfruitscore" style="position: absolute; left: -180px; top: -60px; width: 180px; text-align: center; font-size: 150%;">
<span id="bigfruitscore"></span>
</div>
<!-- トップ画面表示用 -->
<div id="div_title" style="position: absolute; left: 0px; top: 55px; width: 540px; text-align: center; opacity: 1;">
<img src="title.gif" id="title" style="margin-bottom: 0px; width: 500px;"><br>
<!-- -webkit-text-size-adjust: 100%; はiPhoneのテキストサイズ自動調整によるレイアウト崩れを防ぐもの -->
<p style="line-height: 1.2; -webkit-text-size-adjust: 100%;"><span id="title_contents">【 ゲームの遊び方 】<br>
スペースキーまたは画面下の「START」ボタンでゲームスタート<br>
ゲーム中は馬に乗った王子をカーソルキーで操作<br>
タコやハチを避けながらフルーツを集めまくって得点を稼ごう!</span><br>
<br>
Copyright(C) 2016 <a href="//kunisan.jp/" target="_blank">KUNISAN.JP</a>. All Rights Reserved.</p>
</div>
<!-- ゲームオーバー表示用 -->
<div id="div_gameover" style="position: absolute; left: 0px; top: 229px; width: 540px; text-align: center; opacity: 0;">
<img src="gameover.gif" id="gameover" style="width: 400px;">
</div>
<!-- スコア、ライフ表示 -->
<div style="position: absolute; left: 10px; top: 540px;">
BEST SCORE: <span id="text_highscore">0</span>
</div>
<div style="position: absolute; left: 220px; top: 540px;">
YOUR SCORE: <span id="text_score">0</span>
</div>
<div style="position: absolute; left: 460px; top: 540px;">
LIFE: <span id="text_princelife">0</span>
</div>
<!-- カーソルボタン用 -->
<div id="div_button_up" style="position: absolute; left: 90px; top: 565px;">
<input type="image" src="button_up1.gif" id="button_up" style="width: 96px; height: 60px;"><!-- ontouchstart="upa();">-->
</div>
<div id="div_button_right" style="position: absolute; left: 206px; top: 575px;">
<input type="image" src="button_right1.gif" id="button_right" style="width: 60px; height: 120px;">
</div>
<div id="div_down_down" style="position: absolute; left: 90px; top: 645px;">
<input type="image" src="button_down1.gif" id="button_down" style="width: 96px; height: 60px;">
</div>
<div id="div_left_left" style="position: absolute; left: 10px; top: 575px;">
<input type="image" src="button_left1.gif" id="button_left" style="width: 60px; height: 120px;">
</div>
<!-- スタートボタン用 -->
<div id="div_button_start" style="position: absolute; left: 470px; top: 645px;">
<input type="image" src="button_start1.gif" id="button_start" style="width: 60px; height: 60px;" onmousedown="starta();" onmouseup="startb();">
</div>
<!-- オーディオボタン用 -->
<div id="div_button_audio" style="position: absolute; left: 405px; top: 670px;">
<input type="image" src="audio_on.gif" id="button_audio" style="width: 35px; height: 35px;" onclick="audio_change();">
</div>
<!-- 言語選択ボタン用 -->
<div id="div_button_lang" style="position: absolute; left: 340px; top: 670px;">
<input type="image" src="lang_jp.gif" id="button_lang" style="width: 35px; height: 35px;" onclick="lang_change();">
</div>
<script>
//グローバル変数等初期設定
var screenstatus = 0; //0-トップ画面,1-ゲーム画面,2-ゲームオーバー画面
var prince_move = 0; //王子の進む方向 0-停止, 1-上, 2-右, 3-下, 4-左
var prince_speed = 6; //王子の速度
var prince_faster = 0; //王子の速度増フラグ
var arrows_opacity = 0.8; //初期矢印の不透明度
var muteki_timer = 0; //無敵タイマー
var fruit_number = 0; //フルーツ表示番号(10になったら0にもどる)
var fruit_timer = 0; //フルーツ用タイマー(ゼロでフルーツ追加)
var fruit_freq = 40; //フルーツ頻度(数字が少ない程フルーツ多)
var fruit_frenzy_timer = 0; //フルーツ祭りタイマー
var fruit = []; //フルーツオブジェクト用配列
var octopus_number = 0; //タコ表示番号(10になったら0にもどる)
var octopus_timer = 200; //タコ用タイマー(ゼロでタコ追加)
var octopus_multi = 1; //タコ更新頻度
var octopus = []; //タコオブジェクト配列
var bee_timer = 20; //ハチ用タイマー(ゼロでハチ出現)
var bee = {life: 0}; //ハチオブジェクト
var item_timer = 400; //アイテム用タイマー(ゼロでアイテム表示)
var item = {life: 0}; //アイテムオブジェクト
var king_timer = 200; //キング用タイマー(ゼロでアイテム表示)
var king = {life: 0}; //キングオブジェクト
var bigfruit_timer = 2500; //ビッグフルーツ用タイマー(ゼロでアイテム表示)
var bigfruit_counter = 0; //ビッグフルーツ用カウンター
var bigfruit_last = 0; //最後に取得したフルーツの種類
var bigfruit = {life: 0}; //ビッグフルーツオブジェクト
var fruit_score_hyoji = {life: 0}; //フルーツスコア表示用オブジェクト
var damage_hyoji = {life: 0}; //ダメージ表示用オブジェクト
var item_hyoji = {life: 0}; //アイテム表示用オブジェクト
var bigfruit_score_hyoji = {life: 0}; //ビッグフルーツスコア表示用オブジェクト
var ground_map = []; //フルーツ・タコ配置マップ
var fruit_type = ['strawberry','orange','apple','pear','banana','grape','peach','pineapple','watermelon','melon']; //フルーツの種類
var fruit_life = [300,280,250,200,180,150,100,75,50,30]; //各フルーツのライフ
var fruit_score = [100,200,300,400,500,700,1000,1500,2000,5000]; //各フルーツの得点
var highscore = 0; //ハイスコア
var score = 0; //スコア
var counter = 0; //カウンター(これが増えると出てくるフルーツの種類が増える)
var combo_timer = 0; //コンボ用タイマー
var combo = 0; //コンボ用倍率
var combo_calc = 1; //コンボ計算倍率
var combo_hyoji = ''; //コンボ表示用
var audio_files = ['bgm.mp3',,,,,,,,,,'koka_fruit.wav','koka_fruit.wav','koka_fruit.wav','koka_crash.wav','koka_item.wav','koka_muteki_eat.wav','koka_muteki_eat.wav','koka_muteki_end.wav','koka_melon.wav','koka_bound.wav','koka_bee.wav','koka_beeget.wav','koka_bee_crash.wav','combo2.wav','combo3.wav','combo4.wav','combo5.wav','combo6.wav','combo7.wav','combo8.wav','combo9.wav','combo10.wav','combo10.wav','combo10.wav','koka_king.wav','koka_kingflash.wav','koka_kingcrash.wav','koka_bigfruit.wav']; //オーディオファイル名一覧(0-BGM,10~12-フルーツゲット,13-タコ衝突,14-アイテムゲット,15~16-無敵でタコ衝突,17-無敵終了,18-メロンゲット,19-王子壁反転,20-ハチ出現,21-無敵でハチ衝突,22-ハチ衝突,23~33-コンボ(31-33はx10コンボ用),34-キング登場,35-キングフラッシュ,36-キング衝突,37-ビッグフルーツ出現)
var audio = []; //オーディオ用配列
for (i=0; i<audio_files.length; i++){ //全体の音量調整
audio[i] = new Audio(audio_files[i]);
audio[i].volume = 0.3;
}
for (i=23; i<=33; i++){ //コンボ時のドレミ音やや大きく調整
audio[i] = new Audio(audio_files[i]);
audio[i].volume = 0.65;
}
audio[19].volume = 0.25; //王子の壁反転音やや小さく調整
audio[34].volume = 0.5; //キング登場音やや大きく
audio[35].volume = 0.5; //キングフラッシュ音やや大きく調整
audio[36].volume = 0.5; //キング衝突音やや大きく
var fruit_sound = 0; //フルーツゲット用サウンド順番
var comboten_sound = 0; //コンボx10用サウンド順番
var muteki_tako_sound = 0; //無敵タコ用サウンド順番
var audio_status = 1; //オーディオオン・オフ(0-オフ, 1-オン)
var lang_status = 0; //言語選択(0-日本語, 1-英語)
var timerId; //ゲームパッド用タイマーID
var srch1 = document.location.search; //クエリー取得
srch1 = srch1.replace(/\?/i,""); // ?を消去
var srch2 = srch1.split("&"); // 配列に分割する
var vl = srch2[0].replace(/LANG\=/i,""); //値のみ取得
if (vl == "en") {
lang_change();
}
//トップ画面 {
function top_title() {
screenstatus = 0;
document.getElementById('div_title').style.opacity = 1;
document.getElementById('div_gameover').style.opacity = 0;
for (i=0; i<=19; i++){ //フルーツ初期設定&画面クリア
fruit[i] = {life: 0};
document.getElementById('div_fruit'+i).style.opacity = 0;
}
for (i=0; i<=29; i++){ //タコライフ初期設定&画面クリア
octopus[i] = {life: 0};
document.getElementById('div_octopus'+i).style.opacity = 0;
}
document.getElementById('div_bee').style.opacity = 0; //ハチ表示クリア
bee.life = 0;
document.getElementById('div_item').style.opacity = 0; //アイテム表示クリア
item.life = 0;
document.getElementById('div_king').style.opacity = 0; //キング表示クリア
king.life = 0;
document.getElementById('div_bigfruit').style.opacity = 0; //ビッグフルーツ表示クリア
bigfruit.life = 0;
document.getElementById('div_muteki').style.opacity = 0; //無敵リングクリア
document.getElementById('div_arrows').style.opacity = 0; //初期矢印クリア
document.getElementById('background').style.backgroundImage = 'url(ground.jpg)'; //床初期化
document.getElementById('div_title').style.left = 0; //タイトル
document.getElementById('div_google_ads').style.left = 36; //Google広告
//ゲームパッドのチェックを定期的に実行
clearInterval(timerId); //タイマークリア
timerId = setInterval(gamepad_check,50);
}
//ゲーム開始設定
function init() {
screenstatus = 1; //0-トップ画面,1-ゲーム画面,2-ゲームオーバー画面
prince_move = 0; //王子の進む方向 0-停止, 1-上, 2-右, 3-下, 4-左
prince_speed = 6; //王子の速度
prince_faster = 0; //王子の速度増フラグ
muteki_timer = 0; //無敵タイマー
arrows_opacity = 0.8; //初期矢印の不透明度
fruit_number = 0; //フルーツ表示番号(10になったら0にもどる)
fruit_timer = 0; //フルーツ用タイマー(ゼロでフルーツ追加)
fruit_frenzy_timer = 0; //フルーツ祭りタイマー
fruit_freq = 40; //フルーツ頻度(数字が少ない程フルーツ多)
octopus_number = 0; //タコ表示番号(10になったら0にもどる)
octopus_timer = 200; //タコ用タイマー(ゼロでタコ追加)
octopus_multi = 1; //タコ更新頻度
bee_timer = 1000; //ハチ用タイマー(ゼロでハチ出現)
item_timer = 400; //アイテム用タイマー(ゼロでアイテム表示)
king_timer = 4500; //キング用タイマー(ゼロでキング出現)
bigfruit_timer = 2500; //ビッグフルーツ用タイマー(ゼロでアイテム表示)
bigfruit_counter = 0; //ビッグフルーツ用カウンター
bigfruit_last = 0; //最後に取得したフルーツの種類
for (i=0; i<=80; i++){ //フルーツ・タコ配置マップクリア
ground_map[i] = '';
}
fruit_score_hyoji = {life: 0}; //フルーツスコア表示用オブジェクト
damage_hyoji = {life: 0}; //ダメージ表示用オブジェクト
item_hyoji = {life: 0}; //アイテム表示用オブジェクト
bigfruit_score_hyoji = {life: 0}; //ビッグフルーツスコア表示用オブジェクト
score = 0; //スコア
counter = 0; //カウンター(これが増えると出てくるフルーツの種類が増える)
combo_timer = 0; //コンボ用タイマー
combo = 0; //コンボ用倍率
combo_calc = 1; //コンボ計算倍率
combo_hyoji = ''; //コンボ表示用
document.getElementById('div_title').style.opacity = 0;
prince = new PrinceObj(document.getElementById('div_prince'),240,240); //王子オブジェクトの作成
prince.leftright(2); //王子右向きでスタート
document.getElementById('div_arrows').style.opacity = 0.8; //初期矢印
document.getElementById('div_arrows').style.left = 180;
document.getElementById('div_arrows').style.top = 180;
document.getElementById('div_title').style.left = -540; //タイトル
if (audio_status == 1) {
audio[0].play(); //BGM演奏
}
audio[0].loop = true;
fruit_sound = 0; //フルーツゲット用サウンド順番
comboten_sound = 0; //コンボx10用サウンド順番
timer_main();
}
//メインループ
function timer_main() {
prince.movement(prince_move); //王子の動作
counter += 1; //(主)カウンター増
fruit_timer -= 1; //フルーツタイマー減
octopus_timer -= 1; //タコタイマー減
bee_timer -= 1;
item_timer -= 1; //アイテムタイマー減
king_timer -= 1; //キングタイマー減
bigfruit_timer -= 1; //ビッグフルーツタイマー減
if (combo_timer > 0) {
combo_timer -= 1; //コンボタイマー減
}
if ((fruit_timer <= 0)&&(fruit[fruit_number].life <= 0)) { //フルーツタイマーがゼロ以下でオブジェクトが存在しない場合には、フルーツオブジェクトを作成
fruit[fruit_number] = new FruitObj(document.getElementById('div_fruit'+fruit_number),document.getElementById('img_fruit'+fruit_number)); //フルーツオブジェクトの作成
}
if ((fruit_timer <= 0)&&(fruit[fruit_number].life > 0)) { //フルーツタイマーがゼロ以下でオブジェクトが存在する場合には、フルーツ番号を1つ増やす
fruit_number += 1; //フルーツ番号+1
if (fruit_number > 19) {
fruit_number = 0;
}
}
if ((octopus_timer <= 0)&&(octopus[octopus_number].life <= 0)) { //タコタイマーがゼロ以下でオブジェクトが存在しない場合には、タコオブジェクトを作成
octopus[octopus_number] = new OctopusObj(document.getElementById('div_octopus'+octopus_number),document.getElementById('img_octopus'+octopus_number)); //タコオブジェクトの作成
}
if ((bee_timer <= 0)&&(bee.life <= 0)) { //ハチタイマーがゼロ以下でオブジェクトが存在しない場合には、ハチオブジェクトを作成
bee = new BeeObj(document.getElementById('div_bee'),document.getElementById('img_bee')); //ハチオブジェクトの作成
}
if ((item_timer <= 0)&&(item.life <= 0)) { //アイテムタイマーがゼロ以下でオブジェクトが存在しない場合には、アイテムオブジェクトを作成
item = new ItemObj(document.getElementById('div_item'),document.getElementById('img_item')); //アイテムオブジェクトの作成
}
if ((king_timer <= 0)&&(king.life <= 0)) { //キングタイマーがゼロ以下でオブジェクトが存在しない場合には、キングオブジェクトを作成
king = new KingObj(document.getElementById('div_king'),document.getElementById('img_king')); //キングオブジェクトの作成
}
if ((bigfruit_timer <= 0)&&(bigfruit.life <= 0)) { //ビッグフルーツタイマーがゼロ以下でオブジェクトが存在しない場合には、ビッグフルーツオブジェクトを作成
bigfruit = new BigFruitObj(document.getElementById('div_bigfruit'),document.getElementById('img_bigfruit')); //ビッグフルーツオブジェクトの作成
}
for (i=0; i<=19; i++) { //フルーツメイン処理
if (fruit[i].life > 0) {
if ((fruit[i].opacity > 0)&&(fruit[i].opacity < 1)&&(fruit[i].life >= 10)) { //フルーツ出現時の不透明処理
fruit[i].higherOpacity();
}
if ((Math.pow((fruit[i].x - prince.x),2)+ Math.pow((fruit[i].y - prince.y),2) < 3600)) { //フルーツゲット時
combofunc(); //コンボ判定処理
fruit_score_hyoji = new FruitScoreObj(document.getElementById('div_fruitscore'),document.getElementById('fruitscore'),fruit_score[fruit[i].type] + combo_hyoji,fruit[i].x,fruit[i].y); //フルーツスコアオブジェクトの作成
fruit[i].fruitGet();
ground_map[fruit.y/60*9 + fruit.x/60] = ''; //マップから消去
combo_timer = 11; //コンボタイマーのセット
if (fruit[i].type < 9){
audio[10+fruit_sound].play(); //効果音
fruit_sound += 1; //フルーツゲット用効果音多重でも対応
if (fruit_sound >= 3) {
fruit_sound = 0;
}
} else {
audio[18].play(); //効果音
}
if ((bigfruit_last == fruit[i].type)&&(counter > 2000)) { //ビッグフルーツ用処理(カウンターが一定の数値を超えるまでは出さない)
bigfruit_counter += 1;
if (bigfruit_counter >= 3) {
bigfruit_timer = 0;
bigfruit_counter = 0;
}
} else {
bigfruit_counter = 1;
bigfruit_last = fruit[i].type;
}
}
fruit[i].lifeDecrease();
if (fruit[i].life <= 0) { //フルーツのライフが無くなった場合
ground_map[fruit[i].y/60*9 + fruit[i].x/60] = ''; //マップから消去
}
}
}
for (i=0; i<=29; i++) { //タコメイン処理
if (octopus[i].life > 0) {
if ((octopus[i].opacity > 0)&&(octopus[i].opacity < 1)&&(octopus[i].life >= 10)) { //タコ出現時の不透明処理
octopus[i].higherOpacity();
}
if ((Math.pow((octopus[i].x - prince.x),2)+ Math.pow((octopus[i].y - prince.y),2) < 3600)) { //タコ衝突時(ダメージ)
if (muteki_timer <= 0) {
damage_hyoji = new DamageHyojiObj(document.getElementById('div_damage'),document.getElementById('damage1'),'LIFE -1',octopus[i].x,octopus[i].y); //ダメージ表示オブジェクトの作成
if (prince.life > 1) { //王子のライフが1のみの場合には反転させない
switch (prince.direction){ //王子反転
case 1: prince.direction = 3; //上→下
prince_move = 3;
break;
case 2: prince.direction = 4; //右→左
prince_move = 4;
prince.leftright(1);
break;
case 3: prince.direction = 1; //下→上
prince_move = 1;
break;
case 4: prince.direction = 2; //左→右
prince_move = 2;
prince.leftright(2);
break;
}
}
audio[13].play(); //効果音
} else {
combofunc(); //コンボ判定処理
fruit_score_hyoji = new FruitScoreObj(document.getElementById('div_fruitscore'),document.getElementById('fruitscore'),'10'+combo_hyoji,octopus[i].x,octopus[i].y); //フルーツスコアオブジェクトの作成
combo_timer = 11; //コンボタイマーのセット
audio[15+muteki_tako_sound].play(); //効果音
muteki_tako_sound += 1;
if (muteki_tako_sound >=2) {
muteki_tako_sound = 0;
}
}
octopus[i].crash();
ground_map[octopus[i].y/60*9 + octopus[i].x/60] = ''; //マップから消去
}
octopus[i].lifeDecrease();
if (octopus[i].life <= 0) { //タコのライフが無くなった場合
ground_map[octopus[i].y/60*9 + octopus[i].x/60] = ''; //マップから消去
}
}
}
//ハチメイン処理
if (bee.life > 0) {
if ((bee.opacity > 0)&&(bee.opacity < 1)&&(bee.life >= 10)) { //ハチ出現時の不透明処理
bee.higherOpacity();
}
bee.move();
if ((Math.pow((bee.x - prince.x),2)+ Math.pow((bee.y - prince.y),2) < 2500)) { //ハチ衝突時(ダメージ)
if (muteki_timer <= 0) {
damage_hyoji = new DamageHyojiObj(document.getElementById('div_damage'),document.getElementById('damage1'),'LIFE -1',bee.x,bee.y); //ダメージ表示オブジェクトの作成
if (prince.life > 1) { //王子のライフが1のみの場合には反転させない
switch (prince.direction){ //王子反転
case 1: prince.direction = 3; //上→下
prince_move = 3;
break;
case 2: prince.direction = 4; //右→左
prince_move = 4;
prince.leftright(1);
break;
case 3: prince.direction = 1; //下→上
prince_move = 1;
break;
case 4: prince.direction = 2; //左→右
prince_move = 2;
prince.leftright(2);
break;
}
}
audio[22].play(); //効果音
} else {
combofunc(); //コンボ判定処理
fruit_score_hyoji = new FruitScoreObj(document.getElementById('div_fruitscore'),document.getElementById('fruitscore'),'3000'+combo_hyoji,bee.x,bee.y); //フルーツスコアオブジェクトの作成
combo_timer = 11; //コンボタイマーのセット
audio[21].play(); //効果音
muteki_tako_sound += 1;
if (muteki_tako_sound >=2) {
muteki_tako_sound = 0;
}
}
bee.crash();
}
bee.lifeDecrease();
}
//アイテムメイン処理
if (item.life > 0) {
if ((item.opacity > 0)&&(item.opacity < 1)&&(item.life >= 10)) { //アイテム出現時の不透明処理
item.higherOpacity();
}
if ((Math.pow((item.x - prince.x),2)+ Math.pow((item.y - prince.y),2) < 3600)) { //アイテム時
switch(item.type) {
case 0: //スピードアップ
item_hyoji = new ItemHyojiObj(document.getElementById('div_item_hyoji'),document.getElementById('item1'),'Faster!',item.x,item.y); //アイテム表示オブジェクトの作成
if (prince_speed < 30) { //速度増フラグを立てる
prince_faster = 1;
}
break;
case 1: //フルーツ頻度増
item_hyoji = new ItemHyojiObj(document.getElementById('div_item_hyoji'),document.getElementById('item1'),'More Fruits!',item.x,item.y); //アイテム表示オブジェクトの作成
fruit_freq = fruit_freq / 1.6;
if (fruit_freq < 5) { //頻度を上げる
fruit_freq = 5;
}
break;
case 2: //フルーツ祭り
item_hyoji = new ItemHyojiObj(document.getElementById('div_item_hyoji'),document.getElementById('item1'),'Fruits Frenzy!',item.x,item.y); //アイテム表示オブジェクトの作成
fruit_frenzy_timer = 20;
fruit_timer = 0;
break;
case 3: //無敵
item_hyoji = new ItemHyojiObj(document.getElementById('div_item_hyoji'),document.getElementById('item1'),'Power Shield!',item.x,item.y); //アイテム表示オブジェクトの作成
muteki_timer = 120;
break;
case 4: //1UP
item_hyoji = new ItemHyojiObj(document.getElementById('div_item_hyoji'),document.getElementById('item1'),'1UP!',item.x,item.y); //アイテム表示オブジェクトの作成
prince.life += 1;
break;
}
item.itemGet();
ground_map[item.y/60*9 + item.x/60] = ''; //マップから消去
audio[14].play(); //効果音
}
item.lifeDecrease();
if (item.life <= 0) { //フルーツのライフが無くなった場合
ground_map[item.y/60*9 + item.x/60] = ''; //マップから消去
}
}
//キングメイン処理
if (king.life > 0) {
if ((king.opacity > 0)&&(king.opacity < 1)&&(king.life >= 10)) { //キング出現時の不透明処理
king.higherOpacity();
}
if ((Math.pow((king.x - prince.x),2)+ Math.pow((king.y - prince.y),2) < 3600)) { //キング衝突時
king.crash();
ground_map[king.y/60*9 + king.x/60] = ''; //マップから消去
audio[34].pause(); //キング登場効果音停止
try{ //IEエラー回避処理用
audio[34].currentTime = 0;
} catch(e){
}
audio[36].play(); //効果音
}
king.lifeDecrease();
if (king.life <= 0) { //フルーツのライフが無くなった場合
ground_map[king.y/60*9 + king.x/60] = ''; //マップから消去
}
}
//ビッグフルーツメイン処理
if (bigfruit.life > 0) {
if ((bigfruit.opacity > 0)&&(bigfruit.opacity < 1)&&(bigfruit.life >= 10)) { //ビッグフルーツ出現時の不透明処理
bigfruit.higherOpacity();
}
bigfruit.move();
if ((Math.pow((bigfruit.x - prince.x),2)+ Math.pow((bigfruit.y - prince.y),2) < 8100)) { //ビッグフルーツゲット時
combofunc(); //コンボ判定処理
bigfruit_score_hyoji = new BigFruitScoreObj(document.getElementById('div_bigfruitscore'),document.getElementById('bigfruitscore'),(fruit_score[bigfruit.type]*10) + combo_hyoji,bigfruit.x,bigfruit.y); //フルーツスコアオブジェクトの作成
combo_timer = 11; //コンボタイマーのセット
audio[18].play(); //効果音
bigfruit.fruitGet();
}
bigfruit.lifeDecrease();
}
if (fruit_score_hyoji.life > 0) { //フルーツゲット後のスコア表示処理
fruit_score_hyoji.lifeDecrease();
}
if (damage_hyoji.life > 0) { //ダメージ表示処理
damage_hyoji.lifeDecrease();
}
if (item_hyoji.life > 0) { //アイテム表示処理
item_hyoji.lifeDecrease();
}
if (bigfruit_score_hyoji.life > 0) { //ビッグフルーツゲット後のスコア表示処理
bigfruit_score_hyoji.lifeDecrease();
}
//スコア、ライフ表示処理
document.getElementById('text_score').textContent = score;
if (score > highscore) {
highscore = score;
document.getElementById('text_highscore').textContent = highscore;
}
document.getElementById('text_princelife').textContent = prince.life;
if (prince.life > 0) {
setTimeout(timer_main, 100); //王子のライフが0でなければリピート
} else {
setTimeout(gameover,100); //王子のライフが0ならゲームオーバー
}
}
//ゲームオーバー処理
function gameover() {
screenstatus = 2;
audio[0].pause(); //BGM演奏停止
try{ //IEエラー回避処理用
audio[0].currentTime = 0;
} catch(e){
}
if (fruit_score_hyoji.life > 0) { //フルーツゲット後のスコア表示処理
fruit_score_hyoji.lifeDecrease();
}
if (damage_hyoji.life > 0) { //ダメージ表示処理
damage_hyoji.lifeDecrease();
}
if (item_hyoji.life > 0) { //アイテム表示処理
item_hyoji.lifeDecrease();
}
if (bigfruit_score_hyoji.life > 0) { //ビッグフルーツゲット後のスコア表示処理
bigfruit_score_hyoji.lifeDecrease();
}
if (prince.opacity > 0) {
prince.opacity -= 0.05; //王子の不透明度減少
prince.gameover();
setTimeout(gameover,100);
} else {
document.getElementById('div_gameover').style.opacity = 1;
setTimeout(top_title,4000);
}
}
//王子コンストラクタ
function PrinceObj(_elem,_xpos,_ypos){
this.elem = _elem; //王子表示エレメント
this.x = _xpos; //王子X座標
this.y = _ypos; //王子Y座標
//this.leftright = 2; //王子向き 1-左, 2-右
this.direction = 0; //王子の進む方向 0-停止, 1-上, 2-右, 3-下, 4-左
this.timer = 100; //スタート時のタイマー(0で強制的に右に移動)
this.opacity = 1; //不透明度
this.life = 3; //ライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
this.movement = function (_direction){ //王子移動
if ((this.x % 60 == 0)&&(this.y % 60 == 0)){
this.direction = _direction;
if (prince_faster == 1) { //スピード増フラグありの場合
prince_faster = 0;
if (prince_speed == 6) {
prince_speed = 10;
} else if (prince_speed == 10) {
prince_speed = 12;
} else if (prince_speed == 12) {
prince_speed = 15;
} else if (prince_speed == 15) {
prince_speed = 20;
} else if (prince_speed == 20) {
prince_speed = 30;
}
}
}
switch (this.direction){
case 0: this.timer -= 1; //スタート時移動せず
if (this.timer < 16) { //スタート遅い場合、矢印徐々に透明に
document.getElementById('div_arrows').style.opacity = this.timer / 20; //初期矢印
}
if (this.timer == 0) { //タイマー0で強制スタート
prince_move = 2;
this.direction = 2;
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
break;
case 1: this.y -= prince_speed; //上移動
if (this.y < 0) {
this.y = 0;
prince_move = 3;
this.direction = 3;
audio[19].play(); //効果音
}
break;
case 2: this.x += prince_speed; //右移動
if (this.x > 480) {
this.x = 480;
prince_move = 4;
this.direction = 4;
this.leftright(1);
audio[19].play(); //効果音
}
break;
case 3: this.y += prince_speed; //下移動
if (this.y > 480) {
this.y = 480;
prince_move = 1;
this.direction = 1;
audio[19].play(); //効果音
}
break;
case 4: this.x -= prince_speed; //左移動
if (this.x < 0) {
this.x = 0;
prince_move = 2;
this.direction = 2;
this.leftright(2);
audio[19].play(); //効果音
}
break;
}
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
if (muteki_timer > 0) { //無敵の処理
muteki_timer -= 1;
document.getElementById('div_muteki').style.left = this.x;
document.getElementById('div_muteki').style.top = this.y;
if (muteki_timer == 16) {
audio[17].play(); //効果音
}
if (muteki_timer < 16) {
document.getElementById('div_muteki').style.opacity = muteki_timer / 20;
} else {
document.getElementById('div_muteki').style.opacity = 0.8;
}
} else {
document.getElementById('div_muteki').style.opacity = 0; //無敵リングクリア
}
}
this.leftright = function (_muki){ //王子の左右向き変更
switch (_muki) {
case 1: document.getElementById("img_prince").src = 'prince_left.gif'; break; //左向き
case 2: document.getElementById("img_prince").src = 'prince_right.gif'; break; //右向き
}
}
this.gameover = function () { //ゲームオーバー処理
this.elem.style.opacity = this.opacity; //不透明処理
}
}
//フルーツコンストラクタ
function FruitObj(_elem,_img){
this.elem = _elem; //フルーツ表示エレメント
this.img = _img; //フルーツ画像エレメント
maxrnd = counter / 300 + 1; //乱数の最大値
if (maxrnd > 9.5) {
maxrnd = 9.5;
}
this.type = Math.floor(Math.random()*maxrnd); //フルーツの種類
this.x = Math.floor(Math.random()*9)*60; //フルーツX座標
this.y = Math.floor(Math.random()*9)*60; //フルーツY座標
this.life = 0; //エラー回避のライフ設定(出現可否判定前は0にしておく)
if ((!ground_map[this.y/60*9 + this.x/60] > 0)&&(Math.pow((this.x - prince.x),2)+ Math.pow((this.y - prince.y),2) > 8100)) { //王子や他のフルーツやタコと重なっていなければフルーツオブジェクト
ground_map[this.y/60*9 + this.x/60] = this.type + 1; //マップ埋め込み
this.opacity = 0.1; //不透明度
this.life = fruit_life[this.type]; //ライフ
this.img.src = fruit_type[this.type] + '.gif'; //表示されるフルーツ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
fruit_timer = fruit_freq; //フルーツタイマーリセット
if (fruit_frenzy_timer > 0){ //フルーツ祭りオンの処理
fruit_timer = 0;
fruit_frenzy_timer -= 1;
}
fruit_number += 1; //フルーツ番号+1
if (fruit_number > 19) {
fruit_number = 0;
}
} else { //王子や他のフルーツと重なった場合には、タイマーを再設定
this.x = -60;
this.y = -60;
fruit_timer = 2;
}
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
this.elem.style.opacity = this.opacity;
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.fruitGet = function () { //フルーツゲット時処理
this.life = 0;
score += fruit_score[this.type] * combo_calc;
this.elem.style.opacity = 0;
}
}
//タココンストラクタ
function OctopusObj(_elem,_img){
this.elem = _elem; //タコ表示エレメント
this.img = _img; //タコ画像エレメント
this.x = Math.floor(Math.random()*9)*60; //タコX座標
this.y = Math.floor(Math.random()*9)*60; //タコY座標
this.life = 0; //エラー回避のライフ設定(出現可否判定前は0にしておく)
if ((!ground_map[this.y/60*9 + this.x/60] > 0)&&(Math.pow((this.x - prince.x),2)+ Math.pow((this.y - prince.y),2) > 10000)) { //王子や他のフルーツやタコと重なっていなければタコオブジェクト
ground_map[this.y/60*9 + this.x/60] = 50; //マップ埋め込み
this.opacity = 0.1; //不透明度
this.life = Math.floor(3000 / octopus_multi) + octopus_multi; //ライフ(速度が早くなる場合に全体の数が減らないようにライフを伸ばす)
this.img.src = 'octopus.gif'; //タコ画像ファイル
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
octopus_timer = 100 / octopus_multi; //タコタイマーリセット
octopus_number += 1; //タコ番号+1
if (octopus_number > 29) {
octopus_number = 0;
//octopus_multi = octopus_multi + 2; //タコ頻度増やす
//if (octopus_multi > 8) {
// octopus_multi = 8;
//}
}
} else { //王子や他のフルーツと重なった場合には、タイマーを再設定
this.x = -60;
this.y = -60;
octopus_timer = 2;
}
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
this.elem.style.opacity = this.opacity;
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.crash = function () { //衝突(ダメージ)時処理
this.life = 0;
if (muteki_timer <= 0) { //無敵でない場合には王子ライフ-1
prince.life -= 1;
} else {
score += 10 * combo_calc;
}
this.elem.style.opacity = 0;
}
}
//ハチコンストラクタ
function BeeObj(_elem,_img){
this.elem = _elem; //ハチ表示エレメント
this.img = _img; //ハチ画像エレメント
if (prince.x < 240) { //ハチX座標
this.x = 480;
this.img.src = 'bee_left.gif'; //ハチ画像ファイル
} else {
this.x = 0;
this.img.src = 'bee_right.gif'; //ハチ画像ファイル
}
this.y = Math.floor(Math.random()*9)*60; //ハチY座標
this.dx = 0; //ハチX移動量
this.dy = 0; //ハチY移動量
if (counter < 1800) { //ハチ加速度・速度調整
this.delta = 0.3;
this.speed = 3;
} else if (counter < 7000) {
this.delta = 0.4;
this.speed = 5;
} else {
this.delta = 0.5;
this.speed = 7;
}
this.life = 0; //エラー回避のライフ設定(出現可否判定前は0にしておく)
if ((!ground_map[this.y/60*9 + this.x/60] > 0)&&(Math.pow((this.x - prince.x),2)+ Math.pow((this.y - prince.y),2) > 8100)&&(muteki_timer <= 0)) { //王子や他のフルーツやタコと重なっておらず無敵タイマー作動中でなければハチオブジェクト
this.opacity = 0.1; //不透明度
this.life = 280; //ライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
audio[20].play(); //効果音
bee_timer = 900 + Math.floor(Math.random()*9)*100;; //ハチタイマーリセット
} else {
this.x = -60;
this.y = -60;
bee_timer = 2;
}
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
this.elem.style.opacity = this.opacity;
}
this.move = function () { //ハチ移動
this.dx = (this.x > prince.x)?this.dx-this.delta:this.dx+this.delta; //X移動量決定
this.dy = (this.y > prince.y)?this.dy-this.delta:this.dy+this.delta; //Y移動量決定
if (this.dx > this.speed) {
this.dx = this.speed;
}
if (this.dx < -this.speed) {
this.dx = -this.speed;
}
if (this.dy > this.speed) {
this.dy = this.speed;
}
if (this.dy < -this.speed) {
this.dy = -this.speed;
}
if (muteki_timer > 0) { //無敵の状態ではハチは静止
this.dx = 0;
this.dy = 0;
}
this.x += this.dx; //X座標決定
this.y += this.dy; //Y座標決定
if (this.x < 0) { //画面からはみ出た場合の処理
this.x = 0;
this.dx = -this.dx / 2;
}
if (this.x > 480) {
this.x = 480;
this.dx = -this.dx / 2;
}
if (this.y < 0) {
this.y = 0;
this.dy = -this.dy / 2;
}
if (this.y > 480) {
this.y = 480;
this.dy = -this.dy / 2;
}
if (this.dx > 0) {
this.img.src = 'bee_right.gif'; //ハチ画像ファイル
}
if (this.dx < 0) {
this.img.src = 'bee_left.gif'; //ハチ画像ファイル
}
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.crash = function () { //衝突(ダメージ)時処理
this.life = 0;
if (muteki_timer <= 0) { //無敵でない場合には王子ライフ-1
prince.life -= 1;
} else {
score += 3000 * combo_calc;
}
this.elem.style.opacity = 0;
}
}
//アイテムコンストラクタ
function ItemObj(_elem,_img){
this.elem = _elem; //アイテム表示エレメント
this.img = _img; //アイテム画像エレメント
if (counter < 500) { //最初のアイテムはスピードアップ(番号0)
this.type = 0;
} else if (counter < 900) { //2つめのアイテムはフルーツ頻度増(番号1)
this.type = 1;
} else if ((counter < 1400)&&(prince_speed <= 6)) { //3つめのアイテム出現時に王子のスピードが遅い場合にはスピードアップ(番号0)
this.type = 0;
} else {
this.type = Math.floor(Math.random()*4.6); //アイテムの種類
}
this.x = Math.floor(Math.random()*9)*60; //アイテムX座標
this.y = Math.floor(Math.random()*9)*60; //アイテムY座標
this.life = 0; //エラー回避のライフ設定(出現可否判定前は0にしておく)
if ((!ground_map[this.y/60*9 + this.x/60] > 0)&&(Math.pow((this.x - prince.x),2)+ Math.pow((this.y - prince.y),2) > 8100)) { //王子や他のフルーツやタコと重なっていなければフルーツオブジェクト
ground_map[this.y/60*9 + this.x/60] = this.type + 100; //マップ埋め込み
this.opacity = 0.1; //不透明度
this.life = 100; //ライフ
this.img.src = 'item' + this.type + '.gif'; //表示されるアイテム
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
item_timer = 400; //アイテムタイマーリセット
} else { //王子や他のフルーツと重なった場合には、タイマーを再設定
this.x = -60;
this.y = -60;
item_timer = 2;
}
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
this.elem.style.opacity = this.opacity;
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.itemGet = function () { //ライフゲット時処理
this.life = 0;
this.elem.style.opacity = 0;
}
}
//キングコンストラクタ
function KingObj(_elem,_img){
this.elem = _elem; //キング表示エレメント
this.img = _img; //キング画像エレメント
if (prince.x < 240) { //キングX座標
this.x = 480;
this.img.src = 'king_left.gif'; //キング画像ファイル
} else {
this.x = 0;
this.img.src = 'king_right.gif'; //キング画像ファイル
}
if (prince.y < 240) { //キングy座標
this.y = 480;
} else {
this.y = 0;
}
this.life = 0; //エラー回避のライフ設定(出現可否判定前は0にしておく)
if ((!ground_map[this.y/60*9 + this.x/60] > 0)&&(Math.pow((this.x - prince.x),2)+ Math.pow((this.y - prince.y),2) > 8100)) { //王子や他のフルーツやタコと重なってなければキングオブジェクト
ground_map[this.y/60*9 + this.x/60] = 150; //マップ埋め込み
this.opacity = 0.1; //不透明度
this.life = 70; //ライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.elem.style.opacity = this.opacity;
audio[34].play(); //効果音
king_timer = 2000; //キングタイマーリセット
} else {
this.x = -60;
this.y = -60;
king_timer = 5;
}
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
if (this.opacity == 0.2) { //キング登場時に床を一瞬明るく
document.getElementById('background').style.backgroundImage = 'url(ground_bright.jpg)';
} else if (this.opacity == 0.6) {
document.getElementById('background').style.backgroundImage = 'url(ground.jpg)';
}
this.elem.style.opacity = this.opacity;
}
this.move = function () { //キング処理
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life >=12)&&(this.life <=20)){ //キング演出、点滅
if (this.x == 480) {
this.img.src= (this.life % 2 == 0)?'king_left.gif':'king_left_flash.gif';
} else {
this.img.src= (this.life % 2 == 0)?'king_right.gif':'king_right_flash.gif';
}
if (this.life % 2 == 0) { //キング演出、床を暗く
document.getElementById('background').style.backgroundImage = 'url(ground.jpg)';
} else {
document.getElementById('background').style.backgroundImage = 'url(ground_dark.jpg)';
}
}
if (this.life == 10) { //タコ出現頻度改定処理
audio[35].play(); //効果音
if (octopus_multi == 1) {
octopus_multi = 5;
} else if (octopus_multi == 5) {
octopus_multi = 10;
} else if (octopus_multi == 10) {
octopus_multi = 20;
} else {
octopus_multi = 1;
}
for (i=0; i<=29; i++){ //タコライフあれば全て10にする
if (octopus[i].life > 0) {
octopus[i].life = 10;
}
}
}
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.crash = function () { //衝突(ダメージ)時処理
this.life = 0;
//if (muteki_timer <= 0) { //無敵でない場合には王子ライフ-1
//prince.life -= 1;
//} else {
//score += 3000 * combo_calc;
//}
this.elem.style.opacity = 0;
document.getElementById('background').style.backgroundImage = 'url(ground.jpg)';
}
}
//ビッグフルーツコンストラクタ
function BigFruitObj(_elem,_img){
this.elem = _elem; //ビッグフルーツ表示エレメント
this.img = _img; //ビッグフルーツ画像エレメント
this.type = bigfruit_last; //ビッグフルーツの種類
if (prince.x < 240) { //ビッグフルーツX座標
this.x = 450;
this.direction = 1; //ビッグフルーツの進む方向1-左, 2-右
} else {
this.x = 30;
this.direction = 2; //ビッグフルーツの進む方向1-左, 2-右
}
this.img.src = fruit_type[this.type] + '.gif'; //表示されるビッグフルーツ
this.y = Math.floor(Math.random()*8)*60+30; //ビッグY座標
this.opacity = 0.1; //不透明度
this.life = 300; //ライフ
this.elem.style.left = (this.x - 30) + 'px';
this.elem.style.top = (this.y - 30) + 'px';
this.elem.style.opacity = this.opacity;
audio[37].play(); //効果音
bigfruit_timer = 1800; //ビッグフルーツタイマーリセット
this.higherOpacity = function () { //不透明度増やす
this.opacity += 0.1;
if (this.opacity > 1) {
this.opacity = 1;
}
this.elem.style.opacity = this.opacity;
}
this.move = function () { //ビッグフルーツ移動
if (this.life > 200) {
if (this.opacity == 1) {
this.life = 200; //完全に見える状態になったら次の段階に移行
}
} else if (this.life > 100) {
if (this.direction == 1) {
this.x -= 20; //左に進む
if (this.x < 30) { //左端に到達で次の段階に移行
this.x = 30;
this.life = 10;
}
} else {
this.x += 20; //右に進む
if (this.x > 450) { //右端に到達で次の段階に移行
this.x = 450;
this.life = 10;
}
}
}
this.elem.style.left = (this.x - 30) + 'px';
this.elem.style.top = (this.y - 30) + 'px';
this.elem.style.opacity = this.opacity;
}
this.lifeDecrease = function () { //ライフを減らす(消失処理)
this.life -= 1;
if ((this.life < 10)&&(this.life >= 0)){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
this.fruitGet = function () { //フルーツゲット時処理
this.life = 0;
score += fruit_score[this.type] * 10 * combo_calc;
this.elem.style.opacity = 0;
}
}
//フルーツスコアコンストラクタ
function FruitScoreObj(_elem,_hyoji,_comment,_xpos,_ypos){
this.elem = _elem; //フルーツ表示エレメント
this.hyoji = _hyoji; //スコア表示エレメント
this.comment = _comment; //コメント(スコア)
this.x = _xpos - 60; //スコアX座標
this.y = _ypos + 20; //スコアY座標
this.life = 20; //スコアライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
this.elem.style.opacity = 1;
this.lifeDecrease = function () { //スコアライフを減らす
this.y -= 1;
this.life -= 1;
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
if (this.life <= 10){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
}
//ダメージ表示コンストラクタ
function DamageHyojiObj(_elem,_hyoji,_comment,_xpos,_ypos){
this.elem = _elem; //ダメージ表示エレメント
this.hyoji = _hyoji; //ダメージ表示エレメント
this.comment = _comment; //コメント
this.x = _xpos - 60; //ダメージX座標
this.y = _ypos + 20; //ダメージY座標
this.life = 20; //ダメージライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
this.elem.style.opacity = 1;
this.lifeDecrease = function () { //ダメージライフを減らす
this.y -= 1;
this.life -= 1;
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
if (this.life <= 10){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
}
//アイテム表示コンストラクタ
function ItemHyojiObj(_elem,_hyoji,_comment,_xpos,_ypos){
this.elem = _elem; //ダメージ表示エレメント
this.hyoji = _hyoji; //ダメージ表示エレメント
this.comment = _comment; //コメント
this.x = _xpos - 60; //ダメージX座標
this.y = _ypos + 20; //ダメージY座標
this.life = 20; //ダメージライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
this.elem.style.opacity = 1;
this.lifeDecrease = function () { //ダメージライフを減らす
this.y -= 1;
this.life -= 1;
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
if (this.life <= 10){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
}
//ビッグフルーツスコアコンストラクタ
function BigFruitScoreObj(_elem,_hyoji,_comment,_xpos,_ypos){
this.elem = _elem; //フルーツ表示エレメント
this.hyoji = _hyoji; //スコア表示エレメント
this.comment = _comment; //コメント(スコア)
this.x = _xpos - 60; //スコアX座標
this.y = _ypos + 20; //スコアY座標
this.life = 20; //スコアライフ
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
this.elem.style.opacity = 1;
this.lifeDecrease = function () { //スコアライフを減らす
this.y -= 2;
this.life -= 1;
this.elem.style.left = this.x + 'px';
this.elem.style.top = this.y + 'px';
this.hyoji.textContent = this.comment;
if (this.life <= 10){
this.opacity = this.life / 10;
this.elem.style.opacity = this.opacity;
}
}
}
//コンボ判定処理
function combofunc(){
if (combo_timer > 0) { //コンボタイマー0より上の場合にはコンボ作動
combo += 1; //コンボ+1
if (combo > 1) {
combo_calc = combo; //コンボ計算値
combo_hyoji = ' x' + combo_calc;
if (combo >= 10) { //コンボは10が最大値
combo_calc = 10;
combo_hyoji = ' x10';
comboten_sound += 1;
if (comboten_sound > 2) {
comboten_sound = 0;
}
} else {
comboten_sound = 0;
}
audio[21+combo_calc+comboten_sound].play(); //効果音
}
} else {
combo = 0;
combo_calc = 1;
combo_hyoji = '';
}
}
//キー入力判定
function keydown(e){
switch(e.keyCode) {
case 38: //カーソルキー上
if (screenstatus == 1) {
prince_move = 1; //上
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
break;
case 39: //カーソルキー右
if (screenstatus == 1) {
if (prince_move != 2){
prince.leftright(2);
}
prince_move = 2; //右
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
break;
case 40: //カーソルキー下
if (screenstatus == 1) {
prince_move = 3; //下
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
break;
case 37: //カーソルキー左
if (screenstatus == 1) {
if (prince_move != 4){
prince.leftright(1);
}
prince_move = 4; //左
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
break;
case 32: //スペースキー
if (screenstatus == 0) {
init();
}
//if (screenstatus == 2) { //ゲームオーバーの再開処理と重なり動作がおかしくなるので使えない
// top_title();
//}
break;
}
}
//ゲームパッド入力判定
function gamepad_check() {
var gamepad_list = navigator.getGamepads(); // ゲームパッドリストを取得する
var gnum = gamepad_list.length; //ゲームパッドリスト内のアイテム総数を取得する
var i;
for(i=0; i < gnum; i++){
//Gamepad オブジェクトを取得する
var gamepad = gamepad_list[i];
if(!gamepad) continue;
var buttons = gamepad.buttons; //ABボタン等
var axes = gamepad.axes; //方向ボタン
//データチェッカー用処理
//if (axes[0]) {
//document.getElementById('checker0').textContent = axes[0];
//}
//上ボタン
if (axes[1] == -1) {
if (screenstatus == 1) {
prince_move = 1; //上
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
//右ボタン
if (axes[0] == 1) {
if (screenstatus == 1) {
if (prince_move != 2){
prince.leftright(2);
}
prince_move = 2; //右
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
//下ボタン
if (axes[1] == 1) {
if (screenstatus == 1) {
prince_move = 3; //下
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
//左ボタン
if (axes[0] == -1) {
if (screenstatus == 1) {
if (prince_move != 4){
prince.leftright(1);
}
prince_move = 4; //左
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
//Aボタン
if (buttons[0].pressed == true) {
if (screenstatus == 0) {
init();
}
}
}
}
//ボタン入力判定
function upa() {
document.getElementById('button_up').src = 'button_up2.gif';
if (screenstatus == 1) {
prince_move = 1; //上
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
function upb() {
document.getElementById('button_up').src = 'button_up1.gif';
if (screenstatus == 1) {
}
}
function righta() {
document.getElementById('button_right').src = 'button_right2.gif';
if (screenstatus == 1) {
if (prince_move != 2){
prince.leftright(2);
}
prince_move = 2; //右
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
function rightb() {
document.getElementById('button_right').src = 'button_right1.gif';
if (screenstatus == 1) {
}
}
function downa() {
document.getElementById('button_down').src = 'button_down2.gif';
if (screenstatus == 1) {
prince_move = 3; //下
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
function downb() {
document.getElementById('button_down').src = 'button_down1.gif';
if (screenstatus == 1) {
}
}
function lefta() {
document.getElementById('button_left').src = 'button_left2.gif';
if (screenstatus == 1) {
if (prince_move != 4){
prince.leftright(1);
}
prince_move = 4; //右
document.getElementById('div_arrows').style.opacity = 0; //初期矢印透明
}
}
function leftb() {
document.getElementById('button_left').src = 'button_left1.gif';
if (screenstatus == 1) {
}
}
function starta() {
document.getElementById('button_start').src = 'button_start2.gif';
if (screenstatus == 0) {
//init();
}
}
function startb() {
document.getElementById('button_start').src = 'button_start1.gif';
if (screenstatus == 0) {
init();
}
}
function audio_change() { //オーディオ有無
if (audio_status == 1) {
audio_status = 0;
document.getElementById('button_audio').src = 'audio_off.gif';
for (i=0; i<audio_files.length; i++){
audio[i].muted = true;
}
audio[0].pause(); //BGM停止
} else {
audio_status = 1;
document.getElementById('button_audio').src = 'audio_on.gif';
for (i=0; i<audio_files.length; i++){
audio[i].muted = false;
}
if (screenstatus == 1) {
audio[0].play(); //BGM演奏
}
}
}
function lang_change() { //言語選択
if (lang_status == 1) {
lang_status = 0;
document.getElementById('button_lang').src = 'lang_jp.gif';
document.getElementById('title').src = 'title.gif';
document.getElementById('gameover').src = 'gameover.gif';
document.getElementById('title_contents').innerHTML = '【 ゲームの遊び方 】<br>スペースキーまたは画面下の「START」ボタンでゲームスタート<br>ゲーム中は馬に乗った王子をカーソルキーで操作<br>タコやハチを避けながらフルーツを集めまくって得点を稼ごう!';
} else {
lang_status = 1;
document.getElementById('button_lang').src = 'lang_en.gif';
document.getElementById('title').src = 'title_en.gif';
document.getElementById('gameover').src = 'gameover_en.gif';
document.getElementById('title_contents').innerHTML = '[ HOW TO PLAY ]<br>Press the spacebar or the “START” button below to start the game.<br>Move the prince on the horse with the cursor keys.<br>Avoid octopuses and the bee and collect fruits to score points!';
}
}
document.addEventListener('DOMContentLoaded',top_title()); //トップ画面表示
window.addEventListener('keydown',keydown); //キー入力イベント
//カーソルボタンの処理
if((window.TouchEvent)&&(window.innerHeight > window.innerWidth)){
document.getElementById('button_up').addEventListener('touchstart',upa);
document.getElementById('button_up').addEventListener('touchend',upb);
document.getElementById('button_right').addEventListener('touchstart',righta);
document.getElementById('button_right').addEventListener('touchend',rightb);
document.getElementById('button_down').addEventListener('touchstart',downa);
document.getElementById('button_down').addEventListener('touchend',downb);
document.getElementById('button_left').addEventListener('touchstart',lefta);
document.getElementById('button_left').addEventListener('touchend',leftb);
} else {
document.getElementById('button_up').addEventListener('mousedown',upa);
document.getElementById('button_up').addEventListener('mouseup',upb);
document.getElementById('button_right').addEventListener('mousedown',righta);
document.getElementById('button_right').addEventListener('mouseup',rightb);
document.getElementById('button_down').addEventListener('mousedown',downa);
document.getElementById('button_down').addEventListener('mouseup',downb);
document.getElementById('button_left').addEventListener('mousedown',lefta);
document.getElementById('button_left').addEventListener('mouseup',leftb);
}
//スマホ、タブレットの場合にはデフォルトでサウンドオフ
if ((window.TouchEvent)&&(window.innerHeight > window.innerWidth)){
audio_change();
}
</script>
</body>
↑制作の際、この本を参考にしました。
スポンサードリンク
→トップページ(ゲーム)に戻る