ネットゲーム時計実験

20241114

20:43

G3004_ff11_cal_txt_get

 

概要

 

過去のプロジェクトからコードを調査

 

 

 

 

int[] vana_clk = new int[10];

DateTime dt = DateTime.Now;

getu_cst = cal_vana_get1(dt, vana_clk); // 呼び出し書式の事例

 

//  ゲームカレンダーの再生

 

public static string cal_vana_get1(DateTime prm_time, int[] prm_vana_clk)

{

// vana_clk[10] 10件を定義します

 

string ans_cst;

int yy_all, mm, dd, th, tm, ts, yy;

 

long day_renban;

long gen_sec;

string youbi_cst = "";

string getu_cst = "";

long[] vday = new long[15];

int getu_th, getu_tm;

long vana_day_sec = 3456L;

long vana_th_sec = 144L;

double vana_sec;

 

yy_all = prm_time.Year;

mm = prm_time.Month;

dd = prm_time.Day;

th = prm_time.Hour;

tm = prm_time.Minute;

ts = prm_time.Second;

 

/////////////////////////////////////////////////

//        2015.8.4 00:00  1230.8.26 00:00 風曜日

//                三日月

//        (24時間) 25

//          3456sec (3600*24/25)

//          144sec

//          2.4sec

/////////////////////////////////////////////////

DateTime from_dt = new DateTime(2015, 8, 4);

DateTime to_dt = new DateTime(yy_all, mm, dd);

 

gen_sec = ((long)th * 3600L + (long)tm * 60L + (long)ts);

day_renban = (long)(to_dt - from_dt).TotalDays;

 

//msg2("day_renban", day_renban.ToString(), "");

 

///////////////////////////////////////////////////////

//         1232/8/26  (8/26 -> V日数 7*30+26-1=235L)

//          2015/8/24

//                |----------------------|

//                        v[2]                

//                                                |------|

//                                                 

//                                                   |---|

///////////////////////////////////////////////////////

vday[0] = day_renban * 25L;        // 起点からの日数

vday[1] = gen_sec / vana_day_sec;  // 実日0時からの日数

vday[2] = vday[0] + vday[1];       // 合計日数

yy = (int)((vday[2] + 220L) / (long)(30 * 12));     // V年変換

 

//msg2(yy.ToString(), vday[2].ToString(), "");

 

vday[3] = (vday[2] + 220L) - (yy * 30 * 12);            // V年からの日数

 

mm = (int)(vday[3] / 30) + 1;           // V月変換

vday[4] = vday[3] - ((mm - 1) * 30);    // 残り日数

dd = (int)vday[4] + 16;

 

if (30 < dd)

{

dd -= 30;

if (12 < mm) { mm = 1; ++yy; }

else { ++mm; }

}

 

 

//vday[5] = (gen_sec - (vday[1] * vana_day_sec)) - 0L; ;

//th = (int)(vday[5] / vana_th_sec);

//tm = (int)((vday[5] - ((long)th * vana_th_sec)) / 2.4);

 

vana_sec = (double)(gen_sec - (vday[1] * vana_day_sec)) - 0.0;

th = (int)(vana_sec / (double)vana_th_sec);

tm = (int)((vana_sec - (double)((long)th * vana_th_sec)) / 2.4);

 

 

 

 

//msg2(yy.ToString() + "/" + mm.ToString() + "/" + dd.ToString(), th.ToString() + ":" + tm.ToString(), "");

 

switch (vday[2] % 8)

{

case 0: youbi_cst = ""; break;

case 1: youbi_cst = ""; break;

case 2: youbi_cst = ""; break;

case 3: youbi_cst = ""; break;

case 4: youbi_cst = ""; break;

case 5: youbi_cst = ""; break;

case 6: youbi_cst = ""; break;

case 7: youbi_cst = ""; break;

}

 

prm_vana_clk[0] = 0;

prm_vana_clk[1] = yy + 1230;

prm_vana_clk[2] = mm;

prm_vana_clk[3] = dd;

prm_vana_clk[4] = th;

prm_vana_clk[5] = tm;

prm_vana_clk[6] = 0;

prm_vana_clk[7] = (int)(((vday[2] / 7L)) % 12L);     // 月齢コード

 

switch (prm_vana_clk[7])

{

case 0: getu_cst = "(o・・・・・)"; break;   // 三日月

case 1: getu_cst = "(oo・・・・)"; break;   //

case 2: getu_cst = "(ooo・・・)"; break;   // 上弦

case 3: getu_cst = "(oooo・・)"; break;   //

case 4: getu_cst = "(ooooo)"; break;   // 十三

case 5: getu_cst = "(oooooo)"; break;   // 満月

case 6: getu_cst = "(ooooo)"; break;   // 十六

case 7: getu_cst = "(・・oooo)"; break;   //

case 8: getu_cst = "(・・・ooo)"; break;   // 下弦

case 9: getu_cst = "(・・・・oo)"; break;   // 20

case 10: getu_cst = "(・・・・・o)"; break;  // 26

case 11: getu_cst = "(・・・・・・)"; break;  // 新月

}

 

 

///////////////////////////////////////////////////

//        2015.08.27 木曜 s-segawa 9586-3438

//                月変化残り計算が半日かかっても完成せず

//                実時間 00:00 でちょうど月変化するタイミングの

//                カレンダーを計算の起点に変更することでやっと完成

///////////////////////////////////////////////////

getu_th = getu_tm = 0;

vday[6] = ((vday[2] / 7L) * 7L) + 7L;       //        次の月変化ポイント計算

vday[7] = (vday[6] - vday[2]) * vana_day_sec;   // 変化までの日数

vday[8] = vday[7] - (th * vana_th_sec) - tm * 2L;   // 変化までのリアルタイム秒数

 

getu_th = (int)(vday[8] / 3600L);

getu_tm = (int)(((vday[8] - ((long)getu_th * 3600L))) / 60L);

 

//ans_cst = youbi_cst + " " + getu_cst + " " + getu_th.ToString("D2") + ":" + getu_tm.ToString("D2");

ans_cst = youbi_cst + " " + getu_cst;

 

return (ans_cst);

}

 

インターフェースの検討

 

 

 

 

グローバル領域に、関数コードをコピペします

 

 

ビルド成功

 

実験ボタンのイベントにコードを追加する

 

 

private void button1_Click(object sender, EventArgs e)

{

// ボタンをマウスでクリックしたら、ここを通ります

//msg("実験ボタンが押されたら表示されるモニタです");

//msg3("実験ボタンが押されました");

 

// 任意カレンダーデータを1週間作成し、ゲーム内時計を調査する

DateTime dt = DateTime.Now;

int cnt;

 

//dt.Second = 0;                // 秒を初期化

// dt の部分初期化は成功しないので、放置し

// 60秒加算する方法を実験する

 

 

for(cnt=0;cnt< 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

listBox1.Items.Add(dt);

 

}

 

//getu_cst = cal_vana_get1(dt, vana_clk); // 呼び出し書式の事例

 

 

 

}

 

これでテストしてみる

 

成功 1分加算できている

 

これを踏まえて

 

for (cnt=0;cnt< 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

msg_cst = cal_vana_get1(dt, vana_clk);

 

msg_cst += " ";

msg_cst += vana_clk[1].ToString() + "/";        //

msg_cst += vana_clk[2].ToString() + "/";        //

msg_cst += vana_clk[3].ToString() + " ";    //

 

msg_cst += vana_clk[4].ToString() + ":";    //

msg_cst += vana_clk[5].ToString() + " ";    //

 

listBox1.Items.Add(msg_cst);

 

}

 

これでビルドする  成功

 

さらに、ゲーム内の月齢が変化したときだけリストに代入する

 

for (cnt=0;cnt< 7 * 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

dsp_cst = msg_cst = cal_vana_get1(dt, vana_clk);

 

if (old_msg_cst != msg_cst)

{

// 月齢の変化あり

dsp_cst += " ";

dsp_cst += vana_clk[1].ToString() + "/";    //

dsp_cst += vana_clk[2].ToString() + "/";    //

dsp_cst += vana_clk[3].ToString() + " ";    //

 

dsp_cst += vana_clk[4].ToString() + ":";    //

dsp_cst += vana_clk[5].ToString() + " ";    //

 

listBox1.Items.Add(dsp_cst);

 

old_msg_cst = msg_cst;

}

 

}

 

ビルドする 成功

 

 

これに地球時間を追加すれば成功です

 

for (cnt=0;cnt< 7 * 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

dsp_cst = msg_cst = cal_vana_get1(dt, vana_clk);

 

if (old_msg_cst != msg_cst)

{

// 月齢の変化あり

dsp_cst += " ";

dsp_cst += vana_clk[1].ToString() + "/";    //

dsp_cst += vana_clk[2].ToString() + "/";    //

dsp_cst += vana_clk[3].ToString() + " ";    //

 

dsp_cst += vana_clk[4].ToString() + ":";    //

dsp_cst += vana_clk[5].ToString() + " ";    //

 

dsp_cst += " 地球時間 ";

dsp_cst += dt.Year.ToString("d4") + "/";

dsp_cst += dt.Month.ToString("D2") + "/";

dsp_cst += dt.Day.ToString("D2") + " ";

dsp_cst += dt.Hour.ToString("D2") + ":";

dsp_cst += dt.Minute.ToString("D2");

 

listBox1.Items.Add(dsp_cst);

 

old_msg_cst = msg_cst;

}

 

}

 

満月が複数行表示され、失敗している

そこで、月齢は数値データで変化判定してみる

 

// 任意カレンダーデータを1週間作成し、ゲーム内時計を調査する

DateTime dt = DateTime.Now;

int cnt;

int[] vana_clk = new int[10];

string msg_cst,dsp_cst;

int old_moon_cod = -1;

 

 

//dt.Second = 0;                // 秒を初期化

// dt の部分初期化は成功しないので、放置し

// 60秒加算する方法を実験する

 

 

for (cnt=0;cnt< 7 * 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

dsp_cst = msg_cst = cal_vana_get1(dt, vana_clk);

 

if (old_moon_cod != vana_clk[7])

{

// 月齢の変化あり

dsp_cst += " ";

dsp_cst += vana_clk[1].ToString() + "/";    //

dsp_cst += vana_clk[2].ToString() + "/";    //

dsp_cst += vana_clk[3].ToString() + " ";    //

 

dsp_cst += vana_clk[4].ToString() + ":";    //

dsp_cst += vana_clk[5].ToString() + " ";    //

 

dsp_cst += " 地球時間 ";

dsp_cst += dt.Year.ToString("d4") + "/";

dsp_cst += dt.Month.ToString("D2") + "/";

dsp_cst += dt.Day.ToString("D2") + " ";

dsp_cst += dt.Hour.ToString("D2") + ":";

dsp_cst += dt.Minute.ToString("D2");

 

listBox1.Items.Add(dsp_cst);

 

old_moon_cod = vana_clk[7];        // 月齢変化更新

}

 

}

 

 

 

 

長時間お疲れさまでした。

 

追記 ボタン内部処理の変更

 

private void button1_Click(object sender, EventArgs e)

{

// ボタンをマウスでクリックしたら、ここを通ります

//msg("実験ボタンが押されたら表示されるモニタです");

//msg3("実験ボタンが押されました");

 

// 任意カレンダーデータを1週間作成し、ゲーム内時計を調査する

DateTime dt = DateTime.Now;

int cnt;

int[] vana_clk = new int[10];

string msg_cst,dsp_cst;

int old_moon_cod = -1;

 

 

//dt.Second = 0;                // 秒を初期化

// dt の部分初期化は成功しないので、放置し

// 60秒加算する方法を実験する

 

 

for (cnt=0;cnt< 7 * 24 * 60;cnt++)

{

dt = dt.AddSeconds(60);

dsp_cst = msg_cst = cal_vana_get1(dt, vana_clk);

 

if (old_moon_cod != vana_clk[7])

{

// 月齢の変化あり

dsp_cst += " ";

dsp_cst += vana_clk[1].ToString("d4") + "/";    //

dsp_cst += vana_clk[2].ToString("D2") + "/";    //

dsp_cst += vana_clk[3].ToString("D2") + " ";    //

 

dsp_cst += vana_clk[4].ToString("D2") + ":";    //

dsp_cst += vana_clk[5].ToString("D2") + " ";    //

 

dsp_cst += " 地球時間 ";

dsp_cst += dt.Year.ToString("d4") + "/";

dsp_cst += dt.Month.ToString("D2") + "/";

dsp_cst += dt.Day.ToString("D2") + " ";

dsp_cst += dt.Hour.ToString("D2") + ":";

dsp_cst += dt.Minute.ToString("D2");

 

listBox1.Items.Add(dsp_cst);

 

old_moon_cod = vana_clk[7];        // 月齢変化更新

}

 

}

 

}

 

追記

正しい月齢名称を反映しました

プロジェクトファイルも更新しています

 

switch (prm_vana_clk[7])

{

case 0: getu_cst = "(o・・・・・) 三日月"; break;   // 三日月

case 1: getu_cst = "(oo・・・・) 七日月"; break;   //

case 2: getu_cst = "(ooo・・・) 上弦月"; break;   // 上弦

case 3: getu_cst = "(oooo・・) 十日夜"; break;   //

case 4: getu_cst = "(ooooo) 十三夜"; break;   // 十三

case 5: getu_cst = "(oooooo) 満月"; break;   // 満月

case 6: getu_cst = "(ooooo) 十六夜"; break;   // 十六

case 7: getu_cst = "(・・oooo) 居待月"; break;   //

case 8: getu_cst = "(・・・ooo) 下弦の月"; break;   // 下弦

case 9: getu_cst = "(・・・・oo) 二十日余月"; break;   // 20

case 10: getu_cst = "(・・・・・o) 二十六夜"; break;  // 26

case 11: getu_cst = "(・・・・・・) 新月"; break;  // 新月

}