ランダムにカードを引いて集めることを考える。 そのために、部分的に開発したソフトウェア gacha の仕様の一部 の説明を別に示した。 さて、以下の設問において kotae パッケージを作り、 その中に指定されたクラスを作成せよ。
なお、テストクラスを用意したので、各設問 において、指示のあるテストクラスを用いてテストを行い、正常であった旨を 報告せよ。
player/Statistics1 を10回実行して、3種類のカードが揃うまでの回数を計測 し、平均値を求めなさい。
レア度 100 のカードを表す クラス Rare をkotae パッケージに作成しなさい。 なお、 kotae.Rare.getList() により、 (id=10, name="RareAka"), (id=11, name="RareAo"), (id=12, name="RareKuro"), となる 3 つのインスタンスの List<Card> 型のインスタンスが得られ るようにすること。
なお、テスト用にRareTestプログラムを 用意したので、活用すること。
作成した RareAka, RareAo, RareKuro と既存の Aka, Ao, Kuro を混ぜた Deck2 と、それを使う Main2, Statistics2 を示す。
package gacha;
import java.util.List;
import kotae.Rare;
import card.Card;
import card.Zako;
public class Deck2 extends AbstractDeck {
public static List<Card> getList(){
List<Card> list= Zako.getList();
list.addAll(Rare.getList());
return list;
}
public Deck2(){
super(getList());
bunpu = new Bunpu1(this);
}
}
package player;
import gacha.Deck2;
import java.io.IOException;
public class Main2 {
public static void main(String[] args) throws IOException {
new Player().play(new Deck2());
}
}
package player;
import gacha.Deck2;
public class Statistics2 {
public static void main(String[] arg){
int[] watchlist = {0,1,2,10,11,12};
Statistics s = new Statistics(watchlist, new Player(), new Deck2());
s.calc();
}
}
Statistics2 を10回実行して、6種類のカードが揃うまでの回数を計測 し、平均値を求めなさい。
次に、プレイヤーの手の揃い具合により、確率が変動するようなカード種 SuperRare を考える。 これは、カード種に対してプレイヤーの所持カードを見せることで、レア度を 変えるようにする。 つまり、まず、以下のようなメソッドを作成する。
ここまでを作成したクラスをAbstractSuperRareとして以下に示す。
package card;
import java.util.List;
import kotae.SuperRare;
import player.CardCollection;
public abstract class AbstractSuperRare extends AbstractCard {
private CardCollection cardcollection;
protected int zenmaisuu;
protected List<SuperRare> mokuhyou;
protected AbstractSuperRare(int id, String name,CardCollection cardcollection){
super(id,name);
this.cardcollection=cardcollection;
}
protected final boolean alreadyOwned() {
return cardcollection.contains(this);
}
protected final void setMokuhyou(List<SuperRare> list) {
this.mokuhyou = list;
this.zenmaisuu = list.size();
}
}
このクラスを継承し、次の仕様を持つ rate メソッドと、getList スタティッ クメソッドを実装する SuperRare クラスを kotae パッケージに作りなさい。
なお、テスト用 にSuperRareTestプログラム を用意したので、活用すること。
作成した SuperRareAka, SuperRareAo, SuperRareKuro と既存の Aka, Ao, Kuro を混ぜたDeck3 と、それを使う Main3, Statistics3 を示す。
package gacha;
import java.util.List;
import kotae.SuperRare;
import player.CardCollection;
import card.Card;
import card.Zako;
public class Deck3 extends AbstractDeck {
public static List<Card> getList(CardCollection cardcollection){
List<Card> list= Zako.getList();
list.addAll(SuperRare.getList(cardcollection));
return list;
}
public Deck3(CardCollection cardcollection){
super(getList(cardcollection));
bunpu = new Bunpu3(this);
}
}
package player;
import gacha.Deck3;
import java.io.IOException;
public class Main3 {
public static void main(String[] args) throws IOException {
Player player = new Player();
player.play(new Deck3(player.collection));
}
}
package player;
import gacha.Deck3;
public class Statistics3 {
public static void main(String[] arg){
int[] watchlist = {0,1,2,20,21,22};
Player player = new Player();
Statistics s = new Statistics(watchlist, player, new Deck3(player.collection));
s.calc();
}
}
Statistics3 を10回実行して、6種類のカードが揃うまでの回数を計測 し、平均値を求めなさい。
「不当景品類及び不当表示防止法」4条の2や、告示された 「懸賞による景品類の提供に関する事項の制限」の第5項などを参照し、 本課題における実験結果と比較して、なぜこのような法律があるのか考察しな さい。
3種類のカードがそれぞれ確率1/3で出るとき、繰り返し引いて全種類揃うまで の平均試行回数を求めなさい。
なお、以上の提供したファイルをすべてまとめた 課題ファイル集 を用意した。
Eclipse のセッティングの方法
なお、問題訂正などでプログラムが変更になった場合、上記の最新のファイル 集をダウンロードした後で、作業中のプロジェクトでもう一度importして下さ い。 上書きするファイルが検出されるとダイアログが表示されますが、 Yes ALL で問題だけ最新の状態になるはずです。