ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの五目並べ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめましてww

下記の仕様で五目並べのプログラムを作る課題です。
一応テンプレートもありますが、作りやすい感じでいいと思います。
写真は、例ですww
よろしくお願いします。

番の大きさ:19*19
禁手:なし
勝ち負け判定:5つ並べば勝ち
位置:
横軸:1〜15
縦軸:A〜O
たとえば、「3B」というのは、下の「○」の位置です
 1 2 3 4 5
A□□□□□…
B□□○□□…
C□□□□□…
________________________________________________________________________________

□ConnectFive.java
 「五目並べ」のクラス
□testConnectFive.java
 五目並べクラスの起動クラス
□Board.java
 「盤」クラス
□Player.java
 プレイヤークラス
□HumanPlayer.java
 「人間版」のプレイヤー
□Rule.java
 ルールクラス
□ConnectFiveRule.java
 「五目並べ」のルール
__________________________________

□五目並べの要素を持ち、五目並べのゲーム手順を記述
□要素(フィールド):
 プレイヤー二人:player1,player2
 盤:board
 ルール:rule
□手順の記述(コンストラクタ)
 各要素の初期化
 勝負がつくまで、プレイヤーに石を入れてもらう
 結果の表示
__________________________________

□フィールド:
 盤のサイズ
 「盤」を表示するための整数型2次元配列
 盤のラベル
 盤のステータス
 定数いろいろ(石など)
□メソッド:
 盤の表示:show()
 盤に石を置く:putStone()
 その他:コンストラクタ、ゲッターなど
__________________________________
プレーヤークラス
 □一般的なプレイヤーPlayer.javaと、人間版プレイヤーHumanPlayer.javaの2種類。
 □メソッド:
  プレイヤーの「「石を置く」の動作」:putStone()

ルールクラス
 □一般的なルールRule.javaと、「五目並べ」のルールがある。ConnectFoveRule.javaがある。
 □メソッド:
  判定(judge()):五目並べの勝敗を判定するためのメソッド


__________________________________

/*Board.java↓*/
/**
* 囲碁や連珠用の盤のシステムを実現したクラス
* @author Ibuki
*
*/
public class Board {

private int intBoard[][];//int型のゲーム盤、

private int size;//盤のサイズ

public static final int NO_STONE = 0;//石置かれていない

public static final int BLACK_STONE = 1;//黒い石

public static final int WHITE_STONE = 2;//白い石

public static final int DRAW = 3;//引き分け

public static final int PLAYING = 4;//プレイ中

public static final String[] xAxis = { " 1", " 2", " 3", " 4", " 5", " 6",
" 7", " 8", " 9", "10", "11", "12", "13", "14", "15", "16", "17",
"18", "19" };//x軸用のラベル(表現形式)

public static final String[] xAxis2 = { "1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19" };//補足用のx軸用のラベル(数値バージョン)

public static final String[] yAxis = { "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S" };//y軸用のラベル(全角バージョン)

public static final String[] yAxis2 = { "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S" };//補足用のy軸用のラベル(半角バージョン)

/**
* コンストラクタ
* 盤面を用意する
*/
public Board() {
this(19);
}

/**
* コンストラクタ
* サイズを設定できるバージョン
* 盤の初期化も行う
* @param size 盤のサイズ
*/
public Board(int size) {
this.size = size;
intBoard = new int[size][size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
intBoard[i][j] = NO_STONE;
}
}
}


/**
* ゲーム盤の表示
* 二重のforループを利用して、盤面の表示を行う
*/
public void show() {
System.out.print("┏");
for (int i = 0; i < size; i++) {
System.out.print(xAxis[i]);//X軸ラベルの出力
}
System.out.println("┓");
for (int i = 0; i < size; i++) {
System.out.print(yAxis[i]);//Y軸ラベルの出力
for (int j = 0; j < size; j++) {
switch (intBoard[i][j]) {
//ここで実際の石に応じて、表示を行う
}
}
System.out.println(yAxis[i]);//Y軸ラベルの出力
}
System.out.print("┗");
for (int i = 0; i < size; i++) {
System.out.print(xAxis[i]);//X軸ラベルの出力
}
System.out.println("┛");
}



/**
* 盤に石を置く
*
* 手順:
* 1.座標のチェック
* 1.1
* 座標の妥当性のチェック
* 具体的に言うと:
* 座標はマイナスになってないか?
* 座標は「盤のサイズ」に超えていないか?
* 1.2
* 座標に既に石が配置されているかのチェック
* 2.intBoardに石を設定する。
* 以上のチェックをクリアできたら、
* 「intBoard[y][x] = stoneType;」のような記述で、
* 石を設定する。
*
* @param x x座標
* @param y y座標
* @param stoneType 石タイプ
* @return 正しく石を置いたかどうか?
*/
public boolean putStone(int x, int y, int stoneType) {
return false;//この行を削除し、正しい記述をしてください
}

/**
* sizeを取得
* @return size.
*/
public int getSize() {
return size;
}

public int[][] getIntBoard() {
return intBoard;
}

}


/*ConnectFive.java↓*/
/**
* 五目並べの「ゲーム」
*/

import java.io.IOException;

/**
* @author Ibuki
*
*/
public class ConnectFive{

private Player player1;//プレイヤーその1
private Player player2;//プレイヤーその2
private Board board;//盤
private ConnectFiveRule rule;//ルール

/**
* コンストラクタ
* ゲームのセットアップを行い、ゲームを実行する
* @throws IOException
*/
public ConnectFive() throws IOException{
player1 = new HumanPlayer(Board.BLACK_STONE);//プレイヤー1は人間プレイヤーであり、黒い石を使う
player2 = new HumanPlayer(Board.WHITE_STONE);//プレイヤー2も人間プレイヤーであり、白い石を使う
board = new Board();//盤の生成
rule = new ConnectFiveRule();//ルールの生成

while(rule.judge(board)==Board.PLAYING){//メインループ:「ゲームプレイ中」なら、ひたすら繰り返す
player1.putStone(board);//プレイヤー1、石を置く
if(rule.judge(board)==Board.PLAYING){//プレイ中なら(プレイヤー1石を置いた後、ゲーム終了の可能性あるので)
player2.putStone(board);//プレイヤー2、石を置く
}
}

board.show();//ゲーム終了後、盤を表示
if(rule.judge(board)==Board.BLACK_STONE){//黒い石の人の勝ちなら
System.out.println("黒(●)の方の勝ちです");
} else if(rule.judge(board)==Board.WHITE_STONE){//白い石の人の勝ちなら
System.out.println("白(○)の方の勝ちです");
} else if(rule.judge(board)==Board.DRAW){//ドローなら
System.out.println("引き分けです");
} else {//???
System.out.println("ありえません、プログラムのバグの可能性があります、設計者に問い合わせてください");
}

}
}


/*ConnectFiveRule.java↓*/
/**
* 五目並べのルール
* @author Ibuki
*
*/
public class ConnectFiveRule extends Rule{

/**
*
* 判定するために、ここでは、Boardクラスから、
* int型の二次元配列intBoardを取得し、
* それを利用する形は最も手取り早いでしょう。
* 以下のような記述でintBoardを取得できる。
* int[][] board = gameBoard.getIntBoard();
*
*
* 実際には、五目並べは、4種類の勝利パターンが存在している。
* 1.│に5つ並べる
* 2.─に5つ並べる
* 3./に5つ並べる
* 4.\に5つ並べる
*
* ここでは、この4つのパターンを全てカバーする必要がある
* 座標の関係について、自信がなかったら、
* 紙に盤面を描き、それを見ながら確認すると分かりやすいでしょう。
*
* ここでの戻り値は、4種類の可能性がある。
* 1.黒い石の勝ち:Board.BLACK_STONE
* 2.白い石の勝ち:Board.WHITE_STONE
* 3.引き分け:Board.DRAW;
* 4.プレイー継続中:Board.PLAYING
*
* @see ConnectFive.Rule#judge(ConnectFive.Board)
*/
public int judge(Board gameBoard) {
int[][] board = gameBoard.getIntBoard();
boolean isDraw = true;
for (int i = 0; i < board.length - 4; i++) {
for (int j = 0; j < board.length - 4; j++) {
//ここで、─、│、\の判定を行う
}
}

for (int i = 0; i < board.length - 4; i++) {
for (int j = 4; j < board.length; j++) {
//ここで、/の判定を行う
}
}

//ここより下は、盤面埋まったかどうかの判定を入れる
//全て埋まって、なおかつ勝敗の判定されなかったら、引き分けとなる
}
}


/* HumanPlayer.java↓*/
import java.io.*;

/**
* 人間用プレイヤー
* 操作などはキーボード入力を利用する
* @author Ibuki
*/
public class HumanPlayer extends Player{


/**
* コンストラクター
* スーパークラスのコンストラクタをそのまま利用する
* @param stoneType
*/
public HumanPlayer(int stoneType) {
super(stoneType);
}

/**
* 人間プレイヤーの「石を置く」の動作
* ここでの手順は:
* 1.盤の表示:
* 盤のshow()メソッドを利用する。
* 2.入力提示:
* プレイヤーにキーボード入力するように提示する
* 「○の盤です、石の置き場所を入力してください」みたいなメッセージでOK
* 3.入力用のリーダーの生成
* BufferedReaderやInputerなど、好みな読み取り機を準備する
* 4.ユーザー入力の解釈
* 4.1ユーザが入力した文字列を、X座標用とY座標用に分ける
* 具体的には
* String stringX = str.substring(0,str.length()-1);
* String stringY = str.substring(str.length()-1,str.length());
* のような記述で文字列入力を二つに分けることが出来る
* 4.2座標の文字列を、数値の座標に変換する。
* 現在のフレームワークでは、BoardクラスのxAxis,xAxis2,yAxis,yAxis2に、
* 「ラベル」の定義がされている。
* ここでは、for文などを利用して、入力した文字列を、ラベル配列の中身と比較する。
* ☆注意:文字列の比較は、==ではダメで、
* 必ずStringクラスのequals()やequalsIgnoreCase()メソッドを利用してください
* 使用例:
* stringX.equals(Board.xAxis[i])
* 5.石の座標を盤に入力する。
* board.putStone(x座標、y座標、石タイプ)を利用する

*
* @see ConnectFive.Player#putStone(ConnectFive.Board)
*/
public void putStone(Board board) throws IOException {
board.show();

if (stoneType == Board.BLACK_STONE) {
System.out.print("●");
} else if (stoneType == Board.WHITE_STONE) {
System.out.print("○");
}
System.out.print("の方の番です、石を置きたい場所を入力してください>");
}
}


/*Player.java↓*/
import java.io.IOException;

/**
* ボードゲームプレイヤーの抽象クラス
*
*
* 抽象クラスについては、Java2で説明する
* @author Ibuki
*
*/
public abstract class Player {

protected int stoneType;//このプレイヤーが利用する石のタイプ


/**
* コンストラクタ
* プレイヤーの石タイプをセットする
* @param stoneType
*/
public Player(int stoneType) {
setStoneType(stoneType);
}


/**
* プレイヤーの「石を置く」 動作を記述したメソッド
*
* 抽象メソッドについては、Java2で説明する
*
* @param board 盤
* @throws IOException 入出力の例外
*/
public abstract void putStone(Board board) throws IOException;


/**
* stoneTypeの設定.
* ここでは、石タイプは白い石と黒い石のみになっている
* @param stoneType
*/
public void setStoneType(int stoneType) {
if (stoneType == Board.BLACK_STONE || stoneType == Board.WHITE_STONE) {
this.stoneType = stoneType;
} else {
System.out.println("エラー、適正ではない石タイプを指定しています。");
System.out.println("強制終了します");
System.exit(0);
}
}
}


/*Rule.java↓*/
/**
* ルールの抽象(abstrct)クラス
*
* 抽象クラスについては、Java2で説明する
*
* @author Ibuki
*
*/
public abstract class Rule {

/**
* 勝敗を判定するメソッド、これも抽象メソッドである
*
* 抽象メソッドについては、Java2で説明する
*
* @param gameBoard 盤
* @return 勝敗の結果
*/
public abstract int judge(Board gameBoard);
}


/*testConnectFive.java*/
import java.io.IOException;

/**
* 五目並べのテスト用プログラム
* @author Ibuki
*
*/
public class testConnectFive {

/**
* メインプログラム:
* @param args
* @throws IOException
*/
public static void main(String args[]) throws IOException{
ConnectFive cf = new ConnectFive();
}
}

コメント(2)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング