90.応用
基本構文などを利用したアプリケーションの作成として、トランプやゲームをいくつか記載する。
90-1
限定ジャンケン
ルール
2人でおこなう対戦ゲーム。
プレイヤーにはグー、チョキ、パーが描かれたカードを4枚ずつ計12枚が与えられる。
このカードでジャンケンを行い、勝敗数で勝者・敗者を決める。
一度使ったカードは回収され、二度と使用できない。
あいこ場合は引き分けとなり勝敗はつかない。あいこの場合もカードは回収され二度と使用できない。
例)
1枚目は何を出しますか?
グー4枚 チョキ4枚 パー4枚
グー >入力
相手:パー
あなた:グー 相手:パー のため、相手の勝ちです。
・
・
・
【結果】
あなた:5勝 相手:6勝 1引き分け
従って
相手の勝ちとなります!
※相手が出すカードはランダムで決める(対人戦ではないため)。
90-2
Eカード
ルール
準備
皇帝のカードを1枚、市民のカードを8枚、奴隷のカードを1枚の計10枚を用いて行う。プレイヤーは皇帝側、奴隷側に分かれる。
皇帝側は皇帝のカード1枚と市民のカード4枚
奴隷側は奴隷のカード1枚と市民のカード4枚
以上を持ちゲームスタートとなる。
勝負
このカードにはそれぞれ三すくみの関係があり
皇帝のカードは市民のカードに勝ち
市民のカードは奴隷のカードに勝ち
奴隷のカードは皇帝のカードに勝つ
というじゃんけんのような法則がある。
進行
それぞれのプレイヤーは先手後手の順に分かれ、カードを1枚ずつ裏向きに伏せて出す。
その為、後手のプレイヤーは先手の顔色を窺って何のカードを出したかを予測することも可能となる。心理戦を重視する為か、カードを見ずに無作為に出す行為は認められず、必ずカードを見て自分で選んだ上で出さなければならない。
両者とも市民のカードを出した場合はドローとなり、残りのカードから再び1枚ずつ出す。
前述の勝負がついた時点で終了となる。
最大の特徴
両者のカード構成が平等では無い 、ということにある。
具体的には皇帝側は皇帝のカードを出した時に奴隷側が計4枚ある市民のカードを出していれば勝ちである。
しかしながら奴隷側は奴隷のカードを出した時に相手が僅か1枚の皇帝のカードを出していなければ勝てない。
言わば、奴隷側は皇帝側と同時に勝負を仕掛けない限り勝つ術がないため、圧倒的に皇帝側が有利となる。
90-3
Hit&Blow
ルール
0から9までの互いに異なる数字を使った3桁の数を正解として用意する。
正解の数字は、画面上には表示させない。
システム利用者は、正解を予想し、数字を入力する。
例)
1桁目の数字は?
->入力
2桁目の数字は?
ー>入力
3桁目の数字は?
ー>入力
正解と入力された数字を比較して、Hit数とBlow数を数える。
- Hit数:同じ数字が同じ桁に出現する回数
- Blow数:同じ数字が違う桁に出現する回数
正解であれば終了だが、不正解の場合は、Hit数とBlow数をヒントとして表示する。
次の入力を促し、正解するまで繰り返す。
システム利用者はなるべく少ない入力で正解を当てる。
イメージ画像
※あくまで一例です。
90-4
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-5
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-6
Buckshot Roulette
基本構文+配列・Collectionあたりの知識が必要。
<応用編>はクラス周りも必要。
仕様
ショットガンでお互い(ディーラーとプレイヤー)を撃ちあうゲーム。
どちらかのライフが尽きたら終了。
ざっくりいうとロシアンルーレットのショットガン版だが、
通常のロシアンルーレットとは少々ルールが違う。
はじめに、ショットガンには実弾と空砲がランダムで装填され、
はじめの一回だけ実弾の数と空砲の数が表示される。
ディーラー⇒プレイヤー⇒ディーラー・・・と交互に撃っていくが、
自分に向けて撃ってもいいし、相手に向けて撃ってもいい。
その際のルールとして、
- 相手に向けて撃ったら実弾にしろ空砲にしろ、次は相手のターン
- 自分に向けて撃って空砲だったら自分のターンを継続。実弾だったら自分のライフを減らして相手のターン
となる。
例えば、
- ディーラーが自分に向けて撃った⇒空砲でした
この場合は再度ディーラーのターンになる。 - ディーラーが自分に向けて撃った⇒実弾でした
この場合は相手のターンになる。 - ディーラーが相手に向けて撃った⇒実弾 or 空砲でした
この場合は相手のターンになる。
となる。
実弾だった場合は対象のライフを1つ減らす。
自分に向けて撃ったのなら自分のライフを1つ減らし、相手に向けて撃ったのなら相手のライフを1つ減らす。
そのため、“自分を撃って空砲を減らし、相手に実弾を撃つ可能性を高める”という考えが重要になる。
ライフの数・ショットガンの装填数(実弾と空砲の合計)は固定でもランダムでもよい。
3ゲーム制にして、ゲームが進むたびにライフ数や装填数を増やすのも手。
<応用編>
仕様
本ゲームにアイテム要素を追加する。
はじめの実弾・空砲の数を表示する際に、以下アイテムをランダムで数個ディーラーとプレイヤーに配る。
配る数は固定でもいいし、ランダムでもいい。ただ、配るアイテムはランダムにして運次第とする。
同じアイテムを複数配ってもよいとする。
撃つ前に、アイテムの使用を選択させる。
アイテムは一度に複数個使用できてよいものとする。
[アイテム一覧]
名称 | 効果 |
---|---|
ノコギリ | 一発のダメージを2ダメージにする |
タバコ | ライフを1回復 |
ビール | 銃に込められている弾を1発分だけ排出する |
虫メガネ | 次の弾を確認する |
手錠 | 相手を一回だけ行動不能にする |
アドレナリン | 相手のアイテムをひとつ奪って使うことができる |
使い捨て携帯電話 | 謎の声が、どこかのタイミングの弾が実弾か空砲かを教えてくれる |
インバータ | 装填されている次の弾を逆のもの(実弾なら空砲)に変換する |
期限切れの薬 | 40%の確率で体力2つ回復できるが、60%で1つ失う |
90-7
LIAR'S DECK
基本的には4人で対戦するゲーム。
King, Queen, Ace, Jokerを利用する。
全体的なゲームの流れ
①ゲームごとにカードの種類(King or Queen or Ace)が指定される。
②プレイヤーは自分の手札を確認し、順番に伏せてカードを出し、「〇〇(指定の種類)のカードを○枚出した」と宣言しますが、実際のカード内容と異なることを言っても構いません。
③次の順番のプレイヤーはその宣言を信じるか、「Liar! (嘘)」と指摘するかを選びます。
④嘘だと指摘されて実際に嘘だった(指定されたカード以外を捨てた)場合はそのプレイヤーが敗北、指摘されて宣言が正しかった場合は指摘したプレイヤーが敗北となります。
⑤敗北者は生死をかけたロシアンルーレットに挑戦します。
⑥これを繰り返し、最後の生存者になるまで行います。
基本ルール
以下4種類のカードが使用され、プレイ人数に関わらず1人5枚ずつ配られます。
プレイヤー数が不足(2~3)している場合には、その分のカードが山札へ入ります。
- King:6枚
- Queen:6枚
- Ace:6枚
- Joker:2枚
カードは1回で最大3枚まで出すことができます。
ゲームごとに指定されたカードの他に、Jokerはワイルドカードとなりいつでも指定されたカードの代替品として使用できます。
(例:Queen1枚+Joker2枚でQueen3枚として使用可能)
ロシアンルーレット
ゲームに敗北するたびに自身へ拳銃を向けて引き金を引くロシアンルーレットへ挑戦します。
拳銃のシリンダー6発のうち1発に銃弾が入っており、回数をこなすごとに銃弾を引く確率が高くなります。
運が悪いと普通に1発目で死にます。(6回目で確実に死亡)
他プレイヤーおよび自身のシリンダー状況(?/6)はターン開始時に表示されます。
※?は撃った数です
DEVILルール(特殊ルール)
もう1つのルールセットです。
基本的なルールは先ほど説明した通りですが、新たに”DEVIL”カードが登場します。
場にいる全員を巻き込む特殊なルールです。よりカオスでスリルある勝負になります。
DEVILカード
ゲームごとに指定されたカードのうち1枚がDEVILカードになります。
DEVILカードは他のカードと同時に出すことができません。どんな時も必ず1枚でのみ出せます。
DEVILカードを出した時に他プレイヤーが嘘だと指摘すると、DEVILカードを出したプレイヤー以外の全プレイヤーが即座に敗北しロシアンルーレットに挑戦させられます。
90-8
スロット
基本構文+配列・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-9
その他
過去に作成されたアプリ例 or 作れると思われるもの
- ビンゴ(基本構文+配列・Collectionあたりの知識が必要)
- ポーカー(基本構文+配列・Collectionあたりの知識が必要)
- マインスイーパー
- ソリティア
- オセロ
- ルド―
Copyright © Xincor miXell Co., Ltd. All rights reserved