Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447

Битовые крестики-нолики

10.06.2015, 21:55. Показов 1552. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать битовую игру в крестики нолики. Поле это int 32-бита, 4х4. Х = 10, О = 11, пустая клетка =00.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2015, 21:55
Ответы с готовыми решениями:

Крестики-нолики
Пишу крестики нолики, получается смесь ООП и говнокода:senor: Вот собственно код: #include "Pole.h" void...

C++ Крестики нолики
Докончите программу, Реализуйте проверку на победу одного из игроков, минимум две комбинации для одного и для другого. #include...

Крестики нолики
Всем доброе утро) Написал программу, только не могу найти там ошибку в проверке. Когда надо проверить кто выйграл, по диагоналям строкам...

7
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
10.06.2015, 22:08
Рекомендую использовать тип std::bitset, его можно привести к целому числу.
0
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
10.06.2015, 22:12  [ТС]
Мне нужно сделать именно в int, я уже думал о int[4][4] но, к сожалению, это уже 36 битов(
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
10.06.2015, 22:32
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

ну напишите класс, с парой методов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Field
{
   uint32 m_field;
 
  public:
   enum Cell { EMPTY = 0, X = 2, O = 3 };
 
   public:
      Field() : m_field(0) {};
 
      Cell GetCell(unsigned xPos, unsigned yPos) const
      {
          // тут высчитываете какие биты нужно из поля считать,
          // считываете их и в зависимости от значения возвращаете
          // нужный тип ячейки.
      }
 
      void SetCell(unsigned xPos, unsigned yPos, Cell cell)
      {
          // тут высчитываете какие биты нужно поменять и как поменять. меняете.
      }
};
в остальном коде работаете с этим классом и его методами как будто это
двухмерный массив. только вместо записи field[x][y] будет что-то типа field.GetCell(x, y);
1
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
10.06.2015, 22:49  [ТС]
C++
1
2
3
4
5
6
7
8
9
int main() {
 
    int c =0;
    c += 1;
    c<<=1;
 
    cout <<bitset<sizeof(c++) *8>(c) << endl;
    return 0;
}
В инт [4][4] 36 байт - я ошибся. Получается подобный код но вот как это вывести в виде поля.
Хотелось бы примерно так
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00

Добавлено через 16 минут
Меня интересует как именно можно изменить определенную пару битов в позиции xPos yPos в m_field.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
10.06.2015, 22:58
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

http://www.cplusplus.com/refer... itset/set/
1
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
10.06.2015, 23:17
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

x - горизонталь. y - вертикаль. для меремещения маски 11 по х на одну позицию нужно сдвигать на два бита.
для перемещения маски на позицию по вертикали - на 4*2 бита. т.е. на 8 бит. итого, для перемещения маски 11 в позицию x y нужно следующее:
uing32 mask = 0x11 << (x + 4*y) * 2;
скажем если надо сместится в позицию (1, 3), то после описанного сдвига биты у маски будут следующие:

00 00 00 00
00 00 00 00
00 00 00 00
00 11 00 00


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

C++
1
2
3
4
5
uint32 x = 1;
uint32 y = 3;
uint32 offset = (x+4*y) * 2;
uint32 mask = 0x11 << offset
uint32 xyValue = (m_field & mask) >> offset;
вроде так.
0
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
11.06.2015, 15:29  [ТС]
Всем спасибо, получились отличные крестики-нолики
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
#include <iostream>
#include <iomanip>
#include <bitset>
#include <fstream>
 
using namespace std;
enum cell{
    X = 2,
    O = 3
};
 
class XO{
public:
    int field;
    XO():field(0){ }
    void setCell(int y, int x, cell c){
            int k = c << (x + 4 * y) * 2;
            this->field ^= k;
            this->print();
            this->printToFile();
    }
 
 
    void print(){
        bitset <sizeof(field)*8>bit = field;
 
        for(int i =0; i < 32; i=i+2){
            if((i == 8 || i==16) || i==24){
                cout <<endl;
            }
            cout << bit[i+1] << bit[i] << " ";
        }
        cout << endl << "---------------------" << endl;
    }
    void printToFile(){
        ofstream fout("C:\\Users\\Administrator\\Desktop\\gra.txt", ios::app);
        bitset <sizeof(field)*8>bit = field;
        for(int i =0; i < 32; i=i+2){
            if((i == 8 || i==16) || i==24){
                fout << endl;
            }
            fout << bit[i+1] << bit[i] << " ";
        }
        fout << endl << "-----------" << endl;
        fout.close();
    }
 
 
};
 
int main() {
    XO *pole = new XO();
 
    pole->setCell(0,0,X);
    pole->setCell(0,1,X);
    pole->setCell(0,2,O);
    pole->setCell(0,3,O);
 
    pole->setCell(1,0,X);
    pole->setCell(1,1,X);
    pole->setCell(1,2,O);
    pole->setCell(1,3,O);
 
    pole->setCell(2,0,X);
    pole->setCell(2,1,X);
    pole->setCell(2,2,O);
    pole->setCell(2,3,O);
 
    pole->setCell(3,0,X);
    pole->setCell(3,1,X);
    pole->setCell(3,2,O);
    pole->setCell(3,3,O);
 
 
    pole->print();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2015, 15:29
Помогаю со студенческими работами здесь

Крестики-нолики
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; void show_cells(); void make_move(int num); void result(); ...

Крестики-нолики
Захотелось написать игру Крестики-нолики но тут возник один вопрос, как будет ходить компютер, если пользоватся rand-ом то компютер будет...

Крестики нолики на С
Здраствуйте. Помогите пожалуйста написать игру в консоли. Это крестики нолики поле 3х3. Буду благодарен если поможете и объясните. ...

Крестики нолики 10 на 10
Нашел код крестики нолики 4 на 4 но не компилируется, там ошибки почему то в &lt;&lt; хочу сделать из него 10 на 10 Может кто нибудь...

Крестики-нолики
Всем привет и заранее спасибо, кто откликнется. Проблема следующая: игра работает почти корректно, за исключением одной детали: при вызове...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru