Java 设置第二个ArrayList的值时,将覆盖ArrayList的ArrayList
我正在尝试制作一个战舰游戏,这是玩家设置棋盘的部分。当设置棋盘的第二个玩家做出自己的棋盘时,第一个玩家的棋盘与第二个玩家的棋盘相同(在玩游戏时,猜测该棋盘的位置是未命中的,但这是另一个问题,希望在完成后能够解决)。例如,如果我将第一个玩家的战舰设置为A1 A2 A3、B1 B2 B3和C1 C2 C3,然后将第二个玩家的战舰设置为D1 D2 D3、E1 E2 E3和F1 F2 F3,当两个战舰列表都打印出来时,我会得到两个战舰的D1 D2 D3、E1 E2 E3和F1 F2 F3。我在这里发现了其他问题,都有同样的问题,但他们总是有问题,因为他们没有每次都列出新的列表,而我是这样做的(至少我很确定我是这样做的),所以我找不到我的问题在哪里。这是整个主要的游戏类,GetShipLocations、SetShipLocations和PlayerMakeerBoard,这些函数给了我很多问题Java 设置第二个ArrayList的值时,将覆盖ArrayList的ArrayList,java,arraylist,Java,Arraylist,我正在尝试制作一个战舰游戏,这是玩家设置棋盘的部分。当设置棋盘的第二个玩家做出自己的棋盘时,第一个玩家的棋盘与第二个玩家的棋盘相同(在玩游戏时,猜测该棋盘的位置是未命中的,但这是另一个问题,希望在完成后能够解决)。例如,如果我将第一个玩家的战舰设置为A1 A2 A3、B1 B2 B3和C1 C2 C3,然后将第二个玩家的战舰设置为D1 D2 D3、E1 E2 E3和F1 F2 F3,当两个战舰列表都打印出来时,我会得到两个战舰的D1 D2 D3、E1 E2 E3和F1 F2 F3。我在这里发现了
import java.util.*;
import java.lang.*;
public class MainGame {
InputReader read = new InputReader();
Grid p1Board = new Grid();
Grid p2Board = new Grid();
Grid p1ShipsBoard = new Grid();
Grid p2ShipsBoard = new Grid();
ArrayList<Ship> p1Ships = new ArrayList<Ship>();
ArrayList<Ship> p2Ships = new ArrayList<Ship>();
String activePlayer = "P1";
public void SetUp() {
p1Board.PrepPrintGrid();
p2Board.PrepPrintGrid();
Ship ship1 = new Ship();
Ship ship2 = new Ship();
Ship ship3 = new Ship();
p1Ships.add(ship1);
p1Ships.add(ship2);
p1Ships.add(ship3);
p2Ships.add(ship1);
p2Ships.add(ship2);
p2Ships.add(ship3);
}
public void GameIntro() {
System.out.println("Welcome to battleship!");
String rulesOption = read.getUserInput("Do you need to see the rules?");
if(rulesOption.equals("Yes") || rulesOption.equals("yes"))
{
System.out.println("Put rules here");
}
System.out.println("Randomly determining which player goes first");
int random = (int) (Math.random() * 2);
if(random == 1)
{
activePlayer = "P2";
}
System.out.println(activePlayer + " starts!");
}
public ArrayList<ArrayList<String>> GetShipLocations(Grid board) {
ArrayList<ArrayList<String>> ships = new ArrayList<ArrayList<String>>();
ArrayList<String> ship1 = new ArrayList<String>();
ArrayList<String> ship2 = new ArrayList<String>();
ArrayList<String> ship3 = new ArrayList<String>();
ships.add(ship1);
ships.add(ship2);
ships.add(ship3);
String[] numbers = {"first", "second", "third"};
board.PrepPrintGrid();
board.PrintGrid();
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
String coordinate = read.getUserInput("Enter the " + numbers[j] + " coordinate of your " + numbers[i] + " ship (3 long):");
ships.get(i).add(coordinate);
board.SetGridDisplay(coordinate, "hit");
board.PrintGrid();
}
}
return ships;
}
public void SetShipLocations(ArrayList<Ship> ship, Grid activeBoard) {
ArrayList<ArrayList<String>> shipLocations = GetShipLocations(activeBoard);
for(int i = 0; i < 3; i++) {
ship.get(i).SetCells(shipLocations.get(i));
}
}
public void PlayersMakeTheirBoards() {
if(activePlayer.equals("P1"))
{
System.out.println("Hand the computer to player one.");
System.out.println("Player one, time to set your board.");
SetShipLocations(p1Ships, p1ShipsBoard);//the effects of this seem to maybe be overriden when the second board is set
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
System.out.println("Hand the computer to player two.");
System.out.println("Player two, time to set your board.");
SetShipLocations(p2Ships, p2ShipsBoard);
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
}
else
{
System.out.println("Hand the computer to player two.");
System.out.println("Player two, time to set your board.");
SetShipLocations(p2Ships, p2ShipsBoard);
/*for(int i = 0; i < 100; i++)
{
System.out.println("");
}*/
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
System.out.println("Hand the computer to player one.");
System.out.println("Player one, time to set your board.");
SetShipLocations(p1Ships, p1ShipsBoard);
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
for(int i = 0; i < /*100*/3; i++)
{
for(int j = 0; j < 3; j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
}
}
public void PlayTheGame() {
String guess = new String();
String result = new String();
for(int i = 0; i < 100; i++)
{
System.out.println("");
}
while(!p1Ships.isEmpty() && !p2Ships.isEmpty())
{
if(activePlayer.equals("P1"))
{
//print the grid
p1Board.PrintGrid();
//ask user for their guess
guess = read.getUserInput("Player one, enter your guess:");
for(Ship boat:p2Ships)
{
result = boat.CheckYourself(guess);
if(result.equals("hit"))
{
System.out.println(result + "!");
break;
}
if(result.equals("kill"))
{
System.out.println(result + "!");
p2Ships.remove(boat);
break;
}
}
if(result.equals("miss"))
{
System.out.println(result);
}
p1Board.SetGridDisplay(guess, result);
activePlayer = "P2";
}
else
{
p2Board.PrintGrid();
//ask user for their guess
guess = read.getUserInput("Player two, enter your guess:");
for(Ship boat:p1Ships)
{
result = boat.CheckYourself(guess);
if(result.equals("hit"))
{
System.out.println(result + "!");
break;
}
if(result.equals("kill"))
{
System.out.println(result + "!");
p1Ships.remove(boat);
break;
}
}
if(result.equals("miss"))
{
System.out.println(result);
}
p2Board.SetGridDisplay(guess, result);
activePlayer = "P1";
}
}
}
public void EndTheGame() {
String winner = new String();
if(p1Ships.isEmpty())
{
winner = "Player two";
p2Board.PrintGrid();
}
else
{
winner = "Player one";
p1Board.PrintGrid();
}
System.out.println("The game is over!");
System.out.println(winner + " wins! Congratulations!");
}
public static void main(String[] args) {
MainGame game = new MainGame();
game.SetUp();
game.GameIntro();
game.PlayersMakeTheirBoards();
game.PlayTheGame();
game.EndTheGame();
}
}
import java.util.*;
导入java.lang.*;
公共类主游戏{
InputReader read=新的InputReader();
网格p1Board=新网格();
网格板=新网格();
网格p1ShipsBoard=新网格();
网格p2ShipsBoard=新网格();
ArrayList=新的ArrayList();
ArrayList=新的ArrayList();
字符串activePlayer=“P1”;
公共作废设置(){
p1Board.PrepPrintGrid();
p2Board.PrepPrintGrid();
Ship ship1=新船();
Ship ship2=新船();
Ship ship3=新船();
p1.添加(第1次装运);
p1装运。添加(装运2);
p1装运。添加(装运3);
p2.添加(第1条);
p2.添加(第2条);
p2.添加(第3次装运);
}
公开游戏简介(){
System.out.println(“欢迎来到战舰!”);
String rulesOption=read.getUserInput(“您需要查看规则吗?”);
if(rulesOption.equals(“Yes”)| | rulesOption.equals(“Yes”))
{
System.out.println(“在此处放置规则”);
}
System.out.println(“随机决定哪位玩家先走”);
int random=(int)(Math.random()*2);
如果(随机==1)
{
activePlayer=“P2”;
}
System.out.println(activePlayer+“启动!”);
}
公共阵列列表GetShipLocations(网格板){
ArrayList ships=新的ArrayList();
ArrayList ship1=新的ArrayList();
ArrayList ship2=新的ArrayList();
ArrayList ship3=新的ArrayList();
船舶。添加(船舶1);
船舶。添加(船舶2);
船舶。添加(船舶3);
字符串[]数字={“第一”、“第二”、“第三”};
board.PrepPrintGrid();
PrintGrid();
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
字符串坐标=read.getUserInput(“输入“+numbers[i]+”船(3长):”的“+numbers[j]+”坐标);
ships.get(i).add(坐标);
board.SetGridDisplay(坐标,“命中”);
PrintGrid();
}
}
返回船舶;
}
公共无效设置装运位置(ArrayList装运、Grid activeBoard){
ArrayList shipLocations=GetShipLocations(activeBoard);
对于(int i=0;i<3;i++){
ship.get(i).SetCells(shipplocations.get(i));
}
}
公共无效玩家制作他们的棋盘(){
if(activePlayer.equals(“P1”))
{
System.out.println(“将计算机交给播放器1”);
System.out.println(“玩家一号,该设置你的棋盘了。”);
SetShipLocations(p1Ships,p1ShipsBoard);//当设置第二个板时,此操作的效果似乎会被覆盖
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
System.out.println(“将计算机交给播放器2”);
System.out.println(“第二个玩家,该设置你的棋盘了。”);
设置装运位置(p2Ships,p2ShipsBoard);
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
}
其他的
{
System.out.println(“将计算机交给播放器2”);
System.out.println(“第二个玩家,该设置你的棋盘了。”);
设置装运位置(p2Ships,p2ShipsBoard);
/*对于(int i=0;i<100;i++)
{
System.out.println(“”);
}*/
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
System.out.println(“将计算机交给播放器1”);
System.out.println(“玩家一号,该设置你的棋盘了。”);
设置装运位置(p1船、p1船板);
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p1Ships.get(i).cells.get(j));
}
}
对于(int i=0;i*100*/3;i++)
{
对于(int j=0;j<3;j++)
{
System.out.println(p2Ships.get(i).cells.get(j));
}
}
}
}
公共空间玩游戏{
字符串猜测=新字符串();
字符串结果=新字符串();
import java.util.*;
public class Ship {
ArrayList<String> cells = new ArrayList<String>();
//String name = new String();
public void SetCells(ArrayList<String> locations) {
cells = locations;
}
/*public void SetName(String word) {
name = word;
}*/
public String CheckYourself(String guess) {
if(cells.contains(guess))
{
cells.remove(guess);
if(cells.isEmpty())
{
return "kill";
}
else
{
return "hit";
}
}
return "miss";
}
}
public void SetUp() {
p1Board.PrepPrintGrid();
p2Board.PrepPrintGrid();
Ship ship1 = new Ship();
Ship ship2 = new Ship();
Ship ship3 = new Ship();
p1Ships.add(ship1);
p1Ships.add(ship2);
p1Ships.add(ship3);
p2Ships.add(ship1);
p2Ships.add(ship2);
p2Ships.add(ship3);
}