Advertisement
Guest User

Untitled

a guest
Oct 27th, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 40.36 KB | None | 0 0
  1. #include "DxLib.h"
  2. #include "key.h"
  3.  
  4.  
  5. int stage[4][7][2];  // 盤上のマスの格子点の座標
  6. int pos[3][6][2];    // キャラ描画座標
  7.  
  8. void init_stage()  // stage と pos を初期化する
  9. {
  10.     for (int j = 0; j < 7; j++) {
  11.         int w = (j - 3) * 100, h = 300;
  12.         for (int i = 4; --i >= 0; ) {
  13.             stage[i][j][0] = w + 400, stage[i][j][1] = h - 100;
  14.             w = w * 9 / 10, h = h * 9 / 10;
  15.         }
  16.     }
  17.     for (int i = 0; i < 3; i++)
  18.         for (int j = 0; j < 6; j++) {
  19.             pos[i][j][0] = (stage[i][j][0] + stage[i + 1][j + 1][0]) / 2 - 25;
  20.             pos[i][j][1] = (stage[i][j][1] + stage[i + 1][j + 1][1]) / 2 - 65;
  21.         }
  22. }
  23.  
  24. int White;
  25. int function_status;//戦闘画面中は1とするための変数function_statusの定義
  26.  
  27.  
  28. int ScreenMode = 0;
  29. //int talk = 0;
  30. int add = 0;
  31. int NowTime = 0;
  32. int ChangeTime = 0;
  33.  
  34. //init_stage(); // stage, pos の初期化
  35. int enemyX = 4, enemyY = 1;   // 敵の位置
  36. int playerX = 1, playerY = 1;  // 俺の位置
  37.  
  38. int enemyMove = 0;   // 敵の移動状態
  39.   // 俺の移動状態//1~21で右に振り向きのプログラム①が終わり、22になったら足踏みする②を実行するようにする。
  40. int playerMove = 1;
  41.  
  42. int lockonMove = 0;
  43. int lockonHandle[3];
  44.  
  45. //function_status = 1;//最初は1にして戦闘画面状態にする。
  46.  
  47.  
  48. int lock = 0;  // ロック状態
  49.  
  50. int enemyGHandle[12];   // 敵のグラフィックハンドル格納用配列
  51. int playerGHandle[12];  // 俺のグラフィックハンドル格納用配列
  52.         // 0-2:後ろ向き、3-5:右向き、6-8:前向き、9-11:左向き
  53.  
  54. //バトルのために読み込む画像
  55. void battle_Initialize() {
  56.     LoadDivGraph("charall.png", 12, 3, 4, 49, 66, enemyGHandle);
  57.     LoadDivGraph("charall.png", 12, 3, 4, 49, 66, playerGHandle);
  58.     SetTransColor(255, 255, 255); // 読み込む画像の前にこいつを置くことで透明化できる。ループ内にも書いて正しく動くが毎回読み込むようになってしまうため処理が遅くなる。
  59.     LoadDivGraph("lockon.bmp", 3, 3, 1, 23, 23, lockonHandle);//なので、一度読み込むだけ画像は使えるし、処理を遅くしないためにループに入る前かつWinMainの中に書いた。
  60. }
  61. int enemyImage = enemyGHandle[11];    // 敵 左向き
  62. int playerImage = playerGHandle[4];   // 俺 右向き
  63. int lockImge = lockonHandle[2];
  64. int preplayerX = 0;
  65. int after = 0;
  66. unsigned int count = 50;
  67. int count2 = 50;
  68. unsigned int count3 = 50;
  69.  
  70. int Kcount = 50;//キック攻撃のゲージ
  71. int Kcount2 = 50;
  72. int Gcount = 15;//15発で数分で再びストックされる
  73. int Gcount2 = 15;
  74.  
  75. int Gtime = 0;
  76. int Wcount = 100;
  77. int Wcount2 = 100;
  78.  
  79. int attackdamage = 0;//殴る際の攻撃判定として作った。
  80. int addattacktime = 501;//追加攻撃をするための変数
  81. int addattackimage = 20;//描画するための追加アタックのためのゲージ
  82. int addplayerX = 0;
  83. int addplayerY = 0;
  84. //int addattacktimeEND = 0;//addattacktimeが終わった後の処理のためのモノ
  85.  
  86. int zannzou = 0;// 攻撃してマスを移動するときのみ20にすればいいので、初期値は0とした。
  87. int  frames = 0; // フレーム数
  88. int frames2 = 0;
  89. int stopenemytime = 0;
  90. int GcountZeroCounter = 0;
  91. int GcountA = 0;
  92.  
  93. int preenemyX = 0, preenemyY = 0;
  94. int rundumsave = 0;
  95. int rundumsavetime = 0;
  96. int enemyattacktime = 0;
  97.  
  98. int nomove = 0;
  99.  
  100. const int MOVE_INTERVAL = 1000; // 何ミリ秒ごとに移動処理をするか
  101. int nextMoveTime = GetNowCount() + MOVE_INTERVAL; // 次回移動処理をする時刻
  102. int stopCount = 0; // 動かないのがあと何回か
  103.  
  104. int playerHP = 500;
  105. int enemyHP = 300;
  106.  
  107. int enemyattack = 0;
  108. int enemyattackB = 0;
  109.  
  110. int kaont = 0;
  111. int preenemyXX = 0;
  112. int preenemyYY = 0;
  113. int enemycount = 0;
  114. int enemycountframe = 0;
  115. int Lcount = 0;
  116. int Lframe = 0;
  117.  
  118. int GtimeA = 0;
  119. int Xkey = 0;
  120. int Gkey = 1;
  121. int Gfunction_status = 0;
  122. int MGcount = 200;
  123. int MGcount2 = 200;
  124. int MGframe = 0;
  125. int MGcountA = 0;
  126. int MGcountZeroCounter = 0;
  127. int Grock = 0;
  128. int reload = 0;
  129. int MGtime = 0;
  130. int MGcountW = 0;
  131.  
  132. int protect = 0;
  133. int protectcount = 0;
  134.  
  135.  
  136.  
  137. void Player_Update() {
  138.     //gpUpdateKey();
  139.     init_stage(); // stage, pos の初期化 ステージ
  140.     //int gpUpdateKey();
  141.     if (Key[KEY_INPUT_X] == 1) { //キーXを押すとfunction_statusは0になる
  142.         function_status = 0;
  143.         Xkey = 1;
  144.     }
  145.  
  146.     if (Key[KEY_INPUT_Y] == 1 && Xkey == 1) { //キーYを押すとfunction_statusは1になる
  147.         Xkey = 0;
  148.         function_status = 1;//戦闘画面に戻す
  149.  
  150.     }//戦闘画面中は1とする
  151.               // キーの入力状態を取得 上のifで既にgpUpdateKey();があり、elseはif以外の情報は引き継ぐので再びgpUpdateKey();書く必要はなかった。
  152.             // 俺の移動
  153.     if (Key[KEY_INPUT_RIGHT] == 1 && playerX < 2) { //キーを入力する以外にも押した後に早く画像を切り替えて足踏みするようにするために初期値にも1はあるがキーにもplayerMove=1を書いたり、キーを押したらどうしたいかをするためにplayerX++を書いている。
  154.         playerMove = 1;  playerX++; playerImage = playerGHandle[2]; nomove = 1;//最大まで右には二回しか進めないのでplayerX < 2と書いた。
  155.     } //playerMove = 1;があると下に書いたplayerMoveより足踏みするplayerMoveが無いと初期値の1でそのまま足踏みするので遅く反応するのでは?
  156.     if (Key[KEY_INPUT_LEFT] == 1 && playerX > 0) {//キーにplayerMove=1を書くと初期値の1よりも早くキーに書いたplayerMoveの1が行くため早く足踏みに行くため、止まってから足踏みに行くまでの間にある向きを変える画像playerGHandle[2]が一瞬であるため、向きを変えるのが早く見えるのでは?足踏みを速く来るようにしたため。
  157.         playerMove = 1; playerX--; playerImage = playerGHandle[9];//まあ、足踏みさせなくても、ただ書くだけでも方向を十分早く変えれる
  158.     }
  159.     if (Key[KEY_INPUT_UP] == 1 && playerY > 0) {
  160.         playerMove = 1; playerY--; playerImage = playerGHandle[2];
  161.     }
  162.     if (Key[KEY_INPUT_DOWN] == 1 && playerY < 2) {
  163.         playerMove = 1; playerY++; playerImage = playerGHandle[8];
  164.     }
  165.  
  166.  
  167.     //Rが一度押された上でフレームを利用してループさせるためにif文を新しく外に書いたのだ。
  168.     if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
  169.         DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],//多分ここはいらない下に描画するための関数を書くため
  170.             lockImge, FALSE);   // ロックマークの描画
  171.         lock = 1;//Key[KEY_INPUT_R] == 1 && playerY == enemyYの時、lockを1にする。lockを「何フレーム目の時」でも値を1として置いたため、条件式lockの入力キーAに呼び出せる。
  172.         lockonMove = 1;
  173.         //preenemyXX = enemyX;
  174.     }
  175.     if (lockonMove > 0) {//lockonMoveが0より大きいならば++lockonMoveをする、
  176.         ++lockonMove;
  177.     }
  178.     if (lockonMove == 10) {
  179.         lockImge = lockonHandle[0];//情報lockonMove == 10やlockonHandle[0]を引き継いで下に書いた描画関数に入るため、ここには関数に入れる情報だけ入るのだ。
  180.         //その時の情報lockonMove == 10やlockonHandle[0]以外の引き継がれたとうかその時の敵の座標なども関数に入る。関数が求めるものが入るので、関数に必要なものを揃える。
  181.     }
  182.     else if (lockonMove == 20) {
  183.         lockImge = lockonHandle[1];
  184.  
  185.     }
  186.     else if (lockonMove == 30) {
  187.         lockImge = lockonHandle[2];
  188.  
  189.  
  190.     }
  191.     else if (lockonMove == 40) {
  192.         lockImge = lockonHandle[1];
  193.         lockonMove = 1;
  194.     }
  195.     //playerY ==! enemyYとするとなぜかたまに反応しなかったりするのでplayerY != enemyYとした。
  196.     if (playerY != enemyY) {
  197.         lock = 0;
  198.         lockonMove = 0;//敵が移動した場合ロックオンの画像が消えるようにlockonMoveを0にする。
  199.     }
  200.  
  201.  
  202.  
  203.  
  204.  
  205.     //敵が目の前にいる際にそこに移動できないようにする。それと敵が後ろにいる際にそこに移動できないようにする。
  206.     if (playerX == enemyX && playerY == enemyY) {
  207.         if (Key[KEY_INPUT_RIGHT] == 1) {
  208.             playerX = enemyX - 1;
  209.             playerY = enemyY;
  210.             playerImage = playerGHandle[4];
  211.         }
  212.         else if (Key[KEY_INPUT_LEFT] == 1) {
  213.             playerX = enemyX + 1;
  214.             playerY = enemyY;
  215.             playerImage = playerGHandle[4];
  216.         }
  217.         else if (Key[KEY_INPUT_DOWN] == 1) {
  218.             playerX = enemyX;
  219.             playerY = enemyY - 1;
  220.             playerImage = playerGHandle[4];
  221.         }
  222.         else if (Key[KEY_INPUT_UP] == 1) {
  223.             playerX = enemyX;
  224.             playerY = enemyY + 1;
  225.             playerImage = playerGHandle[4];
  226.         }
  227.     }
  228.  
  229.  
  230.     //playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。
  231.     if (lock) {
  232.  
  233.         if (Key[KEY_INPUT_A] == 1 && count <= 50 && count >= 10) {  //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない
  234.             //count++;  ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ
  235.             //ここのcountの情報がそのまま下の描画関数に渡されるだけ。
  236.             //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ
  237.  
  238.             lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
  239.             lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
  240.             preplayerX = playerX; // 元の位置を保持
  241.             playerX = enemyX - 1; // 俺は敵の眼前へ//敵の位置から-1して自分がいるときの位置にいた場合。
  242.             addplayerX = playerX; //アドアタックタイム中で相手の目の前に移動した後のマスを保存するための変数
  243.             addplayerY = playerY;
  244.             if (playerX == enemyX - 1) { preplayerX; playerImage = playerGHandle[4]; }//敵の前に言ったら、移動する前の残像が残る。
  245.             //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  246.             enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする
  247.             count = count - 10;//キーAを押すたびに10だけ引く
  248.             addattacktime = 500;
  249.             zannzou = 60;
  250.             if (enemyGHandle[5]) { enemyHP = enemyHP - 50; }//if (Key[KEY_INPUT_A] == 1 && count <= 500)に直接enemyHP = enemyHP - 50;を書き込むか、殴るが成立した時にif (enemyGHandle[5]) { enemyHP = enemyHP - 50; }と書いても良い。
  251.  
  252.         }
  253.         if (Key[KEY_INPUT_K] == 1 && Kcount == 50) {//攻撃がキックだった場合
  254.             lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
  255.             lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
  256.             preplayerX = playerX; // 元の位置を保持
  257.             playerX = enemyX - 1; // 俺は敵の眼前へ
  258.             addplayerX = playerX; //アドアタックタイム中で相手の目の前に移動した後のマスを保存するための変数
  259.             addplayerY = playerY;//追加攻撃をする各攻撃においてちゃんとこれを書かないといけない
  260.             if (playerX == enemyX - 1) { preplayerX; playerImage = playerGHandle[4]; }//敵の前に言ったら、移動する前の残像が残る。
  261.             enemyImage = enemyGHandle[5];
  262.             Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
  263.             enemyHP = enemyHP - 100;
  264.             zannzou = 60;
  265.             addattacktime = 500;
  266.  
  267.  
  268.         }
  269.  
  270.     }//if (Key[KEY_INPUT_A] == 1 && count == 50)と条件が被ると重複して10を引いてしまうのでそれ以外で押された場合として書いた。
  271.     //上のif文が成り立たなくても成り立つように、かつ被らないようにするためにelse ifで書いた。
  272.     else if (Key[KEY_INPUT_A] == 1 && playerX == enemyX - 1 && count >= 10)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
  273.     {
  274.         count = count - 10;
  275.         playerX = enemyX - 1; // 俺は敵の眼前へ
  276.         addattacktime = 500;
  277.         enemyHP = enemyHP - 50;
  278.         //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  279.     }
  280.     else if (Key[KEY_INPUT_K] == 1 && playerX == enemyX - 1 && count >= 0)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
  281.     {
  282.         Kcount = Kcount - 50;
  283.         playerX = enemyX - 1; // 俺は敵の眼前へ
  284.         addattacktime = 500;
  285.         enemyHP = enemyHP - 100;
  286.         //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  287.     }
  288.  
  289.     //同時押しでの攻撃
  290.     //if (Key[KEY_INPUT_A] == 1 && Key[KEY_INPUT_K] == 1 && Wcount == 100) {//攻撃がキックだった場合
  291.         //lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
  292.         //lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
  293.         //preplayerX = playerX; // 元の位置を保持
  294.         //playerX = enemyX - 1; // 俺は敵の眼前へ
  295.         //if (playerX == enemyX - 1) { preplayerX; playerImage = playerGHandle[4]; }//敵の前に言ったら、移動する前の残像が残る。
  296.         //enemyImage = enemyGHandle[5];
  297.         //Wcount = Wcount - 100;//キーAとKを押すたびに50だけ引く
  298.         //enemyHP = enemyHP - 100;
  299.         //addattacktime = 500;
  300.  
  301.  
  302.     //}
  303.  
  304.     //銃を使った攻撃
  305.  
  306.     if (Gfunction_status == 0) {
  307.         if (Key[KEY_INPUT_G] == 1 && Gcount >= 1 && Gtime == 0 && Gkey == 1 && Key[KEY_INPUT_L] == !1) { //キーGを押していて且つ残り弾数( Gcount )が1発以上あって銃を撃ってからの経過時間( Gtime )が0の場合のみ銃を撃てる
  308.             Gtime = 1; //銃を撃ってからの経過時間を1にする
  309.             Gcount = Gcount - 1; //残弾数を-1する
  310.             playerImage = playerGHandle[7]; //真正面の状態にする
  311.             if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  312.                 playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//これで前に敵がいるときのみに攻撃が出来る。
  313.                 enemyHP = enemyHP - 10;
  314.                 enemyImage = enemyGHandle[5];
  315.             }
  316.         }
  317.  
  318.         if (Gtime > 0) { //銃を撃ってからの経過時間が0より大きい場合のみ
  319.             ++Gtime; //銃を撃ってからの経過時間を+1する
  320.         }
  321.         if (Gtime == 20) { //銃を撃ってから1秒( 60 )経過したら
  322.             playerImage = playerGHandle[10]; //左横向きの状態にする
  323.         }
  324.         if (Gtime == 40) { //銃を撃ってから2秒( 120 )経過したら
  325.             playerImage = playerGHandle[4]; //右横向きの状態に戻す
  326.             Gtime = 0; //銃を撃ってからの経過時間を0に戻す
  327.         }
  328.         ///if (Gcount <= 0) { Gcount = 0; }//こいつによってGcountが負の値に進まずにいる。
  329.         if (Gcount <= 0) {  //銃の弾の数が0以下だったら
  330.             Gcount = 0;
  331.             GcountA = 1;//リロード中を描画するために作った変数
  332.             ++GcountZeroCounter;    //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  333.             if (GcountZeroCounter >= 900) { //銃の弾が0になってから経過したフレーム数が15秒( 60 × 15 )経過したら
  334.                 Gcount = 15;    //銃の弾の数を15に増やす
  335.                 GcountZeroCounter = 0;  //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  336.                 GcountA = 0;
  337.             }
  338.         }
  339.     }//if (Gfunction_status == 0)の{}である。
  340.     if (Gfunction_status == 1) {
  341.         ++MGcountW;
  342.         if (Key[KEY_INPUT_G] == 1 && MGcount >= 1 && Gtime == 0 && Gkey == 2) {
  343.             MGframe = 1; MGtime = 1;
  344.         }//Key[KEY_INPUT_L] ==! 1とすることでキーLを否定して銃を変える時にLを離してから撃てるようになった。
  345.         if (MGcount > 0 && MGframe == 1 && Key[KEY_INPUT_L] == !1) {
  346.             if (MGcountW%5== 0) {//これのおかげでマシンガンを撃っても素早く相手のHPは減ったりせず、MGcountWが5で割れるときにのみ弾丸があ減り相手のHPが減る。
  347.                 MGcountW = 0;
  348.                 --MGcount;//マシンガンの弾が減っていき、かつ相手が同じ行にいるときに相手のHPが減る。そうかかないと一度マシンガンを使った後、ボタンを押していなくても敵が同じ行にいるだけで相手のHPが勝手に減る。
  349.                 if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  350.                     playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//if (Key[KEY_INPUT_G] == 1 && Gcount >= 1 && Gtime == 0 && Gkey == 2)の中ではKey[KEY_INPUT_] == 1の都合で押し続けても一回しか押さないようにしかカウントされないため、中には書かなかった。
  351.                     enemyHP = enemyHP - 2;
  352.                     enemyImage = enemyGHandle[5];
  353.                 }
  354.             }
  355.         }
  356.         if (MGtime > 0) { //銃を撃ってからの経過時間が0より大きい場合のみ
  357.             ++MGtime; //銃を撃ってからの経過時間を+1する
  358.         }
  359.         if (MGtime == 20) { //銃を撃ってから1秒( 60 )経過したら
  360.             playerImage = playerGHandle[10]; //左横向きの状態にする
  361.         }
  362.         if (MGtime == 40) { //銃を撃ってから2秒( 120 )経過したら
  363.             playerImage = playerGHandle[4]; //右横向きの状態に戻す
  364.             MGtime = 0; //銃を撃ってからの経過時間を0に戻す
  365.         }
  366.  
  367.         if (Key[KEY_INPUT_G] == !1) { MGframe = 0; }//キーGを押していない時は止まるようにする
  368.  
  369.     }
  370.     if (MGcountW > 100){MGcountW = 0;}
  371.  
  372.     //ワイヤーを使って相手を前の列に引っ張る
  373.     if (Key[KEY_INPUT_Y] == 1) {//playerX + 1 == enemyXより敵が自分の位置に+1するときの位置にいる場合を表す、なので多分playerX== enemyX-1でもいいと思う。
  374.         if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  375.             playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {
  376.             enemyX = 3;//敵を最前列に引っ張る
  377.         }
  378.     }
  379.  
  380.     //ガード
  381.     if (Key[KEY_INPUT_P] == 1) {
  382.         protect = 1;
  383.     }
  384.     if (protect == 1) { ++protectcount; }
  385.     if (protectcount > 0 && protectcount < 50) {
  386.         protect = 1;
  387.     }if (protectcount == 50) { protect = 0; protectcount = 0; }
  388.  
  389.     //リロードさせるためのプログラム
  390.     //変数リロードでまとめたがなぜかマシンガンは0の時に変数MGcountAが1にならないので消した。まあ、こいつが無くても勝手にリロードできるのでこれでいい。
  391.     if (Gcount <= 0) {  //銃の弾の数が0以下だったら
  392.         Gcount = 0;
  393.         GcountA = 1;//リロード中を描画するために作った変数
  394.         ++GcountZeroCounter;    //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  395.         if (GcountZeroCounter >= 900) { //銃の弾が0になってから経過したフレーム数が15秒( 60 × 15 )経過したら
  396.             Gcount = 15;    //銃の弾の数を15に増やす
  397.             GcountZeroCounter = 0;  //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  398.             GcountA = 0;
  399.         }
  400.     }
  401.  
  402.  
  403.  
  404.     if (MGcount <= 0) { //銃の弾の数が0以下だったら
  405.         MGcount = 0;
  406.         MGcountA = 1;//リロード中を描画するために作った変数
  407.         ++MGcountZeroCounter;   //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  408.         if (MGcountZeroCounter >= 1500) {   //銃の弾が0になってから経過したフレーム数が25秒( 60 × 25 )経過したら
  409.             MGcount = 200;  //銃の弾の数を15に増やす
  410.             MGcountZeroCounter = 0; //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  411.             MGcountA = 0;
  412.         }
  413.     }
  414.     //↓確認addattcktimeの—1について関係はない
  415.     //俺は敵の眼前へ言った後、このifの条件により続けて攻撃か元の位置に戻るかになる
  416.     if (addattacktime <= 500 && addattacktime > 0)//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る
  417.     {//★addattacktimeが500以下で0より大きい時—1されていく、そして500以下ならばかつ0より大きいならばずっと処理されるということ。
  418.         --addattacktime;
  419.         addplayerX;
  420.         playerX = addplayerX;
  421.         playerY = addplayerY;
  422.         playerImage = playerGHandle[4];//アドアタックタイム中はずっと十字キーを押して動いたりしないように、前だけ見ているようにするためにした。
  423.         if (Key[KEY_INPUT_R] == 1) {
  424.             lock = 0;
  425.         }
  426.         if (Key[KEY_INPUT_K] == 1 && Kcount == 50 && enemyImage == enemyGHandle[5]) {//攻撃がキックだった場合
  427.             Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
  428.             enemyImage = enemyGHandle[5];
  429.             if (enemyImage == enemyGHandle[5])//攻撃を食らうと右向きになるようにする
  430.             {
  431.                 enemyHP = enemyHP - 50;
  432.                 playerImage = playerGHandle[4];
  433.                 addattacktime = 500;
  434.  
  435.             }
  436.  
  437.         }
  438.     }
  439.     //pos[playerY][playerX + 1][0] == pos[enemyY][enemyX][0] && pos[playerY][playerX + 1][1] == pos[enemyY][enemyX + 1][1]
  440.  
  441.     if (addattacktime == 0) {
  442.         playerX = preplayerX;
  443.         playerImage = playerGHandle[4];
  444.         addattacktime = 501;//addattacktimeが0にると、元の位置に戻る
  445.     }
  446.  
  447.     //とりあえず、攻撃の最中も上がるようにif (addattacktime == 501){}の外にif文を出した。
  448.  
  449.  
  450.  
  451.     if (addattacktime == 501) {
  452.         //★あるフレームが進んでから画像がを動くまでを遅くした、ならば、あるフレームが進んだら数字も次の数字に移るまで遅くできるのは?と考えた。
  453.  
  454.         if (Kcount < 50) ++frames;//count=0,Kcount=0,frames=20
  455.         if (frames % 5 == 0) {               //framesが20なので条件を満たさない
  456.             ++Kcount;
  457.             if (Kcount > 50) {
  458.                 Kcount = 50;
  459.             }
  460.         }
  461.         if (count < 50) ++frames;             //count=0,Kcount=0,frames=19
  462.         if (frames % 20 == 0) {                //framesが20なので条件を満たす
  463.             ++count;                     //count=1,Kcount=0,frames=19
  464.             if (count > 50) {             //countが50以下なので満たさない
  465.                 count = 50;
  466.  
  467.             }
  468.         }
  469.  
  470.     }
  471.  
  472.     //キーLを押したまま別のキーを押すと武器が切り替わる
  473.     if (Key[KEY_INPUT_L] == 1) { Lcount = 1; }
  474.     if (Lcount > 0) { ++Lframe; }
  475.     if (Key[KEY_INPUT_L] == !1) { Lcount = 0; }//キーLを離すとLcountは0になる。
  476.     if (Lcount > 0) {
  477.         if (Key[KEY_INPUT_G] == 1) {
  478.             Gtime = 0;
  479.             ++Gfunction_status;
  480.             ++Gkey;
  481.  
  482.         }
  483.     }
  484.     if (Gkey > 2) { Gkey = 1; }
  485.     if (Gfunction_status > 1) { Gfunction_status = 0; }
  486.  
  487.  
  488.     // 敵の移動
  489.     int t = GetNowCount();
  490.     if (t >= nextMoveTime) { // 指定の時間が経ったら(1sごとに)
  491.         nextMoveTime = t + MOVE_INTERVAL; // 次回移動処理をする時刻
  492.         if (stopCount > 0) { // 停止中のとき
  493.             stopCount--; // 止まっている残り時間(回数)を減らす
  494.         }
  495.         else { // 普通の状態のとき
  496.             if (GetRand(99) < 10) { // たまに(10%の確率で)
  497.                 stopCount = GetRand(4); // 数秒間(1~5秒間)その場に止まる
  498.             }
  499.  
  500.             else { // 9マス上のいずれかのパネルに移動させる
  501.                 int cy = enemyY, cx = enemyX;
  502.                 do {
  503.                     enemyY = GetRand(2);
  504.                     enemyX = GetRand(2) + 3;
  505.                 } while (enemyX == cx && enemyY == cy ||
  506.                     enemyX == playerX && enemyY == playerY);
  507.                 enemyImage = enemyGHandle[10];
  508.                 enemyMove = 1;
  509.             }
  510.             //移動する以外は攻撃してくる
  511.             if (GetRand(99) < 30 && GetRand(99) > 10) {//GetRand(30) < 30とすると攻撃する途中でやめたり、カウンタが2を超えて上がってしまったりする。
  512.                 enemyattack = 1;
  513.                 if (enemyattack == 1) {
  514.                     enemyX = playerX + 1;
  515.                     enemyY = playerY;
  516.                     preenemyX = enemyX;
  517.                     preenemyY = enemyY;
  518.                     ++enemycount;
  519.                 }
  520.             }
  521.             if (enemyattack > 0) {
  522.                 enemyattack++;
  523.                 enemyX = preenemyX;
  524.                 enemyY = preenemyY;
  525.                 enemyattackB = 0;
  526.                 if (enemyattack == 3 && enemyX == playerX + 1 && enemyY == playerY && protect == 0) {//これだとif (enemyattack > 0)の時に得た敵のマスの情報をenemyattackが3の時にしか渡さないので、それ以外の2とかの時は敵陣にいるときもある。
  527.                     playerHP = playerHP - 50; playerImage = playerGHandle[11];
  528.                     enemyX = preenemyX;
  529.                     enemyY = preenemyY;
  530.                     enemyattackB = 0;
  531.                 }if (enemyattack == 3) { enemyattack = 0; }
  532.                 else if (enemyattack == 3 && enemyX == playerX + 1 && enemyY == playerY && protect == 1) {//ガードしていた場合攻撃を食らわない。
  533.                     playerHP = playerHP - 0;
  534.                 }
  535.             }
  536.             //if(enemycount>0){ ++enemycount; }
  537.  
  538.             //下の二つのif文以外でもenemycountは上がるので
  539.             //★できればenemyattackが連続で起こると攻撃が途中で終わったりするが、これはランダム関数の問題なのか、それともenemyattackを工夫すればいいのか
  540.             //他の攻撃もあるし、途中で攻撃が終わるのも仕方ないのかも、あるいは、確率の変数を一定時間新しい変数で書いたフレームないに確保して、その間で攻撃するのは?その攻撃をenemycountとするのは
  541.             //確率の値が変わり、その値が入ってくる。これ以上
  542.             ///if (enemyattack == 2) {rundumsavetime = 1;}//攻撃を一回ずつ小分けにするために作った。enemycount == GetRand(3)があるので++enemycountは意味がない。中にif分を書いても
  543.             //enemycount=1の時にしか動かないので意味がない、if elseではif else内でのenemycountの働く意味がない。
  544.             ///if (rundumsavetime > 0 && ++rundumsavetime < 5) { enemyattack = 0; enemycountframe = 0; enemycount = 0; }
  545.             //★上のif文で他の変数の値を0で抑えることでも実行でない。多分、攻撃する奴は分岐しないでそのまま入ってくるため以下の分岐する奴と違い反応が早いのだろう。以下の奴でも外に書いた時は時は実際に値が入り、自分の目の前に来たが、中に書いた後は分岐ゆえに反応が遅くなり値が入らないため反応できていないのかもしれない、しかし仮に実行できたとしても攻撃する度にすべて0になってしまい何も起きずに、それを繰り返してしまうのでずっと0だ。
  546.             //攻撃する度に{ enemyattack = 0; enemycountframe = 0; enemycount = 0; }になるのでダメだ。ずっと{ enemyattack = 0; enemycountframe = 0; enemycount = 0; }になっているのでだめ
  547.             ///if (rundumsavetime == 5) { rundumsavetime = 0;}//この間は攻撃できないようにした。しかしこの期間中にenemycountはずっと上がるので使えない、//ここに++enemycountを入れると一回の攻撃で上がってしまい
  548.             //上のやり方ではうまくいかない、これでも確率は働いてしまうので、確率の関数事態に働かなくては。
  549.  
  550.             if (GetRand(99) < 50 && GetRand(99) > 30) {
  551.                 enemyattackB = 1;
  552.                 if (enemyattackB == 1) {
  553.                     enemyX = playerX + 1;
  554.                     enemyY = playerY;
  555.                     preenemyX = enemyX;
  556.                     preenemyY = enemyY;
  557.                     ++enemycount;
  558.                 }
  559.             }
  560.             if (enemyattackB > 0) {
  561.                 enemyattackB++;
  562.                 enemyX = preenemyX;
  563.                 enemyY = preenemyY;
  564.                 enemyattack = 0;
  565.                 if (enemyattackB == 3 && enemyX == playerX + 1 && enemyY == playerY && protect == 0) {//これだとif (enemyattack > 0)の時に得た敵のマスの情報をenemyattackが3の時にしか渡さないので、それ以外の2とかの時は敵陣にいるときもある。
  566.                     playerHP = playerHP - 100; playerImage = playerGHandle[11];
  567.                     enemyX = preenemyX;
  568.                     enemyY = preenemyY;
  569.                     enemyattack = 0;
  570.                 }if (enemyattackB == 3) { enemyattackB = 0; }
  571.                 else if (enemyattackB == 3 && enemyX == playerX + 1 && enemyY == playerY && protect == 1) {//ガードしていた場合攻撃を食らわない。
  572.                     playerHP = playerHP - 0;
  573.                 }
  574.             }
  575.             if (enemycount == 7) { ++enemycountframe; }//5回目になった瞬間に実行するので2回まで攻撃してくるとなる。攻撃が途中で終わってしまうことを考えると3では少ないので5でもいい
  576.             //if (enemycount == GetRand(3))
  577.                 //if(enemycount == 1|| enemycount == 2|| enemycount == 3)++enemycountframe;//ランダムでも動くが攻撃する頻度が減るのでランダムでない方がいいかも。
  578.             if (enemycountframe > 0 && ++enemycountframe < 10) { enemyattack = 0; enemycount = 0; enemyattackB = 0; }//enemycountframeが0から0までの間はenemyattackを0のままにして、enemyattackができないようにする
  579.             if (enemycountframe == 10) { enemycountframe = 0; }//ここにもenemycount = 0;を書いていた。
  580.             if (enemycount == 0) { // 9マス上のいずれかのパネルに移動させる
  581.                 int cy = enemyY, cx = enemyX;
  582.                 do {
  583.                     enemyY = GetRand(2);
  584.                     enemyX = GetRand(2) + 3;
  585.                 } while (enemyX == cx && enemyY == cy ||
  586.                     enemyX == playerX && enemyY == playerY);
  587.                 enemyImage = enemyGHandle[10];
  588.                 enemyMove = 1;
  589.             }
  590.  
  591.         }//こいつが一番上のelseとつながっている。
  592.  
  593.     //ココではない上にif (enemycountframe > 0 && ++enemycountframe < 30)に enemyattackB = 0;を
  594.         //書いたが{}の外とかで反映されないのかもしれない。上のように書くとenemyattackBは0になった、しかし、目の前に来る。enemyattackB = 0と同じように反映されないかったのかもしれない。
  595.         //だとしたらここにも同じものを書かなくてはならない。
  596.         //if (enemycountframe == 30) { enemycount = 0; enemycountframe = 0; }
  597.  
  598.     }
  599.     //中に書くにしてもif (enemycount == 0)の場合を書かなかったら敵が目の前に来た、0の場合の処理を書いた方がいいようだ。攻撃以外は目の前に来るようなコードは書いていないが。
  600.     //まあ、「0の時の場合を書いていないので不自然な動きが起きてしまった」ということも考えられる。
  601.     //if (frames < 500) { frames = 0; }
  602.  
  603.  
  604.  
  605.  
  606.     if (playerMove > 0) {//1フレームで処理を終わらせるためifの後はelse ifを使った。//フレームがあってもplayerMove++を書かないと1ずつ上がらない。playerMove++をフレームの60回ループするするところに書くことで以下のように書いて足踏みしている画像が描けた。
  607.         playerMove++;//60フレームの中で、このifで条件(playerMove > 0)が真であるためplayerMove++を「フレーム」と「条件式」により繰り返しplayerMove++して、
  608.         if (playerMove == 20)//以前の文を否定しないelse ifが次にあるためplayerMoveの情報を引き継ぎplayerMove == 20となるまで繰り返しplayerMove++をした。次にもelse ifがあるので同様、、、
  609.         {
  610.             playerImage = playerGHandle[4];
  611.         }
  612.         else if (playerMove == 40)//条件式として書くため=は==と書いた。//else ifによりplayerMoveが20を超えて(20の場合を否定し)30の場合を表す。
  613.         {
  614.             playerImage = playerGHandle[5];
  615.         }
  616.         else if (playerMove == 60)//30まで上がったものが40に上がった時、playerGHandle[4]になる。if文の連続では文法のルールで前の文を否定するため連続的に画像が流れず足踏みできない、なのでelse ifにしたのだ。
  617.         {
  618.             playerImage = playerGHandle[4];
  619.         }
  620.         else if (playerMove == 80) {//下に書いているように60フレームないに納めないといけないため、50まで上がったところで終わっている。もともと60 * 4と書いた
  621.             playerImage = playerGHandle[3];//上に書いてることには誤りがある、60フレームで1sなだけ、超えてもいい。
  622.             playerMove = 1;//
  623.         }
  624.  
  625.     }
  626.  
  627.  
  628.     //ループ内に書いたenemyMoveについてenemyMoveが0より大きくて40を超えたら{}の中身を実行。
  629.     //enemyMoveが0より大きいならば+1されて、40より大きい数値になれば両方の条件を満たすので+1される。40より大きい数値になったら敵の画像が変わる。
  630.     //enemyMoveが40より+1されて大きくなるために++enemyMove > 40
  631.     if (enemyMove > 0 && ++enemyMove > 40) {//pcが60フレームで一周するためenemyMoveが61以上だとenemyGHandle[8]が反映されず元のままで移動が終わる。なのでenemyMoveは60以下でなくてはならない
  632.         enemyMove = 0; enemyImage = enemyGHandle[11];//60になる前に画像11を描画するようにしなければならないため、60より小さい40フレームにした。
  633.     }
  634. }
  635.  
  636.  
  637. //バトルの時に描画するもの
  638. void Player_Draw() {
  639.     // ステージの描画  ★function_status == 0の場合ではないし、0か1の二択しかため、function_statusの初期値は1であるためif (function_status == 0)は除外されelseの方が描画される。
  640.     int stageColor = GetColor(160, 64, 64);
  641.     for (int i = 0; i < 4; i++)
  642.         DrawLine(stage[i][0][0], stage[i][0][1],
  643.             stage[i][6][0], stage[i][6][1], stageColor, 5);
  644.     for (int j = 0; j < 7; j++)
  645.         DrawLine(stage[0][j][0], stage[0][j][1],
  646.             stage[3][j][0], stage[3][j][1], stageColor, 5);
  647.  
  648.     DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],
  649.         enemyImage, true);   // 敵キャラの描画
  650.  
  651.     DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1],
  652.         playerImage, true);  // 俺キャラの描画
  653.  
  654.     //自分と敵が重なるようにしないためのプログラム
  655.     if (playerY == enemyY - 1 && playerX == enemyX) {
  656.         DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1],//DrawGraphの関数自体の置いた順番に先に奥に描画されるので左のように書く。
  657.             playerImage, true);  // 俺キャラの描画
  658.         DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],
  659.             enemyImage, true);   // 敵キャラの描画
  660.     }
  661.     if (playerY == enemyY + 1 && playerX == enemyX) {
  662.         DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],
  663.             enemyImage, true);   // 敵キャラの描画
  664.         DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1],
  665.             playerImage, true);  // 俺キャラの描画
  666.     }
  667.  
  668.  
  669.     // 俺キャラ(敵の目の前に移動する際の残像)の描画
  670.     if (zannzou <= 60 && zannzou > 0) { //★残像を出すためにRキーでAを押したら変数zannzouが20になり、zannouの変数が0より大きいならば—1をしていき、その間だけ画像を描画する。
  671.         --zannzou;
  672.         DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  673.             playerImage, true);
  674.     }//移動した一瞬に元の位置に自分を描画したい、しかしうまく機能していない。
  675.     ///★多分一瞬過ぎるのであえてcount < 8と範囲を付けることでほんの一瞬だが残像が見えるようにした。
  676.     ///攻撃してcountが50に溜まるまでの期間を利用した。
  677.     if (zannzou <= 60 && zannzou > 40) {
  678.         DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  679.             playerGHandle[9], true);
  680.     }
  681.     if (zannzou <= 40 && zannzou > 20) {
  682.         DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  683.             playerGHandle[10], true);
  684.     }
  685.     if (zannzou <= 20 && zannzou > 0) {
  686.         DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  687.             playerGHandle[11], true);
  688.     }
  689.  
  690.  
  691.     if (lock == 1) {
  692.         DrawGraph(
  693.             pos[enemyY][enemyX][0] + 13,//敵の中心にマークを持ってくるために+13した。
  694.             pos[enemyY][enemyX][1] + 21,//敵の中心にマークを持ってくるために+21した。
  695.             lockImge, true); // FALSE -> TRUE//ロックマーク中だけ描画するようにした。
  696.     }//ロックマークの描画
  697.     if (lock) DrawFormatString(100, 200, GetColor(255, 255, 255), "LOCK");//ループ内に書くと条件式lockのによりlockの値を0にしてもずっと表示されるため、必要な時に表示するようにここに書いた
  698.  
  699.     DrawFormatString(50, 300, GetColor(255, 0, 0), "%d/%d", count, count2);//1回殴った時にすべて消費して、再び溜まるまでの過程を表示するための関数
  700.     if (count < 50) {
  701.         DrawFormatString(50, 300, GetColor(0, 255, 255), "%d", count);//ここでcountの情報だけを条件(count < 500)より呼び出して、countの色を変えた
  702.     }
  703.     //敵のHPの描画
  704.     DrawFormatString(pos[enemyY][enemyX][0] + 33, pos[enemyY][enemyX][1] - 49, GetColor(152, 251, 152), "HP%d", enemyHP);
  705.  
  706.     DrawFormatString(10, 70, GetColor(255, 0, 0), "playerHP%d", playerHP);
  707.  
  708.     DrawFormatString(50, 400, GetColor(255, 0, 0), "%d/%d", Kcount, Kcount2);
  709.  
  710.     DrawFormatString(150, 400, GetColor(255, 0, 0), "%d/%d", Wcount, Wcount2);
  711.     DrawFormatString(250, 650, GetColor(255, 100, 100), "framesは%d", frames);
  712.  
  713.  
  714.  
  715.     DrawFormatString(50, 500, GetColor(255, 0, 0), "%d", addattackimage);//★addattacktimeが攻撃に続けば500になるし、それ以外では初期値より0なのでずっと下がっているわけではない
  716.     if (addattacktime <= 500 && addattacktime > 0) {
  717.         --addattacktime;
  718.         DrawFormatString(50, 450, GetColor(255, 0, 0), "addattacktime%d", addattacktime);
  719.     }//ロックオンして攻撃するまでの間のみ出てくる。
  720. //★上限や下限はないが、変数の値をセットすることで切り替えることはできる。今回はそれを活用して変数の値を一時的に固定したり変えたりしている。
  721.  
  722.     DrawFormatString(50, 470, GetColor(255, 0, 0), "確認addattacktime%d", addattacktime);
  723.     DrawFormatString(50, 500, GetColor(255, 0, 0), "stopenemytime%d", stopenemytime);
  724.     DrawFormatString(50, 570, GetColor(255, 150, 170), "function_statusは%d", function_status);
  725.     DrawFormatString(50, 585, GetColor(255, 0, 0), "Gtime%d", Gtime);
  726.     ///DrawFormatString(150, 585, GetColor(255, 0, 0), "GtimeA%d", GtimeA);
  727.  
  728.  
  729.  
  730.  
  731.     if (GcountA == 0) {
  732.         DrawFormatString(200, 600, GetColor(255, 0, 0), "グロッグ射撃可能");
  733.         DrawFormatString(50, 600, GetColor(255, 0, 0), "Gcount%d/Gcount%d", Gcount, Gcount2);
  734.     }
  735.     if (GcountA == 1) { DrawFormatString(200, 600, GetColor(255, 255, 0), "グロッグリロード中"); }
  736.  
  737.     if (MGcountA == 0) {
  738.         DrawFormatString(250, 650, GetColor(255, 0, 0), "マシンガン射撃可能");
  739.         DrawFormatString(50, 650, GetColor(255, 0, 0), "MGcount%d/MGcount%d", MGcount, MGcount2);
  740.     }
  741.     if (MGcountA == 1) {
  742.         //被らないようにするとなるとGfunction_status == 0の時にMGcountAを0にしても勝手にリロードされる。
  743.         //被らないような新しい変数を良いすればいいかもしれないが、誤作動とかを考えると何の武器を選んでいるか把握できた方がいいかもしれない。
  744.         DrawFormatString(200, 650, GetColor(255, 255, 0), "マシンガンリロード中");
  745.     }
  746.  
  747.     //何を選択しているかの表示
  748.     if (Gfunction_status == 0 && GcountA == 0) {
  749.         DrawFormatString(200, 600, GetColor(255, 255, 0), "グロッグ射撃可能");
  750.         DrawFormatString(50, 600, GetColor(255, 255, 0), "Gcount%d/Gcount%d", Gcount, Gcount2);
  751.     }
  752.     if (Gfunction_status == 1 && MGcountA == 0) {
  753.         DrawFormatString(250, 650, GetColor(255, 255, 0), "マシンガン射撃可能");
  754.         DrawFormatString(50, 650, GetColor(255, 255, 0), "MGcount%d/MGcount%d", MGcount, MGcount2);
  755.     }
  756.  
  757.     DrawFormatString(200, 500, GetColor(255, 0, 0), "敵が攻撃してくるまでenemyattackは%dでenemyattackBは%d", enemyattack, enemyattackB);
  758.     DrawFormatString(50, 620, GetColor(255, 0, 0), "protectは%d、protectcountは%d", protect, protectcount);
  759.     DrawFormatString(290, 630, GetColor(255, 0, 0), "enemycountframeは%d,enemycount%d", enemycountframe, enemycount);
  760.     DrawFormatString(100, 150, GetColor(255, 0, 100), "enemycount%d", enemycount);
  761.     DrawFormatString(320, 540, GetColor(255, 0, 0), "Gkeyは%d,Gfunction_statusは%d,Grockは%d,reloadは%d", Gkey, Gfunction_status, Grock, reload);
  762.     DrawFormatString(320, 560, GetColor(255, 0, 0), "GcountAは%d,MGcountAは%d,MGcountWは%d", GcountA, MGcountA, MGcountW);
  763.     DrawFormatString(320, 580, GetColor(255, 0, 0), "lockは%d,lockonMoveは%d,zannzouは%d", lock, lockonMove, zannzou);
  764.  
  765.  
  766.  
  767.  
  768. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement