#InitialDirectory
Explore tagged Tumblr posts
guangyaw · 3 years ago
Text
C# 使用 OpenFileDialog 開啟檔案
C# 使用 OpenFileDialog 開啟檔案
學習程式語言最重要的就是實踐, 只要實際操作演練過需要的功能, 就能夠從中學到經驗, 上次的 C# 教學介紹了使用主要 Interop 元件存取Excel 檔案, 今天則是要來介紹 C# 使用 OpenFileDialog 開啟檔案 其實微軟官方網站說明文件都寫得相當的詳細, 不愧為長久以來的軟體巨擘, 對於今天的 OpenFileDialog 當然也有詳細的說明與範例, 有興趣的人可以自行前往下載研究 要使用 OpenFileDialog 要先引入命名空間, 在 C# 程式中寫做: using System.Windows.Forms; 這樣就能夠使用 OpenFileDialog這個類別的各種屬性與方法, 當然詳細的資訊在官方網站都有說明, 此處範例程式僅以當下的使用情境呼叫相應的屬性與方法 Multiselect ,以布林值表示 ( true 或者…
Tumblr media
View On WordPress
0 notes
gpu-returns · 8 years ago
Text
時間はなくとも”エディタ”は作る。
さぁ、記事を書いていこう。
3年の「のづ」です。少し前に久しくアーケードの音ゲーをやったのだが、気付いたことがあった。
(……あれ?目と体が追いつかない!?)
ずいぶんと下手になってる…。
あと自分のやり方が雑になっていて、やっていた頃の俺はどうやっていたんだろうと聞きたいところだ。
それと、いつもゲームをやりながら考えている。
音ゲーって譜面データたくさんあるよなー。と。
一つの曲に難易度が3つか4つある。
例えば
難易度が「easy」、「normal」、[hard]の3つがあるとする。
譜面のデータには0から9までの1桁の数字が入るとすると
Tumblr media
こんな感じのデータをプログラマが決めた法則に基づいた文字の並びでテキストファイルもしくはバイナリファイルとしておいておき、ゲーム画面で読み込む。
のような流れになる。
ここで考えることがある。
・譜面のデータを変える時はどうするか
・法則の知らない人(作った人以外)がそのデータを変更したりするのか
昔の俺はこう考えた。
1つ目に関しては、わかるなら、そのデータを開き、書き換えることができるなら、書き換えればいい。
2つ目は、決めた法則を変更する人に教えて、できるようにすればいい。
昔の俺「よし、これで問題はなくなった!!」
今の俺「………まてまて!!問題は解決していないぞ!!!」
この方法でいざ作っていくと、easyの3つ目は5から8��変更するから、初めの文字からいち、にい、さん、ここを書き換える、と。
次はhardの34こ目を9から3にするから、えーと、どこが34こ目なんだ?
さらに0から9までならまだしも、アルファベットも変更するものだったりするならもう訳が分からない。このままいくと、難易度が3つある1つの曲を作るのにどれだけの時間がかかるのだろうか。
さらに言うと、一つの曲では、作ったゲームもその曲を聴くだけの音楽プレイヤーと化してしまうので、振り返ると、意外と無駄な時間を使っていたんだと感じる。
で、だ。
この膨大にかかりそうな時間を減らそうではないか。
そう、エディタ(ツールとも言える)で!
あ、ようやく本題です。
今年の1月ごろに作ったゲームで、
ブロックの上を走り続けてジャンプしながらゴールに進むゲーム作ったんだけど。
Tumblr media
これね、1ステージがそんなに長くないから、たくさんのステージが必要だったんだよね。
さっきの音ゲーの話にすると、緑のブロックが「N」で黄色のギザギザブロックが「#」みたいな感じで、
Tumblr media
こんな感じで作ってた。
一行目のはレベルとか全体の幅と高さとか基本情報のデータが入ってる。
(これを制作した後に知ったがtxtファイルは扱いづらいらしい)
これを書き換えて行くとステージも変わるんだけど、見てて本当の画面にNとかTとかでないからわかりにくい。
それがこうなるとどうなる?
Tumblr media
なんかゲームの画面に近くなった。
Tumblr media
マウスの操作でステージが作れる。
これだけでもだいぶ楽になり、作業効率もよくなる。
このエディタは、VisualStudioのC#言語で使える、Windowsフォームアプリケーションで作ったのだが、基本さえ押さえておけばすぐに作れる。
VisualStudioから新しいプロジェクトを開いてC#のWindowsフォームアプリケーション���開くとこんな感じの画面が出てくる
Tumblr media
この中央の小さなウィンドウが今回のエディタの画面になる。
左側にある、ツールボックスから、いろいろなものをこのウィンドウにつけることができる。
画面の大きさを変えて、テキストを入力するところを置いて、ボタンを置いて…
Tumblr media
うん、いい感じ。
追加したのは
「TextBox」が1つ、「Button」が2つ、
そしてデータの読み込みを行う「OpenFileDialog」と「SaveFileDialog」のみ。
ここからがコーディング。
読み込むボタンをダブルクリックすると、クリックしたときに処理されるメソッドが作られるので、そこに処理を書く。
保存するボタンも同様に書いていく。
using System; //テキスト読み込みに使う using System.IO; //プロジェクト>参照の追加>アセンブリ>フレームワーク>Microsoft.VisualBasicをチェックで使用可能 using Microsoft.VisualBasic.FileIO;namespace test {    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void 読み込むボタン_Click(object sender, EventArgs e)        {            openFileDialog1.FileName = "ChoseFile";            openFileDialog1.InitialDirectory = "C:\\"; ;            openFileDialog1.Filter = "バイナリファイル(*.bin)|*.bin|テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*";            openFileDialog1.FilterIndex = 2;            openFileDialog1.Title = "開くファイルを選択してください";            if (openFileDialog1.ShowDialog() == DialogResult.OK)            {                TextFieldParser tf = new TextFieldParser(openFileDialog1.FileName, System.Text.Encoding.GetEncoding("shift_jis"));                tf.TextFieldType = FieldType.Delimited;                //データの読み込み                string loadText = tf.ReadToEnd();                tf.Close();                //読み込んだデータをほしい場所に入れてあげる。                textBox1.Text = loadText;            }        }        private void 保存するボタン_Click(object sender, EventArgs e)        {            saveFileDialog1.Filter =                    "バイナリファイル(*.bin)|*.bin|すべてのファイル(*.*)|*.*";            saveFileDialog1.FilterIndex = 0;            saveFileDialog1.Title = "保存先のファイルを選択してください";            if (saveFileDialog1.ShowDialog() == DialogResult.OK)            {                StreamWriter sw;                //Excelで開けるようシフトJISで保存                sw = new StreamWriter(saveFileDialog1.FileName, false, System.Text.Encoding.GetEncoding("shift_jis"));            sw.Write(textBox1.Text);             sw.Close();            }        }    } }
こうして、ここにテキストを入れてください。と書かれたところを保存することができる。
簡易的にコマンドを保存するエディターだとするとこうなる。
Tumblr media
あとは、ゲームに必要な物を盛り込んで���って、よりよいものにしていくとよい。
画像を描画したり、モード変更のボタンを用意したり……
必要性について
エディタがあるといいことは
・時間の短縮になる
・直接値を変えることがないのでゲームで読み込むときに読み込みエラーを起こさなくなる。
だと思う。
ただ、さっきからエディタエディタと言っているが、悪く言うと、本来のゲームには出てくることのないものである。
なら、なぜ必要か?
それは時間短縮がされ、作業効率が良くなる。という部分が大きい。
(個人的に直接データの値を書き換えているとイライラする)
作り方によっては、1時間で1つのマップを作るより、10分で2つ作れるといったものもできる。
そのようなことを実現させるなら、ある程度ゲームができてきたときに、一息、エディタを作ってみてはどうだろうか。
1 note · View note