Advertisement
Guest User

Untitled

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