<はじめに>
だんだんと雨の日が多くなり、梅雨が近づいているように感じる時期ですね。
あ、どうもはじめまして!ぷよエンジョイ勢の
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
実行画面
②「得点→おじゃま」モード
1.①と同様に、
おじゃまぷよレート(≧1, ∋ℕ)を設定します。
2.次に変換したい
得点(≧0, ∋ℤ)を入力します
3.すると
おじゃまぷよに変換されます!(
予告ぷよも表示されます!)
<例>16380点, おじゃまぷよレート70
演算終了後に下画像のような選択肢が表示されます。
同じ条件でもう一度続けたい場合……"1"
おじゃまぷよレートを変えたい場合…"2"
モードセレクトに戻りたい場合………"3"
終了したい場合…………………………"4"
を入力します。
<さいごに>
以上、作成した
「得点・おじゃまぷよ演算システム」の紹介でした!
自分自身、まだまだC言語の知識が浅いため、専門の方が見たら違和感を持たれるかもしれません。
機会があればまた見直し、システムのバージョンアップを図りたいです。
これからも、ぷよぷよという奥深いゲームを幅広く楽しんでいきたいと思います!
ご清覧ありがとうございました!( ´ ▽ ` )
<ソースコード>
- #include <stdio.h>
- int CHAIN(int x) {
- int y;
- if (x == 1) {
- y = 0;
- }
- else if (x > 1 && x <= 3) {
- y = 8 * (x - 1);
- }
- else {
- y = 32 * (x - 3);
- }
- return y;
- }
- int CONNECTION(int connection, int times) {
- int y;
- if (connection == 4) {
- y = 0;
- }
- else if (connection >= 11) {
- y = 10 * times;
- }
- else {
- y = (connection - 3) * times;
- }
- return y;
- }
- int COLOR(int x) {
- int y;
- switch (x){
- case 1:
- y = 0;
- break;
- case 2:
- y = 3;
- break;
- case 3:
- y = 6;
- break;
- case 4:
- y = 12;
- break;
- case 5:
- y = 24;
- break;
- }
- return y;
- }
- void GARBAGE(int x) {
- int i = 1;
- printf("予告おじゃまぷよ:");
- while (i <= (x / 720)) {
- printf("王冠");
- i++;
- }i = 1;
- if ((x % 720) >= 360) {
- printf("月");
- }
- if ((x % 360) >= 180) {
- printf("星");
- }
- while (i <= ((x % 180) / 30)) {
- printf("岩");
- i++;
- }i = 1;
- while (i <= ((x % 30) / 6)) {
- printf("大");
- i++;
- }i = 1;
- while (i <= (x % 6)) {
- printf("小");
- i++;
- }
- printf("\n\n");
- }
- void mode1(int rate) {
- int chain, num, connection, times, sumconnection = 0, color, point = 0, totalpoint = 0;
- printf("連鎖数を入力してください:");
- scanf_s("%d", &chain);
- puts("\n連鎖ごとに、消えるぷよの総数、それぞれの連結数、一度に消える色数を入力してください。\n");
- for (int i = 1; i <= chain; i++) {
- printf("<%2d連鎖目>\n", i);
- printf(" ぷよ数:");
- scanf_s("%d", &num);
- if (num == 4) {
- sumconnection = CONNECTION(4, 1);
- color = 1;
- puts(" 連結数:4連結が1個");
- puts(" 色数 :1");
- }
- else if (num == 5) {
- sumconnection = CONNECTION(5, 1);
- color = 1;
- puts(" 連結数:5連結が1個");
- puts(" 色数 :1");
- }
- else if (num == 6) {
- sumconnection = CONNECTION(6, 1);
- color = 1;
- puts(" 連結数:6連結が1個");
- puts(" 色数 :1");
- }
- else if (num == 7) {
- sumconnection = CONNECTION(7, 1);
- color = 1;
- puts(" 連結数:7連結が1個");
- puts(" 色数 :1");
- }
- else {
- puts(" 連結数を「6連結が2個」という形式で入力してください。(すべて入力したら0を入れてください。)");
- printf(" 連結数:");
- while (1) {
- scanf_s("%d連結が%d個", &connection, ×);
- if (connection == 0) { break; }
- sumconnection += CONNECTION(connection, times);
- printf(" ");
- }
- printf(" 色数 :");
- scanf_s("%d", &color);
- }
- point = num * 10 * (CHAIN(i) + sumconnection + COLOR(color));
- if (point == 0) {
- point = num * 10;
- }
- puts(" ↓");
- printf(" 得点 :%6d\n", point);
- totalpoint += point;
- printf(" おじゃまぷよ数:%6d\n\n", totalpoint / rate);
- sumconnection = 0;
- }
- puts("----------------------------------------------\n");
- printf("総得点 :%6d\n", totalpoint);
- printf("おじゃまぷよ総数:%6d\n", totalpoint / rate);
- GARBAGE(totalpoint / rate);
- }
- void mode2(int rate) {
- int point;
- printf("得点を入力してください:");
- scanf_s("%d", &point);
- puts("\n----------------------------------------------\n");
- printf("おじゃまぷよ総数:%d\n", point / rate);
- GARBAGE(point / rate);
- }
- int main(void) {
- int mode, rate, select = 1;
- puts("〜〜〜ぷよぷよ得点・おじゃまぷよ計算機〜〜〜");
- while (select <= 3) {
- select = 1;
- printf("\nモードを選んでください。(1:連鎖から得点・おじゃまぷよを算出 2:得点からおじゃまぷよを算出):");
- scanf_s("%d", &mode);
- if (mode == 1) {
- puts("\n連鎖から得点・おじゃまぷよ数を算出します。");
- while (select <= 2) {
- printf("おじゃまぷよレートを設定してください(1〜)(通:70 フィーバー:120):");
- scanf_s("%d", &rate);
- select = 1;
- while (select == 1) {
- mode1(rate);
- printf("1:続ける 2:おじゃまぷよレートを変える 3:モードセレクトに戻る 4:終了:");
- scanf_s("%d", &select);
- }
- }
-
-
- }
- else {
- puts("\n得点からおじゃまぷよ数を算出します。");
- while (select <= 2) {
- printf("おじゃまぷよレートを設定してください(1〜)(通:70 フィーバー:120):");
- scanf_s("%d", &rate);
- select = 1;
- while (select == 1) {
- mode2(rate);
- printf("1:続ける 2:おじゃまぷよレートを変える 3:モードセレクトに戻る 4:終了:");
- scanf_s("%d", &select);
- }
- }
- }
- }
- return 0;
- }