Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 68.35 KB | None | 0 0
  1. #include "DxLib.h"
  2.  
  3. int Key[256];
  4.  
  5. int gpUpdateKey()
  6. {
  7.     char tmpKey[256];
  8.     GetHitKeyStateAll(tmpKey);
  9.     for (int i = 0; i < 256; i++)
  10.         (tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;//押されている時はキーを更新するので一マス毎進めるのでは?
  11.     return 0;
  12. }
  13. int Pad[32];
  14. int gpUpdatePad()
  15. {
  16.     int padStat = GetJoypadInputState(DX_INPUT_KEY_PAD1);    //入力状態を padStat に格納
  17.     for (int i = 0; i < 28; i++) {                            //ボタン28個分ループ
  18.         if (padStat & (1 << i)) {                            //ボタンiの入力フラグが立っていたら
  19.             Pad[i]++;                                        //加算
  20.         }
  21.         else {                                            //入力がなければ
  22.             Pad[i] = 0;                                        //0 にする
  23.         }
  24.     }
  25.  
  26.     return 0;
  27. }
  28.  
  29. int PrevPadState = 0;  //適切な初期値は0かなきっと
  30. int CurrPadState = 0;  //適切な初期値は0かなきっと
  31. void UpdatePadState()
  32. {
  33.     //「前回」情報を更新
  34.     PrevPadState = CurrPadState;
  35.     //「今回」情報を更新
  36.     CurrPadState = GetJoypadInputState(DX_INPUT_KEY_PAD1);  //引数はこれで良いのかな?
  37. }
  38.  
  39.  
  40. int stage[4][7][2];  // 盤上のマスの格子点の座標
  41. int pos[3][6][2];    // キャラ描画座標
  42. int i = 0, j = 0;
  43.  
  44. void init_stage()  // stage と pos を初期化する
  45. {
  46.     for (j = 0; j < 7; j++) {
  47.         int w = (j - 3) * 260, h = 680;//ステージの位置を変える、高さは大きさを変える
  48.         for (i = 4; --i >= 0; ) {
  49.             stage[i][j][0] = w + 880, stage[i][j][1] = h - 160;//ステージの大きさを変える、高さは位置を変える
  50.             w = w * 9 / 10, h = h * 9 / 10;
  51.         }
  52.     }
  53.     //ステージ上の中心の座標を表している。
  54.     for (int i = 0; i < 3; i++)
  55.         for (int j = 0; j < 6; j++) {
  56.             pos[i][j][0] = (stage[i][j][0] + stage[i + 1][j + 1][0]) / 2 - 25;
  57.             pos[i][j][1] = (stage[i][j][1] + stage[i + 1][j + 1][1]) / 2 - 65;
  58.         }
  59. }
  60.  
  61. int White;
  62. int function_status;//戦闘画面中は1とするための変数function_statusの定義
  63.  
  64. int enemyHP = 0, preenemyHP = 0, enemysabunHP = 0, enemydamegeHP = 0, enemyHPhyouji = 1;
  65.  
  66.  
  67.  
  68. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  69. {
  70.     SetGraphMode(1770, 1580, 32);         // ウィンドウの大きさを指定
  71.     ChangeWindowMode(TRUE);             // 全画面ではなくウインドウを使用
  72.     if (DxLib_Init() == -1) return -1;  // DXライブラリ初期化処理
  73.     SetDrawScreen(DX_SCREEN_BACK);      // 裏画面を使用する設定
  74.  
  75.     // ウインドウのサイズを手動ではできず、且つウインドウのサイズに合わせて拡大もしないようにする
  76.     SetWindowSizeChangeEnableFlag(FALSE, FALSE);
  77.  
  78.     int ScreenMode = 0;
  79.     int x = 0;
  80.     int add = 0;
  81.     int NowTime = 0;
  82.     int ChangeTime = 0;
  83.  
  84.     // 最初は 640x480 にしておく
  85.     ScreenMode = 0;
  86.  
  87.     SetFontSize(40);
  88.     init_stage(); // stage, pos の初期化
  89.     int enemyX = 4, enemyY = 1;   // 敵の位置
  90.     int playerX = 1, playerY = 1;  // 俺の位置
  91.  
  92.     int enemyMove = 0;   // 敵の移動状態
  93.       // 俺の移動状態//1~21で右に振り向きのプログラム①が終わり、22になったら足踏みする②を実行するようにする。
  94.     int playerMove = 1;
  95.  
  96.     int lockonMove = 0;
  97.     int lockonHandle[3];
  98.  
  99.     function_status = 1;//最初は1にして戦闘画面状態にする。
  100.  
  101.     int a = 0;
  102.  
  103.     int lock = 0;  // ロック状態
  104.  
  105.     int enemyGHandle[12];   // 敵のグラフィックハンドル格納用配列
  106.     int playerGHandle[12];  // 俺のグラフィックハンドル格納用配列
  107.     int kikennhanndle[12];
  108.     // 0-2:後ろ向き、3-5:右向き、6-8:前向き、9-11:左向き
  109.  
  110.     LoadDivGraph("charall.png", 12, 3, 4, 49, 66, enemyGHandle);
  111.     LoadDivGraph("charall.png", 12, 3, 4, 49, 66, playerGHandle);
  112.     SetTransColor(255, 255, 255); // 読み込む画像の前にこいつを置くことで透明化できる。ループ内にも書いて正しく動くが毎回読み込むようになってしまうため処理が遅くなる。
  113.     LoadDivGraph("lockon.bmp", 3, 3, 1, 23, 23, lockonHandle);//なので、一度読み込むだけ画像は使えるし、処理を遅くしないためにループに入る前かつWinMainの中に書いた。
  114.     LoadDivGraph("kikenn.png", 12, 4, 3, 67, 66, kikennhanndle);
  115.  
  116.     int enemyImage = enemyGHandle[11];    // 敵 左向き
  117.     int playerImage = playerGHandle[4];   // 俺 右向き
  118.     int lockImge = lockonHandle[2];
  119.     int preplayerX = 0;
  120.     int after = 0;
  121.     unsigned int count = 50;
  122.     int count2 = 50;
  123.     unsigned int count3 = 50;
  124.  
  125.     int Kcount = 50;//キック攻撃のゲージ
  126.     int Kcount2 = 50;
  127.     int Gcount = 15;//15発で数分で再びストックされる
  128.     int Gcount2 = 15;
  129.  
  130.     int Gtime = 0;
  131.     int Wcount = 100;
  132.     int Wcount2 = 100;
  133.  
  134.     int attackdamage = 0;//殴る際の攻撃判定として作った。
  135.     int addattacktime = 501;//追加攻撃をするための変数
  136.     int addattackimage = 20;//描画するための追加アタックのためのゲージ
  137.     int addplayerX = 0;
  138.     int addplayerY = 0;
  139.     //int addattacktimeEND = 0;//addattacktimeが終わった後の処理のためのモノ
  140.  
  141.     int zannzou = 0;// 攻撃してマスを移動するときのみ20にすればいいので、初期値は0とした。
  142.     int  frames = 0; // フレーム数
  143.     int frames2 = 0;
  144.     int stopenemytime = 0;
  145.     int GcountZeroCounter = 0;
  146.     int GcountA = 0;
  147.  
  148.     int preenemyX = 0, preenemyY = 0;
  149.     int rundumsave = 0;
  150.     int rundumsavetime = 0;
  151.     int enemyattacktime = 0;
  152.  
  153.     int nomove = 0;
  154.  
  155.     const int MOVE_INTERVAL = 1000; // 何ミリ秒ごとに移動処理をするか
  156.     int nextMoveTime = GetNowCount() + MOVE_INTERVAL; // 次回移動処理をする時刻
  157.     int stopCount = 0; // 動かないのがあと何回か
  158.  
  159.     int playerHP = 500;
  160.     int enemyHP = 300;
  161.  
  162.     int enemyattack = 0;
  163.     int enemyattackB = 0;
  164.  
  165.     int kaont = 0;
  166.     int preenemyXX = 0;
  167.     int preenemyYY = 0;
  168.     int enemycount = 0;
  169.     int enemycountframe = 0;
  170.     int Lcount = 0;
  171.     int Lframe = 0;
  172.  
  173.     int GtimeA = 0;
  174.     int Xkey = 0;
  175.     int Gkey = 1;
  176.     int Gfunction_status = 0;
  177.     int MGcount = 200;
  178.     int MGcount2 = 200;
  179.     int MGframe = 0;
  180.     int MGcountA = 0;
  181.     int MGcountZeroCounter = 0;
  182.     int Grock = 0;
  183.     int reload = 0;
  184.     int MGtime = 0;
  185.  
  186.     int protect = 0;
  187.     int protectcount = 0;
  188.     int b = 0;
  189.     int preenemyX2 = 0, preenemyY2 = 0, nageX = 0, nageY = 0, A = 0;
  190.     int preenemyY2A = 0, preenemyX2A = 0;
  191.     int nageXA = 0, nageYA = 0;
  192.     int X = 0;
  193.     int nageXAA = 0;
  194.  
  195.  
  196.  
  197.  
  198.     int randamumasuX = 0, randamumasuY = 0;
  199.     int kasokudo = 0, kasokudo2 = 0, kasokudo3 = 0, kasokudo4 = 0, kasokudo5 = 0, kasokudo6 = 0;
  200.     int preenemyX3 = 0, preenemyY3 = 0, preenemyX3A = 0, preenemyY3A = 0, preenemyX3B = 0, preenemyY3B = 0, preenemyX3C = 0, preenemyY3C = 0, preenemyX3D = 0, preenemyY3D = 0;
  201.     int randamuzahyoulock = 0, randamuzahyou = 0, randamuzahyoulockA = 0;
  202.     int randamumasuXcount = 0, randamumasuYcount = 0;
  203.     //int randamumasuXA = 0, randamumasuXB = 0;
  204.     int randamuzahyoukeisann = 0, randamuzahyoukeisannhiki = 0;
  205.     int randamumasuXA = 0, randamumasuYA = 0, randamumasuXB = 0, randamumasuYB = 0;
  206.     int randamulock = 0, randamulock2 = 0;
  207.     int bb = 0; int aa = 0;
  208.     int B = 0;
  209.     int randamuzahyoulockB = 0, randamuzahyoukeisannhikiB = 0, randamuzahyouB = 0, randamuzahyoukeisannB = 0;
  210.     int randamuzahyoulockBA = 0, randammasucount = 0;
  211.     int randammasucountB = 0;
  212.     int randammasucountA = 0, randammasucountBA = 0, randamuzahyoulockBAA = 0;
  213.     int test = 0;
  214.     int stopenemy = 0;
  215.     int Y = 0;
  216.     int test2 = 0;
  217.     int enemyattacklock = 0;
  218.     int addattacktimelock = 0;
  219.     int lockmark = 0;
  220.  
  221.     int kikenngazoukirikae = 0;
  222.     int kakudo = 0, kakudo2 = 0, kakudo3 = 0, kakudo4 = 0;
  223.     int kakudoA = 0, kakudoB = 0, kakudoC = 0, kakudoD = 0;
  224.  
  225.     int senntaku = 0;
  226.     int gamenidou = 0;
  227.     int hyouzi = 0;
  228.     int kaihimark = 0;
  229.     int Glock = 0;
  230.     int MovieGraphHandle;
  231.  
  232.     int C;
  233.  
  234.     int keybord = 0;
  235.     int jyoicon = 1;
  236.  
  237.     const int PAD_DOWN = 0;
  238.     const int PAD_LEFT = 1;
  239.     const int PAD_RIGHT = 2;
  240.     const int PAD_UP = 3;
  241.     const int PAD_1 = 4;//四角ボタン
  242.     const int PAD_5 = 8;//L1ボタン
  243.  
  244.     // ムービーファイルをロードします。
  245.     MovieGraphHandle = LoadGraph("180half_f.gif");
  246.     // ムービーを再生状態にします
  247.     PlayMovieToGraph(MovieGraphHandle);
  248.  
  249.     while (ProcessMessage() == 0) {
  250.         gpUpdateKey();  // キーの入力状態を取得
  251.  
  252.  
  253.         UpdatePadState();  //パッド状態の調査
  254.         gpUpdatePad();
  255.  
  256.        
  257.         if (gamenidou == 0) {//戦闘画面中は1とする
  258.  
  259.             if (Pad[PAD_RIGHT] == 1 && playerX < 2) { //キーを入力する以外にも押した後に早く画像を切り替えて足踏みするようにするために初期値にも1はあるがキーにもplayerMove=1を書いたり、キーを押したらどうしたいかをするためにplayerX++を書いている。
  260.                 playerMove = 1;  playerX++; playerImage = playerGHandle[2]; nomove = 1;//最大まで右には二回しか進めないのでplayerX < 2と書いた。
  261.                 if (playerX != enemyX && playerY != enemyY) {
  262.                     //preframe = 1;
  263.                     //DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1], playerGHandle[11], true);
  264.                      //キーを入力する以外にも押した後に早く画像を切り替えて足踏みするようにするために初期値にも1はあるがキーにもplayerMove=1を書いたり、キーを押したらどうしたいかをするためにplayerX++を書いている。
  265.                         //preframe = 1;
  266.                         //preplayerX = playerX;
  267.  
  268.                         //pos[playerY][playerX][0]が画面上のX座標であり、playerXは画面上に描画するための変換機の比喩なので、こいつに+で数値を加えても意味はない。
  269.  
  270.                     //if (preframe > 0 && preframe < 20) { DrawGraph(pos[playerY][playerX][0] - 50, pos[playerY][playerX][1], playerGHandle[11], true); }
  271.                 }
  272.             } //playerMove = 1;があると下に書いたplayerMoveより足踏みするplayerMoveが無いと初期値の1でそのまま足踏みするので遅く反応するのでは?
  273.             if (Pad[PAD_LEFT] == 1 && playerX > 0) {//キーにplayerMove=1を書くと初期値の1よりも早くキーに書いたplayerMoveの1が行くため早く足踏みに行くため、止まってから足踏みに行くまでの間にある向きを変える画像playerGHandle[2]が一瞬であるため、向きを変えるのが早く見えるのでは?足踏みを速く来るようにしたため。
  274.                 playerMove = 1; playerX--; playerImage = playerGHandle[9];//まあ、足踏みさせなくても、ただ書くだけでも方向を十分早く変えれる
  275.                 //preframeA = 1;
  276.             }
  277.             if (Pad[PAD_UP] == 1 && playerY > 0) {
  278.                 playerMove = 1; playerY--; playerImage = playerGHandle[2];
  279.                 //preframeB = 1;
  280.             }
  281.             if (Pad[PAD_DOWN] == 1 && playerY < 2) {
  282.                 playerMove = 1; playerY++; playerImage = playerGHandle[8];
  283.                 //preframeC = 1;
  284.             }
  285.  
  286.             if (Key[KEY_INPUT_B] == 1) {
  287.                 gamenidou = 1;
  288.  
  289.             }
  290.             //gpUpdateKey();  // キーの入力状態を取得 上のifで既にgpUpdateKey();があり、elseはif以外の情報は引き継ぐので再びgpUpdateKey();書く必要はなかった。
  291.             // 俺の移動
  292.  
  293.             //playerMove = 1;があると下に書いたplayerMoveより足踏みするplayerMoveが無いと初期値の1でそのまま足踏みするので遅く反応するのでは?
  294.  
  295.  
  296.  
  297.             //Rが一度押された上でフレームを利用してループさせるためにif文を新しく外に書いたのだ。
  298.             if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
  299.                 DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],//多分ここはいらない下に描画するための関数を書くため
  300.                     lockImge, FALSE);   // ロックマークの描画
  301.                 lock = 1;//Key[KEY_INPUT_R] == 1 && playerY == enemyYの時、lockを1にする。lockを「何フレーム目の時」でも値を1として置いたため、条件式lockの入力キーAに呼び出せる。
  302.                 lockonMove = 1;
  303.                 //preenemyXX = enemyX;
  304.             }
  305.             if (lockonMove > 0) {//lockonMoveが0より大きいならば++lockonMoveをする、
  306.                 ++lockonMove;
  307.             }
  308.             if (lockonMove == 10) {
  309.                 lockImge = lockonHandle[0];//情報lockonMove == 10やlockonHandle[0]を引き継いで下に書いた描画関数に入るため、ここには関数に入れる情報だけ入るのだ。
  310.                 //その時の情報lockonMove == 10やlockonHandle[0]以外の引き継がれたとうかその時の敵の座標なども関数に入る。関数が求めるものが入るので、関数に必要なものを揃える。
  311.             }
  312.             else if (lockonMove == 20) {
  313.                 lockImge = lockonHandle[1];
  314.  
  315.             }
  316.             else if (lockonMove == 30) {
  317.                 lockImge = lockonHandle[2];
  318.  
  319.  
  320.             }
  321.             else if (lockonMove == 40) {
  322.                 lockImge = lockonHandle[1];
  323.                 lockonMove = 1;
  324.             }
  325.             //playerY ==! enemyYとするとなぜかたまに反応しなかったりするのでplayerY != enemyYとした。
  326.             if (playerY != enemyY) {
  327.                 lock = 0;
  328.                 lockonMove = 0;//敵が移動した場合ロックオンの画像が消えるようにlockonMoveを0にする。
  329.             }
  330.  
  331.  
  332.  
  333.  
  334.  
  335.             //敵が目の前にいる際にそこに移動できないようにする。それと敵が後ろにいる際にそこに移動できないようにする。
  336.             if (playerX == enemyX && playerY == enemyY) {
  337.                 if (Key[KEY_INPUT_RIGHT] == 1) {
  338.                     playerX = enemyX - 1;
  339.                     playerY = enemyY;
  340.                     playerImage = playerGHandle[4];
  341.                 }
  342.                 else if (Key[KEY_INPUT_LEFT] == 1) {
  343.                     playerX = enemyX + 1;
  344.                     playerY = enemyY;
  345.                     playerImage = playerGHandle[4];
  346.                 }
  347.                 else if (Key[KEY_INPUT_DOWN] == 1) {
  348.                     playerX = enemyX;
  349.                     playerY = enemyY - 1;
  350.                     playerImage = playerGHandle[4];
  351.                 }
  352.                 else if (Key[KEY_INPUT_UP] == 1) {
  353.                     playerX = enemyX;
  354.                     playerY = enemyY + 1;
  355.                     playerImage = playerGHandle[4];
  356.                 }
  357.             }
  358.  
  359.  
  360.             //playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。
  361.             if (lock) {
  362.  
  363.                 if (Key[KEY_INPUT_A] == 1 && count <= 50 && count >= 10 && addattacktimelock == 0) {  //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない
  364.             //count++;  ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ
  365.             //ここのcountの情報がそのまま下の描画関数に渡されるだけ。
  366.             //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ
  367.                     lockmark = 1;
  368.                     lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
  369.                     preplayerX = playerX; // 元の位置を保持
  370.                     playerX = enemyX - 1; // 俺は敵の眼前へ//敵の位置から-1して自分がいるときの位置にいた場合。
  371.                     addplayerX = pos[playerY][preplayerX][0]; //アドアタックタイム中で相手の目の前に移動した後のマスを保存するための変数
  372.                     addplayerY = pos[playerY][preplayerX][1];
  373.                     if (playerX == enemyX - 1 && pos[playerY][preplayerX][1] == pos[enemyY][enemyX][1]) {
  374.                         preplayerX; playerImage = playerGHandle[4]; //敵の前に言ったら、移動する前の残像が残る。
  375.         //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  376.         //enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする
  377.                         count = count - 10;//キーAを押すたびに10だけ引く
  378.                         addattacktime = 500;
  379.                         zannzou = 50;
  380.                         //enemyHP = enemyHP - 10;
  381.                         lockmark = 1;
  382.                         enemysabunHP = 50;
  383.  
  384.                     }
  385.                     //if (playerX == enemyX - 1&&enemyHP >= 100 && enemyHP < 300) { enemyHP = enemyHP - 50; }//if (Key[KEY_INPUT_A] == 1 && count <= 500)に直接enemyHP = enemyHP - 50;を書き込むか、殴るが成立した時にif (enemyGHandle[5]) { enemyHP = enemyHP - 50; }と書いても良い。
  386.                     //if (playerX == enemyX - 1&& enemyHP < 100) { enemyHP2 = enemyHP2 - 50; }
  387.                 }
  388.                 if (Key[KEY_INPUT_K] == 1 && Kcount == 50 && count >= 0) {//攻撃がキックだった場合
  389.                     lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
  390.                     lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
  391.                     preplayerX = playerX; // 元の位置を保持
  392.                     playerX = enemyX - 1; // 俺は敵の眼前へ
  393.                     addplayerX = playerX; //アドアタックタイム中で相手の目の前に移動した後のマスを保存するための変数
  394.                     addplayerY = playerY;//追加攻撃をする各攻撃においてちゃんとこれを書かないといけない
  395.                     if (playerX == enemyX - 1) {
  396.                         preplayerX; playerImage = playerGHandle[4]; //敵の前に言ったら、移動する前の残像が残る。
  397.                         enemyImage = enemyGHandle[5];
  398.                         Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
  399.                         enemysabunHP = 50;
  400.                         zannzou = 60;
  401.                         addattacktime = 500;
  402.                     }
  403.  
  404.                 }
  405.  
  406.             }//if (Key[KEY_INPUT_A] == 1 && count == 50)と条件が被ると重複して10を引いてしまうのでそれ以外で押された場合として書いた。
  407.             //上のif文が成り立たなくても成り立つように、かつ被らないようにするためにelse ifで書いた。
  408.             else if (Key[KEY_INPUT_A] == 1 && playerX == enemyX - 1 && count >= 10)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
  409.             {
  410.                 count = count - 10;
  411.                 playerX = enemyX - 1; // 俺は敵の眼前へ
  412.                 addattacktime = 500;
  413.                 enemyHP = enemyHP - 50;
  414.                 //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  415.             }
  416.             else if (Key[KEY_INPUT_K] == 1 && playerX == enemyX - 1 && count >= 0)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
  417.             {
  418.                 Kcount = Kcount - 50;
  419.                 playerX = enemyX - 1; // 俺は敵の眼前へ
  420.                 addattacktime = 500;
  421.                 enemyHP = enemyHP - 100;
  422.                 //after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
  423.             }
  424.  
  425.  
  426.             //キーAが押されたままでも一回しか押していない時と同じなので偽となり、関数を呼んでいる時はキーAは押されていないので前のif文が偽となり、if文の中の関数が働かない。なので外に書いた。
  427.             if (--enemysabunHP >= 0) {
  428.                 enemyHP = enemyHP - 1;
  429.  
  430.             }
  431.             if (enemysabunHP == 0) {
  432.  
  433.                 enemysabunHP = 0;
  434.             }
  435.  
  436.             //銃を使った攻撃
  437.  
  438.             if (Gfunction_status == 0) {
  439.            
  440.                 if (jyoicon == 1) {
  441.                     if(Pad[PAD_1] == 1 && playerX > 0 && Gcount >= 1 && Gtime == 0 && Gkey == 1 && Pad[PAD_5] != 1)
  442.                     {//「右」は今押された
  443.                       //「右」が押されたときの処理
  444.                         Gtime = 1; //銃を撃ってからの経過時間を1にする
  445.                         Gcount = Gcount - 1; //残弾数を-1する
  446.                         playerImage = playerGHandle[7]; //真正面の状態にする
  447.                         if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  448.                             playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//これで前に敵がいるときのみに攻撃が出来る。
  449.                             enemyHP = enemyHP - 10;
  450.                             enemyImage = enemyGHandle[5];
  451.                         }
  452.  
  453.                     }
  454.                 }
  455.  
  456.            
  457.                 if (Gtime > 0) { //銃を撃ってからの経過時間が0より大きい場合のみ
  458.                     ++Gtime; //銃を撃ってからの経過時間を+1する
  459.                 }
  460.                 if (Gtime == 20) { //銃を撃ってから1秒( 60 )経過したら
  461.                     playerImage = playerGHandle[10]; //左横向きの状態にする
  462.                 }
  463.                 if (Gtime == 40) { //銃を撃ってから2秒( 120 )経過したら
  464.                     playerImage = playerGHandle[4]; //右横向きの状態に戻す
  465.                     Gtime = 0; //銃を撃ってからの経過時間を0に戻す
  466.                 }
  467.                 ///if (Gcount <= 0) { Gcount = 0; }//こいつによってGcountが負の値に進まずにいる。
  468.                 if (Gcount <= 0) {  //銃の弾の数が0以下だったら
  469.                     Gcount = 0;
  470.                     GcountA = 1;//リロード中を描画するために作った変数
  471.                     ++GcountZeroCounter;    //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  472.                     if (GcountZeroCounter >= 900) { //銃の弾が0になってから経過したフレーム数が15秒( 60 × 15 )経過したら
  473.                         Gcount = 15;    //銃の弾の数を15に増やす
  474.                         GcountZeroCounter = 0;  //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  475.                         GcountA = 0;
  476.                     }
  477.                 }
  478.             }//if (Gfunction_status == 0)の{}である。
  479.             if (Gfunction_status == 1) {if (jyoicon == 1) {
  480.                 {
  481.  
  482.                     if (Pad[PAD_1] == 1 && MGcount >= 1 && Gtime == 0 && Gkey == 2)//押している時
  483.                     {
  484.                         MGframe = 1;
  485.                     }
  486.                     if (MGcount > 0 && MGframe == 1 && Pad[PAD_5] == 1) {
  487.                         --MGcount;//マシンガンの弾が減っていき、かつ相手が同じ行にいるときに相手のHPが減る。そうかかないと一度マシンガンを使った後、ボタンを押していなくても敵が同じ行にいるだけで相手のHPが勝手に減る。
  488.                         ++MGtime;
  489.                         if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  490.                             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の都合で押し続けても一回しか押さないようにしかカウントされないため、中には書かなかった。
  491.                             enemyHP = enemyHP - 2;
  492.                             enemyImage = enemyGHandle[5];
  493.                         }
  494.  
  495.                     }
  496.                        
  497.  
  498.                        
  499.                         if (MGtime == 20) { //銃を撃ってから1秒( 60 )経過したら
  500.                             playerImage = playerGHandle[10]; //左横向きの状態にする
  501.                         }
  502.                         if (MGtime == 40) { //銃を撃ってから2秒( 120 )経過したら
  503.                             playerImage = playerGHandle[4]; //右横向きの状態に戻す
  504.                             MGtime = 0; //銃を撃ってからの経過時間を0に戻す
  505.                         }
  506.                         if (MGcount > 0 && MGframe == 1 && Pad[PAD_1] == 1)
  507.                         { MGframe = 0; MGtime = 0;
  508.                         }//キーGを押していない時は止まるようにする
  509.  
  510.                    
  511.                     }}
  512.                
  513.             }
  514.             //銃を使った攻撃
  515.     //lockで条件を付けないとロックして殴る攻撃と被ってしまう。
  516.             if (Gfunction_status == 0) {
  517.                 if (Key[KEY_INPUT_G] == 1 && Gcount >= 1 && Gtime == 0 && Gkey == 1 && Key[KEY_INPUT_L] == !1) { //キーGを押していて且つ残り弾数( Gcount )が1発以上あって銃を撃ってからの経過時間( Gtime )が0の場合のみ銃を撃てる
  518.                     Gtime = 1; //銃を撃ってからの経過時間を1にする
  519.                     Gcount = Gcount - 1; //残弾数を-1する
  520.                     playerImage = playerGHandle[7]; //真正面の状態にする
  521.                     if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  522.                         playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//これで前に敵がいるときのみに攻撃が出来る。
  523.                         enemysabunHP = 100;
  524.                         enemyImage = enemyGHandle[5];
  525.                     }
  526.                 }
  527.             }
  528.  
  529.             if (Gtime > 0) { //銃を撃ってからの経過時間が0より大きい場合のみ
  530.                 ++Gtime; //銃を撃ってからの経過時間を+1する
  531.             }
  532.             if (Gtime == 20) { //銃を撃ってから1秒( 60 )経過したら
  533.                 playerImage = playerGHandle[10]; //左横向きの状態にする
  534.             }
  535.             if (Gtime == 40) { //銃を撃ってから2秒( 120 )経過したら
  536.                 playerImage = playerGHandle[4]; //右横向きの状態に戻す
  537.                 Gtime = 0; //銃を撃ってからの経過時間を0に戻す
  538.             }
  539.             ///if (Gcount <= 0) { Gcount = 0; }//こいつによってGcountが負の値に進まずにいる。
  540.             if (Gcount <= 0) {  //銃の弾の数が0以下だったら
  541.                 Gcount = 0;
  542.                 GcountA = 1;//リロード中を描画するために作った変数
  543.                 ++GcountZeroCounter;    //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  544.                 if (GcountZeroCounter >= 900) { //銃の弾が0になってから経過したフレーム数が15秒( 60 × 15 )経過したら
  545.                     Gcount = 15;    //銃の弾の数を15に増やす
  546.                     GcountZeroCounter = 0;  //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  547.                     GcountA = 0;
  548.                 }
  549.             }
  550.             //if (Gfunction_status == 0)の{}である。
  551.  
  552.             if (Gfunction_status == 1) {
  553.                 if (Key[KEY_INPUT_G] == 1 && MGcount >= 1 && Gtime == 0 && Gkey == 2) {
  554.                     MGframe = 1; MGtime = 1;
  555.                 }//Key[KEY_INPUT_L] ==! 1とすることでキーLを否定して銃を変える時にLを離してから撃てるようになった。
  556.                 if (MGcount > 0 && MGframe == 1 && Key[KEY_INPUT_L] == !1) {
  557.                    
  558.                         --MGcount;//マシンガンの弾が減っていき、かつ相手が同じ行にいるときに相手のHPが減る。そうかかないと一度マシンガンを使った後、ボタンを押していなくても敵が同じ行にいるだけで相手のHPが勝手に減る。
  559.                         if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  560.                             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の都合で押し続けても一回しか押さないようにしかカウントされないため、中には書かなかった。
  561.                             enemysabunHP = 2;
  562.                             enemyImage = enemyGHandle[5];
  563.                         }
  564.                    
  565.                 }
  566.             }
  567.             if (MGtime > 0) { //銃を撃ってからの経過時間が0より大きい場合のみ
  568.                 ++MGtime; //銃を撃ってからの経過時間を+1する
  569.             }
  570.             if (MGtime > 10 && MGtime < 15) { //銃を撃ってから1秒( 60 )経過したら
  571.                 playerImage = playerGHandle[10]; //左横向きの状態にする
  572.             }
  573.             if (MGtime > 15 && MGtime < 20) { //銃を撃ってから2秒( 120 )経過したら
  574.                 playerImage = playerGHandle[4]; //右横向きの状態に戻す
  575.                 MGtime = 1; //銃を撃ってからの経過時間を0に戻す
  576.             }
  577.             //Gを押していない時はMGtimeは0にしたことで、マシンガンを撃っている間はMGtimeが1になってループするようにした。
  578.             if (Key[KEY_INPUT_G] == !1) { MGframe = 0; MGtime = 0; }//キーGを押していない時は止まるようにする
  579.  
  580.  
  581.  
  582.             //ワイヤーを使って相手を前の列に引っ張る
  583.             if (Key[KEY_INPUT_Y] == 1) {//playerX + 1 == enemyXより敵が自分の位置に+1するときの位置にいる場合を表す、なので多分playerX== enemyX-1でもいいと思う。
  584.                 if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX ||
  585.                     playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {
  586.                     enemyX = 3;//敵を最前列に引っ張る
  587.                 }
  588.             }
  589.  
  590.             //ガード
  591.             if (Key[KEY_INPUT_P] == 1) {
  592.                 protect = 1;
  593.             }
  594.             if (protect == 1) { ++protectcount; }
  595.             if (protectcount > 0 && protectcount < 50) {
  596.                 protect = 1;
  597.             }if (protectcount == 50) { protect = 0; protectcount = 0; }
  598.  
  599.             //リロードさせるためのプログラム
  600.             //変数リロードでまとめたがなぜかマシンガンは0の時に変数MGcountAが1にならないので消した。まあ、こいつが無くても勝手にリロードできるのでこれでいい。
  601.             if (Gcount <= 0) {  //銃の弾の数が0以下だったら
  602.                 Gcount = 0;
  603.                 GcountA = 1;//リロード中を描画するために作った変数
  604.                 ++GcountZeroCounter;    //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  605.                 if (GcountZeroCounter >= 900) { //銃の弾が0になってから経過したフレーム数が15秒( 60 × 15 )経過したら
  606.                     Gcount = 15;    //銃の弾の数を15に増やす
  607.                     GcountZeroCounter = 0;  //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  608.                     GcountA = 0;
  609.                 }
  610.             }
  611.  
  612.  
  613.  
  614.             if (MGcount <= 0) { //銃の弾の数が0以下だったら
  615.                 MGcount = 0;
  616.                 MGcountA = 1;//リロード中を描画するために作った変数
  617.                 ++MGcountZeroCounter;   //『銃の弾が0になってから経過したフレーム数をカウントする変数』を+1する
  618.                 if (MGcountZeroCounter >= 1500) {   //銃の弾が0になってから経過したフレーム数が25秒( 60 × 25 )経過したら
  619.                     MGcount = 200;  //銃の弾の数を15に増やす
  620.                     MGcountZeroCounter = 0; //次回のカウント処理のために『銃の弾が0になってから経過したフレーム数をカウントする変数』を0にする
  621.                     MGcountA = 0;
  622.                 }
  623.             }
  624.             //↓確認addattcktimeの—1について関係はない
  625.             //俺は敵の眼前へ言った後、このifの条件により続けて攻撃か元の位置に戻るかになる
  626.             if (addattacktime <= 500 && addattacktime > 0)//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る
  627.             {//★addattacktimeが500以下で0より大きい時—1されていく、そして500以下ならばかつ0より大きいならばずっと処理されるということ。
  628.                 playerMove = 0;//アドアタックタイム中は足踏みをしないようにする
  629.                 lockmark = 1;
  630.                 --addattacktime;
  631.                 addplayerX;
  632.                 pos[playerY][preplayerX][0] = addplayerX;
  633.                 pos[playerY][preplayerX][1] = addplayerY;
  634.                 playerImage = playerGHandle[4];//アドアタックタイム中はずっと十字キーを押して動いたりしないように、前だけ見ているようにするためにした。
  635.                 //preframe = 0; preframeA = 0; preframeB = 0; preframeC = 0;
  636.                 //playermovelock = 1;//移動キーが付けないようにするためのもの
  637.                 if (Key[KEY_INPUT_R] == 1) {
  638.                     lock = 0;
  639.                 }
  640.                 if (Key[KEY_INPUT_K] == 1 && Kcount == 50 && enemyImage == enemyGHandle[5]) {//攻撃がキックだった場合
  641.                     Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
  642.                     enemyImage = enemyGHandle[5];
  643.                     if (enemyImage == enemyGHandle[5])//攻撃を食らうと右向きになるようにする
  644.                     {
  645.                         enemyHP = enemyHP - 50;
  646.                         playerImage = playerGHandle[4];
  647.                         addattacktime = 500;
  648.  
  649.                     }
  650.  
  651.                 }
  652.             }
  653.             //pos[playerY][playerX + 1][0] == pos[enemyY][enemyX][0] && pos[playerY][playerX + 1][1] == pos[enemyY][enemyX + 1][1]
  654.  
  655.             if (addattacktime == 0) {
  656.                 playerX = preplayerX;
  657.                 playerImage = playerGHandle[4];
  658.                 addattacktime = 501;//addattacktimeが0にると、元の位置に戻る
  659.                 playerMove = 1;
  660.                 lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
  661.             }
  662.             //とりあえず、攻撃の最中も上がるようにif (addattacktime == 501){}の外にif文を出した。
  663.  
  664.  
  665.  
  666.             if (addattacktime == 501) {
  667.                 //★あるフレームが進んでから画像がを動くまでを遅くした、ならば、あるフレームが進んだら数字も次の数字に移るまで遅くできるのは?と考えた。
  668.  
  669.                 if (Kcount < 50) ++frames;//count=0,Kcount=0,frames=20
  670.                 if (frames % 5 == 0) {               //framesが20なので条件を満たさない
  671.                     ++Kcount;
  672.                     if (Kcount > 50) {
  673.                         Kcount = 50;
  674.                     }
  675.                 }
  676.                 if (count < 50) ++frames;             //count=0,Kcount=0,frames=19
  677.                 if (frames % 20 == 0) {                //framesが20なので条件を満たす
  678.                     ++count;                     //count=1,Kcount=0,frames=19
  679.                     if (count > 50) {             //countが50以下なので満たさない
  680.                         count = 50;
  681.  
  682.                     }
  683.                 }
  684.  
  685.             }
  686.  
  687.             //キーLを押したまま別のキーを押すと武器が切り替わる
  688.  
  689.            
  690.              
  691.             if (jyoicon == 1) {
  692.                 //キーLを押したまま別のキーを押すと武器が切り替わる
  693.                 if (Pad[PAD_5] == 1) { Lframe = 1; }
  694.                 //if (Lcount > 0) { ++Lframe; }
  695.                 //if (Pad[PAD_5] != 1) { Lframe = 0; }//キーLを離すとLcountは0になる。
  696.                 if (Lframe > 0) {
  697.                     if (Pad[PAD_1] == 1) {
  698.                         Gtime = 0;
  699.                         ++Gfunction_status;
  700.                         ++Gkey;
  701.  
  702.                     }
  703.                 }
  704.                 if (Gkey > 2) { Gkey = 1; }
  705.                 if (Gfunction_status > 1) { Gfunction_status = 0; }
  706.  
  707.             }
  708.             //キーLを押したまま別のキーを押すと武器が切り替わる
  709.             if (Key[KEY_INPUT_L] == 1) { Lcount = 1; }
  710.             if (Lcount > 0) { ++Lframe; }
  711.             if (Key[KEY_INPUT_L] == !1) { Lcount = 0; Lframe = 0; }//キーLを離すとLcountは0になる。
  712.             if (Lcount > 0) {
  713.                 if (Key[KEY_INPUT_G] == 1) {
  714.                     Gtime = 0;
  715.                     ++Gfunction_status;
  716.                     ++Gkey;
  717.  
  718.                 }
  719.             }
  720.             if (Gkey > 2) { Gkey = 1; }
  721.             if (Gfunction_status > 1) { Gfunction_status = 0; }
  722.            
  723.  
  724.             if (stopenemy == 0) {// 敵の移動
  725.                 int t = GetNowCount();
  726.                 if (t >= nextMoveTime) { // 指定の時間が経ったら(1sごとに)
  727.                     nextMoveTime = t + MOVE_INTERVAL; // 次回移動処理をする時刻
  728.                     if (stopCount > 0) { // 停止中のとき
  729.                         stopCount--; // 止まっている残り時間(回数)を減らす
  730.                     }
  731.                     else { // 普通の状態のとき
  732.                         if (GetRand(99) < 10) { // たまに(10%の確率で)
  733.                             stopCount = GetRand(4); // 数秒間(1~5秒間)その場に止まる
  734.                         }
  735.  
  736.                         else { // 9マス上のいずれかのパネルに移動させる
  737.                             int cy = enemyY, cx = enemyX;
  738.                             do {
  739.                                 enemyY = GetRand(2);
  740.                                 enemyX = GetRand(2) + 3;
  741.                             } while (enemyX == cx && enemyY == cy ||
  742.                                 enemyX == playerX && enemyY == playerY);
  743.                             enemyImage = enemyGHandle[10];
  744.                             enemyMove = 1;
  745.                         }
  746.                         //弱攻撃
  747.  
  748.                         if (randamulock == 0)
  749.                         {
  750.                             aa = GetRand(6);
  751.                         }
  752.  
  753.                         //if (randamulock == 0) { if (aa >= 0) { aa = GetRand(6); } }//こいつが一番上のelseとつながっている。
  754.                     //ココではない上にif (enemycountframe > 0 && ++enemycountframe < 30)に enemyattackB = 0;を
  755.                         //書いたが{}の外とかで反映されないのかもしれない。上のように書くとenemyattackBは0になった、しかし、目の前に来る。enemyattackB = 0と同じように反映されないかったのかもしれない。
  756.                         //だとしたらここにも同じものを書かなくてはならない。
  757.                         //if (enemycountframe == 30) { enemycount = 0; enemycountframe = 0; }
  758.                     }
  759.                 }
  760.             }
  761.             //中に書くにしてもif (enemycount == 0)の場合を書かなかったら敵が目の前に来た、0の場合の処理を書いた方がいいようだ。攻撃以外は目の前に来るようなコードは書いていないが。
  762.             //まあ、「0の時の場合を書いていないので不自然な動きが起きてしまった」ということも考えられる。
  763.             //if (frames < 500) { frames = 0; }
  764.  
  765.  
  766.  
  767.  
  768.             if (playerMove > 0) {//1フレームで処理を終わらせるためifの後はelse ifを使った。//フレームがあってもplayerMove++を書かないと1ずつ上がらない。playerMove++をフレームの60回ループするするところに書くことで以下のように書いて足踏みしている画像が描けた。
  769.                 playerMove++;//60フレームの中で、このifで条件(playerMove > 0)が真であるためplayerMove++を「フレーム」と「条件式」により繰り返しplayerMove++して、
  770.                 if (playerMove == 20)//以前の文を否定しないelse ifが次にあるためplayerMoveの情報を引き継ぎplayerMove == 20となるまで繰り返しplayerMove++をした。次にもelse ifがあるので同様、、、
  771.                 {
  772.                     playerImage = playerGHandle[4];
  773.                 }
  774.                 else if (playerMove == 40)//条件式として書くため=は==と書いた。//else ifによりplayerMoveが20を超えて(20の場合を否定し)30の場合を表す。
  775.                 {
  776.                     playerImage = playerGHandle[5];
  777.                 }
  778.                 else if (playerMove == 60)//30まで上がったものが40に上がった時、playerGHandle[4]になる。if文の連続では文法のルールで前の文を否定するため連続的に画像が流れず足踏みできない、なのでelse ifにしたのだ。
  779.                 {
  780.                     playerImage = playerGHandle[4];
  781.                 }
  782.                 else if (playerMove == 80) {//下に書いているように60フレームないに納めないといけないため、50まで上がったところで終わっている。もともと60 * 4と書いた
  783.                     playerImage = playerGHandle[3];//上に書いてることには誤りがある、60フレームで1sなだけ、超えてもいい。
  784.                     playerMove = 1;//
  785.                 }
  786.  
  787.             }
  788.  
  789.  
  790.             //ループ内に書いたenemyMoveについてenemyMoveが0より大きくて40を超えたら{}の中身を実行。
  791.             //enemyMoveが0より大きいならば+1されて、40より大きい数値になれば両方の条件を満たすので+1される。40より大きい数値になったら敵の画像が変わる。
  792.             //enemyMoveが40より+1されて大きくなるために++enemyMove > 40
  793.             if (enemyMove > 0 && ++enemyMove > 40) {//pcが60フレームで一周するためenemyMoveが61以上だとenemyGHandle[8]が反映されず元のままで移動が終わる。なのでenemyMoveは60以下でなくてはならない
  794.                 enemyMove = 0; enemyImage = enemyGHandle[11];//60になる前に画像11を描画するようにしなければならないため、60より小さい40フレームにした。
  795.             }
  796.         }
  797.  
  798.  
  799.  
  800.         //これより以下は描画するためのプログラム
  801.         ClearDrawScreen();  // 裏画面を
  802.  
  803.  
  804.         //if (kasokudo = 49) { A = 4; }
  805.         //if (function_status == 0) {//function_status = 0の時はメニュー画面でfunction_statusが1の時は戦闘画面とした。
  806.     //
  807.         if (gamenidou == 1) {
  808.             //battle card[];
  809.             if (hyouzi == 0) {
  810.                 DrawFormatString(0, 0, GetColor(255, 0, 0), " gamenidouは%d,senntakuは%d", gamenidou, senntaku);
  811.                 DrawFormatString(50, 140, GetColor(255, 0, 0), "→");
  812.                 DrawFormatString(100, 140, GetColor(255, 0, 0), "攻撃方法の選択画面 (xをプッシュ)");
  813.                 DrawFormatString(100, 200, GetColor(255, 0, 0), "バトルカードの選択を終わる");
  814.             }
  815.             if (Key[KEY_INPUT_DOWN] == 1) {
  816.                 ++senntaku;
  817.             }
  818.             if (senntaku == 1) {
  819.                 hyouzi = 1;
  820.                 DrawFormatString(0, 0, GetColor(255, 0, 0), " senntakuは%d", senntaku);
  821.                 DrawFormatString(50, 200, GetColor(255, 0, 0), "→");
  822.                 DrawFormatString(100, 140, GetColor(255, 0, 0), "攻撃方法の選択画面 (xをプッシュ)");
  823.                 DrawFormatString(100, 200, GetColor(255, 0, 0), "バトルカードの選択を終わる");
  824.                 if (Key[KEY_INPUT_B] == 1) {
  825.                     gamenidou = 0;//戦闘画面に戻る
  826.                     senntaku = 0;
  827.                     hyouzi = 0;
  828.                 }
  829.             }
  830.             //攻撃手段を選んでいる最中は0とする
  831.             ScreenFlip();  // 裏画面を表画面に反映
  832.         }
  833.  
  834.         if (gamenidou == 0) {
  835.             // ムービー映像を画面いっぱいに描画します
  836.             DrawExtendGraph(0, 0, 1770, 1580, MovieGraphHandle, FALSE);
  837.  
  838.             // ウエイトをかけます、あまり速く描画すると画面がちらつくからです
  839.             WaitTimer(0);//この部分の数値を上げると敵の攻撃が遅くなる。
  840.             //背景の動画
  841.             //PlayMovie("180half_f.gif", 1, DX_MOVIEPLAYTYPE_NORMAL);
  842.             // ステージの描画  ★function_status == 0の場合ではないし、0か1の二択しかため、function_statusの初期値は1であるためif (function_status == 0)は除外されelseの方が描画される。
  843.             int stageColor = GetColor(160, 64, 64);
  844.             for (int i = 0; i < 4; i++)
  845.                 DrawLine(stage[i][0][0], stage[i][0][1],
  846.                     stage[i][6][0], stage[i][6][1], stageColor, 5);
  847.             for (int j = 0; j < 7; j++)
  848.                 DrawLine(stage[0][j][0], stage[0][j][1],
  849.                     stage[3][j][0], stage[3][j][1], stageColor, 5);
  850.  
  851.             //敵を描画
  852.             DrawExtendGraph(pos[enemyY][enemyX][0] - 14, pos[enemyY][enemyX][1] - 66, pos[enemyY][enemyX][0] + 64, pos[enemyY][enemyX][1] + 66, enemyImage, TRUE);
  853.  
  854.             //主人公を描画
  855.             //DrawExtendGraph(pos[playerY][playerX][0] - 14, pos[playerY][playerX][1] - 66, pos[playerY][playerX][0] + 64, pos[playerY][playerX][1] + 66, playerImage, TRUE);
  856.             //↓回転させる関数の方で倍にした奴。
  857.             DrawRotaGraph(pos[playerY][playerX][0] + 20, pos[playerY][playerX][1], 2.0, 0, playerImage, TRUE);
  858.  
  859.             //自分と敵が重なるようにしないためのプログラム
  860.             if (playerY == enemyY - 1 && playerX == enemyX) {
  861.                 DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1],//DrawGraphの関数自体の置いた順番に先に奥に描画されるので左のように書く。
  862.                     playerImage, true);  // 俺キャラの描画
  863.                 DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],
  864.                     enemyImage, true);   // 敵キャラの描画
  865.             }
  866.             if (playerY == enemyY + 1 && playerX == enemyX) {
  867.                 DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1],
  868.                     enemyImage, true);   // 敵キャラの描画
  869.                 DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1],
  870.                     playerImage, true);  // 俺キャラの描画
  871.             }
  872.             //投げ攻撃
  873.             if (aa == 2) {
  874.                 A = 2;
  875.                 stopenemy = 1;
  876.                 randamulock = 0;
  877.             }
  878.             if (A == 2) {
  879.                 aa = 0;//if (a == 2)が働き、if (A == 2)の文が働き3つの画像が同時に描画されるバグを防ぐためにaを0にした。
  880.                 randamulock = 1;//ランダム関数が影響しないためのロック
  881.                 preenemyX3 = pos[enemyY][enemyX][0] - 20;//移動前の座標を保存する、敵の座標を保存
  882.                 preenemyY3 = pos[enemyY][enemyX][1] - 90;//これで手で投げているように見える
  883.                 ++A;
  884.             }
  885.             if (A == 3) {
  886.                 ++kakudoA;
  887.                 if (kakudoA % 3 == 2) {
  888.                     ++kakudoB;
  889.                 }
  890.                 ++kasokudo;
  891.                 //preenemyX3 = preenemyX3 - kasokudo;//実験用
  892.                 preenemyX3A = preenemyX3 - kasokudo;//座標に+1後のモノをpreenemyX3Aとした
  893.                 preenemyX3B = preenemyX3 - preenemyX3A;//後と前(固定された座標)を引いて、その差分をpreenemyX3Bとした
  894.                 test = preenemyX3B * 18;
  895.                 Y = -(test ^ 2);
  896.                 preenemyY3A = preenemyY3 + Y;
  897.                 //DrawGraph(preenemyX3A - 20 * kasokudo, preenemyY3A + 2 * kasokudo, kikennhanndle[1], true);
  898.                 DrawRotaGraph(preenemyX3A - 20 * kasokudo, preenemyY3A + 2 * kasokudo, 1.0, 0 - kakudoB, kikennhanndle[1], TRUE);
  899.                 DrawRotaGraph(preenemyX3A - 10 * kasokudo, preenemyY3A + 4 * kasokudo, 1.0, 0 - kakudoB, kikennhanndle[1], TRUE);
  900.                 DrawRotaGraph(preenemyX3A - 15 * kasokudo, preenemyY3A + 3 * kasokudo, 1.0, 0 - kakudoB, kikennhanndle[1], TRUE);
  901.             }
  902.             if (kasokudo > 15) {
  903.                 kasokudo = 15;
  904.                 A = 4;
  905.                 randamuzahyoulockA = 0;
  906.                 kakudoA = 0;
  907.                 kakudoB = 0;
  908.             }
  909.             if (randamuzahyoulockA == 0) {
  910.                 if (A == 4) {
  911.                     randamumasuX = 0, randamumasuY = GetRand(2);
  912.                     randamumasuXA = 1, randamumasuYA = GetRand(2);
  913.                     randamumasuXB = 2, randamumasuYB = GetRand(2);
  914.                     pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1];
  915.                     //DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  916.                     ++randamuzahyou;
  917.                     randamuzahyoukeisann = 1;
  918.                 }
  919.             }
  920.             if (randamuzahyoukeisann == 1) {
  921.                 ++kakudo;
  922.                 if (kakudo % 3 == 2) {
  923.                     ++kakudo2;
  924.                 }
  925.                 ++randamuzahyoukeisannhiki;
  926.                 //DrawGraph(pos[randamumasuY][randamumasuX][0] + 100 - 4 * randamuzahyoukeisannhiki, pos[randamumasuY][randamumasuX][1] - 200 + 8 * randamuzahyoukeisannhiki, kikennhanndle[1], true);
  927.                 DrawRotaGraph(pos[randamumasuY][randamumasuX][0] + 140 - 4 * randamuzahyoukeisannhiki, pos[randamumasuY][randamumasuX][1] - 200 + 8 * randamuzahyoukeisannhiki, 1.0, 0 - kakudo2, kikennhanndle[1], TRUE);
  928.                 //DrawGraph(pos[randamumasuYA][randamumasuXA][0] + 100 - 4 * randamuzahyoukeisannhiki, pos[randamumasuYA][randamumasuXA][1] - 200 + 8 * randamuzahyoukeisannhiki, kikennhanndle[1], true);
  929.                 DrawRotaGraph(pos[randamumasuYA][randamumasuXA][0] + 140 - 4 * randamuzahyoukeisannhiki, pos[randamumasuYA][randamumasuXA][1] - 200 + 8 * randamuzahyoukeisannhiki, 1.0, 0 - kakudo2, kikennhanndle[1], TRUE);
  930.  
  931.                 //DrawGraph(pos[randamumasuYB][randamumasuXB][0] + 100 - 4 * randamuzahyoukeisannhiki, pos[randamumasuYB][randamumasuXB][1] - 200 + 8 * randamuzahyoukeisannhiki, kikennhanndle[1], true);
  932.                 DrawRotaGraph(pos[randamumasuYB][randamumasuXB][0] + 140 - 4 * randamuzahyoukeisannhiki, pos[randamumasuYB][randamumasuXB][1] - 200 + 8 * randamuzahyoukeisannhiki, 1.0, 0 - kakudo2, kikennhanndle[1], TRUE);
  933.                 //++kaihimark;
  934.             }
  935.             if (randamuzahyoukeisannhiki > 24) {
  936.                 randamuzahyoukeisann = 0;
  937.                 kakudo = 0;
  938.                 kakudo2 = 0;
  939.             }
  940.             //if (randamuzahyou > 40 && randamuzahyou < 60) {
  941.                 //DrawGraph(preenemyX3 - 500, preenemyY3-200, kikennhanndle[1], true);
  942.             //}
  943.             if (randamuzahyou > 0 && ++randamuzahyou > 25) {
  944.                 randamuzahyoulock = 1;
  945.                 randamuzahyou = 0;//randamuzahyouが0より大きいとrandamuzahyoulock = 1のままで描画が消えないので、25より大きくなったら0にする。
  946.                 //A = 5;
  947.             }
  948.             if (randamuzahyou > 0 && randamuzahyou < 25) {
  949.                 randamuzahyoulockA = 1;//上のif(A==4)が働かないようにするために書いた。
  950.             }
  951.             if (randamuzahyoulock == 1) {
  952.                 if (randamumasuX == 0 && randamumasuY == 0) {
  953.                     A = 5; randammasucountA = 1;
  954.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  955.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  956.                         //下に書いてある50フレーム中のrandammasucountBA > 0 && randammasucountBA < 2の間だけダメージが当たるようにした。なので書いたままのダメージが入る。
  957.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  958.                             playerHP = playerHP - 100;
  959.                         }
  960.                     }
  961.                 }
  962.                 if (randamumasuX == 0 && randamumasuY == 1) {
  963.                     A = 5; randammasucountA = 1;
  964.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  965.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  966.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  967.                             playerHP = playerHP - 100;
  968.                         }
  969.                     }
  970.                 }
  971.                 if (randamumasuX == 0 && randamumasuY == 2) {
  972.                     A = 5; randammasucountA = 1;
  973.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  974.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  975.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  976.                             playerHP = playerHP - 100;
  977.                         }
  978.                     }
  979.                 }
  980.                 if (randamumasuXA == 1 && randamumasuYA == 0) {
  981.                     A = 5; randammasucountA = 1;
  982.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  983.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  984.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  985.                             playerHP = playerHP - 100;
  986.                         }
  987.                     }
  988.                 }
  989.                 if (randamumasuXA == 1 && randamumasuYA == 1) {
  990.                     A = 5; randammasucountA = 1;
  991.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  992.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  993.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  994.                             playerHP = playerHP - 100;
  995.                         }
  996.                     }
  997.                 }
  998.                 if (randamumasuXA == 1 && randamumasuYA == 2) {
  999.                     A = 5; randammasucountA = 1;
  1000.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  1001.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  1002.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  1003.                             playerHP = playerHP - 100;
  1004.                         }
  1005.                     }
  1006.                 }
  1007.                 if (randamumasuXB == 2 && randamumasuYB == 0) {
  1008.                     A = 5; randammasucountA = 1;
  1009.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1010.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1011.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  1012.                             playerHP = playerHP - 100;
  1013.                         }
  1014.                     }
  1015.                 }
  1016.                 if (randamumasuXB == 2 && randamumasuYB == 1) {
  1017.                     A = 5; randammasucountA = 1;
  1018.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1019.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1020.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  1021.                             playerHP = playerHP - 100;
  1022.                         }
  1023.                     }
  1024.                 }
  1025.                 if (randamumasuXB == 2 && randamumasuYB == 2) {
  1026.                     A = 5; randammasucountA = 1;
  1027.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1028.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1029.                         if (randammasucountBA > 0 && randammasucountBA < 2) {
  1030.                             playerHP = playerHP - 100;
  1031.                         }
  1032.                     }
  1033.                 }
  1034.             }
  1035.             if (randammasucountA > 0) {
  1036.                 ++randammasucountBA;
  1037.                 //randamuzahyouB = 0;
  1038.             }
  1039.  
  1040.             if (randammasucountBA > 0 && randammasucountBA > 50) {
  1041.                 randamuzahyoulock = 0;
  1042.                 randamulock = 0;
  1043.             }
  1044.             if (randammasucountBA > 50) {
  1045.                 randammasucountBA = 0;
  1046.                 randammasucountA = 0;
  1047.                 A = 0;
  1048.                 stopenemy = 0;
  1049.                 test = 0;
  1050.                 Y = 0;
  1051.                 randamuzahyoulockA = 0;
  1052.                 randamuzahyoukeisann = 0;
  1053.                 kasokudo = 0;
  1054.                 randamuzahyoukeisannhiki = 0;//上がったままのこいつを0にすることでAが4の時の問題が解決した。
  1055.             }
  1056.  
  1057.             //もう一つの投げの攻撃
  1058.             if (aa == 5) {
  1059.                 B = 2;
  1060.                 stopenemy = 1;
  1061.                 randamulock = 0;//もう一つの投げが働かないように
  1062.             }
  1063.             if (B == 2) {
  1064.                 aa = 0;//if (a == 2)が働き、if (A == 2)の文が働き3つの画像が同時に描画されるバグを防ぐためにaを0にした。
  1065.                 randamulock = 1;//ランダム関数が影響しないためのロック
  1066.                 preenemyX3 = pos[enemyY][enemyX][0] - 20;//移動前の座標を保存する、敵の座標を保存
  1067.                 preenemyY3 = pos[enemyY][enemyX][1] - 90;//これで手で投げているように見える
  1068.                 ++B;
  1069.             }
  1070.             if (B == 3) {
  1071.                 ++kakudoC;
  1072.                 if (kakudoC % 3 == 2) {
  1073.                     ++kakudoD;
  1074.                 }
  1075.                 ++kasokudo2;
  1076.                 //preenemyX3 = preenemyX3 - kasokudo;//実験用
  1077.                 preenemyX3A = preenemyX3 - kasokudo2;//座標に+1後のモノをpreenemyX3Aとした
  1078.                 preenemyX3B = preenemyX3 - preenemyX3A;//後と前(固定された座標)を引いて、その差分をpreenemyX3Bとした
  1079.                 test = preenemyX3B * 18;
  1080.                 Y = -(test ^ 2);
  1081.                 preenemyY3A = preenemyY3 + Y;
  1082.                 //DrawGraph(preenemyX3A - 20 * kasokudo2, preenemyY3A + 2 * kasokudo2, kikennhanndle[1], true);
  1083.                 //DrawRotaGraph(preenemyX3A - 20 * kasokudo2, preenemyY3A + 2 * kasokudo2, 1.0, 0 - kakudoD, kikennhanndle[1], TRUE);
  1084.                 DrawRotaGraph(preenemyX3A - 10 * kasokudo2, preenemyY3A + 4 * kasokudo2, 1.0, 0 - kakudoD, kikennhanndle[1], TRUE);
  1085.                 DrawRotaGraph(preenemyX3A - 15 * kasokudo2, preenemyY3A + 3 * kasokudo2, 1.0, 0 - kakudoD, kikennhanndle[1], TRUE);
  1086.                 DrawRotaGraph(preenemyX3A - 20 * kasokudo2, preenemyY3A + 2 * kasokudo2, 1.0, 0 - kakudoD, kikennhanndle[1], TRUE);
  1087.  
  1088.  
  1089.             }
  1090.             if (kasokudo2 > 15) {
  1091.                 kasokudo2 = 15;
  1092.                 B = 4;
  1093.                 kakudoC = 0;
  1094.                 kakudoD = 0;
  1095.             }
  1096.             if (randamuzahyoulockB == 0) {
  1097.                 if (B == 4) {
  1098.                     randamumasuX = GetRand(2), randamumasuY = 0;
  1099.                     randamumasuXA = GetRand(2), randamumasuYA = 1;
  1100.                     randamumasuXB = GetRand(2), randamumasuYB = 2;
  1101.                     pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1];
  1102.                     //DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  1103.                     ++randamuzahyouB;
  1104.                     randamuzahyoukeisannB = 1;
  1105.                 }
  1106.             }
  1107.             if (randamuzahyoukeisannB == 1) {
  1108.                 ++kakudo3;
  1109.                 if (kakudo3 % 3 == 2) {
  1110.                     ++kakudo4;
  1111.                 }
  1112.                 ++randamuzahyoukeisannhikiB;
  1113.  
  1114.  
  1115.                 DrawRotaGraph(pos[randamumasuY][randamumasuX][0] + 140 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuY][randamumasuX][1] - 200 + 8 * randamuzahyoukeisannhikiB, 1.0, 0 - kakudo4, kikennhanndle[1], TRUE);
  1116.                 DrawRotaGraph(pos[randamumasuYA][randamumasuXA][0] + 140 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuYA][randamumasuXA][1] - 200 + 8 * randamuzahyoukeisannhikiB, 1.0, 0 - kakudo4, kikennhanndle[1], TRUE);
  1117.                 DrawRotaGraph(pos[randamumasuYB][randamumasuXB][0] + 140 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuYB][randamumasuXB][1] - 200 + 8 * randamuzahyoukeisannhikiB, 1.0, 0 - kakudo4, kikennhanndle[1], TRUE);
  1118.  
  1119.                 //++kaihimark;
  1120.                 //DrawGraph(pos[randamumasuY][randamumasuX][0] + 100 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuY][randamumasuX][1] - 200 + 8 * randamuzahyoukeisannhikiB, kikennhanndle[1], true);
  1121.  
  1122.                 //DrawGraph(pos[randamumasuYA][randamumasuXA][0] + 100 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuYA][randamumasuXA][1] - 200 + 8 * randamuzahyoukeisannhikiB, kikennhanndle[1], true);
  1123.  
  1124.                 //DrawGraph(pos[randamumasuYB][randamumasuXB][0] + 100 - 4 * randamuzahyoukeisannhikiB, pos[randamumasuYB][randamumasuXB][1] - 200 + 8 * randamuzahyoukeisannhikiB, kikennhanndle[1], true);
  1125.  
  1126.             }
  1127.             if (randamuzahyoukeisannhikiB > 24) {
  1128.                 randamuzahyoukeisannB = 0;
  1129.                 kakudo3 = 0;
  1130.                 kakudo4 = 0;
  1131.             }
  1132.             //if (randamuzahyou > 40 && randamuzahyou < 60) {
  1133.                 //DrawGraph(preenemyX3 - 500, preenemyY3-200, kikennhanndle[1], true);
  1134.             //}
  1135.             if (randamuzahyouB > 0 && ++randamuzahyouB > 25) {
  1136.                 randamuzahyoulockBA = 1;
  1137.                 //A = 5;
  1138.                 randamuzahyouB = 0;
  1139.             }
  1140.             if (randamuzahyouB > 0 && randamuzahyouB < 25) {
  1141.                 randamuzahyoulockB = 1;
  1142.             }
  1143.             if (randamuzahyoulockBA == 1) {
  1144.                 if (randamumasuX == 0 && randamumasuY == 0) {
  1145.                     B = 5;
  1146.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  1147.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  1148.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1149.                             playerHP = playerHP - 100;
  1150.                         }
  1151.                     }
  1152.                 }
  1153.                 if (randamumasuX == 1 && randamumasuY == 0) {
  1154.                     B = 5; randammasucount = 1;
  1155.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  1156.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  1157.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1158.                             playerHP = playerHP - 100;
  1159.                         }
  1160.                     }
  1161.                 }
  1162.                 if (randamumasuX == 2 && randamumasuY == 0) {
  1163.                     B = 5; randammasucount = 1;
  1164.                     DrawGraph(pos[randamumasuY][randamumasuX][0], pos[randamumasuY][randamumasuX][1], kikennhanndle[1], true);
  1165.                     if (pos[randamumasuY][randamumasuX][0] == pos[playerY][playerX][0] && pos[randamumasuY][randamumasuX][1] == pos[playerY][playerX][1]) {
  1166.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1167.                             playerHP = playerHP - 100;
  1168.                         }
  1169.                     }
  1170.                 }
  1171.                 if (randamumasuXA == 0 && randamumasuYA == 1) {
  1172.                     B = 5; randammasucount = 1;
  1173.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  1174.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  1175.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1176.                             playerHP = playerHP - 100;
  1177.                         }
  1178.                     }
  1179.                 }
  1180.                 if (randamumasuXA == 1 && randamumasuYA == 1) {
  1181.                     B = 5; randammasucount = 1;
  1182.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  1183.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  1184.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1185.                             playerHP = playerHP - 100;
  1186.                         }
  1187.                     }
  1188.                 }
  1189.                 if (randamumasuXA == 2 && randamumasuYA == 1) {
  1190.                     B = 5; randammasucount = 1;
  1191.                     DrawGraph(pos[randamumasuYA][randamumasuXA][0], pos[randamumasuYA][randamumasuXA][1], kikennhanndle[1], true);
  1192.                     if (pos[randamumasuYA][randamumasuXA][0] == pos[playerY][playerX][0] && pos[randamumasuYA][randamumasuXA][1] == pos[playerY][playerX][1]) {
  1193.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1194.                             playerHP = playerHP - 100;
  1195.                         }
  1196.                     }
  1197.                 }
  1198.                 if (randamumasuXB == 0 && randamumasuYB == 2) {
  1199.                     B = 5; randammasucount = 1;
  1200.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1201.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1202.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1203.                             playerHP = playerHP - 100;
  1204.                         }
  1205.                     }
  1206.                 }
  1207.                 if (randamumasuXB == 1 && randamumasuYB == 2) {
  1208.                     B = 5; randammasucount = 1;
  1209.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1210.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1211.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1212.                             playerHP = playerHP - 100;
  1213.                         }
  1214.                     }
  1215.                 }
  1216.                 if (randamumasuXB == 2 && randamumasuYB == 2) {
  1217.                     B = 5; randammasucount = 1;
  1218.                     DrawGraph(pos[randamumasuYB][randamumasuXB][0], pos[randamumasuYB][randamumasuXB][1], kikennhanndle[1], true);
  1219.                     if (pos[randamumasuYB][randamumasuXB][0] == pos[playerY][playerX][0] && pos[randamumasuYB][randamumasuXB][1] == pos[playerY][playerX][1]) {
  1220.                         if (randammasucountB > 0 && randammasucountB < 2) {
  1221.                             playerHP = playerHP - 100;
  1222.                         }
  1223.                     }
  1224.                 }
  1225.             }
  1226.             if (randammasucount > 0) {
  1227.                 ++randammasucountB;
  1228.                 //randamuzahyouB = 0;
  1229.             }
  1230.             if (randammasucountB > 0 && randammasucountB > 50) {
  1231.                 randamuzahyoulockBA = 0;
  1232.                 randamulock = 0;
  1233.             }
  1234.             if (randammasucountB > 50) {
  1235.                 //☆とりあえず、変数の残り値によってバグではないがプログラム通りとは言え複雑な変な動きが出るので、ここで値をすべて0にする。
  1236.                 randammasucount = 0;
  1237.                 randammasucountB = 0;
  1238.                 B = 0;
  1239.                 stopenemy = 0;
  1240.                 kasokudo2 = 0;
  1241.                 randamuzahyoukeisannhikiB = 0;
  1242.                 randamuzahyoukeisannB = 0;
  1243.                 Y = 0;
  1244.                 randamuzahyoulockB = 0;
  1245.                 test = 0;
  1246.             }
  1247.  
  1248.  
  1249.             //投げ道具が降ってくるこの間だけ危険マークを描画する。
  1250.             if (randamuzahyoukeisannhiki > 0 && randamuzahyoukeisannhiki < 10) {
  1251.                 ++kaihimark;
  1252.             }
  1253.             if (randamuzahyoukeisannhikiB > 0 && randamuzahyoukeisannhikiB < 10) {
  1254.                 ++kaihimark;
  1255.             }
  1256.             //投げ攻撃が来る部分にマークが出る
  1257.             if (kaihimark > 0 && ++kaihimark < 10) {
  1258.                 DrawRotaGraph(pos[randamumasuY][randamumasuX][0] + 30, pos[randamumasuY][randamumasuX][1] + 30, 1.0, 0, kikennhanndle[1], TRUE);
  1259.                 DrawRotaGraph(pos[randamumasuYA][randamumasuXA][0] + 30, pos[randamumasuYA][randamumasuXA][1] + 30, 1.0, 0, kikennhanndle[1], TRUE);
  1260.                 DrawRotaGraph(pos[randamumasuYB][randamumasuXB][0] + 30, pos[randamumasuYB][randamumasuXB][1] + 30, 1.0, 0, kikennhanndle[1], TRUE);
  1261.             }
  1262.             if (kaihimark > 10) {
  1263.                 kaihimark = 0;
  1264.             }
  1265.  
  1266.  
  1267.             // 俺キャラ(敵の目の前に移動する際の残像)の描画
  1268.             if (zannzou <= 60 && zannzou > 0) { //★残像を出すためにRキーでAを押したら変数zannzouが20になり、zannouの変数が0より大きいならば—1をしていき、その間だけ画像を描画する。
  1269.                 --zannzou;
  1270.                 DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  1271.                     playerImage, true);
  1272.             }//移動した一瞬に元の位置に自分を描画したい、しかしうまく機能していない。
  1273.             ///★多分一瞬過ぎるのであえてcount < 8と範囲を付けることでほんの一瞬だが残像が見えるようにした。
  1274.             ///攻撃してcountが50に溜まるまでの期間を利用した。
  1275.             if (zannzou <= 60 && zannzou > 40) {
  1276.                 DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  1277.                     playerGHandle[9], true);
  1278.             }
  1279.             if (zannzou <= 40 && zannzou > 20) {
  1280.                 DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  1281.                     playerGHandle[10], true);
  1282.             }
  1283.             if (zannzou <= 20 && zannzou > 0) {
  1284.                 DrawGraph(pos[playerY][preplayerX][0], pos[playerY][preplayerX][1],
  1285.                     playerGHandle[11], true);
  1286.             }
  1287.  
  1288.  
  1289.             if (lock == 1) {
  1290.                 DrawExtendGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1] - 20, pos[enemyY][enemyX][0] + 45, pos[enemyY][enemyX][1] + 40, lockImge, TRUE);
  1291.             }//ロックマークの描画
  1292.             if (lock) {
  1293.                 DrawFormatString(100, 200, GetColor(255, 255, 255), "LOCK");//ループ内に書くと条件式lockのによりlockの値を0にしてもずっと表示されるため、必要な時に表示するようにここに書いた
  1294.  
  1295.                 DrawFormatString(50, 300, GetColor(255, 0, 0), "%d/%d", count, count2);//1回殴った時にすべて消費して、再び溜まるまでの過程を表示するための関数
  1296.             }
  1297.             if (count < 50) {
  1298.                 DrawFormatString(50, 300, GetColor(0, 255, 255), "%d", count);//ここでcountの情報だけを条件(count < 500)より呼び出して、countの色を変えた
  1299.             }
  1300.             //敵のHPの描画
  1301.             DrawFormatString(pos[enemyY][enemyX][0] + 33, pos[enemyY][enemyX][1] - 49, GetColor(152, 251, 152), "HP%d", enemyHP);
  1302.  
  1303.             DrawFormatString(10, 70, GetColor(255, 0, 0), "playerHP%d", playerHP);
  1304.  
  1305.  
  1306.             if (enemyHPhyouji == 1) { DrawFormatString(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1] - 100, GetColor(255, 0, 0), "enemyHP%d", enemyHP); }
  1307.             if (enemyHP <= 10) {//すべての攻撃の中の最小値を設定した
  1308.  
  1309.                 enemyHPhyouji = 0; //敵のHPの表記を消す
  1310.             }
  1311.  
  1312.             DrawFormatString(50, 400, GetColor(255, 0, 0), "%d/%d", Kcount, Kcount2);
  1313.  
  1314.             DrawFormatString(150, 400, GetColor(255, 0, 0), "%d/%d", Wcount, Wcount2);
  1315.             DrawFormatString(250, 650, GetColor(255, 100, 100), "framesは%d", frames);
  1316.  
  1317.  
  1318.  
  1319.             DrawFormatString(50, 500, GetColor(255, 0, 0), "%d", addattackimage);//★addattacktimeが攻撃に続けば500になるし、それ以外では初期値より0なのでずっと下がっているわけではない
  1320.             if (addattacktime <= 500 && addattacktime > 0) {
  1321.                 --addattacktime;
  1322.                 DrawFormatString(50, 450, GetColor(255, 0, 0), "addattacktime%d", addattacktime);
  1323.             }//ロックオンして攻撃するまでの間のみ出てくる。
  1324. //★上限や下限はないが、変数の値をセットすることで切り替えることはできる。今回はそれを活用して変数の値を一時的に固定したり変えたりしている。
  1325.  
  1326.             DrawFormatString(50, 470, GetColor(255, 0, 0), "確認addattacktime%d", addattacktime);
  1327.             DrawFormatString(50, 500, GetColor(255, 0, 0), "stopenemytime%d", stopenemytime);
  1328.             DrawFormatString(50, 570, GetColor(255, 150, 170), "function_statusは%d", function_status);
  1329.             DrawFormatString(50, 585, GetColor(255, 0, 0), "Gtime%d", Gtime);
  1330.             ///DrawFormatString(150, 585, GetColor(255, 0, 0), "GtimeA%d", GtimeA);
  1331.  
  1332.  
  1333.  
  1334.  
  1335.             if (GcountA == 0) {
  1336.                 DrawFormatString(200, 600, GetColor(255, 0, 0), "グロッグ射撃可能");
  1337.                 DrawFormatString(50, 600, GetColor(255, 0, 0), "Gcount%d/Gcount%d", Gcount, Gcount2);
  1338.             }
  1339.             if (GcountA == 1) { DrawFormatString(200, 600, GetColor(255, 255, 0), "グロッグリロード中"); }
  1340.  
  1341.             if (MGcountA == 0) {
  1342.                 DrawFormatString(250, 650, GetColor(255, 0, 0), "マシンガン射撃可能");
  1343.                 DrawFormatString(50, 650, GetColor(255, 0, 0), "MGcount%d/MGcount%d", MGcount, MGcount2);
  1344.             }
  1345.             if (MGcountA == 1) {
  1346.                 //被らないようにするとなるとGfunction_status == 0の時にMGcountAを0にしても勝手にリロードされる。
  1347.                 //被らないような新しい変数を良いすればいいかもしれないが、誤作動とかを考えると何の武器を選んでいるか把握できた方がいいかもしれない。
  1348.                 DrawFormatString(200, 650, GetColor(255, 255, 0), "マシンガンリロード中");
  1349.             }
  1350.  
  1351.             //何を選択しているかの表示
  1352.             if (Gfunction_status == 0 && GcountA == 0) {
  1353.                 DrawFormatString(200, 600, GetColor(255, 255, 0), "グロッグ射撃可能");
  1354.                 DrawFormatString(50, 600, GetColor(255, 255, 0), "Gcount%d/Gcount%d", Gcount, Gcount2);
  1355.             }
  1356.             if (Gfunction_status == 1 && MGcountA == 0) {
  1357.                 DrawFormatString(250, 650, GetColor(255, 255, 0), "マシンガン射撃可能");
  1358.                 DrawFormatString(50, 650, GetColor(255, 255, 0), "MGcount%d/MGcount%d", MGcount, MGcount2);
  1359.             }
  1360.  
  1361.             DrawFormatString(200, 500, GetColor(255, 0, 0), "敵が攻撃してくるまでenemyattackは%dでenemyattackBは%d", enemyattack, enemyattackB);
  1362.             DrawFormatString(50, 620, GetColor(255, 0, 0), "protectは%d、protectcountは%d", protect, protectcount);
  1363.             DrawFormatString(290, 630, GetColor(255, 0, 0), "enemycountframeは%d,enemycount%d", enemycountframe, enemycount);
  1364.             DrawFormatString(100, 150, GetColor(255, 0, 100), "enemycount%d", enemycount);
  1365.             DrawFormatString(320, 540, GetColor(255, 0, 0), "Gkeyは%d,Gfunction_statusは%d,Grockは%d,reloadは%d", Gkey, Gfunction_status, Grock, reload);
  1366.             DrawFormatString(320, 560, GetColor(255, 0, 0), "GcountAは%d,MGcountAは%d", GcountA, MGcountA);
  1367.             DrawFormatString(320, 580, GetColor(255, 0, 0), "lockは%d,lockonMoveは%d,zannzouは%d", lock, lockonMove, zannzou);
  1368.             DrawFormatString(200, 680, GetColor(255, 0, 0), "a%d,nageXは%d,randamulockは%d,preenemyX2は%d, preenemyY2は%d", a, nageX, randamulock, preenemyX2, preenemyY2);
  1369.             //DrawFormatString(200, 740, GetColor(255, 0, 0), "nageXAは%d,preenemyX2Aは%d,preenemyY2Aは%d,Xは%d", nageXA, preenemyX2A, preenemyY2A,X);
  1370.             DrawFormatString(0, 800, GetColor(255, 0, 0), "A%d,testは%d,pos[playerY][playerX][0]は%d,pos[playerY][playerX][1]は%d", A, test, pos[playerY][playerX][0], pos[playerY][playerX][1]);
  1371.  
  1372.             DrawFormatString(0, 850, GetColor(255, 0, 0), "kasokudoは%d,kasokudo2は%d,kasokudo3は%d,Yは%d", kasokudo, kasokudo2, kasokudo3, Y);
  1373.             DrawFormatString(100, 900, GetColor(255, 0, 0), "固定preenemyX3は%d,後preenemyX3Aは%d,差分preenemyX3Bは%d", preenemyX3, preenemyX3A, preenemyX3B);
  1374.             DrawFormatString(100, 950, GetColor(255, 0, 0), "高さpreenemyY3Aは%d,randamumasuXは%d,randamumasuYは%d", preenemyY3A, randamumasuX, randamumasuY);
  1375.             //  DrawFormatString(100, 1000, GetColor(255, 0, 0), "randamumasuXは%d,randamumasuYは%d", randamumasuX,randamumasuY);
  1376.                 //DrawFormatString(100, 1050, GetColor(255, 0, 0), "randamumasuXAは%d,randamumasuYAは%d", randamumasuXA, randamumasuYA);
  1377.                 //DrawFormatString(100, 1100, GetColor(255, 0, 0), "randamumasuXBは%d,randamumasuYBは%d,Bは%d,", randamumasuXB, randamumasuYB,B);
  1378.                 //DrawFormatString(100, 1150, GetColor(255, 0, 0), "randamulockは%d,randammasucountは%d,randammasucountBは%d,aaは%d", randamulock, randammasucount,randammasucountB,aa);
  1379.                 //DrawFormatString(100, 1200, GetColor(255, 0, 0), "randammasucountBAは%d,randamuzahyoulockAは%d", randammasucountBA, randamuzahyoulockA);
  1380.                 //DrawFormatString(100, 1250, GetColor(255, 0, 0), "randammasucountBAは%d", randammasucountBA);
  1381.             DrawFormatString(100, 1000, GetColor(255, 0, 0), "Lframeは%d, Lcountは%d,Glockは%d,Gfunction_statusは%d", Lframe, Lcount, Glock, Gfunction_status);
  1382.  
  1383.         }
  1384.         ScreenFlip();  // 裏画面を表画面に反映
  1385.     }
  1386.  
  1387.  
  1388.     DxLib_End();  // DXライブラリ使用の終了処理
  1389.     return 0;  // ソフトの終了
  1390.  
  1391. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement