90.応用
基本構文などを利用したアプリケーションの作成として、トランプやゲームをいくつか記載する。
90-1
Hit&Blow
ルール
0から9までの互いに異なる数字を使った3桁の数を正解として用意する。
正解の数字は、画面上には表示させない。
システム利用者は、正解を予想し、数字を入力する。
例)
1桁目の数字は?
->入力
2桁目の数字は?
ー>入力
3桁目の数字は?
ー>入力
正解と入力された数字を比較して、Hit数とBlow数を数える。
- Hit数:同じ数字が同じ桁に出現する回数
- Blow数:同じ数字が違う桁に出現する回数
正解であれば終了だが、不正解の場合は、Hit数とBlow数をヒントとして表示する。
次の入力を促し、正解するまで繰り返す。
システム利用者はなるべく少ない入力で正解を当てる。
イメージ画像
※あくまで一例です。
90-2
High&Low
ルール
2枚のカードを引く。
1枚目のカードを画面表示し、2枚目のカードは伏せたまま(画面表示しない)とする。
2枚目のカードが1枚目よりHigh か Lowかをあてる。
- カードの強さ
2→3→4→5→6→7→8→9→10→J→Q→K→A
※Jokerは無視してもよい - 1枚目と2枚目が同じ数値の扱い
ドローとする。 - 終了条件
1回勝負とする。
結果(プレイヤーの勝利 or ディーラーの勝利 or ドロー)を表示する。
補足
今の段階では、カードは乱数を使って表現する。
Random r = new System.Random();
var num = r.Next(生成する乱数の最低値を指定, 生成する乱数の最大値+1を指定);
例1)
Random r = new System.Random();
var num1 = r.Next(0, 3);
⇒0~2のどれかをランダムで生成し、num1が覚える
例2)
Random r = new System.Random();
var num1 = r.Next(1, 10);
⇒1~9のどれかをランダムで生成し、num1が覚える
例3)
Random r = new System.Random();
var num1 = r.Next(9);
⇒0~8のどれかをランダムで生成し、num1が覚える
※1つ目の値を省略した場合、最低値は0になる
例4)
Random r = new System.Random();
var num1 = r.Next(9);
⇒0~8のどれかをランダムで生成し、num1が覚える
var num2 = r.Next(9);
⇒0~8のどれかをランダムで生成し、num2が覚える
イメージ画像
※あくまで一例です。
拡張案
金額を設定して、当たるたびに倍々で増やしていく。
金額に上限を設けたり、10戦制にするのもよし。
1戦毎に続けるか降りるかを選択させ、降りたらその時点での金額を獲得できるとする。
ただし、どちらにしろ外れた時点で終了とし、外れたら金額は0にする。
90-3
Blackjack
ルール
まずはディーラーとプレイヤーの1対1を想定する。
はじめに、ディーラーとプレイヤーにカードを2枚ずつ配る。
プレイヤー側のカードは画面上に表示し、カードを追加するかどうか入力してもらう。
※理想はプレイヤーがストップするまでカードの追加が行えること。
ディーラー側は、カードの合計値が17を超えるまで自動でカードを追加していく。
プレイヤーへのカード追加、ディーラー側の自動追加が完了したら、
カードおよび合計値をコンソール上に表示して勝敗を決める。
カードの合計値が21点、もしくは21点により近づいた方の勝ちとなる。
ただし、21を超えた場合、相手より21に近くても負けとなる。
例)プレイヤー:18 ディーラー:22
ディーラーの方が21に近いが、21を超えていて、
プレイヤーが21以下なのでプレイヤーの勝利となる。
数字カード(1~10)はそのまま数字が点数になる。
絵札カード(J,Q,K)は一律10点となる。
Aは1 or 11として扱うことができる。
補足
- とりあえず、Aは1として扱う。
(※できる人は、状況に応じて、1 or 11 の判断をしてもOKです。 - Jokerは考慮しない
- 今の段階では、カードは乱数を使って表現する
イメージ画像
※あくまで一例です。
90-4
Buckshot Roulette
基本構文+配列・Collectionあたりの知識が必要。
<応用編>はクラス周りも必要。
仕様
ショットガンでお互い(ディーラーとプレイヤー)を撃ちあうゲーム。
どちらかのライフが尽きたら終了。
ざっくりいうとロシアンルーレットのショットガン版だが、
通常のロシアンルーレットとは少々ルールが違う。
はじめに、ショットガンには実弾と空砲がランダムで装填され、
はじめの一回だけ実弾の数と空砲の数が表示される。
ディーラー⇒プレイヤー⇒ディーラー・・・と交互に撃っていくが、
自分に向けて撃ってもいいし、相手に向けて撃ってもいい。
その際のルールとして、
- 相手に向けて撃ったら実弾にしろ空砲にしろ、次は相手のターン
- 自分に向けて撃って空砲だったら自分のターンを継続。実弾だったら自分のライフを減らして相手のターン
となる。
例えば、
- ディーラーが自分に向けて撃った⇒空砲でした
この場合は再度ディーラーのターンになる。 - ディーラーが自分に向けて撃った⇒実弾でした
この場合は相手のターンになる。 - ディーラーが相手に向けて撃った⇒実弾 or 空砲でした
この場合は相手のターンになる。
となる。
実弾だった場合は対象のライフを1つ減らす。
自分に向けて撃ったのなら自分のライフを1つ減らし、相手に向けて撃ったのなら相手のライフを1つ減らす。
そのため、“自分を撃って空砲を減らし、相手に実弾を撃つ可能性を高める”という考えが重要になる。
ライフの数・ショットガンの装填数(実弾と空砲の合計)は固定でもランダムでもよい。
3ゲーム制にして、ゲームが進むたびにライフ数や装填数を増やすのも手。
<応用編>
仕様
本ゲームにアイテム要素を追加する。
はじめの実弾・空砲の数を表示する際に、以下アイテムをランダムで数個ディーラーとプレイヤーに配る。
配る数は固定でもいいし、ランダムでもいい。ただ、配るアイテムはランダムにして運次第とする。
同じアイテムを複数配ってもよいとする。
撃つ前に、アイテムの使用を選択させる。
アイテムは一度に複数個使用できてよいものとする。
[アイテム一覧]
名称 | 効果 |
---|---|
ノコギリ | 一発のダメージを2ダメージにする |
タバコ | ライフを1回復 |
ビール | 銃に込められている弾を1発分だけ排出する |
虫メガネ | 次の弾を確認する |
手錠 | 相手を一回だけ行動不能にする |
アドレナリン | 相手のアイテムをひとつ奪って使うことができる |
使い捨て携帯電話 | 謎の声が、どこかのタイミングの弾が実弾か空砲かを教えてくれる |
インバータ | 装填されている次の弾を逆のもの(実弾なら空砲)に変換する |
期限切れの薬 | 40%の確率で体力2つ回復できるが、60%で1つ失う |
90-5
スロット
基本構文+配列・Collection+スレッドあたりの知識が必要
仕様
リールは3列とする。
※リール:縦にぐるぐる回転してるあれ。STOPする箇所。
各リールで回転する図柄は21種とする。
図柄の順番はリール毎に異なるので注意する。
今回、各リールで利用する図柄。順番は以下の通りとする。
リール①
&,☆,7,Λ,7,☆,¶,&,☆,Θ,Λ,7,☆,¶,&,☆,7,Λ,Θ,☆,¶
リール②
Λ,¶,☆,7,7,Λ,¶,☆,&,Λ,¶,☆,7,Λ,¶,☆,Λ,Θ,¶,☆,&
リール③
¶,Λ,Ψ,☆,7,¶,Θ,☆,&,¶,Λ,Θ,☆,&,¶,7,☆,¶,7,☆,Ψ
スロットが開始されたら各リールが無限ループを開始する。
コンソール上でリール①~③のどれをとめるか表示し、
入力された番号のリールを止める(そのリールの無限ループを終了する)。
全てのリールの結果を表示する。
結果表示は3つ。
例えばリール①が6つ目の図柄でストップされた場合は、6番目の”☆”と前後の”7””¶”を表示する。
¶
☆
7
リール②、リール③も同様である。
もし、リール①が4つ目、リール②が6つ目、リール③が2つ目でストップした場合は、以下のような表示になる。
左の列から、リール①、リール②、リール③である。
7¶Ψ
ΛΛΛ
77¶
真ん中の行の図柄がそろっているため、当たり。
掛け金を設定して金額を増やしてもよいし、何か特別な表示をするなど、結果どうするかはまかせるものとする。
一致判定は縦・横・斜めで行うこと。
なお、個別にリールを回すプログラムだが、今回の範囲外である。
”Thread”の知識が必要になるので、チャレンジする場合はまず”Thread”に関する学習をおこなうことをお勧めする。
90-6
その他
過去に作成されたアプリ例 or 作れると思われるもの
- ビンゴ(基本構文+配列・Collectionあたりの知識が必要)
- ポーカー(基本構文+配列・Collectionあたりの知識が必要)
- マインスイーパー
- ソリティア
- オセロ
Copyright © Xincor miXell Co., Ltd. All rights reserved