- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被要求创建一个我选择的星球大战主题游戏,该游戏必须使用 JOptionPane 而不是控制台来玩。我很好地设置了主菜单和基本内容,但其余的我不知道该怎么做。
我的游戏是战舰游戏,到目前为止它可以在控制台中运行,但是我不知道如何进行网格工作。游戏必须以电影中的 BB-8 角色为主角。我的代码在这里:
import java.util.*;
import javax.swing.*;
public class BattleShips {
public static void main(String[] args) {
Scanner a = new Scanner (System.in);
System.out.print("Welcome To Battleships!\n\nSelect One Of The Following Options:\n\n1. Play\n2. How To Play\n3. Exit\n\n");
String choice = a.nextLine();
if(choice.equals("2")){
System.out.print("\nThe rules of battleships are simple."
+ "\n\n- Your aim is to destroy all enemy ships, the first to destoy all opposing ships first wins."
+ "\n- You will have 4 ships all of which are 3 spaces long."
+ "\n- You will have the choice of placing your ships anywhere you wish, "
+ "simply by deciding if you want it vertical or horizontal and entering the centre coordinate."
+ "\n- You will then have to guess where the enemy ships are and enter the coordinates, "
+ "if you hit the enemy ships you will recieve points."
+ "\n- If your ships are hit, you will lose a point.");
}
String[][] table = new String[7][7];
String[] letter = {"A","B","C","D","E","F"};
String[] numbers = {"0","1","2","3","4","5"};
table[0][0] = " ";
for(int i = 1 ;i < 7 ;i++){
table[i][0] = (letter[i-1]);
for(int j = 1 ;j < 7 ;j++){
table[0][j] = (numbers[j-1]);
}
}
for(int i = 1 ;i < 7 ;i++){
for(int j = 1 ;j < 7 ;j++){
table[i][j] = "~";
}
}
String[][] hmtable = new String[7][7];
String[] hmletter = {"A","B","C","D","E","F"};
String[] hmnumbers = {"0","1","2","3","4","5"};
hmtable[0][0] = " ";
for(int i = 1 ;i < 7 ;i++){
hmtable[i][0] = (hmletter[i-1]);
for(int j = 1 ;j < 7 ;j++){
hmtable[0][j] = (hmnumbers[j-1]);
}
}
for(int i = 1 ;i < 7 ;i++){
for(int j = 1 ;j < 7 ;j++){
hmtable[i][j] = "~";
}
}
String[][] table2 = new String[7][7];
String[] letter2 = {"A","B","C","D","E","F"};
String[] numbers2 = {"0","1","2","3","4","5"};
table2[0][0] = " ";
for(int i = 1 ;i < 7 ;i++){
table2[i][0] = (letter2[i-1]);
for(int j = 1 ;j < 7 ;j++){
table2[0][j] = (numbers2[j-1]);
}
}
for(int i = 1 ;i < 7 ;i++){
for(int j = 1 ;j < 7 ;j++){
table2[i][j] = (letter2[i-1])+(numbers2[j-1]);
}
}
String[][] AItable = new String[7][7];
String[] AIletter = {"A","B","C","D","E","F"};
String[] AInumbers = {"0","1","2","3","4","5"};
table[0][0] = " ";
for(int i = 1 ;i < 7 ;i++){
AItable[i][0] = (AIletter[i-1]);
for(int j = 1 ;j < 7 ;j++){
AItable[0][j] = (AInumbers[j-1]);
}
}
for(int i = 1 ;i < 7 ;i++){
for(int j = 1 ;j < 7 ;j++){
AItable[i][j] = "~";
}
}
boolean done = true;
int counter = 0;
while(done){
int posnum = 1 + (int)(Math.random() * 6);
int posletter = 1 + (int)(Math.random() * 6);
int vorh = 1 + (int)(Math.random() * 2);
if(vorh==1&&posnum==1){
posnum = posnum+1;
}
if(vorh==1&&posnum==6){
posnum = posnum-1;
}
if(vorh==2&&posletter==1){
posletter = posletter+1;
}
if(vorh==2&&posletter==6){
posletter = posletter-1;
}
if(vorh==(1)&&AItable[posletter][posnum].equals("~")&&AItable[posletter][posnum+1].equals("~")&&AItable[posletter][posnum-1].equals("~")){
AItable[posletter][posnum] = ("X");
AItable[posletter][posnum+1] = ("X");
AItable[posletter][posnum-1] = ("X");
counter = counter + 1;
}
if(vorh==(2)&&AItable[posletter][posnum].equals("~")&&AItable[posletter+1][posnum].equals("~")&&AItable[posletter-1][posnum].equals("~")){
AItable[posletter][posnum] = ("X");
AItable[posletter+1][posnum] = ("X");
AItable[posletter-1][posnum] = ("X");
counter = counter + 1;
}
if(counter == 4){
done=false;
}
}
/*AItable[0][0] = " ";
System.out.println("The AI's Ships");
for(int i = 0 ;i < 7 ;i++){
for(int j = 0 ;j < 7 ;j++){
System.out.printf("%-4s",AItable[i][j]);
}
System.out.println();
}*/
System.out.println("\n\nHere are all the coordinates where you may place your ships:\n");
for(int i = 0 ;i < 7 ;i++){
for(int j = 0 ;j < 7 ;j++){
System.out.printf("%-4s",table[i][j]);
}
System.out.println();
}
boolean choose = true;
int counter2 = 0;
int i = 1;
while(choose){
System.out.print("\nDo you want ship #"+(i)+" to be vertical or horizontal? (V/H) > ");
String vorh = a.nextLine().toUpperCase();
System.out.print("Please enter the centre coordinate of ship #"+(i)+" > ");
String input = a.nextLine().toUpperCase();
for(int l = 1 ;l < 7 ;l++){
for(int j = 1 ;j < 7 ;j++){
if(input.equals(table2[l][j])){
if(vorh.equals("V")&&input.charAt(0)==('A')){
System.out.print("Sorry, the position you have chosen is out of bounds, please choose another.");
}
else if(vorh.equals("V")&&input.charAt(0)==('F')){
System.out.print("Sorry, the position you have chosen is out of bounds, please choose another.");
}
else if(vorh.equals("V")){
table[l][j] = ("X");
table[l+1][j] = ("X");
table[l-1][j] = ("X");
counter2 = counter2 + 1;
i = i+1;
}
if(vorh.equals("H")&&input.charAt(1)==('0')){
System.out.print("Sorry, the position you have chosen is out of bounds, please choose another.");
}
else if(vorh.equals("H")&&input.charAt(1)==('5')){
System.out.print("Sorry, the position you have chosen is out of bounds, please choose another.");
}
else if(vorh.equals("H")){
table[l][j] = ("X");
table[l][j+1] = ("X");
table[l][j-1] = ("X");
counter2 = counter2 + 1;
i = i+1;
}
}
}
}
//}
if (counter2 == 4){
choose = false;
}
System.out.println();
for(int p = 0 ;p < 7 ;p++){
for(int j = 0 ;j < 7 ;j++){
System.out.printf("%-4s",table[p][j]);
}
System.out.println();
}
}
System.out.print("\nNow You Must Destroy All Enemy Ships!");
boolean destroy = true;
int destroyed = 0;
int aidestroyed = 0;
while(destroy){
System.out.print("\nPlease enter a coordinate > ");
String input = a.nextLine().toUpperCase();
for(int l = 1 ;l < 7 ;l++){
for(int j = 1 ;j < 7 ;j++){
if(input.equals(table2[l][j])){
if(AItable[l][j].equals("X")){
System.out.println("HIT!\n");
destroyed = destroyed + 1;
hmtable[l][j] = "!";
}
else{
System.out.println("MISS!\n");
hmtable[l][j] = "O";
}
System.out.println();
for(int p = 0 ;p < 7 ;p++){
for(int q = 0 ;q < 7 ;q++){
System.out.printf("%-4s",hmtable[p][q]);
}
System.out.println();
}
}
}
}
System.out.println("The Enemy Has Chosen A Coordinate.");
int posnum = 1 + (int)(Math.random() * 6);
int posletter = 1 + (int)(Math.random() * 6);
if(table[posletter][posnum].equals("X")){
System.out.println("You Have Been Hit By The Enemy!\n");
table[posletter][posnum] = ("!");
aidestroyed = aidestroyed + 1;
}
else if(table[posletter][posnum].equals("~")){
System.out.println("The Enemy Missed!\n");
table[posletter][posnum] = ("O");
}
else if(!table[posletter][posnum].equals("!")||!table[posletter][posnum].equals("X")){
System.out.println("The Enemy Missed!\n");
}
System.out.println();
for(int p = 0 ;p < 7 ;p++){
for(int q = 0 ;q < 7 ;q++){
System.out.printf("%-4s",table[p][q]);
}
System.out.println();
}
if(destroyed == 12){
System.out.print("Great Job! You Have Destroyed All Enemy Ships!");
destroy = false;
break;
}
if(aidestroyed == 12){
System.out.print("Unlucky! The Enemy Have Destroyed All Of Your Ships!");
destroy = false;
break;
}
}
}
}
最佳答案
要使用 JOptionPane
接收用户的输入,请使用:
String inputString = JOptionPane.showInputDialog(null, "Enter input");
您只需将 scanner.nextXXX()
替换为该行即可。
注意:如果用户按下 JOptionPane
上的 X
按钮,结果可能为 null
,您应该像这样检查:
String inputString = JOptionPane.showInputDialog(null, "Enter input");
if(inputString!=null){
//and then use the inputString
...
}
关于java - 将控制台代码转换为 JOptionPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365500/
我正在使用 JOptionPane 来获取字符串。单击“确定”即可保存字符串。现在我希望弹出第二个 JOptionPane 以输入第二个必要的字符串。是否有机会将 ActionListener 添加到
我有一个显示来自 JOptionPane 的确认消息的过程。此过程从 JMenuItem 的 Actionlistener 内的 SwingUtilities.invokeLater(runnable
我使用以下代码来获取InputDialog: String c = JOptionPane.showInputDialog("Select number",JOptionPane.OK_OPTION)
正如你从我上面的主题中看到的, 我想知道我怎么能解雇一个 JOptionPane 因为另一个 JOptionPane 而变得无关紧要,因为用户出于某种原因没有通过自己点击确定按钮(例如)解雇第一个。
没有收到“文件已成功接收”消息,请帮助我。将文件从客户端传输到服务器时,即使文件已收到,也不会显示该消息。 这是使用套接字将文件从客户端传输到服务器的程序,接口(interface)也是使用java
JOptionPane.showInputDialog 有一个不需要父组件参数的表单。 JOptionPane.showConfirmDialog 确实如此。这是为什么? 最佳答案 JOptionPa
我正在用 Java 创建一个基于 Tic Tac Toe GUI 的游戏,并且正在努力将 2D 数组与 JOptionPane 结合使用。到目前为止,我已经能够创建可供选择的按钮: import ja
使用 JOprionPane 时,光标出现了一些问题。我将光标设置到 pharent 框架,然后使用这个显示一个对话框: Object[] possibilities = {"ham", "spam"
我创建了一个打开 JOptionPane 的按钮。它允许用户输入 string..>> String str = JOptionPane.showInputDialog 如何获取用户输入到 jopti
该代码正在运行。但问题是,当选择 NO_OPTION 时,窗口就会被释放。我想在选择 NO_OPTION 时保留窗口?你能给点建议吗? int dialogButton = JOptionPa
我正在 Java 上开发 Tic Tac Toe 游戏(eclipse)。在我的计算机上,我的对话框非常小。我一直在努力把它做得更大。我没有任何运气。我希望这里有人能引导我走向正确的方向。下面的代码是
我正在使用脚本 API 为我玩的游戏的机器人制作脚本,但是每当我覆盖机器人管理器时,就会出现一个 JOptionPane 来阻止执行,直到我关闭它,但是我想在不运行该脚本的情况下运行此脚本人为干预,所
我正在用 Java 开发一个游戏,我试图在 JOptionPane 确认框打开时暂停它。这是代码: window.addWindowListener(new WindowAdapter() {
这个问题已经有答案了: Calling one JFrame from another using Timer without any buttons (1 个回答) 已关闭 9 年前。 需要帮助制作
很抱歉代码这么长,我只需要知道我缺少什么来初始化我的所有决定。编译器提示我的变量没有被初始化。谢谢你。 import javax.swing.JOptionPane; public class Sem
我想使用 JOptionPane 处理一些异常。这是主要方法: public class MainRun { public static void main(String args[]){
不允许使用数组,该函数正在工作,但只是返回 0,就好像它没有计算正确的输入字符一样,但现在它给了我一个“字符串超出范围:3” 这应该运行,打开一个窗口,要求我输入一个字符串,在本例中是一个单词,然后打
我正在使用 Jfilechooser,如果我选择文件,它将计算文件名的字符数,但是如果文件超过 3kb,它将限制 Joptionpane 将显示。我的问题是即使文件是0kb,Joptionpane也会
我创建了一个应用于框架的名为 addSupplier 的按钮,然后创建了一个操作监听器,因此一旦按下 addSupplier 按钮,它将创建一个 JOptionPane,其中有一个附加了 JTextF
我知道解决方案是使用 for 循环来逐步遍历数组并显示在 Pane 中。但是我没有找到对此的直接解释。我需要一个下一个和一个上一个按钮来显示每个数组元素,并且在按下下一个按钮时到达第一个元素后仅返回到
我是一名优秀的程序员,十分优秀!