Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 10

Указатели?

24.06.2010, 00:41. Показов 1096. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте.
джаву начал изучать не так давно, так что столкнулся с проблемой, и не знаю как решить.

задача - написанае шахмат.
собственно проблема:
есть класс ChCell
есть класс ChFigure
у класса ChCell есть поле ChCell.figure, которое должно хранить ссылку на объект фигуры, стоящей на этой клетке

если бы я писал на С++, то просто вставил бы указатель *ChFigure
а что делать на джаве?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2010, 00:41
Ответы с готовыми решениями:

Существуют ли в Java указатели?
В C++ есть *, в C# есть ref, а в Java есть указатели или что-то подобное? Облазил интернет и ничего не нашел!

java и указатели
Сегодня спорили с одногруппником по теме java и указатели. Он говорит, что в java указателей просто не существует, а я говорит что они...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

6
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
24.06.2010, 00:45
У всех начинающих джава программистов (перешедших с C/C++) возникает этот вопрос. Я когда-то был в ужасе, когда вдруг мне понадобилось написать связный список . Так вот: ВСЕ переменные, какие есть у тебя, кроме примитивных типов, ты можешь считать указателями. И работать как с указателями. На самом деле ссылки, конечно, но смысл-то примерно тот же. И если тебе хочется получить *ChFigure, ты пишешь и используешь просто ChFigure. Вот и все.
1
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 10
24.06.2010, 01:11  [ТС]
спсибо, буду знать
просто объявление
MyClass MyObject
несколько пугает, кажется что будет создаваться новый объект, а не использоваться ссылка
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
24.06.2010, 01:13
Привыкайте . Шахматы-то дадите посмотреть?
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 10
24.06.2010, 01:16  [ТС]
до конца еще долго, плюс надо изучать гуи =(
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
24.06.2010, 01:19
Ну, sun's java tutorial и Хорстмана вам в помощь . Я просто тоже вроде как делаю игрушку на доске на java. И тоже до конца еще долго...
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
24.06.2010, 01:29
elenhi, у меня есть наброски шахмат, когда-то писал, потом из-за недостатка времени забросил. Вот код:

Main.java
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
public class Main extends IOStream
{
    public static void main(String[] args)
    {
        jar = false;
        new Rook(Figure.Side.right, Figure.Color.white);
        new Rook(Figure.Side.left, Figure.Color.white);
        new Rook(Figure.Side.right, Figure.Color.black);
        new Rook(Figure.Side.left, Figure.Color.black);
        for(short i = 0; i < 8; ++i)
        {
            new Pawn(i, Figure.Color.black);
            new Pawn(i, Figure.Color.white);
        }
        new Knight(Figure.Side.right, Figure.Color.white);
        new Knight(Figure.Side.left, Figure.Color.white);
        new Knight(Figure.Side.right, Figure.Color.black);
        new Knight(Figure.Side.left, Figure.Color.black);
        Figure.PrintBoard();
        int m, h, v, h1, v1;
        int i = 1;
        for(;;)
        {
            Print("0 - Выход;\n1 - Следующий ход;\nВаш выбор:\n> ");
            m = ReadInt(0, 1);
            if(m == 0)
                Exit();
            else
            {
                Print("\nВведите координаты фигуры:\nВведите горизонталь\n> ");
                h = ReadInt(1, 8);
                Print("Введите вертикаль\n> ");
                v = ReadInt(1, 8);
                Print("\nВведите координаты хода:\nВведите горизонталь\n> ");
                h1 = ReadInt(1, 8);
                Print("Введите вертикаль\n> ");
                v1 = ReadInt(1, 8);
                
                if(Figure.Move(h, v, new Location(h1, v1), i))
                    ++i;
                Figure.PrintBoard();
            }
        }
    }
}

IOStream.java
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
223
224
225
226
227
228
229
230
231
232
class IOStream
{
    static boolean jar; 
    static private java.io.BufferedReader jin = 
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    static private String buf;
    static String ReadString()
    {
        try 
        {
            buf = jin.readLine();
        } 
        catch (java.io.IOException e) 
        {
            buf = "null";
        }
        return buf;
    }
    static double ReadDouble()
    {
        double buf;
        try 
        {
            buf = Double.parseDouble(jin.readLine());
        } 
        catch (java.io.IOException e) 
        {
            buf = 0.0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadDouble();
        }
        return buf;
    }
    static int ReadInt()
    {
        int buf;
        try 
        {
            buf = Integer.parseInt(jin.readLine());
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadInt();
        }
        return buf;
    }
    static short ReadShort()
    {
        short buf;
        try 
        {
            buf = Short.parseShort(jin.readLine());
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadShort();
        }
        return buf;
    }
    static byte ReadByte()
    {
        byte buf;
        try 
        {
            buf = Byte.parseByte((jin.readLine()));             
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadByte();
        }
        return buf;
    }
    static boolean ReadBool()
    {
        boolean buf1;
        try 
        {
            buf = jin.readLine();
            if(Boolean.parseBoolean(buf))
                return true;
            else
                if(buf.equalsIgnoreCase("false"))
                    return false;
                else
                    throw new Exception();
        } 
        catch (Exception e) 
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf1 = ReadBool();
        }
        return buf1;
    }
    static void Print(String text)
    {
        if(jar)
            System.out.print(Repl(text));
        else
            System.out.print(text);
    }
    static void PrintLine(String text)
    {
        if(jar)
            System.out.println(Repl(text));
        else
            System.out.println(text);
    }
    static void PrintLine()
    {
        System.out.println();
    }
    static protected void Pause()
    {
        try 
        {
            Print("\nДля продолжения нажмите Enter...");
            buf = jin.readLine();
        } 
        catch (java.io.IOException e) 
        {
        }
    }
    static protected void Exit()
    {
        Print("Выход...");
        Pause();
        System.exit(0);
    }
    static short ReadShort(short infinum, short supremum)
    {
        short buf;
        try 
        {
            buf = Short.parseShort(jin.readLine());
            if(buf < infinum || buf > supremum)
                throw new NumberFormatException();
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadShort(infinum, supremum);
        }
        return buf;
    }
    static byte ReadByte(byte infinum, byte supremum)
    {
        byte buf;
        try 
        {
            buf = Byte.parseByte((jin.readLine()));    
            if(buf < infinum || buf > supremum)
                throw new NumberFormatException();
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadByte(infinum, supremum);
        }
        return buf;
    }
    static int ReadInt(int infinum, int supremum)
    {
        int buf;
        try 
        {
            buf = Integer.parseInt(jin.readLine());
            if(buf < infinum || buf > supremum)
                throw new NumberFormatException();
        } 
        catch (java.io.IOException e) 
        {
            buf = 0;
        }
        catch(NumberFormatException e)
        {
            Print("Введены некорректные данные, повторите ввод!\n");
            buf = ReadInt(infinum, supremum);
        }
        return buf;
    }
    static String Repl(String text)
    {
        String []LRus = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й",
                        "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф",
                        "х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я" };
        
        String []URus = {"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "К",
                         "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф",
                         "Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ы", "Ъ", "Э", "Ю", "Я" };
        
        String []LEng = {"a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k",
                         "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts",
                         "ch", "sh", "sch", "'", "y", "'", "e", "ju", "ja" }; 
        
        String []UEng = {"A", "B", "V", "G", "D", "E", "Jo", "Zh", "Z", "I", "J", "K",
                          "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts",
                          "Ch", "Sh", "Sch", "'", "Y", "'", "E", "Ju", "Ja" };
        byte index;
        for(index = 0; index < 33; ++index)
        {
            text = text.replace(LRus[index], LEng[index]);
            text = text.replace(URus[index], UEng[index]);
        }
        return text;
    }
}

Figure.java
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
public abstract class Figure     
{
    enum Side { right, left };
    enum Color { white, black };
    boolean IsALive() { return true; };
    boolean Move(Location lc) { return true; };
    void PrintPos(){};
    void Die(){};
    Location getLocation() { return (new Location(0, 0)); };
    public Color getColor() { return Color.black; }
    static protected String[][] Board = {{"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"},
                                           {"--", "--", "--", "--", "--", "--", "--", "--"}};
    static Figure[][] _Figure = {{null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null},
                                 {null, null, null, null, null, null, null, null}};
    protected static void Matr(Figure fg)
    {
        Location lc = fg.getLocation();
        _Figure[lc.h][lc.v] = fg;
    }
    static void PrintBoard()
    {
        IOStream.PrintLine("\nДоска");
        for(int i = 0; i < 8; ++i, IOStream.PrintLine())
            for(int j = 0; j < 8; ++j)
                IOStream.Print(Board[i][j] + " ");
    }
    static void PrintF() // Debug Object
    {
        for(int i = 0; i < 8; ++i, IOStream.PrintLine())
            for(int j = 0; j < 8; ++j)
                if(_Figure[i][j] == null)
                    IOStream.Print("null\t");
                else
                    IOStream.Print(_Figure[i][j].toString().split("@")[0].concat("\t"));
    }
    static boolean Move(int h, int v, Location loc, int i)
    {
        --h;
        --v;
        if(_Figure[h][v] != null)
            if((_Figure[h][v].getColor() == Color.white && (i & 1) == 1) ||
               (_Figure[h][v].getColor() == Color.black && (i & 1) == 0))
                return _Figure[h][v].Move(loc);
            else
            {
                IOStream.PrintLine("\nСейчас не ваш ход!");
                return false;
            }
        else
        {
            IOStream.PrintLine("На этой клетке фигуры отсутствуют!");
            return false;
        }
    }
}

Rook.java
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
public class Rook extends Figure 
{
    private Location loc = new Location(0, 0);
    private Color color;
    
    public void setLocation(short h, short v)
    {
        loc.h = h;
        loc.v = v;
    }
    public Location getLocation()
    {
        return loc;
    }
    public Color getColor()
    {
        return color;
    }
 
    Rook(Side sd, Color clr)
    {
        color = clr;
        if(sd.equals(Side.right))
            loc.v = 7;
        else
            loc.v = 0;
        if(clr.equals(Color.white))
            loc.h = 7;
        else
            loc.h = 0;
        Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
        Matr(this);
    }
    Rook(int h, int v, Color clr)
    {
        loc.h = (short)(h - 1);
        loc.v = (short)(v - 1);
        color = clr;
        Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
        Matr(this);
    }
    
    boolean IsALive()
    {
        return (loc.h != -1 && loc.v != -1) ? true : false;
    }
    void Die()
    {
        IOStream.PrintLine("\nЛадья убита!");
        loc.h = loc.v = -1;
    }
    void PrintPos() // Debug Object
    {
        if(loc.h != -1)
        {
            IOStream.PrintLine("\nПоложение ладьи на доске:");
            short i, j;
            for(i = 0; i < 8; ++i, IOStream.PrintLine())            
                for(j = 0; j < 8; ++j)
                    if(i != loc.h || j != loc.v)
                        IOStream.Print("-- ");
                    else
                        IOStream.Print(color.equals(Color.white) ? "WR " : "BR ");
        }
        else
            IOStream.PrintLine("\nЛадья уже мертва!");
    }
    boolean Move(Location lc)
    {
        --lc.h;
        --lc.v;
        if(lc.v >= 0 && lc.v < 8 && lc.h >= 0 && lc.h < 8 &&
          ((lc.h != loc.h && lc.v == loc.v) || (lc.v != loc.v && lc.h == loc.h)))
        {
            int i;
            boolean fh = true, fv = true;
            C: for(int j = 0; j < 1; ++j)
            {
                if(lc.v == loc.v && lc.h != loc.h)
                    if(loc.h > lc.h)
                    {
                        for(i = lc.h + 1; i < loc.h; ++i)
                            if(_Figure[i][loc.v] != null )
                            {
                                IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
                                fh = false;
                                break C;
                            }
                    }
                    else
                        for(i = loc.h + 1; i < lc.h; ++i)
                            if(_Figure[i][loc.v] != null)
                            {
                                IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
                                fh = false;
                                break C;
                            }
                if(lc.v != loc.v && lc.h == loc.h)
                    if(loc.v > lc.v && fh)
                    {
                        for(i = lc.v + 1; i < loc.v; ++i)
                            if(_Figure[loc.h][i] != null)
                            {
                                IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
                                fv = false;
                                break C;
                            }
                    }
                    else
                        for(i = loc.v + 1; i < lc.v; ++i)
                            if(_Figure[loc.h][i] != null)
                            {
                                IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
                                fv = false;
                                break C;
                            }
                if(!(fh && fv))
                    return false;
            }
            if(fh && fv && _Figure[lc.h][lc.v] != null &&
              ((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
              (_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black))))
            {
                _Figure[lc.h][lc.v].Die();
                Board[loc.h][loc.v] = "--";
                _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
                _Figure[loc.h][loc.v] = null;
                loc.h = lc.h;
                loc.v = lc.v;
                Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
                return true;
            }
            else
                if(fh && fv && _Figure[lc.h][lc.v] == null)
                {
                    Board[loc.h][loc.v] = "--";
                    _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
                    _Figure[loc.h][loc.v] = null;
                    loc.h = lc.h;
                    loc.v = lc.v;
                    Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
                    return true;
                }
                else
                    if(fh && fv)
                    {
                        IOStream.PrintLine("\nНевозможно убить свою фигуру");
                        return false;
                    }
        }
        else
        {
            IOStream.PrintLine("\nВведены неверные координаты!");
            return false;
        }
        return false;
    }
}

Knight.java
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
public class Knight extends Figure 
{
    private Location loc = new Location(0, 0);
    private Color color;
    
    public void setLocation(short h, short v)
    {
        loc.h = h;
        loc.v = v;
    }
    public Location getLocation()
    {
        return loc;
    }
    public Color getColor()
    {
        return color;
    }
    
    Knight(Side sd, Color clr)
    {
        color = clr;
        if(sd.equals(Side.right))
            loc.v = 6;
        else
            loc.v = 1;
        if(clr.equals(Color.white))
            loc.h = 7;
        else
            loc.h = 0;
        Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
        Matr(this);
    }
    Knight(int h, int v, Color clr)
    {
        loc.h = (short)(h - 1);
        loc.v = (short)(v - 1);
        color = clr;
        Matr(this);
    }
    
    boolean IsALive()
    {
        return (loc.h != -1 && loc.v != -1) ? true : false;
    }    
    void Die()
    {
        IOStream.PrintLine("\nКонь убит!");
        loc.h = loc.v = -1;
    }
    void PrintPos()
    {
        if(loc.h != -1)
        {
            IOStream.PrintLine("\nПоложение коня на доске:");
            short i, j;
            for(i = 0; i < 8; ++i, IOStream.PrintLine())
                for(j = 0; j < 8; ++j)
                    if(i != loc.h || j != loc.v)
                        IOStream.Print("-- ");
                    else
                        IOStream.Print(color.equals(Color.white) ? "WK " : "BK ");
        }
        else
            IOStream.PrintLine("\nКонь уже давно умер и без вас!");
    }
    boolean Move(Location lc)
    {
        --lc.h;
        --lc.v;
        if(lc.v >= 0 && lc.v < 8 && lc.h >= 0 && lc.h < 8)
        {
            boolean flag = true;
            if((!(lc.h == loc.h - 1 && lc.v == loc.v - 2) && !(lc.h == loc.h - 2 && lc.v == loc.v - 1)) &&
              (!(lc.h == loc.h - 2 && lc.v == loc.v + 1) && !(lc.h == loc.h - 1 && lc.v == loc.v + 2)) &&
              (!(lc.h == loc.h + 1 && lc.v == loc.v + 2) && !(lc.h == loc.h + 2 && lc.v == loc.v + 1)) &&
              (!(lc.h == loc.h + 2 && lc.v == loc.v - 1) && !(lc.h == loc.h + 1 && lc.v == loc.v - 2)))
                flag = false;
                    
            if(flag)
                if((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
                   (_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black)))
                {
                    _Figure[lc.h][lc.v].Die();
                    Board[loc.h][loc.v] = "--";
                    _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v]; 
                    _Figure[loc.h][loc.v] = null;
                    loc.h = lc.h;
                    loc.v = lc.v;
                    Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
                    return true;
                }
                else
                    if(Board[lc.h][lc.v].equals("--"))
                    {
                        Board[loc.h][loc.v] = "--";
                        _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v]; 
                        _Figure[loc.h][loc.v] = null;
                        loc.h = lc.h;
                        loc.v = lc.v;
                        Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
                        return true;
                    }
                    else
                    {
                        IOStream.PrintLine("\nНевозможно убить свою фигуру");
                        return false;
                    }
            else
            {
                IOStream.PrintLine("\nВведены неверные координаты!");
                return false; 
            }
        }
        else
        {
            IOStream.PrintLine("\nВведены неверные координаты!");
            return false;
        }
    }    
}

Pawn.java
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
public class Pawn extends Figure 
{
    private Location loc = new Location(0, 0);
    private Color color;
    
    public void setLocation(short h, short v)
    {
        loc.h = h;
        loc.v = v;
    }
    public Location getLocation()
    {
        return loc;
    }
    public Color getColor()
    {
        return color;
    }
 
    Pawn(short side, Color clr)
    {
        color = clr;
        loc.v = side;
        if(clr.equals(Color.white))
            loc.h = 6;
        else
            loc.h = 1;
        Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
        Matr(this);
    }
    Pawn(int h, int v, Color clr)
    {
        loc.h = (short)(h - 1);
        loc.v = (short)(v - 1);
        color = clr;
        Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
        Matr(this);
    }
    
    boolean IsALive()
    {
        return (loc.h != -1 && loc.v != -1) ? true : false;
    }
    void Die()
    {
        IOStream.PrintLine("\nПешка убита!");
        loc.h = loc.v = -1;
    }
    void PrintPos() // Debug Object
    {
        if(loc.h != -1)
        {
            IOStream.PrintLine("\nПоложение пешки на доске:");
            short i, j;
            for(i = 0; i < 8; ++i, IOStream.PrintLine())            
                for(j = 0; j < 8; ++j)
                    if(i != loc.h || j != loc.v)
                        IOStream.Print("-- ");
                    else
                        IOStream.Print(color.equals(Color.white) ? "WR " : "BR ");
        }
        else
            IOStream.PrintLine("\nПешка уже мертва!");
    }
    boolean Move(Location lc)
    {
        --lc.h;
        --lc.v;
        if(lc.v >= 0 && lc.v < 8 && lc.h > 0 && lc.h < 7 && 
          ((loc.h == 1 && color.equals(Color.black) && lc.h == 3 && lc.v == loc.v &&
                  _Figure[3][lc.v] == null && _Figure[2][lc.v] == null) ||
          (loc.h == 6 && color.equals(Color.white) && lc.h == 4 && lc.v == loc.v &&
                  _Figure[4][lc.v] == null && _Figure[5][lc.v] == null) ||
                  
          (loc.h >= 1 && color.equals(Color.black) && lc.h - loc.h == 1 && lc.v == loc.v && 
                  _Figure[lc.h][lc.v] == null) ||
          (loc.h <= 6 && color.equals(Color.white) && loc.h - lc.h == 1 && lc.v == loc.v &&
                  _Figure[lc.h][lc.v] == null) ||
                  
          (loc.h >= 1 && color.equals(Color.black) &&
                  lc.h - loc.h == 1 && Math.abs(lc.v - loc.v) == 1 &&
                  _Figure[lc.h][lc.v] != null) ||
          (loc.h <= 6 && color.equals(Color.white) &&
                  loc.h - lc.h == 1 && Math.abs(lc.v - loc.v) == 1 &&
                  _Figure[lc.h][lc.v] != null)))
        {
            
            if(_Figure[lc.h][lc.v] != null &&
              ((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
              (_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black))))
            {
                _Figure[lc.h][lc.v].Die();
                Board[loc.h][loc.v] = "--";
                _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
                _Figure[loc.h][loc.v] = null;
                loc.h = lc.h;
                loc.v = lc.v;
                Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
                return true;
            }
            else
                if(_Figure[lc.h][lc.v] == null)
                {
                    Board[loc.h][loc.v] = "--";
                    _Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
                    _Figure[loc.h][loc.v] = null;
                    loc.h = lc.h;
                    loc.v = lc.v;
                    Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
                    return true;
                }
                else
                {
                    IOStream.PrintLine("\nНевозможно убить свою фигуру");
                    return false;
                }
        }
        else
        {
            IOStream.PrintLine("\nВведены неверные координаты!");
            return false;
        }
    }
}

Location.java
Java
1
2
3
4
5
6
7
8
9
10
public class Location 
{
    short h;
    short v;
    Location(int h, int v)
    {
        this.h = (short)h;
        this.v = (short)v;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2010, 01:29
Помогаю со студенческими работами здесь

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++,...

В matlab есть указатели на переменные или что-нибудь похожее на указатели?
Здравствуйте, в matlab есть указатели на переменные? или что-нибудь похожее на указатели? нужно хранить в объекте информацию: на...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком
Смысл задания в том, что нужно отсортировать массив структур из 3х полей по сумме координат есть структура struct XYZ{ ...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru