475

C言語で「得点・おじゃまぷよ演算システム」を作ってみました!!!

by
KaKe
KaKe
<はじめに>
だんだんと雨の日が多くなり、梅雨が近づいているように感じる時期ですね。
あ、どうもはじめまして!ぷよエンジョイ勢のKaKeです!
本投稿では、私か自分用に作った
 連鎖の得点や発生するおじゃまぷよ数の演算システム
 (以後「得点・おじゃまぷよ演算システム」とする)
について紹介したいと思います!
(ソースコードは一番下に載せてあります。)

<経緯>
何気なくぷよシミュレータで遊んでいたときのこと。
「ここで同時消しにしたら、ここで連結増やしたらどれだけ火力が変わるんだろう」
「これとそれ、どっちが強いのかな」
調べるために、いちいち連鎖の形を入力して実行していた。
正直めんどくさかった...その時...
「まって、これプログラミング使えば得点計算一発でできるじゃん!」
そう思い、自分の持ってる知識を頼りに1からソースファイルを作成した...

<使用方法>
プログラムを実行するとまず「モードセレクト」の画面が出ます。
 連鎖から得点・おじゃまぷよ数を算出したい場合"1"
 単純に得点からおじゃまぷよを算出したい場合
……"2"
を入力します。


①「連鎖→得点おじゃま」モード
 1.まずおじゃまぷよレート(≧1, ∋ℕ)を設定します。
 2.次に算出したい連鎖の連鎖数(≧1, ∋ℕ)を入力します。
 3.ここで各連鎖(1連鎖目, 2連鎖目,...)ごと
  「消えるぷよの総数n(n≧4, ∈n)
  「それぞれの連結数」
  「一度に消える色数c(1≦c≦5, ∈c)
  を入力します。
  ぷよ数nが4~7個の場合、連結数と色数は1通りであるため自動的に設定されます。
  ぷよ数nが8個以上の場合、連結数を入力する必要があるため、5連結が3個 の形式で入力します。
  (全パターンの連結数を入力し終えたら"0"を入力します。)
  結果、連鎖ごとの得点これまでに発生したおじゃまぷよの数が出力されます!
 4.最後の連鎖まで入力したら最終的に
  「発生した総得点」
  「おじゃまぷよの総数」
  「予告ぷよ」
  
が出力されます!
 <例>2連鎖トリプル(1連鎖目:5個5連結1色 2連鎖目:16個5,5,6連結3色), おじゃまぷよレート70
実行画面
実際の盤面
(使用サイト:Puyo Nexus Chain Simulator
実行したら...あってる!
(使用サイト:Puyo Nexus Chain Simulator

②「得点→おじゃま」モード
 1.①と同様に、おじゃまぷよレート(≧1, ∋ℕ)を設定します。
 2.次に変換したい得点(≧0, ∋ℤ)を入力します
 3.するとおじゃまぷよに変換されます!予告ぷよも表示されます!)
 <例>16380点, おじゃまぷよレート70


演算終了後に下画像のような選択肢が表示されます。
 同じ条件でもう一度続けたい場合……"1"
 おじゃまぷよレートを変えたい場合
"2"
 モードセレクトに戻りたい場合
………"3"
 終了したい場合
…………………………"4"
を入力します。



<さいごに>
 以上、作成した「得点・おじゃまぷよ演算システム」の紹介でした!
自分自身、まだまだC言語の知識が浅いため、専門の方が見たら違和感を持たれるかもしれません。
機会があればまた見直し、システムのバージョンアップを図りたいです。

これからも、ぷよぷよという奥深いゲームを幅広く楽しんでいきたいと思います! 

ご清覧ありがとうございました!( ´ ▽ ` )



<ソースコード>
  1. #include <stdio.h>
  2. int CHAIN(int x) {
  3.     int y;
  4.     if (x == 1) {
  5.         y = 0;
  6.     }
  7.     else if (x > 1 && x <= 3) {
  8.         y = 8 * (x - 1);
  9.     }
  10.     else {
  11.         y = 32 * (x - 3);
  12.     }
  13.     return y;
  14. }
  15. int CONNECTION(int connection, int times) {
  16.     int y;
  17.     if (connection == 4) {
  18.         y = 0;
  19.     }
  20.     else if (connection >= 11) {
  21.         y = 10 * times;
  22.     }
  23.     else {
  24.         y = (connection - 3) * times;
  25.     }
  26.     return y;
  27. }
  28. int COLOR(int x) {
  29.     int y;
  30.     switch (x){
  31.     case 1:
  32.         y = 0;
  33.         break;
  34.     case 2:
  35.         y = 3;
  36.         break;
  37.     case 3:
  38.         y = 6;
  39.         break;
  40.     case 4:
  41.         y = 12;
  42.         break;
  43.     case 5:
  44.         y = 24;
  45.         break;
  46.     }
  47.     return y;
  48. }
  49. void GARBAGE(int x) {
  50.     int i = 1;
  51.     printf("予告おじゃまぷよ:");
  52.     while (i <= (x / 720)) {
  53.         printf("王冠");
  54.         i++;
  55.     }i = 1;
  56.     if ((x % 720) >= 360) {
  57.         printf("月");
  58.     }
  59.     if ((x % 360) >= 180) {
  60.         printf("星");
  61.     }
  62.     while (i <= ((x % 180) / 30)) {
  63.         printf("岩");
  64.         i++;
  65.     }i = 1;
  66.     while (i <= ((x % 30) / 6)) {
  67.         printf("大");
  68.         i++;
  69.     }i = 1;
  70.     while (i <= (x % 6)) {
  71.         printf("小");
  72.         i++;
  73.     }
  74.     printf("\n\n");
  75. }
  76. void mode1(int rate) {
  77.     int chain, num, connection, times, sumconnection = 0, color, point = 0, totalpoint = 0;
  78.     printf("連鎖数を入力してください:");
  79.     scanf_s("%d", &chain);
  80.     puts("\n連鎖ごとに、消えるぷよの総数、それぞれの連結数、一度に消える色数を入力してください。\n");
  81.     for (int i = 1; i <= chain; i++) {
  82.         printf("<%2d連鎖目>\n", i);
  83.         printf(" ぷよ数:");
  84.         scanf_s("%d", &num);
  85.         if (num == 4) {
  86.             sumconnection = CONNECTION(4, 1);
  87.             color = 1;
  88.             puts(" 連結数:4連結が1個");
  89.             puts(" 色数 :1");
  90.         }
  91.         else if (num == 5) {
  92.             sumconnection = CONNECTION(5, 1);
  93.             color = 1;
  94.             puts(" 連結数:5連結が1個");
  95.             puts(" 色数 :1");
  96.         }
  97.         else if (num == 6) {
  98.             sumconnection = CONNECTION(6, 1);
  99.             color = 1;
  100.             puts(" 連結数:6連結が1個");
  101.             puts(" 色数 :1");
  102.         }
  103.         else if (num == 7) {
  104.             sumconnection = CONNECTION(7, 1);
  105.             color = 1;
  106.             puts(" 連結数:7連結が1個");
  107.             puts(" 色数 :1");
  108.         }
  109.         else {
  110.             puts(" 連結数を「6連結が2個」という形式で入力してください。(すべて入力したら0を入れてください。)");
  111.             printf(" 連結数:");
  112.             while (1) {
  113.                 scanf_s("%d連結が%d個", &connection, &times);
  114.                 if (connection == 0) { break; }
  115.                 sumconnection += CONNECTION(connection, times);
  116.                 printf("     ");
  117.             }
  118.             printf(" 色数 :");
  119.             scanf_s("%d", &color);
  120.         }
  121.         point = num * 10 * (CHAIN(i) + sumconnection + COLOR(color));
  122.         if (point == 0) {
  123.             point = num * 10;
  124.         }
  125.         puts(" ↓");
  126.         printf(" 得点     :%6d\n", point);
  127.         totalpoint += point;
  128.         printf(" おじゃまぷよ数:%6d\n\n", totalpoint / rate);
  129.         sumconnection = 0;
  130.     }
  131.     puts("----------------------------------------------\n");
  132.     printf("総得点     :%6d\n", totalpoint);
  133.     printf("おじゃまぷよ総数:%6d\n", totalpoint / rate);
  134.     GARBAGE(totalpoint / rate);
  135. }
  136. void mode2(int rate) {
  137.     int point;
  138.     printf("得点を入力してください:");
  139.     scanf_s("%d", &point);
  140.     puts("\n----------------------------------------------\n");
  141.     printf("おじゃまぷよ総数:%d\n", point / rate);
  142.     GARBAGE(point / rate);
  143. }
  144. int main(void) {
  145.     int mode, rate, select = 1;
  146.     puts("〜〜〜ぷよぷよ得点・おじゃまぷよ計算機〜〜〜");
  147.     while (select <= 3) {
  148.         select = 1;
  149.         printf("\nモードを選んでください。(1:連鎖から得点・おじゃまぷよを算出 2:得点からおじゃまぷよを算出):");
  150.         scanf_s("%d", &mode);
  151.         if (mode == 1) {
  152.             puts("\n連鎖から得点・おじゃまぷよ数を算出します。");
  153.             while (select <= 2) {
  154.                 printf("おじゃまぷよレートを設定してください(1〜)(通:70 フィーバー:120):");
  155.                 scanf_s("%d", &rate);
  156.                 select = 1;
  157.                 while (select == 1) {
  158.                     mode1(rate);
  159.                     printf("1:続ける 2:おじゃまぷよレートを変える 3:モードセレクトに戻る 4:終了:");
  160.                     scanf_s("%d", &select);
  161.                 }
  162.             }
  163.  
  164.  
  165.         }
  166.         else {
  167.             puts("\n得点からおじゃまぷよ数を算出します。");
  168.             while (select <= 2) {
  169.                 printf("おじゃまぷよレートを設定してください(1〜)(通:70 フィーバー:120):");
  170.                 scanf_s("%d", &rate);
  171.                 select = 1;
  172.                 while (select == 1) {
  173.                     mode2(rate);
  174.                     printf("1:続ける 2:おじゃまぷよレートを変える 3:モードセレクトに戻る 4:終了:");
  175.                     scanf_s("%d", &select);
  176.                 }
  177.             }
  178.         }
  179.     }
  180.     return 0;
  181. }
更新日時:2024/05/17 10:06
(作成日時:2024/05/17 02:50)
コメント( 0 )
コメントするにはログインが必要です
シェア