重慶課ACMのウォームアップの質問は8527.Doあなたがゲームをプレイしたいですか?
最近忙しく準備ブロガーは練習ACMで行う、私はこの3番目の質問・レートで発見重慶のウォームアップの質問でACM最低であり、
当初考えていたACMプログラミングコンテストは、すべてのpython後もPythonのブロガー幸せについては、使用することができますこのプロセスでは、文字列は、ゴシップが最初の質問に来て、言っているわけではない、まだ非常に支配的です。私たちは、最初のそれは、被験者が、我々は「=」で彼を発見し、周囲にはマップを生成することを意味し、ビットヘビの右のように、これは非常にシンプルなゲームですトピックを分析|フレーム、センターは「」エリアを移動することができます10×10の空白領域。その後、我々は、ストレージのための文字列の2次元配列を使用することができ、境界マップを含む全領域は、その後、私たち最初の関数は、マップを生成するために使用され、ブロガー、まだ大学生ので、学校I Javaでちょうどこの学期この質問は、コードでのJava、表情で完成されています。
static String[][] createMap() {
String[][] map = new String[12][12];
for (int i = 0; i < 12; i++) {
map[0][i] = "=";
}
for (int i = 0; i < 12; i++) {
map[11][i] = "=";
}
for (int i = 1; i < 11; i++) {
for (int j = 0; j < 11; j++) {
map[i][j] = " ";
}
}
for (int i = 1; i < 11; i++) {
map[i][0] = "|";
}
for (int i = 1; i < 11; i++) {
map[i][11] = "|";
}
return map;
}
作成された私たちのマップは、バックは、地図を表示する機能があるので、それは、単純な配列トラバーサル、コードの値を印刷するには、次のとおりです。
static void printMap(String[][] map, int n) {
System.out.printf("score:%d\n", score);
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
地図表示を使用すると、上記の、時間のコードに結果の提示を私たち自身のコードを書くプロセスの時間に、実際には、コードを変更するために応じて、プログラムを書くプロセスに印刷が障害を見つけるために非常に効果的な方法で見ることができますプロセスが開始し、ショーされ、我々はすべてのコードの入力データと出力データの提出時には知っている、ACMコンテストは、ここでは、一定の形をしていると言うことは何もない、最初の行の開始位置はどこNPCであります私はそれが店のデータは、次のコマンドラインの数を表す整数である二行目、次の数行は、すべてのコマンド意志、またはコードを見に文字列配列のリストを使用しています:
static ArrayList<String> input() {
ArrayList<String> data = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String mpoint = new String();
mpoint = sc.nextLine();
data.add(mpoint);
String cc = new String();
int n = sc.nextInt();
for (int i = 0; i <= n; i++) {
cc = sc.nextLine();
data.add(cc);
}
return data;
}
まあ、すべてが唯一の強い風準備ができて、そしてそれは我々が弱い子NPCが不足していると思われるので、後半、このプロセスはまだ書かれていませんか?
そして、それを決定するために、独自の機能judge--審判を定義し、原理は非常に単純なNPCであるあなたがスコアに加えてバーコードを見ればどうか「*」に対応する配列要素の内側に移動した後、地図座標に図です。
public static void judge(int[] p, String[][] m) {
if (m[p[0]][p[1]].equals("*")) {
score++;
}
}
アドレスを比較することであるので、それは直接表現するJava ==数でこの方法始まる等しいように、2つのオブジェクトが同じではなく、より多くの価値です。
さて、今のコードでそれのプロセス全体を見て:
import java.util.ArrayList;
import java.util.Scanner;
class acm_8 {
private static int score = 0;
static String[][] createMap() {
String[][] map = new String[12][12];
for (int i = 0; i < 12; i++) {
map[0][i] = "=";
}
for (int i = 0; i < 12; i++) {
map[11][i] = "=";
}
for (int i = 1; i < 11; i++) {
for (int j = 0; j < 11; j++) {
map[i][j] = " ";
}
}
for (int i = 1; i < 11; i++) {
map[i][0] = "|";
}
for (int i = 1; i < 11; i++) {
map[i][11] = "|";
}
return map;
}
static void printMap(String[][] map, int n) {
System.out.printf("score:%d\n", score);
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
static ArrayList<String> input() {
ArrayList<String> data = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String mpoint = new String();
mpoint = sc.nextLine();
data.add(mpoint);
String cc = new String();
int n = sc.nextInt();
for (int i = 0; i <= n; i++) {
cc = sc.nextLine();
data.add(cc);
}
return data;
}
public static void judge(int[] p, String[][] m) {
if (m[p[0]][p[1]].equals("*")) {
score++;
}
}
public static void main(String[] args) {
String[][] map = createMap();
ArrayList<String> data = input();
int[] point = new int[2];
point[0] = Integer.parseInt(data.get(0).split(" ")[0]);
point[1] = Integer.parseInt(data.get(0).split(" ")[1]);
map[point[0]][point[1]] = "M";
for (int i = 2; i < data.size(); i++) {
String[] command = data.get(i).split(" ");
if (command[0].equals("f")) {
map[Integer.parseInt(command[1])][Integer.parseInt(command[2])] = "*";
} else {
String s = command[0];
switch (s) {
case "w":
map[point[0]][point[1]] = " ";
point[0]--;
judge(point, map);
break;
case "s":
map[point[0]][point[1]] = " ";
point[0]++;
break;
case "a":
map[point[0]][point[1]] = " ";
point[1]--;
break;
case "d":
map[point[0]][point[1]] = " ";
point[1]++;
break;
}
judge(point, map);
map[point[0]][point[1]] = "M";
}
printMap(map, 10);
}
}
}