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あたりの知識が必要。
<応用編>はクラス周りも必要。

仕様

ショットガンでお互い(ディーラーとプレイヤー)を撃ちあうゲーム。
どちらかのライフが尽きたら終了。
ざっくりいうとロシアンルーレットのショットガン版だが、
通常のロシアンルーレットとは少々ルールが違う。

はじめに、ショットガンには実弾と空砲がランダムで装填され、
はじめの一回だけ実弾の数と空砲の数が表示される。

ディーラー⇒プレイヤー⇒ディーラー・・・と交互に撃っていくが、
自分に向けて撃ってもいいし、相手に向けて撃ってもいい。
その際のルールとして、

  • 相手に向けて撃ったら実弾にしろ空砲にしろ、次は相手のターン
  • 自分に向けて撃って空砲だったら自分のターンを継続。実弾だったら自分のライフを減らして相手のターン

となる。

例えば、

  1. ディーラーが自分に向けて撃った⇒空砲でした
    この場合は再度ディーラーのターンになる。
  2. ディーラーが自分に向けて撃った⇒実弾でした
    この場合は相手のターンになる。
  3. ディーラーが相手に向けて撃った⇒実弾 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

results matching ""

    No results matching ""