Q
1~100000の乱数を生成するゲームを作成し、そのハイスコアをファイルに書き込むことで管理せよ。
はじめてゲームをするときのハイスコアは0
記録が出た時の日付も記録すること。
[実行例]
(初回時)
****乱数ゲーム****
HighScore 0
やりますかyes…y no…n>y
33081
new Record
やりますかyes…y no…n>y
79048
new Record
やりますかyes…y no…n>y
63973
やりますかyes…y no…n>n
アプリを終了します
(二回目以降)
****乱数ゲーム****
HighScore 79048 2018/07/31
やりますかyes…y no…n>y
31186
やりますかyes…y no…n>y
29340
やりますかyes…y no…n>y
22127
やりますかyes…y no…n>y
5352
やりますかyes…y no…n>y
16096
やりますかyes…y no…n>y
80957
new Record
やりますかyes…y no…n>n
アプリを終了します
[解答例]
Score.java
public class HighScore {
private int score;
private String date;
public HighScore(int score,String date) {
this.score=score;
this.date=date;
}
@Override
public String toString() {
return this.score+" "+this.date;
}
public String toCSV() {
return this.score+","+this.date;
}
public int getScore() {
return this.score;
}
}
アプリケーションクラス
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
public class HighScoreGame {
public static void main(String[] args) {
final String FILE="score.csv";
final int MAX=100000;
Scanner scan =new Scanner(System.in);
Random rand=new Random();
boolean isHighScore=false;
System.out.println("****乱数ゲーム****");
HighScore hs=readFile(FILE);
int highScore;
if(hs==null) {
System.out.println("HighScore 0");
highScore=0;
}else {
System.out.println("HighScore "+hs);
highScore=hs.getScore();
}
while(true) {
System.out.print("やりますかyes...y no...n>");
String select=scan.next();
if(select.equals("n")) {
System.out.println("アプリを終了します");
if(isHighScore) {
Date today=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
String date=sdf.format(today);
hs=new HighScore(highScore,date);
writeRecord(FILE,hs);
}
scan.close();
break;
}
int no=rand.nextInt(MAX)+1;
System.out.println(no);
if(no > highScore) {
highScore=no;
isHighScore=true;
System.out.println("new Record");
}
}
}
public static HighScore readFile(String file) {
HighScore hs=null;
BufferedReader br=null;
try {
FileInputStream fis=new FileInputStream(file);
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
br=new BufferedReader(isr);
String line=br.readLine();
if(line!=null && !line.equals("")) {
String[] data=line.split(",");
hs=new HighScore(Integer.parseInt(data[0]),data[1]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return hs;
}
public static void writeRecord(String fileName,HighScore hs) {
BufferedWriter bw=null;
try {
FileOutputStream fos=new FileOutputStream(fileName);
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
bw=new BufferedWriter(osw);
bw.append(hs.toCSV());
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bw !=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
(参考)
ファイルオブジェクトを使った例
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
public class HighScoreGame {
public static void main(String[] args) {
final String FILE="score2.csv";
final int MAX=100000;
Scanner scan =new Scanner(System.in);
Random rand=new Random();
int highScore=0;
boolean isHighScore=false;
HighScore hs=null;
System.out.println("****乱数ゲーム****");
File file=new File(FILE);
if(file.exists()) {
hs=readFile(file);
System.out.println("HighScore "+hs);
highScore=hs.getScore();
}else {
System.out.println("HighScore 0");
}
while(true) {
System.out.print("やりますかyes...y no...n>");
String select=scan.next();
if(select.equals("n")) {
System.out.println("アプリを終了します");
if(isHighScore) {
Date today=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
String date=sdf.format(today);
hs=new HighScore(highScore,date);
writeRecord(FILE,hs);
}
scan.close();
break;
}
int no=rand.nextInt(MAX)+1;
System.out.println(no);
if(no > highScore) {
highScore=no;
isHighScore=true;
System.out.println("new Record");
}
}
}
public static HighScore readFile(File file) {
HighScore hs=null;
BufferedReader br=null;
try {
FileInputStream fis=new FileInputStream(file);
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
br=new BufferedReader(isr);
String line=br.readLine();
String[] data=line.split(",");
hs=new HighScore(Integer.parseInt(data[0]),data[1]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return hs;
}
public static void writeRecord(String fileName,HighScore hs) {
BufferedWriter bw=null;
try {
FileOutputStream fos=new FileOutputStream(fileName);
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
bw=new BufferedWriter(osw);
bw.append(hs.toCSV());
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bw !=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

コメント