スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
はじめに
この記事は、Visual Studio初心者向け講座の一環で書かれた記事である。サイコロの代わりになる乱数生成ソフトが作れるようになる。
目次へ:Visual Studioでソフトを作ってみよう(初心者向け)
コードが見づらい場合は、下図の赤枠をクリックする。クリックすると、新しいwindowで、ソースコードが見ることができる。
現在の状況
以下のように名前を付けている
入力の制限するコード
まずは、max_t、number_t、trial_tに数字以外のものが入ると嫌なので、文字などが入力されないようにはじく。
number_tをクリックする。するとソースコードが見えるようになる。
まず、以下の2つのコードを一番最初に加える(10、11行目)
using System.IO;//追加(出力のために必要)
using System.Text.RegularExpressions;//追加(入力に制限をために必要)
また次のコードを適当な場所に加える(18行目)。
Regex notIntReg = new Regex(“[^0-9]”); //数字以外にマッチする
定義したnotIntRegを使って、数字以外が入ってきたときに、空白に取り換える(replace)
例えば、number_tでは、
number_t.Text= notIntReg.Replace(number_t.Text, “”);
を加える。
max_t、trial_tに対しても同様の処理をする。
※以下のようなコード(下の例では、max_tにおけるコード)が見つからない場合は、いったんフォームに戻って、対応するテキストボックスをダブルクリックする。
private void max_t_TextChanged(object sender, EventArgs e)
{
}
現在のコードはこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO;//追加(出力のために必要) using System.Text.RegularExpressions;//追加(入力に制限をために必要) namespace Dices { public partial class Form1 : Base1 { Regex notIntReg = new Regex("[^0-9]"); //数字以外にマッチする public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void number_t_TextChanged(object sender, EventArgs e) { number_t.Text= notIntReg.Replace(number_t.Text, ""); } private void max_t_TextChanged(object sender, EventArgs e) { max_t.Text = notIntReg.Replace(max_t.Text, ""); } private void trial_t_TextChanged(object sender, EventArgs e) { trial_t.Text = notIntReg.Replace(trial_t.Text, ""); } private void button1_Click(object sender, EventArgs e) { } private void result_t_TextChanged(object sender, EventArgs e) { } //以降はlabelをクリックして開いてしまった分。(無視してください) private void label2_Click(object sender, EventArgs e) { } private void dice_t_Click(object sender, EventArgs e) { } } } |
サイコロを振るコード
button1をクリックすると以下のようなコードが表示される
private void button1_Click(object sender, EventArgs e)
{
}
この中に以下のコードを放り込む
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
private void button1_Click(object sender, EventArgs e) { //記入漏れがあった時の処理 if ((number_t.Text == "" || max_t.Text == "" || trial_t.Text == "")) { MessageBox.Show("数字の指定もれがあります"); result_t.Clear(); return; } //数字が0だった時の処理 if ((number_t.Text == "0" || max_t.Text == "0" || trial_t.Text == "0")) { MessageBox.Show("数字の0は使用できません。1以上の数字を指定してください"); result_t.Clear(); return; } int number = Convert.ToInt32(number_t.Text);//ダイスの数 int max = Convert.ToInt32(max_t.Text); ;//ダイスの最大の出目 int trial= Convert.ToInt32(trial_t.Text); ;//試行回数 //ファイル名を宣言 string file_name = number+"d"+max+"_trial"+trial+".txt";//ファイル名を宣言 //ファイルの出力 FileStream fs = new FileStream(file_name, FileMode.Create);//上書き保存する StreamWriter sw = new StreamWriter(fs); //初期条件 sw.Write("//[条件]" + max + "面体のダイスを" + number + "回振る\r\n" + "//[試行回数]" + trial + "\r\n" + "//[保存ファイル名]" + file_name + "\r\n" + "\r\n" + "//回目\tダイスの数の和\r\n"); //乱数 int seed = Environment.TickCount; Random rnd = new System.Random();// インスタンスを生成 for (int i = 1; i <= trial; i++) { int dice = 0; for(int k=0; k < number; k++) { dice +=rnd.Next(1, max + 1); } sw.Write(i+"\t"+dice+"\r\n"); } sw.Close();//ファイルを閉じる result_t.Clear();//右窓をいったんクリアにする StreamReader sr = new StreamReader(file_name); result_t.Text = sr.ReadToEnd();//右窓に結果を表示 sr.Close(); MessageBox.Show("結果は" + file_name + "に保存されました。"); } |
最終的なコードは以下のようになる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO;//追加(出力のために必要) using System.Text.RegularExpressions;//追加(入力に制限をために必要) namespace Dices { public partial class Form1 : Base1 { Regex notIntReg = new Regex("[^0-9]"); //数字以外にマッチする public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void number_t_TextChanged(object sender, EventArgs e) { number_t.Text= notIntReg.Replace(number_t.Text, ""); } private void max_t_TextChanged(object sender, EventArgs e) { max_t.Text = notIntReg.Replace(max_t.Text, ""); } private void trial_t_TextChanged(object sender, EventArgs e) { trial_t.Text = notIntReg.Replace(trial_t.Text, ""); } private void button1_Click(object sender, EventArgs e) { //記入漏れがあった時の処理 if ((number_t.Text == "" || max_t.Text == "" || trial_t.Text == "")) { MessageBox.Show("数字の指定もれがあります"); result_t.Clear(); return; } //数字が0だった時の処理 if ((number_t.Text == "0" || max_t.Text == "0" || trial_t.Text == "0")) { MessageBox.Show("数字の0は使用できません。1以上の数字を指定してください"); result_t.Clear(); return; } int number = Convert.ToInt32(number_t.Text);//ダイスの数 int max = Convert.ToInt32(max_t.Text); ;//ダイスの最大の出目 int trial= Convert.ToInt32(trial_t.Text); ;//試行回数 //ファイル名を宣言 string file_name = number+"d"+max+"_trial"+trial+".txt";//ファイル名を宣言 //ファイルの出力 FileStream fs = new FileStream(file_name, FileMode.Create);//上書き保存する StreamWriter sw = new StreamWriter(fs); //初期条件 sw.Write("//[条件]" + max + "面体のダイスを" + number + "回振る\r\n" + "//[試行回数]" + trial + "\r\n" + "//[保存ファイル名]" + file_name + "\r\n" + "\r\n" + "//回目\tダイスの数の和\r\n"); //乱数 int seed = Environment.TickCount; Random rnd = new System.Random();// インスタンスを生成 for (int i = 1; i <= trial; i++) { int dice = 0; for(int k=0; k < number; k++) { dice +=rnd.Next(1, max + 1); } sw.Write(i+"\t"+dice+"\r\n"); } sw.Close();//ファイルを閉じる result_t.Clear();//右窓をいったんクリアにする StreamReader sr = new StreamReader(file_name); result_t.Text = sr.ReadToEnd();//右窓に結果を表示 sr.Close(); MessageBox.Show("結果は" + file_name + "に保存されました。"); } private void result_t_TextChanged(object sender, EventArgs e) { } //以降はlabelをクリックして開いてしまった分。(無視してください) private void label2_Click(object sender, EventArgs e) { } private void dice_t_Click(object sender, EventArgs e) { } } } |
関連記事
目次へ:Visual Studioでソフトを作ってみよう(初心者向け)
次の記事へ:Visual Studioでソースコードの実行の仕方
前の記事へ:Visual Studioでラベルやボタンの配置をする
ソースコードがよくわからなかった場合用の参考記事
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)