質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.19%

この課題のソースコードを教えてください。

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,558

JAVA

score 14

1.    次のクラスを作成しなさい(プロジェクト、パッケージは任意)
名前: Run3 
    □ public static void main(String[] args) にチェックを入れる事

2.    次の仕様をみたすクラスを作成しなさい。

名前: FieldMap 
    □ public static void main(String[] args) にチェックを入れない
属性:
  private String[][] field
  → String型で7*7の2次元配列

    操作:
public void showMap()
→fieldに格納された文字列をコンソールに表示するメソッド
public void setField(int x, int y, String obj)
 →fieldの任意の要素に決まった文字を代入する


3.     Run3のmainメソッド内で FieldMapをインスタンス化し、setFieldを使用してすべての要素に「*」を 代入した後、showmapを使用してコンソールに表示しなさい。
4.     setFieldの使用方法を工夫し、showmapを使用した後に表示されるマップが一番外側の要素だけ「■」、ほかすべての内側の要素が「*」となるようにしなさい。

5.    次の仕様をみたすクラスを作成しなさい。

名前: FieldObject 
    □ public static void main(String[] args) にチェックを入れない
属性:
  private String name
  → このオブジェクトの名前を示す文字列
  private String shape
  → このオブジェクトの姿を示す文字列

※上記の属性にまんべんなく値が代入されるようコンストラクタを用意する事    操作:
public void setShape(String s)
 →shapeにsで指定した文字列を代入する
public String getShape ()
→shapeに格納された文字列を取得する
public void setName(String n)
 →nameにnで指定した文字列を代入する
public String getName ()
→nameに格納された文字列を取得する


6.    次の仕様をみたすクラスを作成しなさい
7.    
名前: Player 
    □ public static void main(String[] args) にチェックを入れない
Playerは FieldObjectを継承
属性:
  int hp
  → このプレーヤーのヒットポイントを示す整数
  inr atk
  → このプレーヤーの攻撃力を示す整数

※上記の属性、および継承した属性にまんべんなく値が代入されるようコンストラクタを用意する事


(継承したものに関しては記載を省略している)    操作:
public void command()
→キーボードから入力を求め、
「A」ならattackメソッドを、
「E」ならescapeメソッドを、
「S」なら specialメソッドを、
それ以外の場合 nothing()メソッドを実行する
public void attack() public void escape()
public void special() public void nothing()
→それぞれのメソッド名に合った文字列が表示される

8.    次の仕様をみたすクラスを作成しなさい

名前: Building 
    □ public static void main(String[] args) にチェックを入れない
Buildingは FieldObjectを継承
属性:
  String intro
  → この建物の説明文
  

※上記の属性、および継承した属性にまんべんなく値が代入されるようコンストラクタを用意する事


(継承したものに関しては記載を省略している)    操作:
public void introduce()
→ introに格納された文字列をコンソールに表示する


9.    次の仕様をみたすクラスを作成しなさい

名前: FieldMap2 
    □ public static void main(String[] args) にチェックを入れない
属性:
  private FieldObject [][] field
  → FieldObject型で7*7の2次元配列

    操作:
public void showMap()
→fieldの各要素に格納されたフィールドオブジェクトを元にコンソールにフィールドマップを表示するメソッド
public void setField(int x, int y, FieldObject obj)
 →fieldの任意の要素に決まったフィールドオブジェクトを代入する

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
以下はRun3のメインメソッド内で実現しなさい。

10.     次に示すインスタンスを作成しなさい。
・nameが「壁」、shapeは「■」のFieldObject
・nameが「草原」、shapeは「*」のFieldObject
・nameが「勇者」、shapeは「☆」、hpとatkはお好みに設定したPlayer
・nameが「城」、shapeは「◇」、立派なお城である旨のintroをもったBuilding
・nameが「町」、shapeは「△」、さびれた町である旨の introをもった Building
11.    FieldMap2をインスタンス化し、setFieldを使って、次のようなマップを作成し、showMapで表示しなさい
・壁に囲まれた領域の中に城1、町1、勇者1がある。あまったマスはすべて草原
・城、町、勇者の位置はランダム、ただし壁と重ならない。
12.    次のことを実現しなさい
・キーボードから入力を求め
「W」なら勇者をFieldMap2のひとつ上へ、 「A」なら勇者をFieldMap2のひとつ左へ移動させる
「S」なら勇者をFieldMap2のひとつ右へ、「D」なら勇者をFieldMap2のひとつ下へ移動させる
・それ以外の入力が求められたら、再度キーボードから入力を求めさせる
・「E」が入力された場合、プログラムを終了する
・移動先が壁の場合は進ませない
・また、町もしくは城であった場合も同様に進ませないが、その施設の説明文を表示する
※移動が成功した場合は、移動後の状態のFieldMap2のshowMapを毎回表示する
13.    次のことを実現しなさい
・勇者の移動先が草原の場合、一定の確率で「敵が現れた!」とコンソールに表示し、commandメソッドを実行しなさい。
※いずれの行動をとった後でも戦闘を強制的に終了させ、次の移動が行えるようにすること

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 2

+17

課題全部に回答することは出来ません。(他のQ&Aサイトでも同じだと思います。)

まず自力でやってみて、どうしても分からない一部を質問してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-12

仕様は設計は少し納得出来ない場所がありましたが、仕様通りにつくりました。
とりあえずやりましたが公開するのは11までです。
それ以降を自分で作れないようでしたら、一から自分で作った方がいいと思います。

public class FieldMap {    
    private String[][] field = new String[7][7];
    public void showMap(){
        for(String[] fRow: this.field){
            for(String f: fRow){
                System.out.print(f);
            }
            System.out.println();
        }
    }
    public void setField(int x, int y, String obj){
        this.field[x][y] = obj;
    }
}

public class FieldMap2 {     
     private FieldObject [][] field = new FieldObject[7][7];
     public void showMap(){
         for(FieldObject[] fRow: this.field){
                for(FieldObject f: fRow){
                    System.out.print(f.getShape());
                }
                System.out.println();
            }
     }
     public void setField(int x, int y, FieldObject obj) {
         this.field[x][y] = obj;
     }
}

public class FieldObject {    
    private String name;
    private String shape;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getShape() {
        return shape;
    }
    public void setShape(String shape) {
        this.shape = shape;
    }
    
}

import java.util.Scanner;
public class Player extends FieldObject{
    int hp;
    int atk;
    public Player(String name, String shape, int hp, int atk){
        super.setName(name);
        super.setShape(shape);
        this.hp = hp;
        this.atk = atk;
    }
    public void command(){
        Scanner sc = new Scanner(System.in);
        String com = sc.next();
        if(com.equals("A")){
            attack();
        }else if(com.equals("S")){
            special();
        }else if(com.equals("E")){
            escape();
        }else{
            nothing();
        }
        sc.close();
    }
    public void attack(){
        System.out.println("attack");
    }
    public void special(){
        System.out.println("special");
    }
    public void escape(){
        System.out.println("escape");
    }
    public void nothing(){
        System.out.println("nothing");
    }
}

public class Building extends FieldObject{    
    String intro;
    public Building(String name, String shape, String intro) {
        super.setName(name);
        super.setShape(shape);
        this.intro = intro;
    }
    public void introduce(){
        System.out.println(intro);
    }
}

import java.util.Random;
public class Run3 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FieldMap2 map = new FieldMap2();
        //mapを初期化
        init(map);
        map.showMap();
        //ここから
    }

    public static void init(FieldMap2 map) {
        // FieldObjectの初期化
        FieldObject wall = new FieldObject();
        wall.setName("壁");
        wall.setShape("■");
        FieldObject green = new FieldObject();
        green.setName("草原");
        green.setShape("*");

        Player braveMan = new Player("勇者", "☆", 10, 10);
        Building castle = new Building("城", "◇", "立派なお城である");
        Building city = new Building("町", "△", "さびれた町である");
        // 草をセット
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                map.setField(i, j, green);
            }
        }
        // 周りだけ■をセット
        for (int i = 0; i < 7; i++) {
            map.setField(i, 0, wall);
            map.setField(0, i, wall);
            map.setField(6, i, wall);
            map.setField(i, 6, wall);
        }
        // 城、町、勇者のセット
        Random random = new Random();
        map.setField(random.nextInt(5) + 1, random.nextInt(5) + 1, city);
        map.setField(random.nextInt(5) + 1, random.nextInt(5) + 1, castle);
        map.setField(random.nextInt(5) + 1, random.nextInt(5) + 1, braveMan);
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る