このスレッドはロックされています。記事の閲覧のみとなります。
リロード > 記事閲覧
◆ スパ・プログラミング講座
日時: 2024/02/21 01:39
名前: REDCHEEKS

このスレは、スパンキングの事を考え、そのエロティズムに興奮勃起しながら、プログラミングを学んで行くスレです。

開発環境

Microsoft Windows 10
Microsoft Visual Studio 2019

関連資料

http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=75
http://spankingart.org/wiki/File:Dc27.jpg

関連コメント
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=558&no=17
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=206

■■■■■■■■■■■■■■■■■■■■■■

■ 画像ファイルのリンクをクリックしたとき

■ 「このサイトにアクセスするにはサインインしてください」

■ とメッセージが出た場合は、

■ ユーザー名:spank

■ パスワード:ing

■ と入力してください

■■■■■■■■■■■■■■■■■■■■■■

目次

準備  開発環境の構築手順(Visual Studio 2019 のインストール) >>1

課題1 開発環境の構築手順(プロジェクトの作成) >>2

課題1 逃げるオシリのアルゴリズム >>3-7

課題1 基本思想、仕様、ライブラリ >>8-10

課題1 ■貴方への課題 >>11

課題2 課題1のアレンジ(泣き言追加)>>12-14

デバッグの手順 >>15

アンカーの設定等説明 >>16-17

課題の解答 >>18

正規表現について >>19

リファクタリング、オブジェクト指向、クラスについて >>20-23

オーバーロードで新機能追加 >>24-25

クイックウォッチによるデバッグ >>26

データヒントでデバッグ >>27

クラスとインスタンス、new演算子、継承 >>28-29

ローカルウィンドウによるデバッグ、まとめ、練習問題 >>30-32

エクセルからのデータ読み込み >>33

《コラム》 スクラッチについて >>34

オブジェクト指向のアドバンテージ >>35

ポリモーフィズム、インターフェース、まとめ、練習問題 >>36-38

カプセル化 >>39-40

《ニュース》 Visual Studio 2022 がでたね >>41

オーバーライドで、どぴゅー機能を実装する、練習問題 >>42-43

XMLコメントの書き方、練習問題 >>44-45

《コラム》 BASIC系とC系のプログラミング言語の違い >>46

列挙型(enum型)について >>47

クエリー(LINQ)について >>48-49

ディクショナリー(辞書)について >>50-51

ジェネリックについて >>52-53

ビット演算・ビットシフトについて >>54-55

数学関数について >>56-58

《コラム》 Cの封印された技術 ポインタ >>59

《コラム》 Web系エンジニア >>60

ヌルポインタの話 「尻 が null でした。」「尻++」「Hな課題」 >>61-64

エラー(例外処理)について >>65-66

「値」と「参照」の話 >>67

《コラム》 エンジニア転職ブーム >>68

《コラム》 クラウドって素晴らしい >>69
メンテ
Page: [1] [2]

開発環境の構築手順(Visual Studio) ( No.1 )
日時: 2022/03/27 12:18
名前: REDCHEEKS

Visual Studio 2019 のインストール手順

http://visualstudio.microsoft.com/ja/downloads/
上記マイクロソフトのサイトにて、開発ツール無料版をダウンロードしインストールする。
↓以下はその手順を示す。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230015753.jpg
@ コミュニティの「無料ダウンロード」ボタンをクリックする。
A 実行ボタンをクリックする。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230015843.jpg
@「はい」をクリックする。
A「続行」をクリックする。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230015915.jpg
@「.NETデスクトップ開発」のチェックボックスをクリックする。
A「インストール」をクリックする。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230015952.jpg
@「後で行う。」をクリックする。
A「Visual C#」を選択する。
B 配色テーマを選択する。
C「Visual Studio の開始」をクリックする。
メンテ
課題1 開発環境の構築手順(プロジェクトの作成) ( No.2 )
日時: 2022/03/27 12:18
名前: REDCHEEKS

課題1 開発環境の構築手順(プロジェクトの作成)

>>1 の続き(または Windows10 のスタートボタンから Visual Studio 2019 を起動)

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020204.jpg
@「新しいプロジェクトの作成」をクリックする。
A「C#」「Windows」「デスクトップ」を順次選択する。
B「Windows フォーム アプリケーション (.NET Framework)」を選択する。
C「次へ」を選択する。
D プロジェクト名に「課題01」を入力する。
E「ソリューションとプロジェクトを同じディレクトリに配置する」にチェックを入れる。
F「作成」ボタンをクリックする。

これで、プロジェクトが作成されます。

参考までに、プロジェクトがいったん登録されれば、次回からは、左側に表示されている
G「課題01.sln」をクリックするだけで、作業が開始できます。
メンテ
課題1 逃げるオシリのアルゴリズム(画面設定) ( No.3 )
日時: 2022/03/27 12:19
名前: REDCHEEKS

>>2 の続き

次に、プロジェクトの内部を見て、設定していきます。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020321.jpg
@「Form1」が選択されているのを確認し、
A スクロールさせて下の方にある「Text」を見つけ、その右横に「逃げるオシリのアルゴリズム」と入力します。
B Aを入力しキーボードの「Enter」を押下することで、ウインドウのタイトルに反映されます。
C 次に「ツールボックス」をクリックします。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020350.jpg
@ ピンのマークをクリックし、図の通りピンが立った状態にします。
A「コモン コントロール」をクリックし、一覧表示を開きます。
B「Button」をドラッグして「逃げるオシリのアルゴリズム」の画面上にコピーします。
C「ListBox」をドラッグして「逃げるオシリのアルゴリズム」の画面上にコピーします。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020442.jpg
@「ListBox1」をクリックして選択します。
A「ListBox1」の右下をドラッグして拡大します。
B「Button1」をクリックして選択します。
C「Button1」の右をドラッグして拡大します。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020514.jpg
@「Button1」をクリックして選択します。
A「Button1」が選択されているのを確認し、
B「Text」の右側に「お仕置き開始」と入力します。
C「Button1」をダブルクリックします。⇒ プログラム入力画面に切り替わります。
メンテ
課題1 逃げるオシリのアルゴリズム(プログラム入力) ( No.4 )
日時: 2022/03/27 12:19
名前: REDCHEEKS

>>3 の続き

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020551.jpg
@「button1_Click」の下の { と } の間に、プログラムを手入力するか、または >>5 からコピペします。
A「button1_Click」の下の } の外側に、プログラムを手入力するか、または >>6 からコピペします。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020633.jpg
@ これが上のAで入力(またはコピペ)した「お仕置き処理」プログラムです。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020709.jpg
@ さらにライブラリを入力(または >>7 からコピペ)します。
A「開始」ボタンをクリックします。

以下は、プログラムの動作です。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020734.jpg
@「お仕置き開始」ボタンをクリックします。
A お仕置き宣言が表示されるので「尻を突き出す」ボタンをクリックします。
B お仕置きが始まるので、お仕置きが終わらないうちに「尻を引っ込める」ボタンをクリックします。
C お叱りメッセージが表示されるので、再度「尻を突き出す」ボタンをクリックします。

http://spankingart.org/wiki/File:Dc27.jpg
メンテ
課題1 コピペ用(ボタンの切り替え) ( No.5 )
日時: 2020/12/30 21:32
名前: REDCHEEKS

// ボタンの切り替え
if (button1.Text == "尻を突き出す")
{
button1.Text = "尻を引っ込める";
}
else if (button1.Text == "尻を引っ込める")
{
button1.Text = "尻を突き出す";
}
else // お仕置き処理
{
listBox1.Items.Clear();
button1.Text = "尻を突き出す";
Osioki();
button1.Text = "お仕置き開始";
}
メンテ
課題1 コピペ用(お仕置き処理) ( No.6 )
日時: 2021/01/07 18:23
名前: REDCHEEKS

/// <summary>
/// お仕置き処理
/// </summary>
private void Osioki()
{
int n = 12; // 残りの回数
int escapeCount = 0; // 逃げた回数
int escapeTime = 0; // 逃げている時間(秒)

Say("これから罰としてオシリを" + n + "回叩きます。 パンツ下ろして、オシリ出しなさい。");

while (!CanSpank()) // お尻が突き出されるまで待つ
{
WaitSec(); // 1秒待つ
}
Say("始めます、歯を食いしばれ!");

while (n > 0) // 残り回数が 0 よりも大きければ繰り返す
{
WaitSec(); // 1秒待つ

if (CanSpank()) // お尻が突き出されている場合
{
Spank(); // オシリをぶつ

n--; // 残りの回数を -1 する
}
else // 引っ込めている場合
{
/***************************************************
* ★逃げるオシリのアルゴリズム *
* *
* ↓ここにプログラムを追加 *
* 逃げた回数(escapeCount)によるお叱り・処罰 *
* 逃げている時間(escapeTime)によるお叱り・処罰 *
***************************************************/

// (↓お叱りの例)
Say("逃げてはいけません、あと" + n + "回残っています、ちゃんとオシリを突き出しなさい。");

while (!CanSpank()) // お尻が突き出されるまで待つ
{
WaitSec(); // 1秒待つ
}
Say("始めます、うんと痛くします、辛抱しなさい!");
}
}
Say("部屋の隅でオシリを出したまま立ってなさい。"); // コーナータイム
}
メンテ
課題1 コピペ用(ライブラリ) ( No.7 )
日時: 2020/12/30 21:33
名前: REDCHEEKS

private int _spankSC = 0;
private bool CanSpank()
{
return button1.Text == "尻を引っ込める";
}
private void Spank()
{
_spankSC %= 5;
if(_spankSC == 0)
{
Say("パアン、");
}
else
{
SayAdd("パアン、");
}
_spankSC++;
}
private void Say(string msg)
{
_spankSC = 0;
listBox1.Items.Add(msg);
}
private void SayAdd(string msg)
{
var cnt = listBox1.Items.Count;
if(cnt > 0)
{
listBox1.Items[cnt - 1] += msg;
}
}
private void WaitSec()
{
for (int t = 0; t < 4; t++)
{
System.Threading.Thread.Sleep(250);
Application.DoEvents();
}
}
メンテ
課題1 基本思想 ( No.8 )
日時: 2020/12/30 22:37
名前: REDCHEEKS

縛って良いのなら、プログラムは非常に単純になります。でも、

> 身体を拘束するのではなく、自ら尻を突き出し、自らの意思で罰を受ける。

これが基本思想なので「逃げるオシリのアルゴリズム」が必要になります。

動作例はこちら、

http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=75

上記動作例では、パーン、パーン、パーン、と3発でオシリ引っ込めてしまっています。
ですがこれは人によってまちまち、2発でオシリを引っ込める人もいれば、4発まで耐える人もいます。
これらのすべてに対応するためのアルゴリズムを考える必要があります。


p.s. 要するに「痛がって尻を引っ込める」という身体的反応に対して、コンピュータが臨機応変にどう対応するかという実にサディスティックでかつエロチックな課題です。
どうぞ興奮しながらプログラミングしてください。
メンテ
課題1 仕様 ( No.9 )
日時: 2022/03/27 12:20
名前: REDCHEEKS

(1) お仕置き宣言を表示する。
「これから罰としてオシリをN回叩きます。 パンツ下ろして、オシリ出しなさい。」と表示する。
※ Nには指定された回数を表示する。

(2) お尻が突き出されるまで待つ。

(3) お仕置き開始宣言を表示する。「始めます、歯を食いしばれ!」

(4) 指定された回数分お尻を叩く。

(5) 割り込み処理
(4)の途中で逃げた場合の処理は、初回、2回目、3回目に分けてそれぞれ(5-1)(5-2)(5-3)の処理を行う。
4回目以降は、(5-2)(5-3)の処理を繰り返す。
さらに、復帰までの時間をカウントし (6) を行う。

(5-1) 初回の場合
お叱りメッセージを出す。
「逃げてはいけません、あとN回残っています、ちゃんとオシリを突き出しなさい。」

(5-2) 2回目の場合
警告メッセージを出す。
「あとN回残っています、今度逃げたら回数を増やします、最後まで我慢しなさい。」

(5-3) 3回目の場合
お叱りメッセージを出すとともに残り回数を増やす
「逃げたのでオシリタタキ1回増やしました。 逃げれば逃げるほど辛くなります、我慢しなさい。」

(6) 逃げた後なかなか戻らない場合、15秒後に警告、24〜28秒後にカウントダウン、30秒後に残り回数を増やす処理を行う。
それ以降も(6-1)〜(6-3)を繰り返す

(6-1) 15秒後
警告メッセージを出す
「早くオシリを出しなさい! 早く出さないと回数を増やします。」

(6-2) 24〜28秒後
カウントダウンメッセージを出す。「 ご、よん、さん、に、いち、 」

(6-3) 30秒後
お叱りメッセージを出すとともに残り回数を増やす
「時間内に戻らないのでオシリタタキ1回増やしました。 」

(7) (6)から復帰した場合「始めます、うんと痛くします、辛抱しなさい!」とメッセージを出した後、(4)を再開する。

(8) 最後まで進んだ場合は、次のメッセージを出す。
「部屋の隅でオシリを出したまま立ってなさい。」
http://mediasp.kir.jp/img20220326/imgloglog-box/img20140206224647.jpg
メンテ
課題1 ライブラリ ( No.10 )
日時: 2022/03/27 12:20
名前: REDCHEEKS

ライブラリ関数としては、以下のものがあり、これを組み合わせてアルゴリズムを構築します。

関数名:CanSpank()
機 能:オシリが突き出されスパンキング可能な状態である事を確認する
引 数:なし
戻り値:スパンキング可能ならば 真(true) 不可能ならば 偽(false)

関数名:Spank()
機 能:オシリを叩く
引 数:なし
戻り値:なし

関数名:Say("メッセージ")
機 能:メッセージを表示する
引 数:表示する文字列
戻り値:なし

関数名:SayAdd("メッセージ")
機 能:メッセージを追加表示する
引 数:表示する文字列
戻り値:なし

関数名:WaitSec();
機 能:1秒待つ
引 数:なし
戻り値:なし

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020709.jpg
メンテ
課題1 ■貴方への課題 ( No.11 )
日時: 2021/01/07 10:14
名前: REDCHEEKS

仕様 >>9 を見れば分かりますが、サンプルとしてお渡ししたプログラムは、まだ完全には仕様を満たしていません。

逃げると一応、お叱りメッセージは出しますが、それで回数を増やすとか言うところまでは、実装していません。

お渡ししたプログラムで「★逃げるオシリのアルゴリズム」とコメントされている部分に、プログラムを追加し、完成させるのが貴方の課題です。

まず仕様に示すとおり、叩く回数を増やす機能(5)(6)を追加してやってください。

(6)についてヒントですが、秒数(escapeTime) で switch case 文を使えばよいでしょう。
switch(escapeTime) { case 15: 〜 break; case 24: 〜 break; case 25: 〜 break; ... }
それと「 ご、よん、さん、に、いち、 」のうち「ご、」以外は、Say() ではなく、SayAdd()の方を使えば、一行に表示できます。
カウントダウンされるのは辛いですね、うずく痛みが治まらないのに復帰しないといけない、そうしないと回数を増やされる、ほんとサディスティック、考えただけでもボッキーです。

以上、それが出来たら、貴方が考えられる限りの、さらにイジワルでサディスティックな妄想を追加してやってください(笑)

例えば、逃げた回数に応じて、追加する回数も増やしていくとか(今度逃げたら2発追加します!)あるいは逃げた回数や、復帰するまでのトータル時間などで、最後に審判を下し、一定の基準に達しない(お仕置きを受ける姿勢がなっていない)場合、追加懲罰として「最後の総仕上げ」(逃げないで連続50発受けないと終わらない)とか、必死で堪えヒイヒイ涙を流すようなプログラムを組んでやってください(笑)
メンテ
課題2 課題1のアレンジ(泣き言追加) ( No.12 )
日時: 2021/01/07 10:06
名前: REDCHEEKS

次の課題(課題2)として、課題1で作ったプログラムをアレンジしします。

泣き言機能を追加し、さらにそれに対するお叱りのバリエーションを持たせる。

まず前準備として、以下の機能の関数をライブラリに追加します。 >>13 をライブラリに追加コピペしてください。

関数名:SayNakigoto()
機 能:ランダムに泣き言メッセージを表示する(表示されないことも含めてランダムに)と同時に泣き言コード番号を _nakigotoCode に設定する。
引 数:なし
戻り値:なし


実装箇所1
「尻を引っ込める」ボタンをクリックしたときに SayNakigoto() を呼び出すようにする。

実装箇所2
お仕置き処理の中で、泣き言コード番号に応じて、お叱りメッセージを変えるように、下記追加仕様に従いプログラムを追加する。

追加仕様

泣き言コード番号:内容
0 : 泣き言なし(黙って尻を引っ込めた場合)
1 : 「いたいよ〜」と言って尻を引っ込めた場合

お叱りメッセージのアレンジ

泣き言コード = 0 の場合
従来通り

泣き言コード = 1 の場合
従来のメッセージの前に
「痛いの当たり前! 痛くしないとお仕置きにならないでしょ!」
を入れる。

※ お叱りメッセージは、switch case 文を使って切り替えると良いでしょう。
switch(_nakigotoCode) { case 1: 〜 break; }

p.s. コンピュータがいろんな言葉で人間を叱りつけ尻を叩くという主従逆転発想は良いですね。
18世紀の鞭打ち機械とはまた違った趣があります。
メンテ
課題2 コピペ用(追加ライブラリ) ( No.13 )
日時: 2021/01/10 01:22
名前: REDCHEEKS

private Random _saikoro = new Random();
private int _nakigotoCode = 0;
private string[] _nakigotoMessages = new string[] { null, "いたいよ〜" };
private void SayNakigoto()
{
_nakigotoCode = _saikoro.Next(_nakigotoMessages.Length);
var msg = _nakigotoMessages[_nakigotoCode];
if (!string.IsNullOrEmpty(msg))
{
Say(msg);
}
}
メンテ
課題2 その他追記 ( No.14 )
日時: 2021/01/06 13:59
名前: REDCHEEKS

"いたいよ〜" 以外にも、いろんな泣き言を _nakigotoMessages に追加して遊んで下さい("ごめんなさ〜い"、"もうしません" 等)。

最近は、AIが小説を書く時代ですから、出来映え次第では、プログラムの出力を、メディアスパの投稿作品に投稿してもわからないかもです(笑)

あと、小説やバーチャルの世界だけでなく、CanSpank() をセンサーに、Spank() をスパンキングロボットに、Say() を音声合成に、SayNakigoto()を音声認識につなげば、現実にそのような "お尻叩き装置" が出現することになります(笑)

いちど自分の尻で試してみたいですね
http://spankingart.org/wiki/File:Dc27.jpg
メンテ
デバッグの手順 ( No.15 )
日時: 2022/03/27 12:21
名前: REDCHEEKS

課題や色々試して遊ぶに当たり、プログラムがうまく動かなかった場合、正しく動作しているか確認するために、デバッグ機能(プログラムをいったん止めて1行ずつ実行する等の機能)を使う必要があります。
それについて簡単に説明します。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107191637.jpg
@ プログラムの一番左の所をマウスでクリックすると、赤色の丸が現れます、これがブレークポイント(プログラムをいったん止める位置)です。
A「Debug」を選択します。
B「開始」をクリックします。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20201230020734.jpg
@「お仕置き開始」をクリックします。
A「尻を突き出す」をクリックします。
B お仕置きが終わらないうちに素早く「尻を引っ込める」をクリックします。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107191739.jpg
@ 先ほど指定したブレークポイントが黄色くなり、ここでプログラムが停止しています。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107191815.jpg
キーボードの「F10」を押下すると、1行ずつプログラムが実行されます(コメントだけの行は飛ばして進みます)。
現在の実行位置は、黄色く反転表示されます。
ちょうどここが、お叱りメッセージを出すところです。

※ 通常の実行に戻るときは「続行」ボタンをクリックします。
メンテ
アンカー等の設定説明 ( No.16 )
日時: 2022/03/27 12:21
名前: REDCHEEKS

ウィンドウズ用のアプリの多くは、液晶ディスプレイ画面の大きさや解像度に応じて、大きさを自由に変更できるのが売りです(そうでない固定サイズのもありますが)。
以下、課題1および課題2で作成した「逃げるオシリのアルゴリズム」を例に、その設定方法について説明します。

ウィンドウの拡大・縮小自体は、別に何もしなくても、自動で出来るようになっています(むしろそれを止め固定サイズにするためには逆に設定が必要です)。
ただ、ウィンドウ上に配置したボタンや、リストボックス等のうち、どう再配置するか何を拡大するのかという定義が必要です。
それをしないと、拡大出来ても意味がありません。
これらは「アンカー」と言うもので設定します。
アンカーとは、船の錨(イカリ)の事です。


「逃げるオシリのアルゴリズム」の例で述べますと、「お仕置き開始」ボタンと、お仕置きの流れを表示するリストボックス、この2つについてアンカーの設定が必要です。

(1) 「お仕置き開始」ボタン

大きさ:ウインドウの大きさが拡大しても「お仕置き開始」ボタンそれ自体の大きさは変わらない。
位 置:常にウインドウの左下

(2) (お仕置きの流れを表示する)リストボックス

大きさ:ウインドウの大きさが拡大すれば、それに合わせ拡大し、お仕置きの流れがより詳細に表示されること。
位 置:ウインドウの上下左右から常に一定の距離を維持し、(1)の「お仕置き開始」ボタンと重ならないこと。


アンカーの初期値は、いずれも、Top(上) + Left(左)ですので、それぞれ以下のように変更する必要があります。

(1) 「お仕置き開始」ボタン

Top(上) + Left(左) ⇒ Bottom(下) + Left(左)

※ 常にウインドウの左下に配置するため、アンカーは、top(上) をやめて bottom(下)に変更する。

(2) お仕置きの流れを表示するリストボックス

Top(上) + Left(左) ⇒ Top(上) + Bottom(下) + Left(左) + Right(右)

アンカーには、Bottom(下) と Right(右) を追加し、全方位にする。

※ アンカーが全方位になることで、ウインドウが拡大した場合は、全方位に引っ張られ引き延ばされる。


実際の設定操作は、次の通りです。

(1) 「お仕置き開始」ボタン

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107212954.jpg
@ Form1.cs[デザイン]タブを選択し、デザイナ画面を表示する。
A「お仕置き開始」ボタンをクリックし、選択する。
B button1 が選択されている事を確認する。
C Anchor の右にあるコンボボックスをクリックする。
D Top(上)をクリックして削除する。
E Bottom(下)をクリックして追加する。
F Bottom(下) + Left(左) になっている事を確認する。

(2) (お仕置きの流れを表示する)リストボックス

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107213940.jpg
@ リストボックスをクリックし、選択する。
A listBox1 が選択されている事を確認する。
B Anchor の右にあるコンボボックスをクリックする。
C Bottom(下)をクリックして追加する。
D Right(右)をクリックして追加する。
E Top(上) + Bottom(下) + Left(左) + Right(右) になっている事を確認する。

以上で、アンカーの設定は終わりです。
メンテ
叩く回数の設定、および実行 ( No.17 )
日時: 2022/03/27 12:22
名前: REDCHEEKS

課題1および課題2では、オシリを叩く回数は、12発固定でしたね。
でも画面が大きくなったら、もっと沢山叩けそうですね
むしろ物足りなく感じるでしょう。

そういう場合、通常は何発叩くかを設定する入力画面を設けるのですが、説明も面倒だし(そういうのは一般的技術書に譲るとして)ここではウインドウのサイズから、テキトーに比例計算して、叩く回数を設定します。

プログラム的には、Osioki()関数の先頭を、以下のように修正します。

int n = 12; // 残りの回数

int n = listBox1.Height / 10; // 残りの回数

以下、実行例です。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210107214006.jpg
@ ウインドウの先頭の境目をドラッグし、一番上に持って行く。
A ウインドウが、上から下まで、全画面表示される。


※ このプログラム、動かしてみると、けっこう興奮してきます。
  辛いお仕置きに感情移入してしまうともうビンビン、ボッキーです
メンテ
課題の解答 ( No.18 )
日時: 2022/03/27 12:22
名前: REDCHEEKS

少しでもプログラミングに興味を持ってもらおうという善意から、スパに絡めたプログラムを作りました。
さらに課題を出しました。
でもプログラミングしたことのない人には、ちょっと敷居が高く、課題は意地悪だったかも知れません。
そこで解答も提示します。
なぜ解答を提示するように考えが変わったか、それは >>17 の最後にも書いてますが「プログラムの動作確認中に」自分のモノが勃起したからです。
課題云々よりも、ボッキーな感覚を真っ先に伝えたいと言うことで、方針を変更しました。
もちろん、余裕のある人は、さらに強烈な妄想をプログラミングしアレンジを加えてください。
解答は、以下に示します。

全体の概要
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210110225550.png
詳細な処理は折りたたんで、全体の概要を示します。
基本的には単純、残り回数が 0 より大きければ繰り返すというループ処理です。
@ 左の [+] をクリックすると、折りたたまれていた「ボタンの切り替え」が表示されます。 もう一度クリックすると戻ります。
A 左の [+] をクリックすると、折りたたまれていた「逃げるオシリのアルゴリズム」が表示されます。 もう一度クリックすると戻ります。
B 左の [+] をクリックすると、折りたたまれていた「ライブラリ」が表示されます。 もう一度クリックすると戻ります。

@ ボタンの切り替え
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210110225655.png

A 逃げるオシリのアルゴリズム
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210110225735.png

B ライブラリ
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210110225804.png

※ 上記 @〜B にある、#region 〜 #endregion は、プログラムを折り畳んで見やすくする機能であり、実際の動作には関係ありません。

※ 今まで 入力 or コピペ したプログラムと見比べて、追加修正し、上記 @〜B と同じにすれば完成です。
メンテ
正規表現について ( No.19 )
日時: 2022/03/27 12:23
名前: REDCHEEKS

これまでは「尻を引っ込める」ボタンをクリックすると、一定の確率で適当に(ランダムに)泣き言を表示し、それに対するお叱りメッセージを表示していました。

今回は、実際に人が入力した(または口に出した)泣き言に対するお叱りメッセージを表示するようにプログラムを改造します。
AIが人間をオシオキする、夢の世界が近づいてきましたね
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210215201330.jpg

そのために必要な技術の1つが「正規表現」です。
なんせ人間が口に出す言葉は、曖昧なので、それらに対応しなければなりません。

【例】 いたいよお、いたいよぉ、いたいよう、いたいよー、いたいよ〜

前回完成させた課題 >>18 に続けて、以下の手順で改造すればOKです。


【画面の準備】

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808070918.png
@ Form1.cs をダブルクリックし、
A TextBox を「お仕置き開始」ボタンの横にドラッグする。
B textBox1 の Anchor 設定を、Bottom, Left に変更する。


【プログラムの改造】

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808071148.png
@ Form1.cs を右クリックし、
A コードの表示(C) を選択し、
B プログラムの先頭あたりに、正規表現の使用を宣言する。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808071224.png
@ プログラムをスクロールさせ、下の方(170行あたり)に移動する。
AB // を先頭に追加し、古いプログラムをコメント化するとともに、新しいプログラムを追加する。
C プログラム修正途中は、エラーが出るが、放置して良い(最終的に完成時になくなれば良い)

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808071253.png
@ 正規表現を定義する。
A // を先頭に追加し、古いプログラムをコメント化するとともに、新しいプログラムを追加する。
B 開始をクリックする。


【動作確認】

http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808074521.png
@ 「いたいよぉ」と入力する。
A 「尻を引っ込める」ボタンをクリックする。
B 入力したメッセージと、それに応じたお叱りメッセージが表示される。
C 「ごめんなさい」を入力して「尻を引っ込める」ボタンをクリックする。
D 入力したメッセージと、それに応じたお叱りメッセージが表示される。


※ 正規表現の詳細については、"正規表現" でググって下さい。
メンテ

Page: [1] [2]