当前位置:网站首页>SGDP(2)——声纳寻宝游戏
SGDP(2)——声纳寻宝游戏
2022-08-02 03:26:00 【copcin】
寒假到啦~经历了一个学期,终于有机会在csdn上写博客啦(10000字的寒假作业:你当我不存在呢!!!)
本次的Sonar Treasure Game(声纳寻宝游戏),虽然很难简单,但还是写了1个半小时(T_T)
废话不多说,直接开始~
----------------------------正文---------------------------
1. Java实现
源代码看这里(想直接运行的运行Game.java(应该不用说都知道)):
// 文件夹结构图
// -sonar
// --Sonar.java
// --Game.java
// Sonar.java 源代码
package sonar;
/**
* 声纳类
* @author Copcin
*/
public class Sonar {
public final int height=6;
public final int width=40;
public String[][] sonarMap=new String[this.height][this.width];
public int[] line=this.getLine();
public int[] column=this.getColumn();
public Sonar() {
this.sonarMap=this.getNewMap();
}
public String[][] getNewMap() {
String[][] map=new String[this.height][this.width];
for (int i=0;i<this.height;i++) {
for (int j=0;j<this.width;j++) {
map[i][j]="~";
}
}
return map;
}
public void set(int x,int y,String value) {
this.sonarMap[x][y]=value;
}
public String get(int x,int y) {
return this.sonarMap[x][y];
}
public int[] getLine() {
int[] line=new int[this.width];
for (int i=0;i<this.width;i++) {
line[i]=i+1;
}
return line;
}
public int[] getColumn() {
int[] column=new int[this.height];
for (int i=0;i<this.height;i++) {
column[i]=i+1;
}
return column;
}
public void print() {
System.out.println(" ");
System.out.println("Sonar Map View");
System.out.print(" ");
for (int element:this.line) {
System.out.print(String.format("%02d",element));
}
for (int i=0;i<this.height;i++) {
System.out.println("");
System.out.print(String.format("%02d",column[i]));
for (int j=0;j<this.width;j++) {
System.out.print(" "+this.sonarMap[i][j]);
}
}
System.out.println("");
}
}
// Game.java源代码
package sonar;
import java.util.Random;
import java.util.Arrays;
import java.lang.Math;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 游戏主体
* @author Copcin
*/
public class Game {
public static final String NO="X";
public static final String TR="@";
public static Sonar sonar=new Sonar();
public static int sonarCount=0;
public static int[][] golds=new int[3][2];
public static int flag=0;
public static int winFlag=0;
public static void setRandomGolds(){
Random random=new Random();
int count=0;
while (count<3) {
int[] newRandint=new int[2];
newRandint[0]=random.nextInt(sonar.height);
newRandint[1]=random.nextInt(sonar.width);
for (int[] element:golds) {
if (Arrays.equals(newRandint,element)) {
continue;
}
}
golds[count]=newRandint;
count++;
}
}
public static String input(String content) {
try {
System.out.print(content);
return new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static String search(int x,int y) {
int xmin=100;
int ymin=100;
for (int i=0;i<golds.length;i++) {
int xm=Math.max(golds[i][0],x)-Math.min(golds[i][0],x);
int ym=Math.max(golds[i][1],y)-Math.min(golds[i][1],y);
if (xm<xmin) {
xmin=xm;
}
if (ym<ymin) {
ymin=ym;
}
if (xmin==0 && ymin==0) {
flag=i;
winFlag++;
return TR;
}
}
if (xmin>=10 || ymin>=10) {
return NO;
} else {
return String.valueOf(Math.max(xmin,ymin));
}
}
public static void chooseDifficult() {
System.out.println("你想选择哪个难度?(简单,中等或困难)");
switch (input("请输入:")) {
case "简单":
sonarCount=40;
break;
case "困难":
sonarCount=20;
break;
default:
sonarCount=30;
}
}
public static void main(String[] args) {
System.out.println("欢迎来到声纳寻宝游戏!");
System.out.println("在任何时候,输入exit即可退出。");
while (true) {
chooseDifficult();
setRandomGolds();
System.out.println("宝藏和声纳都已初始化完成");
System.out.println("");
while (sonarCount>0) {
System.out.println("你还剩"+sonarCount+"个声纳设备。");
sonar.print();
System.out.println("你想知道哪个位置(纵坐标,横坐标,如3,4)?");
String in=input("请输入:");
if (in.equals("exit")) {
System.out.println("谢谢您的游玩!");
System.exit(0);
} else {
String[] inInt=in.split(",");
int[] intIn= {Integer.parseInt(inInt[0])-1,Integer.parseInt(inInt[1])-1};
String result=search(intIn[0],intIn[1]);
if (result.equals(TR)) {
sonar.set(intIn[0],intIn[1],TR);
System.out.println("恭喜!你在"+Arrays.toString(new int[]{intIn[0]+1,intIn[1]+1})+"处发现了宝藏!");
golds[flag]=new int[]{-10000,-10000};
if (winFlag>=3) {
break;
}
} else {
sonar.set(intIn[0],intIn[1],result);
}
sonarCount--;
}
}
if (winFlag==3) {
System.out.println("恭喜发现全部宝藏!");
} else {
System.out.println("很抱歉,没有发现全部宝藏。");
System.out.println("宝藏的位置在:"+Arrays.deepToString(golds));
}
System.out.println("想再玩一次吗?(输入“y”代表想)");
if (!input("请输入:").startsWith("y")) {
System.out.println("谢谢您的游玩!");
System.exit(0);
}
}
}
}
(明显的,比前面的猜数字长了很多,有近200行(老码农:多吗(0——0)),但算法也复杂了很多,比如Sonar.print()方法与Game.search(int x,int y)方法)
运行效果(太长了,可以直接跳)
欢迎来到声纳寻宝游戏!
在任何时候,输入exit即可退出。
你想选择哪个难度?(简单,中等或困难)
请输入:简单
宝藏和声纳都已初始化完成
你还剩40个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:3,4
你还剩39个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:4,6
你还剩38个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:2,6
恭喜!你在[2, 6]处发现了宝藏!
你还剩37个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:3,12
你还剩36个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:4,27
你还剩35个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:6,29
你还剩34个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 4 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:2,25
恭喜!你在[2, 25]处发现了宝藏!
你还剩33个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 4 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:5,18
你还剩32个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 4 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:3,40
你还剩31个声纳设备。
Sonar Map View
01020304050607080910111213141516171819202122232425262728293031323334353637383940
01 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
02 ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ @ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
03 ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 3
04 ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
05 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
06 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 4 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
你想知道哪个位置(纵坐标,横坐标,如3,4)?
请输入:6,40
恭喜!你在[6, 40]处发现了宝藏!
恭喜发现全部宝藏!
想再玩一次吗?(输入“y”代表想)
请输入:no
谢谢您的游玩!
下面是逐行分解
Sonar.java
Sonar类是声纳类,里面包含着声纳数组与声纳操作的一些方法
第1~7行:包声明与注释文档。这个就不用解释了吧,包声明与注释文档;
第8~10行:长度和宽度。第8行定义了Sonar类,第9行和第10行定义了两个常量height和width,这两个常量代表着声纳地图的宽度和长度,可以根据自身情况修改(这个方法可以用一下,方便修改);、
第11~13行:声纳图与序号。第11行定义了sonarMap声纳数组,这是一个二维数组,二维数组的定义方法与一维差不多,只是要两个[]号。由于声纳图是一个二维的平面图,为了方便用户选择位置,第12~13行是定义行头和列头数字的数组,getLine()和getColumn()方法可以跳第37~51行;
第14~17行:构造方法。Sonar类的构造方法,太简单,童鞋自行理解,getNewMap()方法见第18~27行;
第18~27行:生成一个新声纳图。第19行定义了函数名和返回类型,第20行定义了一个二维数组map,第21~25行运用了双层嵌套for循环将map填充"~"字符串,以达到海洋的效果(这也不像鸭),这里要注意height是外层循环,因为打印时是先height再width,之前我用width外层循环打印结果直接惊了~,也可以用Arrays.fill(map,"~")方法,没试过,第26行返回了map赋值给sonarMap;
第28~36行:set()和get()方法。第28~36行定义了set和get方法,这两个方法给获取和更改sonarMap中的内容提供了方便,实现自行理解;
第37~51行:获取横向与纵向的序号。第37行定义了getLine()方法,第38行定义了line数组,第39~41行for循环中i+1是因为打印出来是从1开始的,第42行返回line,getColumn()方法与getLine()一MU一样,只是line换成了column,width换成了height而已;
第52~70行:打印声纳数组。前方第一个难点来了!!!(老码农:难吗……)~第54行打印一行空行,第55行打印标题“Sonar Map View”(别问我为什么要用英文,只是为了看起来高科技一点~),第56行打印空两格,这是为了空出纵向序号的空间;第57~59行打印横向序号,String.format("%02f",element)是为了将如1,4这类只有一个数位的数字补足两个数位,以方便观察;第61行换行,第62行将补足两个数位的数字打印,第63行内层循环开始,第64行打印sonarMap[i][j]的内容,前面的一格空格是为了让内容补足两格,以方便观察;第67行换行。
附:注解行数=标记行数-7
Game.java
Game.java是游戏主体,其中用到了我们刚刚写的Sonar类。
第1~14行:包声明,引入外部类,注释文档。这里创建了包声明,import了我们后期需要用到的外部类,还有注释文档;
第15~22行:创建常量与变量。第15行定义了Game类,第16~17行定义了字符串常量NO和TR,它们分别指声纳探测不到宝藏的字符与宝藏的字符,第18行创建了声纳,第19行定义了声纳使用次数,第20行定义了宝藏数组,它也是二维数组,第21行是宝藏标志flag,标志发现了哪个宝藏,第22行是获胜标志winFlag,每发现一个宝藏就会+1,当其大于等于3时就说明获胜了;
第23~39行:生成随机宝藏。第24行定义了函数名,第25行定义了Random对象random,它用来生成随机数。第26行定义了生成宝藏的计数器count。第27~38行是一个while循环,它的条件是count小于3,第28~30行生成了一个随机宝藏newRandint,其中newRandint[0]是行数,newRandint[1]是列数,第31~33行检查有没有宝藏重复的情况,如果有任何一个重复都continue循环,不在执行下面的语句,第34行将newRandint加入到宝藏列表中,第35行将count加1;
第40~49行:读取用户输入。其中用到了BufferedReader.readLine()方法。这是一个高级类,它读取字符串;
第50~74行:计算用户输入坐标与宝藏坐标的距离。第二个难点来了。第52~53行定义了xmin与ymin,它们指输入坐标到宝藏的最小距离,第54~68行是一个for循环(emm……),第55~56行获取了坐标的x点与y点到宝藏的x点与y点的距离,第57~62检查XY坐标的距离有没有比xmin与ymin小,如果小就取代xmin与ymin。第63~67行检查坐标是不是在宝藏上,如果是,将flag设为当前循环的宝藏索引i,将winFlag加1,返回TR。第69行检查x距离或y距离是不是都超过了10,如果超过返回NO,否则第72行返回xmin和ymin中较大的一个;
第75~89行:选择难度。第77行询问用户要选择什么难度,第78~87行是一个switch……case语句。这里用刚才的input()方法读取用户输入,然后case判断用户输入的是什么并以此设置声纳使用次数,这里默认30;
第90~137行:游戏主体。这里把其分段:
第90~97行:初始化。第91~92行打印欢迎信息,第93行while循环开始,第94~97行做些初始化操作,让用户选择难度,初始化宝藏位置,并打印提示信息;
第98~102行:打印信息并读取用户输入。第98行打印声纳数量,第99行调用sonar.print()方法打印声纳图,第100~101行读取用户的输入;
第103~122行:判断用户输入。如果用户输入exit,那第104~105行退出程序,否则第107行将输入按照","分段,第108行将用户输入转int类型,第109行将用户输入送入search()方法判断,并将结果保存在result中,如果result是TR,那么将TR设为sonarMap输入位置的字符,打印恭喜信息,将golds[flag]置空,如果winFlag>=3,则退出循环。如果result不等于TR,将result设为sonarMap输入位置的字符。第120行将声纳数量减1;
第123~137行:收尾处理。如果winFlag==3,那么第124行打印恭喜信息,否则第126~127行打印抱歉信息与宝藏位置。第129~133行询问用户是否想在玩一次,如果用户输入前缀不是y则第131~132行退出程序。
附:注解行数=标记行数-79
P.S. 写完,看看自己的手,emmm…………
边栏推荐
- laravel-admin FROM表单同行展示问题
- 重点考:从债劵的角度来看交易性金融资产
- 记账凭证的种类、记账凭证的基本内容、记账凭证的填制要求、记账凭证的审核
- Laravel 验证唯一时排除修改时的数据
- After Alibaba Cloud sets up domain name resolution redirection, I cannot use Chrome to access it
- 会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
- 文件包含漏洞
- Shuriken: 1 vulnhub walkthrough
- 【一句话攻略】彻底理解JS中的回调(Callback)函数
- MOMENTUM: 2 vulnhub walkthrough
猜你喜欢
(1) the print () function, escape character, binary and character encoding, variables, data type, the input () function, operator
命令执行漏洞
CTF入门笔记之SQL注入
如何在正则表达式里表达可能存在也可能不存在的内容?
file contains vulnerabilities
链动2+1无限循环系统,2022年起盘成功率超高的模式
hackmyvm-random walkthrough
mysql 原生语句点滴学习记录
hackmyvm: again walkthrough
How to log in to Alibaba Cloud server using the admin account
随机推荐
hackmyvm: controller walkthrough
hackmyvm-random walkthrough
How to calculate the distance between two points on the earth (with formula derivation)
MOMENTUM: 2 vulnhub walkthrough
PHP deserialization vulnerability
CTF入门之php文件包含
财产清查概述、 全面清查的情况、局部清查的情况、财产清查的方法、财产清查结果的处理
会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
(5) Modules and packages, encoding formats, file operations, directory operations
C language uses stack to calculate infix expressions
什么是广告电商商业模式?这几个门派告诉你
Laravel 登录,中间件和路由分组
The first time to tear the code by hand, how to solve the problem of full arrangement
库存现金、现金管理制度、现金的账务处理、银行存款、银行存款的账务处理、银行存款的核对
二舅为什么能刷屏?这三件事对企业公关的启示
Basic use of v-on, parameter passing, modifiers
强化学习笔记:DDPG
Dcat Admin 关闭代码生成器 登录指定地址
file contains vulnerabilities
CTF introductory notes ping