Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
-Arabella-
0 / 0 / 1
Регистрация: 20.10.2013
Сообщений: 233
1

Создание шахматного поля

10.10.2014, 20:01. Просмотров 3287. Ответов 7
Метки нет (Все метки)

Добрый вечер. Я пытаюсь написать простую игру шахматы в ООП, с графикой. Начала с создание доски и описания классов: поле(field) и клетки черные и белые(cell). Я не очень понимаю как использовать графику. Хочу создать поле как массив клеток 8х8. Я попыталась описать классы, вот что получилось. Помогите, пожалуйста, дописать, чтобы строились клетки. Я понимаю, что это делается как-то через функции bar или Rectangle?
C++ (Qt)
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
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
 
class Cell // класс Клеток
{
      public: // делаю его видимым другим классам
      Cell(int x,int y,int c={WHITE,BLACK}); // конструктор параметров: координаты х,у и цвет
      {}
}
 
 
class Field // класс поле
{
      protected:
      int x,y,size; // координаты х,у и размер поля
      Cell f[8][8]; // массив клеток
      public: 
      Field(int ix,int iy,int isize) // конструктор
      {
              x=ix;
              y=iy;
              size=isize;
      for(int i=0;i<8;i++) // здесь как-бы начинается построение клеток
          for(int j=0;j<8;j++)    
              f[i][j] 
      }                  
};
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2014, 20:01
Ответы с готовыми решениями:

Определить цвет клетки шахматного поля
Известно, что шахматная доска имеет размерность 8х8 и состоит из клеток 2х цветов(черного и...

Определить цвет шахматного поля, заданного в стандардной нотации
Задано шахматное поле в стандардной нотации. Определить его цвет. Вход a1 b3 h5 e7 Выход...

Необходимо написать программу обхода конем всего шахматного поля
Доброго времени суток! Необходимо написать программу обхода конем всего шахматного поля. Конь...

По введенным координатам шахматного поля выясните, какого цвета это поле
Поле шахматной доски определяется парой натуральных чисел,каждое из которых не превосходит 8. По...

Переписать визуальный проект в консольное приложение: Обход конем всех клеток шахматного поля.
Приветствую друзья!Прошу помощи у экспертов, т.к. ООП почти не изучал. Дана программа с...

7
Jupiter
Каратель
Эксперт С++
6580 / 4001 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2014, 01:44 2
Цитата Сообщение от -Arabella- Посмотреть сообщение
Помогите, пожалуйста, дописать, чтобы строились клетки. Я понимаю, что это делается как-то через функции bar или Rectangle?
этой фигней никто не пользуется, всю помощь можно получить по F1
0
rikimaru2013
2516 / 1178 / 355
Регистрация: 30.11.2013
Сообщений: 3,792
11.10.2014, 02:22 3
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
#include <iostream> 
#include <windows.h>
using namespace std;
enum class Color
{
    BLACK = 0,
    WHITE = 1
};
struct Cell
{
    int x;
    int y;
    Color color;
};
class Desk
{
private:
    HWND m_ConsoleWindow;
    HDC m_hDC;
    int m_width;
    int m_height;
    int m_leftX;
    int m_leftY;
    int m_cellSize ;
    Cell** m_cellArray;
public:
    Desk()  :
        m_ConsoleWindow     (GetConsoleWindow()),
        m_hDC               (GetDC(m_ConsoleWindow)),
        m_width             (8),
        m_height            (8),
        m_leftX             (15),
        m_leftY             (15),
        m_cellArray         (nullptr),
        m_cellSize          (30)
    {
        m_cellArray = new Cell*[m_height];
        for (int i = 0; i < m_width; i++)
            m_cellArray[i] = new Cell;
        
    }
    ~Desk()
    {
        for (int i = 0; i < m_width; i++)
            delete[] m_cellArray[i];
        delete[] m_cellArray;
    }
 
    void showDesk()
    {
        for (int i = 0; i < m_height; i++)
        {
            for (int q = 0; q < m_width; q++)
            {
                if ((q + i) % 2 ==0)
                    SelectObject(m_hDC, CreateSolidBrush(RGB(77, 75, 34)));
                else
                    SelectObject(m_hDC, CreateSolidBrush(RGB(81, 13, 22)));
                Rectangle(m_hDC, m_leftX + q*m_cellSize, m_leftY + i*m_cellSize, m_leftX + q*m_cellSize + m_cellSize, m_leftY + i*m_cellSize + m_cellSize);
                // написал struct Cell и enum Color для расширяемости, но я их вообще не использовал по сути) 
            }           
        }
        
    }
};
void main()
{
    Desk hello;
    hello.showDesk();
    
}
Написал на скорую руку за 10 минут - не судите ошибки если найдутся. Надеюсь этот код поможет написать вам полноценные шахматы.
Создание шахматного поля
0
8Observer8
3420 / 1855 / 323
Регистрация: 05.10.2013
Сообщений: 5,624
Записей в блоге: 140
11.10.2014, 08:18 4
Цитата Сообщение от -Arabella- Посмотреть сообщение
Я пытаюсь написать простую игру шахматы в ООП, с графикой.
Я бы взял за основу какой-нибудь пример. Видел такой пример и исходниках к книге "Beginning OpenGL Game Programming" (глава 13, 2nd edition , 2009)

IDE VS, OpenGL, C++, WinAPI
0
Миниатюры
Создание шахматного поля  
11.10.2014, 08:18
-Arabella-
0 / 0 / 1
Регистрация: 20.10.2013
Сообщений: 233
11.10.2014, 13:07  [ТС] 5
rikimaru2013, Спасибо за пример, никогда раньше не пользовалась библиотекой windows. Я не совсем понимаю что происходит в классе Desk
Здесь вы объявляете переменные ширина, длина, координаты х и у и размер, а что такое
HWND m_ConsoleWindow;
HDC m_hDC;
Поясните, пожалуйста))
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
7
8
9
private:
* * HWND m_ConsoleWindow;
* * HDC m_hDC;
* * int m_width;
* * int m_height;
* * int m_leftX;
* * int m_leftY;
* * int m_cellSize ;
* * Cell** m_cellArray;
C++ (Qt)
1
 
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
m_cellArray * * * * (nullptr),
nullptr что значит?

Добавлено через 56 секунд
8Observer8, Я посмотрела там все на английском, и я не нашла код шахмат, видела картинку с шахматным полем и кружком, но кода нет
0
8Observer8
3420 / 1855 / 323
Регистрация: 05.10.2013
Сообщений: 5,624
Записей в блоге: 140
11.10.2014, 16:13 6
Можно и этот проект использовать. Тут уже всё готово. Надо только найти то место, где вводятся фигуры и заменить их на обычные

В папке найдёте exe: "Chess.exe"
1
Вложения
Тип файла: zip Chess.zip (4.50 Мб, 43 просмотров)
rikimaru2013
2516 / 1178 / 355
Регистрация: 30.11.2013
Сообщений: 3,792
11.10.2014, 17:03 7
Цитата Сообщение от -Arabella- Посмотреть сообщение
HWND m_ConsoleWindow;
HWND hwnd = GetConsoleWindow(); // получает само консольное приложение
Цитата Сообщение от -Arabella- Посмотреть сообщение
HDC m_hDC;
HDC hdc = GetDC(hwnd); //получаем DC(контекст устройства) для рисования
Цитата Сообщение от -Arabella- Посмотреть сообщение
nullptr что значит?
Обнуление указателя. При создании указателей они ссылаются на "мусорный" адресс и если не перезаписать адресс и попытатся его стереть через delete - Будет беда.
0
-Arabella-
0 / 0 / 1
Регистрация: 20.10.2013
Сообщений: 233
11.10.2014, 17:55  [ТС] 8
8Observer8, Спасибо) попробую использовать, сложновато там написано)
rikimaru2013, Я так понимаю они из библиотеки windows.h. А не подскажите, как эти 2 функции или их аналоги использовать с библиотекой stdio.h? Я просто только на этой могу что-нито написать)) Или их там просто нет? Раньше они не встречались
0
11.10.2014, 17:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2014, 17:55

Ходы шахматного коня
Задача заключается в том, чтобы найти минимальное количество ходов для перехода шахматного коня с...

Решение шахматного вопроса
Помогите с решением пожалйуста! Народ, помогите пожалуйста!) Добавлено через 6 минут...

Программа ходов шахматного короля
Программа должна показывать может ли король переместиться с одной клетки на другую посредством...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.