Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 1
Регистрация: 15.06.2013
Сообщений: 83

Цель - написать графические шахматы (без ИИ). С чего начать?

02.02.2015, 15:21. Показов 1824. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, дано задание:

Игра Шахматы. Реализовать класс «Игровое поле», иерархию «Фигура»-«Конкретная фигура». Реализовать метод вывода фигуры на экран. Класс «Фигура» должен содержать виртуальную функцию проверки допустимости указанного хода, а классы для конкретных фигур – ее реализации с учетом правил выполнения ходов для каждого вида фигуры. Для класса «Игровое поле» определить методы запроса хода (поочередно для противников), выполнения хода, «съедания» фигуры противника, вывода сообщения о нахождении фигуры под боем, шахе и мате. Предусмотреть возможность сохранения и загрузки игры с помощью ввода/вывода в поток.

не знаю,элементарно, c чего начать... подскажите пожалуйста!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.02.2015, 15:21
Ответы с готовыми решениями:

с чего начать чайнику (цель - сайт с простенькой игрой)
здравствуйте, прошу совета с чего начать есть цель - сделать сайт с простенькой игрой (графика на уровне Масяни), типа тамагочи...

с чего начать новичку С++ без опыта работы?
Такая проблема. Есть человек, прочитал 2 книжки по языку С++. Программистом конечно не назовёшь, но так, кодер нормальный. Как развиваться...

Подскажите с чего начать. Простенькие браузерные игры без flash
Привет, народ! Пожалуйста, подскажите что мне нужно изучить для того чтобы писать простенькие браузерные игры без использования flash....

6
91 / 91 / 44
Регистрация: 20.04.2008
Сообщений: 331
02.02.2015, 15:28
Абстрактный класс Фигура с одним виртуальным методом. Для каждой фигуры создаешь потом класс, реализуя в нем класс Фигура и тот самый виртуальный метод. Вообще довольно серьезное задание таки...
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
02.02.2015, 15:35
Цитата Сообщение от Sergey_Yysmaa Посмотреть сообщение
не знаю,элементарно, c чего начать
Почитайте про ооп.
Когда освоите, начинайте создавать классы. Прям сразу всё продумать не нужно, переходите от общего к частному, думайте об архитектуре.
С графикой не торопитесь, не надо к ней привязываться.
Сохранения и загрузка это уже под конец.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2015, 17:58
Sergey_Yysmaa, Вот вам заготовочка, дальше попробуйте сами
Вложения
Тип файла: rar Chess.Net.rar (25.6 Кб, 63 просмотров)
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
02.02.2015, 18:24
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

А вот моя затравочка:
C#
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
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication236
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var field = new Field();
            var pn = new FieldPanel {Field = field, Parent = this, Dock = DockStyle.Fill};
        }
    }
 
    class Field
    {
        public Dictionary<Point, Figure> Figures = new Dictionary<Point, Figure>();
        public List<Figure> DeadFigures = new List<Figure>();
 
        public bool IsInside(Point pos)
        {
            if (pos.X < 0 || pos.X > 7 || pos.Y < 0 || pos.Y > 7)
                return false;
            return true;
        }
 
        public Field()
        {
            for (int i = 0; i < 8; i++)
                new Pawn(this, Player.White, new Point(i, 1));
            for (int i = 0; i < 8; i++)
                new Pawn(this, Player.Black, new Point(i, 6));
        }
 
        public Figure this[Point pos]
        {
            get
            {
                Figure res = null;
                Figures.TryGetValue(pos, out res);
                return res;
            }
        }
    }
 
    abstract class Figure
    {
        public Player Player { get; private set; }
        public Point Position { get; private set; }
        public bool IsAlive { get; set; }
        public abstract IEnumerable<Point> GetMovePositions();
        public abstract IEnumerable<Point> GetAttackPositions();
        public Field Field { get; private set; }
 
        public bool CanAttackPosition(Point pos)
        {
            foreach (var p in GetAttackPositions())
                if (p == pos)
                    return true;
 
            return false;
        }
 
        public Figure(Field field, Player player, Point pos)
        {
            IsAlive = true;
            Player = player;
            Position = pos;
            Field = field;
            field.Figures.Add(pos, this);
        }
    }
 
    class Pawn : Figure
    {
        public Pawn(Field field, Player player, Point pos): base(field, player, pos)
        {
        }
 
        public override IEnumerable<Point> GetMovePositions()
        {
            var dir = Player == Player.White ? 1 : -1;
            var step1 = new Point(Position.X, Position.Y + dir);
            if (Field.IsInside(step1) && Field[step1] == null)
                yield return step1;
 
            if((Position.X == 1 && Player == Player.White) || (Position.X == 6 && Player == Player.Black))
            {
                var step2 = new Point(Position.X, Position.Y + 2 * dir);
                if (Field.IsInside(step2) && Field[step2] == null)
                    yield return step2;
            }
        }
 
        public override IEnumerable<Point> GetAttackPositions()
        {
            var dir = Player == Player.White ? 1 : -1;
            var step1 = new Point(Position.X + 1, Position.Y + dir);
            if (Field.IsInside(step1))
                yield return step1;
 
            var step2 = new Point(Position.X - 1, Position.Y + dir);
            if (Field.IsInside(step2))
                yield return step2;
        }
    }
 
    class FieldPanel : UserControl
    {
        public Field Field { get; set; }
 
        public FieldPanel()
        {
            SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            Render(e.Graphics);
        }
 
        public void Render(Graphics g)
        {
            var rect = ClientRectangle;
            rect.Inflate(-10, -10);
 
            var dX = rect.Width / 8f;
            var dY = rect.Height / 8f;
 
            //render field
            g.FillRectangle(Brushes.White, rect);
            g.DrawRectangle(Pens.Black, rect);
 
            for (int i = 0; i < 8*9; i++)
            {
                if (i % 2 == 0 || (i % 9) > 7) continue;
                var x = (i % 9) * dX;
                var y = (i / 9) * dY;
                g.FillRectangle(Brushes.Black, rect.Left + x,  rect.Top + y, dX, dY);
            }
 
            //render figures
            foreach(var f in Field.Figures.Values)
            {
                var y = rect.Bottom - (f.Position.Y + 1)*dY;
                var x = rect.Left + f.Position.X*dX;
                g.DrawString(f.GetType().Name[0].ToString(), Font, f.Player == Player.White ? Brushes.Red : Brushes.Blue, new RectangleF(x, y, dX, dY), new StringFormat{Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center});
            }
        }
    }
 
    enum Player
    {
        White, Black
    }
}
3
02.02.2015, 19:04

Не по теме:

Вы же его самого интересного лишили :)

0
02.02.2015, 19:06

Не по теме:

Цитата Сообщение от tarasalk Посмотреть сообщение
Вы же его самого интересного лишили
А нам тоже интересно :p

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.02.2015, 19:06
Помогаю со студенческими работами здесь

Удаление файла без возможности его удаления. Подскажите, с чего начать.
есть задачка удаление файла без возможности его удаления, подскажите с чего начать? и нужно ли использовать WinAPI ? может что...

Написать простенькую 2д игру но не знаю с чего начать
я студент заканчиваю 2 курс института захотелось написать простенькую 2д игру но не знаю с чего начать. Есть базовые знания с++ такие как...

Задание написать Messenger помогите с чего начать?
Задание по заданному создать ПО с помощью которого можно отправлять и принимать сообщения.Помогите не знаю с чего начинать?

Как написать простенький total comander? с чего начать?
help

Как написать веб приложение "Виртуальный блокнот"? Подскажите с чего можно начать, чтобы написать такое?
Как написать веб приложение &quot;Виртуальный блокнот&quot;: Пользователь заходит на сайт. Затем нажимает кнопку добавить, вводит имя файла и его...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru