powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вечный поиск координат кораблей в игре - Java
2 сообщений из 2, страница 1 из 1
Вечный поиск координат кораблей в игре - Java
    #39584740
FoxCS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Решил написать свою первую игрушку на java ("Морской бой").
Но,столкнулся с проблемой расстановки кораблей .Проблема заключается в том ,что цикл поиска верных координат работает бесконечно .Очень долго буксую на этой проблеме и исчерпал свои идеи .
Буду очень благодарен за ваши идеи и помощь
Cам код :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
public class Ships {
    //Constructers
    public Ships(){}//Default
    
    public Ships(int x,int y,int paluba,int r){
       if(x+paluba<=10){
        if(r==1)
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   x++;
        }else{
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   
        
        }
    }
    }else{
    if(r==1)
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   x--;
        }else{
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   
        
        }
    }
    }
    
    
    
    
   
 if(y+paluba<=10){
        if(r==1){
    for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
    }
      }else{
        for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
     y++;
        } 
        
   }
 }else{
 if(r==1){
 for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
    }
 }else{
  for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
     y--;
    }
 
 }
 
 } 
    }
  //Массив кораблей
    static ArrayList<Ships> boat=new ArrayList<Ships>(10);
   //Конечные координаты кораблей после проверки
     ArrayList<Integer> X=new ArrayList<Integer>();
     ArrayList<Integer> Y=new ArrayList<Integer>();
  //
  //Первичные координаты
 static ArrayList<Integer> BuferX=new ArrayList<Integer>();
 static  ArrayList<Integer> BuferY=new ArrayList<Integer>(); 
  //
    static Integer x=0;
    static Integer y=0;
   static  Integer r=0;
static int ObgectChetchik=0;
   public static void random(int paluba){

//Стартовые координаты 
//@param r (горизонтальное/вертикальное расположение корабля)
      y = 1 + (int) (Math.random() * 10);
      x = 1 + (int) (Math.random() * 10);
      r = 1 + (int) (Math.random() * 2);
      
     if(x+paluba<=10){
        if(r==1)
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   x++;
        }else{
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   
        
        }
    }
    }else{
    if(r==1)
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   x--;
        }else{
        for(int i=0;i<paluba;i++){
     BuferX.add(i,x);
   
        
        }
    }
    }
 if(y+paluba<=10){
        if(r==1){
    for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
    }
      }else{
        for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
     y++;
        } 
        
   }
 }else{
 if(r==1){
 for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
    }
 }else{
  for(int i=0;i<paluba;i++){
     BuferY.add(i,y);
     y--;
    }
 
 }
 
 }
        System.out.println("BuferXPreCheck = "+BuferX);
         System.out.println("BuferYPreCheck = "+BuferY);
   
    }
   

public void t(){
    Ships sh=new Ships();
    int poluba=4;
      int chetchik=0;
   int flag=-1;
   //Цикл создание кораблей
 for(int ship=1;ship<=4;ship++){
 sh.random(poluba);
while (chetchik<ship){
 flag=sh.Managercheck(x, y, poluba, r);
if(flag==0){
            chetchik++;
           
           boat.add(ObgectChetchik,new Ships(x,y,poluba,r));
            ObgectChetchik++;
            if(ship>1 && chetchik!=ship) {
                sh.random(poluba);
            }
            
        }else{
            sh.random(poluba);
        }

    }
  poluba--;
  
  }
 }
    
  
  public static int Managercheck(int x,int y,int paluba,int r){
     int CheckIndex_1=0;
     int CheckIndex_2=0;
      if(paluba==4){
          //Первый корабль можно разместить в любое место
          //Поэтому корабль сразу добавляется
          
          return 0;
      }
for(int k=0;k<=BuferX.size()-paluba-2;k++){
    //Цикл 1:Проверка недопустимого расположения координат по оси X
    //Если разница в массиве между элементами кораблей == 0 || 1 ,то CheckIndex_1++
		  int check=BuferX.get(k);
           for(int j=paluba;j<=BuferX.size()-1;j++){
                      
			  if(Math.abs(check-BuferX.get(j))<=1 ){
				  CheckIndex_1++;
				  }
			  }
      }
      
      for(int k=0;k<=BuferY.size()-paluba-2;k++){
		  int check=BuferY.get(k);
    //Цикл 2:Проверка недопустимого расположения координат по оси Y
   //Если разница в массиве между элементами кораблей == 0 || 1 ,то CheckIndex_2++
		  for(int j=paluba;j<=BuferY.size()-1;j++){
			  if(Math.abs(check-BuferY.get(j))<=1 ){
				   CheckIndex_2++;
				  }
			  }
      }
     
      if(CheckIndex_2!=0 && CheckIndex_1!=0){ 
          //Если исключение сработало для оси X и Y
          //Тогда удаляем координаты,нового корабля 
          for(int rem=0;rem<=paluba-1;rem++){
          BuferY.remove(0);
          
          }
                                    for(int rem=0;rem<=paluba-1;rem++){
          BuferX.remove(0);
          
          }
          
          
          return 10;
      }
   
     return 0;
   }
}


Всем заранее спасибо :)
...
Рейтинг: 0 / 0
Вечный поиск координат кораблей в игре - Java
    #39584835
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прежде чем вываливать такое на форум нужно потратить чуть больше времени на самообразование
- Пошаговая отладка кода
https://www.jetbrains.com/help/idea/debugging-your-first-java-application.html
- Форматирование и соглашение о кодировании
https://www.jetbrains.com/help/idea/editor-basics.html#reformat_rearrange_code
https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
- Переиспользование кода
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Никто не знает вашего алгоритма. А для того чтобы понять его из такого кода нужно приложить немало усилий. Всё равно что рукопись школьника разбирать. Занятие не из приятных.

Начните хотя бы с самого простого и нужного - пошаговой отладки.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вечный поиск координат кораблей в игре - Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]