ニートです1からプログラミングを教えてくれる [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1たかし
垢版 |
2015/12/25(金) 18:43:55.48
先生を募集します

先生!!
2016/01/12(火) 11:11:05.72
>>478
add, commit, pushしてから、Githubでプルリクしなさい。
480takasi
垢版 |
2016/01/12(火) 16:48:13.54
おはようございます
プルリクエストしてみました。ちゃんとできていますでしょうか
体調不良のため途中で離脱するかもしれません
2016/01/12(火) 17:14:09.31
今日の勉強会は休みにします。
482takasi
垢版 |
2016/01/12(火) 17:20:28.56
分かりました、自習します
2016/01/12(火) 18:49:16.21
先生、たかし君のペースでいいので是非データベースとの連携もご教示ください!
484takasi
垢版 |
2016/01/13(水) 13:50:41.92
病院行こうと思ったら午前で終わってました
おはようございます
2016/01/13(水) 19:10:53.68
ジャンケンゲームの続きだ。
https://github.com/katahiromz/JankenGUI
これを適当なフォルダにcloneしてソースを眺めてみよ。
486takasi
垢版 |
2016/01/13(水) 19:26:21.36
おはようございます
始めます
2016/01/13(水) 19:32:23.31
Visibleプロパティをfalseにすると非表示になる。
SoundPlayer.Stopで音を止めることができる。
2016/01/13(水) 19:37:24.49
コードを読んだ感想を述べよ。
489takasi
垢版 |
2016/01/13(水) 19:47:25.22
僕のぐっちゃぐちゃなコードに比べるとすごく綺麗にまとまっていて
これはどういう動作をするコードなのかひと目で分かります
条件分岐の負けの判定の仕方でelse if ((3 + player_hand - comp_hand) % 3 == 1)
を見てこれはすげえと思いました
全体のコード量は少ないですが、すっきりしていて感動しました
そして自分にこんな綺麗に書ける自信が無くて胃が痛くなりました
490takasi
垢版 |
2016/01/13(水) 19:49:19.08
こういうやり方もあるのかと色々発見がありました
以上、小学生並みの感想文でした
491takasi
垢版 |
2016/01/13(水) 19:52:11.35
あとじゃんけんゲームがなかなかおもしろいです
2016/01/13(水) 19:57:19.20
その判定は大学数学の剰余類という概念を使っている。
多分、大学一年生で習うだろう。
493takasi
垢版 |
2016/01/13(水) 20:04:12.87
初めて聞いた単語で胃が痛くなりました
とりあえず頑張ります
ちなみに僕は数学は大の苦手です
数学の知識があったほうがどう考えてもいいですね
2016/01/13(水) 20:04:33.55
今日はアプリの設定データについて勉強する。
アプリを終了した後でも、データを保存しておきたい場合、
ファイルやレジストリにデータを記録することになる。
レジストリはWindowsが持っている、階層構造を持ったデータベースで
あり、ファイルとは異なる。
2016/01/13(水) 20:10:02.84
二つのTextBoxをフォームに配置し、さらにOKボタンとキャンセルボタンを置く。
496takasi
垢版 |
2016/01/13(水) 20:12:34.79
置きました
2016/01/13(水) 20:18:30.96
OKボタンをダブルクリックして、次のコードを追加。

var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\Takashi\MySoftware");
key.SetValue("Text1", textBox1.Text);
key.SetValue("Text2", textBox2.Text);
key.Close();
498takasi
垢版 |
2016/01/13(水) 20:20:17.35
追加しました
2016/01/13(水) 20:23:26.62
プログラムを実行してOKを押す。これでレジストリに書き込まれた。
Win+Rキーを押してregeditと入力してEnterキーを押す。
これでレジストリエディターが起動する。
HKEY_CURRENT_USER\Software\Takashi\MySoftwareがあることを
確認せよ。
500takasi
垢版 |
2016/01/13(水) 20:28:09.63
Tkashi\Mysofrwareとレジストリを確認しました
2016/01/13(水) 20:31:55.02
次は読み込みだ。フォームのLoadイベントに次のコードを追加。

var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Takashi\MySoftware");
textBox1.Text = key.GetValue("Text1");
textBox2.Text = key.GetValue("Text2");
key.Close();
2016/01/13(水) 20:36:28.82
文字列リテラルに@が付いているのは\によるエスケープシーケンスを解釈しないためだ。
以前、"\n"は改行を表すと言った。"\t"はタブ文字だ。このように通常、""の中の\は特殊な解釈をする。
503takasi
垢版 |
2016/01/13(水) 20:41:47.46
オブジェクト型はString型に代入できないと注意されたのでConvert.ToStringしましたが大丈夫でしょうか

private void Form1_Load(object sender, EventArgs e)
{
var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Takashi\MySoftware");
textBox1.Text = Convert.ToString(key.GetValue("Text1"));
textBox2.Text = Convert.ToString(key.GetValue("Text2"));
key.Close();

}
2016/01/13(水) 20:41:56.00
レジストリはシステムの資源を占有するので、サイズの大きなデータを書き込むべきではない。
大きな設定データはファイルに記録する。
ではどこに設定ファイルを書き込めばいいか?
特殊フォルダのAppDataに書き込むのがいいとされる。
2016/01/13(水) 20:45:29.99
>>503
key.GetValue("Text1").ToString();
でOKだ。
2016/01/13(水) 20:49:48.52
特殊フォルダの場所を取得するには次のように書く。
var path = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
2016/01/13(水) 20:57:53.42
読み込みされるか実行して確認せよ。
次にレジストリエディタでMySoftwareキーを削除してプログラムを再起動せよ。
例外が発生するはずだ。実はキーが開けないときkeyはnullになる。
nullというのは無効なデータのことだ。
508takasi
垢版 |
2016/01/13(水) 21:01:26.06
読み込まれないです!
https://i.gyazo.com/f2e5ff48bd5fa2390e783ff8d86d6c9e.png
Form1_Loadは初めから存在してなかったので自分で作ったのですがこれが原因でしょうか
2016/01/13(水) 21:03:06.24
キーが開けないときや作れないときはkey == nullになる。
このまま書き込んだり、読み込もうとすると例外が発生してしまう。
対処法はnullチェックをすることだ。
if (key != null) {
...
key.Close();
}
2016/01/13(水) 21:04:38.96
>>508
それはいったん消してプロパティウィンドウ
からイベントを追加せよ。カミナリのアイコンだ。
511takasi
垢版 |
2016/01/13(水) 21:12:54.68
>>507例外がスローされるのを確認して
>>509nullチェックで回避しました
512takasi
垢版 |
2016/01/13(水) 21:19:18.77
あ、読み込みも問題なくできました
2016/01/13(水) 21:20:52.39
課題。ジャンケンゲームでの勝ち・負け・引き分けの回数を
レジストリに記録するようにせよ。
2016/01/13(水) 21:22:48.11
アプリ設定に使ったファイルやレジストリキーを消すのは、
インストーラ側で行うことが多い。
2016/01/13(水) 21:34:51.21
課題が出来たら、プルリクせよ。残り時間は自習とする。
2016/01/13(水) 22:11:34.19
質問はありませんか?
517takasi
垢版 |
2016/01/13(水) 22:19:11.11
質問はありませんが、値の受け渡しで頭がぐるぐるしてます

とりあえずsave_keyメソッドとload_keyメソッドを作りぐっちゃぐちゃやってます頑張ります
518takasi
垢版 |
2016/01/13(水) 22:45:21.86
えーと、やりたいことは分かっているんですが思考が迷子です
時間がかかりそうなので宿題とさせて下さい
えーとプログラミング適正無しでしょうか悲しいです
2016/01/13(水) 23:12:37.34
ヒント:
アプリ側で保持するのは、回数が増えた分だ。現在の回数ではない。
レジストリへのアクセスは読み書きを一度に行う。
アプリ側の増分だけレジストリの回数を増やした後でアプリ側の増分をゼロにする。
回数を増やすのは勝敗引き分けが決まったときに行う。
回数の増分はフォーム側ではなくプログラム側で保持する。
2016/01/13(水) 23:16:19.59
おやすみ。身体を冷やすなよ。
2016/01/14(木) 20:36:18.94
ヘイ、ヨー!
始めっぞ
522takasi
垢版 |
2016/01/14(木) 20:40:53.10
おはようごじます・・・
2016/01/14(木) 20:44:14.18
さあーて、どこまでできたかなっ♪
524takasi
垢版 |
2016/01/14(木) 20:50:08.39
正直に言いますとまだ出来ていません
あまりの出来の悪さに悲しみに暮れ寝て起きたら今です
○にたい
2016/01/14(木) 20:54:55.82
ヘイ、まずは、三つのint型のメンバー変数を追加するよぉ。
初期値はゼロだぜぃ。
int kachi_count = 0;
int make_count = 0;
int aiko_count = 0;
526takasi
垢版 |
2016/01/14(木) 20:56:23.94
追加しました
2016/01/14(木) 20:58:47.83
お次は、勝敗判定の箇所を探してみよー。
hantei関数の呼び出しをしている場所があるよね。
ここで判定に応じてカウント変数を1つ加算だよお!
528takasi
垢版 |
2016/01/14(木) 21:02:23.71
加算できました
2016/01/14(木) 21:03:36.91
その後にレジストリのカウント値を更新だ。
CreateSubKeyはキーがなければキーを作成してそれを開く。
あればそのまま開く。
カウント値はGetValueで取得、SetValueで設定だ。
しかしまだ値を設定していないときにGetValueしたらどうなるか?
530takasi
垢版 |
2016/01/14(木) 21:05:55.97
例外がスローされます
2016/01/14(木) 21:17:48.07
>>530
ノーノー、nullが返される。
var value = key.GetValue("KachiCount");
int count = kachi_count;
if (value != null)
{
count += Convert.ToInt32(value);
}
...
2016/01/14(木) 21:20:30.78
そしてcount.ToString()をSetValueしてからkachi_countをゼロにする。
他のカウント変数も同様だ。
533takasi
垢版 |
2016/01/14(木) 21:23:48.93
どのタイミングでキーを作成しなければいけないのか分からないです
2016/01/14(木) 21:25:18.15
カウントを表示するのは別のフォームで行う。
新しくフォームを追加だ。
その上にラベルをいくつか追加。
フォームのLoadイベントでレジストリを読み込んでラベルテキストをセット。
OKボタンでフォームを閉じるようにする。
2016/01/14(木) 21:28:59.98
>>533
いつカウントを更新するかは、自由に決めることができる。
アプリが終了するときか、フォームが閉じたときか、カウンタが更新したときか。
ここではすぐに更新してほしいので、hantei関数が呼ばれた後に
レジストリを更新する。
2016/01/14(木) 21:33:18.31
どうだね? 作れそうかな?
537takasi
垢版 |
2016/01/14(木) 21:33:36.08
>>534
private void Form2_Load(object sender, EventArgs e)
{
var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Takashi\MySoftware");
label4.Text = key.GetValue("KACHI").ToString();
label5.Text = key.GetValue("MAKE").ToString();
label6.Text = key.GetValue("AIKO").ToString();
}
で大丈夫ですよね
2016/01/14(木) 21:35:57.02
>>537
try/catchしないならkeyとvalueのnullチェックが必要だよ。
539takasi
垢版 |
2016/01/14(木) 21:36:07.69
レジストリの更新はメソッドを新たに作成してそこでやらせたほうがいいですよね
2016/01/14(木) 21:37:03.59
>>539
そうだね。
2016/01/14(木) 21:45:20.04
\MySoftware
のところは
\JankenGUI
にしておこう。
542takasi
垢版 |
2016/01/14(木) 21:46:11.30
var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Takashi\MySoftware");
if (key != null)
{
var value_kachi = key.GetValue("KACHI");
var value_make = key.GetValue("MAKE");
var value_aiko = key.GetValue("AIKO");
if (value_kachi != null) label4.Text = key.GetValue("KACHI").ToString();
if (value_make != null) label5.Text = key.GetValue("MAKE").ToString();
if (value_aiko != null) label6.Text = key.GetValue("AIKO").ToString();

こういうことでしょうか
2016/01/14(木) 21:48:05.12
if (value_kachi != null) label4.Text = key.GetValue("KACHI").ToString();
ちょっと無駄があるな。
if (value_kachi != null) label4.Text = value_kachi.ToString();
こっち。
2016/01/14(木) 21:57:22.37
git add -a
git commit -m "add counters"
git push origin master
2016/01/14(木) 22:05:30.78
どうだね?
何があっても、とにかく陽気に行こうぜ
546takasi
垢版 |
2016/01/14(木) 22:13:32.93
もう少しで動かします
2016/01/14(木) 22:14:28.61
どうした? ん?
2016/01/14(木) 22:21:25.15
ブラインドタッチの特訓と基本情報の取得が必要だな。
1ヶ月以内にブラインドタッチをマスターして、
1年以内に基本情報を取得しなさい。
549takasi
垢版 |
2016/01/14(木) 22:24:31.61
上手くいきません
とりあえず現時点のコードをコミットした方がいいですか
2016/01/14(木) 22:25:37.85
レジストリの更新はカウント加算の後だ。
551takasi
垢版 |
2016/01/14(木) 22:27:44.43
ブラインドタッチ一応できます・・・
実質的な死刑宣告と捉えたほうが良いですか・・・
552takasi
垢版 |
2016/01/14(木) 22:29:36.69
switch (hantei(player_hand, comp_hand))
{
case HanteiKekka.HANTEI_KACHI:
label3.Text = "あなたの勝ちです";
kachi_player.Play();
++kachi_count;
save_key("KACHI");
break;
case HanteiKekka.HANTEI_MAKE:
label3.Text = "あなたの負けです";
make_player.Play();
++make_count;
save_key("MAKE");
break;
case HanteiKekka.HANTEI_AIKO:
label3.Text = "あいこ";
aiko = true;
++aiko_count;
save_key("AIKO");
break;
}
2016/01/14(木) 22:30:23.51
じゃあ、pushしといて。
明日見るから。
554takasi
垢版 |
2016/01/14(木) 22:31:57.33
わかりましたpushしておきます
2016/01/14(木) 22:32:05.26
今日はおやすみ。
556takasi
垢版 |
2016/01/14(木) 22:33:02.13
すみませんでした
おやすみなさい
557takasi
垢版 |
2016/01/14(木) 23:36:49.80
$ git push origin master
remote: Permission to katahiromz/JankenGUI.git denied to takasi-desu.
fatal: unable to access 'https://github.com/katahiromz/JankenGUI/': The requested URL returned error: 403

ぐぬぬ
2016/01/15(金) 00:55:53.21
http://transitive.info/article/git/command/remote/
2016/01/15(金) 01:19:31.01
あ、フォーク忘れてた? ごめんね。
560takasi
垢版 |
2016/01/15(金) 02:12:03.82
んぐぐぐぐぐぐぐ
プスプスプスシューーーーーーーーーーー
561takasi
垢版 |
2016/01/15(金) 02:20:50.29
なぜでしょうpushができません
2016/01/15(金) 07:48:52.11
>>561
自分のリポジトリじゃないからね。
最初にforkすべきだった。
pushしなくていいよ。変更点少ないし。
563takasi
垢版 |
2016/01/15(金) 08:22:44.17
分かりました
動かして見た感じでは問題はなかったです
https://gyazo.com/3d005abe029830ef80e9f69be763228f
https://gyazo.com/567c6437b66c8bd4b84a6a6c8f59096c
https://i.gyazo.com/dfea862fc1e257c9e54c9e28edeb757f.png
2016/01/15(金) 16:39:11.05
いくつか注釈しておこう。
引数がゼロ個の関数を作ることができる。
save_keyは引数のない三つの関数に分けた方がいい。
記録がない場合はゼロ回として扱うべきだ。
異常な表示にならないようにすべての場合の「状態」を管理しないといけない。
2016/01/15(金) 19:39:31.24
JankenGUIにリソースのアイコン(*.ico)を追加せよ。フリー素材で構わない。
可能ならばJankenGUIに署名を行え。
JankenGUIをReleaseビルドせよ。
Inno Setupをダウンロード&インストールせよ。
2016/01/15(金) 19:41:08.11
Inno Setupのウィザードに従ってインストーラのスクリプト(*.iss)を試作せよ。
スクリプト中の絶対パスを相対パスにせよ。
JankenGUIが使っている.net frameworkのバージョンを確認せよ。
次のサイトを参考にインストール時に.net frameworkの有無をチェックするようにせよ。
http://qiita.com/bellx2/items/14ac4e02283d5c1ef12b
2016/01/15(金) 20:09:15.33
今日はインストーラ作成を行う。今回の課題は英語ができないと難しいかも知れないな。
質問が有ったらお気軽に。
568takasi
垢版 |
2016/01/15(金) 20:14:40.64
おはようございます
準備ご始めます
2016/01/15(金) 20:24:28.92
署名は多少時間がかかると思う。今日は後回しでいい。
2016/01/15(金) 20:36:34.17
ローカルリポジトリ情報の隠しフォルダ「.git」を「rm -rf .git」で消す。
「rm -rf」はファイルやフォルダをまるごと消すLinuxのコマンドだ。
GitHubのTakasi-DesuのJankenGUIをSettingsから消して(delete)作り直す。
それからgit init, add, commit, push -uだ。
2016/01/15(金) 20:39:05.60
git remote addも忘れずに。
2016/01/15(金) 21:07:44.34
教員免許を持っていない私が指導するのだから、不充分な点も
あるかもしれないが、御了承頂きたい。
進捗報告を。
573takasi
垢版 |
2016/01/15(金) 21:20:27.37
Inno Setupの使い方を調べている途中です
2016/01/15(金) 21:26:32.48
Releaseビルドしたなら、bin/Releaseフォルダにexeができているだろう。
これをInno Setupのウィザードでプログラムファイルとして指定する。
575takasi
垢版 |
2016/01/15(金) 21:43:42.57
使い方がさっぱりわかりません
exeファイルはできましたがInno Setupのウィザードでプログラムファイルとして指定するのはどうすればよいのでしょうか
2016/01/15(金) 21:44:30.97
わからない点はある?
2016/01/15(金) 21:47:26.33
>>575
Inno Setupは日本語になっているか?
参照ボタン(browse)をクリックして、ファイルの場所を指定する。
578takasi
垢版 |
2016/01/15(金) 21:52:54.29
参照ボタンはどこでしょうか?
開くはスクリプトファイルしか開けないようです
今この画面ですhttps://i.gyazo.com/3a0dffc78162915778d17ec7ea5504a3.png
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況