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

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

ただいまの
回答率

88.78%

Java_タイピングゲームの作成

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 3,956
退会済みユーザー

退会済みユーザー

javaでキーボードから直接入力し判定しタイムなどの結果を返す、タイピングゲームを作成したいのです。
ですが、配列の用意とメソッドの定義の仕方等で悩んで前に進めずにいます。

タイピング·ゲームの仕様は以下のようなものにしたいと考えています。

●出題と判定
- 出題された文字列と同じ文字列が入力されるまで、何度も再入力を促す。
・2つの文字列が一致した場合、「OK!」と表示し、次の出題に移る。
・2つの文字列が一致しない場合、「MISS 」と出力し、再入力させる。
- 予め用意された複数の問題をランダムに出題する。
・同じ問題は連続して出題されない。
・連続しなければ、1ゲーム中に同じ問題が出題されても良い。

●各問題には難易度(Easy/Normal/Hardの3段階)が設定される。

- ゲーム開始時にユーザは難易度を選択できる。デフォルトはNormalとする。
- 出題される問題はユーザの指定した難易度以下の問題に限定される。
- 出題数は難易度によって異なる。(Easy : 5 Normal: 10問、Hard:20問)

●プログラム実行中であれば、複数回ゲームを実行できること。
- 1ゲーム終了後、ユーザにリトライするか確認する。
・リトライしない場合、プログラムを終了する。この際、ランキングは破棄される。
・リトライする場合、難易度の選択から行う

●ゲーム開始時と終了時の動作

- ゲーム開始時にはカウントダウンを行う
・カウントダウンはユーザが難易度を選択したあとに行われる。
・カウント数は5とする
・カウントの間隔は規定しない(1秒である必要はない)が、ユーザがゲームに取り組む準備ができる程度の余裕を持たせること。つまり過度に短くてはならない。
- 開始時には「Start!」、終了時には「Finished.」を表示すること。
- 全問終了するのにかかった時間を計測し、表示する。
・時間の単位はミリ秒とする。

●オブジェクト指向プログラミング演習

- 前項の時間を表示後、実行した難易度のランキング(Top10)を表示する。
・ランキングには順位と時間(単位:ミリ秒)が表示されること。
・ランキングはプログラムが実行されている間、何ゲーム実施しても保持される。

【プログラム中で使用するデータ】
出題内容はJavaの予約語とする。以下に単語(かっこ内数字で難易度を表す、例えば1ならEasy。)を列挙する。
[基本データ型関連]
byte(1), short (2), int (1), long (1), float (2), double(2), boolean (2), void(1)
[制御構文関連]
if (1), else(), switch(2), case(1), default (2), for(, while(2), do(l), continue (2), break (2), return(2), try(1), catch (2), finally (2). throw (2), throws (2)
[クラス、パッケージ関連]
package (2), import (2), class (2), interface (3). extends (2), implements (3), this(1), super (2), new (1), enum (1), 
[演算子]
instanceof (3)
[修飾子]
public(2), protected (3), private (2). final (2), statio (2), abstract (2),
native (2), synchroni zed (3), volatile (2), transient (3), strictfp(2)
[リテラル]
true(1), false (2), null (1)
[その他]
const (2), goto (1), assert (2)

【実装上の留意点、遵守事項】

- 標準入力には、提供されるStandardinputReaderクラスのメソッドを用いる。
- 1メソッドが過度に長くならないこと。目安としては50行程度以内とする。ただし、データの初期化など、メソッドを分割する意義がない場合はこの限りではなぃ。
- 最終的にプログラムは2つ以上の自作クラスから携莖きれていること(前述のStandardInputReaderはクラス数のカウントから除外される) 。
- できればオブジェクト指向プログラミングになっていること
・インスタンスを生成,利用していること。
- Javaの標準APIは何を使用しても構わない

【その他】

  • 私が作った仕様書要件を満たして、かつ、楽しいプログラムに改良していきたいと考えています。
  • 実行のイメージとしては以下のようにしたいです。
    (あくまで実行結果のイメージですので、必ずこの通りにならなくてもいいかなと思っています)。
  • できればGW中に完成を目指して作っていきたいです。

>java TypingGame
難易度を選択してください(1-3)
1 Easy
2: Normal
3: Hard
>1
5........
4........
3........
2........
1........
Start!
long: long
OK!
byte: byt
MISS...
byte: byte
OK!
goto: goto
OK!
else: else
OK!
void: void
OK!
Finished. time-27956 [ms]
1:           27956 [ms]
2: 999999999999999 [ms]
3: 999999999999999 [ms]
4: 999999999999999 [ms]
5: 999999999999999 [ms]
6: 999999999999999 [ms]
7: 999999999999999 [ms]
8: 999999999999999 [ms]
9: 999999999999999 [ms]
10: 999999999999999 [ms]
リトライしますか? (1:する2:しない)
>1
難易度を選択してください(1-3)
1: Easy
2: Normal
3: Hard
>

  • 以下作成途中のコードです。
/*
* TypingGame.java
*/
import utility.StandardInputReader;
/**
* タイピング・ゲーム
* @author your name
*/
public class TypingGame {
    public static void main(String[] args) {
    //難易度の選択
    System.out.println("難易度を選択してください(1-3)");
    System.out.println("1:Easy");
    System.out.println("2:Normal");
    System.out.println("3:Hard");     
    int judge = StandardInputReader.getInputInt(" ");

    //文字列判定はStr.equals()を使えばいい?

    //Easyの配列
    String[] easy = {"byte","int","long","void","if","else","case","for","do","try","this","new","enum","true","null","goto"};
        for (int i = 0; i < easy.length; i++) {
            System.out.println(easy[i]);
        }
        System.out.println("");

    //Normalの配列
    String[] normal = {"byte","int","long","void","if","else","case","for","do","try","this","new","enum","true","null","goto","short", "float","double","boolean","switch","default","while","continue","break","return","catch","finally","throw","throws","package","import","class","expands","this","super","public","private","final","static","abstract","native","volatile","strictfp","false","const","assert"};
        for (int i = 0; i < normal.length; i++) {
            System.out.println(normal[i]);
        }
        System.out.println("");

    //Hardの配列
    String[] hard = {"byte","int","long","void","if","else","case","for","do","try","this","new","enum","true","null","goto","short", "float","double","boolean","switch","default","while","continue","break","return","catch","finally","throw","throws","package","import","class","expands","this","super","public","private","final","static","abstract","native","volatile","strictfp","false","const","assert","interface","implements","instanceof","protected","transient"};
        for (int i = 0; i < hard.length; i++) {
            System.out.println(hard[i]);
    }
    System.out.println("");

    int num = (int)Math.floor(Math.random() * (17-1))+ 1;
    String word = StandardInputReader.getInputString(easy[num] + ":");
    int num = (int)Math.floor(Math.random() * (30-1))+ 1;
    String word = StandardInputReader.getInputString(normal[num] + ":");
    int num = (int)Math.floor(Math.random() * (6-1))+ 1;
    String word = StandardInputReader.getInputString(hard[num] + ":");


    //文字列一致判定
    int moji1 = 0;
    int moji2 = 1;
    if (num == 0) {
        System.out.println("OK!");
    } else if (num == 1) {
        System.out.println("MISS...");
    } 

    //時間計測
    long time = System.currentTimeMillis();
    String str = StandardInputReader.getInputString(" ");
    time = System.currentTimeMillis() - time;
    System.out.print("Finished.");
    System.out.println("time=" +  ((double)time / 1000.0) + "[ms]");

    //ランキング表示?

    //リトライの選択
    System.out.println("リトライしますか?「1:する 2:しない」");    
    int retry = StandardInputReader.getInputInt(" ");

    }
}


以上です。教えていただきながら完成できれば嬉しいです。
よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • jimbe

    2019/04/27 16:49 編集

    > import utility.StandardInputReader
    これはどのようなものでしょう.

    > 提供されるStandardinputReaderクラス
    という書き方からすると, 新入社員への課題(宿題?)のような雰囲気が致しますが.

    キャンセル

  • m.ts10806

    2019/04/27 18:43

    >教えていただきながら完成できれば嬉しいです。

    質問しにきたわけではないのでしたら、他所でどうぞ。ペアプロ求める場所ではありません

    キャンセル

  • 退会済みユーザー

    2019/04/28 12:39

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

まだ回答がついていません

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

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

関連した質問

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