С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.03.2020
Сообщений: 2
1

Робот для крестиков ноликов

15.03.2020, 15:14. Показов 3687. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Python
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
import pygame
import sys
 
def check_control(mas, sign):  # ПРОВЕРКА ВЫЙГРАША
    zero = 0
    capriz_1 = -50
    capriz_2 = -50
    for row in mas:  # _1_ПРОВЕРКА
        capriz_1 += 115
        zero += row.count(0)
        if row.count(sign) == 3:  # ЕСЛИ КОЛ-ВО ЗНАКОВ В СТРОКЕ - ТРИ, ТО ВОЗВРАТ ТОГО САМОГО ЗНАКА
            if sign == 'x':
                pygame.draw.line(screen, green, (30, capriz_1), (330, capriz_1), 10)
            else:
                pygame.draw.line(screen, red, (30, capriz_1), (330, capriz_1), 10)
            return sign
    for col in range(3):  # _2_ПРОВЕРКА
        capriz_2 += 115
        if mas[0][col] == sign and mas[1][col] == sign and mas[2][col] == sign:  # ЕСЛИ КОЛ-ВО ЗНАКОВ В КОЛОНКЕ - ТРИ, ТО ВОЗВРАТ ТОГО САМОГО ЗНАКА
            if sign == 'x':
                pygame.draw.line(screen, green, (capriz_2, 30), (capriz_2, 330), 10)
            else:
                pygame.draw.line(screen, red, (capriz_2, 30), (capriz_2, 330), 10)
            return sign
    if mas[0][0] == sign and mas[1][1] == sign and mas[2][2] == sign:  # ЕСЛИ ЗНАК НА ДИАГОНАЛЕ # _3_ПРОВЕРКА
        if sign == 'x':
            pygame.draw.line(screen, green, (30, 30), (330, 330), 20)
        else:
            pygame.draw.line(screen, red, (30, 30), (330, 330), 20)
        return sign
    if mas[0][2] == sign and mas[1][1] == sign and mas[2][0] == sign:  # ЕСЛИ ЗНАК НА ДИАГОНАЛЕ # _4_ПРОВЕРКА
        if sign == 'x':
            pygame.draw.line(screen, green, (330, 30), (30, 330), 20)
        else:
            pygame.draw.line(screen, red, (330, 30), (30, 330), 20)
        return sign
    if zero == 0:
        return "НИЧЬЯ"  # ЕСЛИ НЕТ НИ ОДНОЙ ПУСТОЙ КЛЕТКИ (ОПРЕДЕЛЯЕТ ЭТО "ZERO")
    return False  # ЕСЛИ УСЛОВИЕ НЕ ВЫПОЛНИЛОСЬ, ТО False
 
 
pygame.init()
size_block = 100  # ШИРИНА
margin = 15  # ОТСТУП
width = height = size_block * 3 + margin * 4  # ШИРИНА И ДЛИНА ЭКРАНА
 
size_window = (width, height)  # СОЗДАНИЕ ЭКРАНА
screen = pygame.display.set_mode(size_window)
pygame.display.set_caption("крестики-нолики")
 
black = (0, 0, 0)  # ЦВЕТА В ФОРМАТЕ RGB
red = (255, 0, 0)
green = (0, 255, 0)
white = (255, 255, 255)
mas = [[0] * 3 for i in range(3)]  # МАСИВ С НУЛЯМИ, ОНИ ОЗНАЧАЮТ ЧТО КЛЕТКА СВОБОДНА
query = 0  # 1 2 3 4 5 6 7 8 9
game_over = False  # ИЗНАЧАЛЬНО ОНА False
while True:
    for event in pygame.event.get():  # ЦИКЛ ОБРАБОТКИ СОБЫТИЙ
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit(0)
        elif event.type == pygame.MOUSEBUTTONDOWN and not game_over:  # ЕСЛИ ТИП СОБЫТИЯ - НАЖАТЕЕ КНОПКИ МЫШИ И НЕ game_over
            x_mouse, y_mouse = pygame.mouse.get_pos()  # X,Y КООРДИНАТЫ МЫШИ
            col = x_mouse // (size_block + margin)  # УЗНАЁМ КОЛОНКУ ПУТЁМ ДЕЛЕНИЯ МЫШИ(КООРДИНАТА) НА ШИРИНА БЛОКА + ОТСТУП
            row = y_mouse // (size_block + margin)  # УЗНАЁМ СТРОКУ ПУТЁМ ДЕЛЕНИЯ МЫШИ(КООРДИНАТА) НА ШИРИНА БЛОКА + ОТСТУП
            if mas[row][col] == 0:  # ДОСТУП ТОЛЬКО ЕСЛИ ТАМ 0
                if query % 2 == 0:  # ЕСЛИ ОСТАТОК ТО XO"
                    mas[row][col] = "x"  # ТО "X"
                else:
                    # РОБОТ
                    mas[row][col] = "o"  # ЕСЛИ НЕ, ТО "O"
                query += 1  # УВЕЛИЧИВАЕМ ПЕРЕМЕННУЮ НА ОДИН
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:  # ЕСЛИ ТИП СОБЫТИЯ ЭТО НАЖАТЕЕ НА ПРОБЕЛ
            game_over = False  # ДЕЛАЕМ ИГРУ ОПЯТЬ ПРАВДОЙ
            mas = [[0] * 3 for i in range(3)]  # ДЕЛАЕМ ОПЯТЬ ПУСТОЙ МАСИВ
            query = 0  # ОБНУЛЯЕМ СЧЁТЧИК (ОПЯТЬ ХОДИТ ПЕРВЫЙ ИГРОК)
            screen.fill(black)
            
    if not game_over:  # ЕСЛИ ИГРА НЕ ЗАКОНЧЕНА
        for row in range(3):  # ЦИКЛ ОБХОДИТ КОЛ-ВО СТОРК И СТОЛБЦОВ
            for col in range(3):
                if mas[row][col] == "x":  # ЕСЛИ ТАМ 'Х' ТО КРАСНЫЙ
                    color = red
                elif mas[row][col] == "o":  # ЕСЛИ ТАМ 'О' ТО ЗЕЛЁНЫЙ
                    color = green
                else:
                    color = white
                x = col * size_block + (col + 1) * margin  # КООРДИНАТЫ "X"
                y = row * size_block + (row + 1) * margin  # КООРДИНАТЫ "Y"
                pygame.draw.rect(screen, color, (x, y, size_block, size_block))  # ПОЯВЛЯЮТСЯ КВАДРАТИКИ
                if color == red:  # ЕСЛИ С КРЕСТИКОМ
                    pygame.draw.line(screen, white, (x + 5, y + 5), (x + size_block - 5, y + size_block - 5), 5)  # РИСУЕМ ЛИНИЮ ИЗ  (x + 5, y + 5),  В (x + size_block - 5, y + size_block - 5) С ТОЛЩИНОЙ В 5 ПИКСЕЛЕЙ
                    pygame.draw.line(screen, white, (x + size_block - 5, y + 5), (x + 5, y + size_block - 5), 5)  # РИСУЕМ ЛИНИЮ ИЗ    (x + size_block - 5, y + 5)     В (x + 5, y + size_block - 5) С ТОЛЩИНОЙ В 5 ПИКСЕЛЕЙ
                elif color == green:  # ЕСЛИ С НОЛИКОМ
                    pygame.draw.circle(screen, white, (x + size_block // 2, y + size_block // 2), size_block // 2 - 3, 5)  # КООРДИНАТЫ ЦЕНТРА ДЕЛЁНЫЕ НА ДВА, РАДИУС ПОЛОВИНА БЛОКА МИНУС ТРИ ТОЛЩИНА В ПЯТЬ ПИКСЕЛЕЙ
    if (query - 1) % 2 == 0:  # ЕСЛИ ИГРОК ЧЁТНЫЙ
        game_over = check_control(mas, 'x')
    else:  # ЕСЛИ ИГРОК НЕ ЧЁТНЫЙ
        game_over = check_control(mas, 'o')  # СОХРАНЯЕТСЯ ЭТО В ПЕРЕМЕННОЙ  game_over
 
 
    pygame.display.update()  # ИЗМЕНЕНИЯ
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2020, 15:14
Ответы с готовыми решениями:

ИИ для крестиков ноликов на python
Нужно сделать ИИ на python для победы в игре крестики нолики против другого ИИ. То есть нужно...

Сделать графический интерфейс для крестиков-ноликов
Здравствуйте. Есть код для крестиков-ноликов, все более-менее работает. Хочу сделать GUI с помощью...

ИИ для крестиков ноликов на С++
вот написал крестики нолики 3х3 но немогу написать ИИ для компа тупо перебирать все комбинации...

Бот для крестиков-ноликов
Хочу написать бота для крестиков-ноликов и вот тут незадача, или нужно перечислять все комбинации...

1
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
15.03.2020, 15:17 2
1. Это вопрос?
2. Используйте специальные кнопки для вывода кода
0
15.03.2020, 15:17
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2020, 15:17
Помогаю со студенческими работами здесь

Функция для крестиков-ноликов
Здравствуйте, я пишу свою первую программу на функциональном языке программирования, поэтому...

Алгоритм minimax для крестиков-ноликов
В общем, написал я minimax для крестиков-ноликов, а враг отчего-то "не хочет" выигрывать. При...

Алгоритм минимакс для Крестиков-Ноликов
Объясните пожалуйста следующую минимакс функцию // основная минимакс-функция static int...

Дописать код для крестиков ноликов
Есть код крестиков ноликов для двух игроков с выбором размера поля, туда надо добавить игру с...

Алгоритм минимакс для крестиков-ноликов
Задали написать крестики-нолики и узнал, что нужно использовать алгоритм минимакс, т.к. это проще...

Искусственный интеллект для больших крестиков-ноликов
Пишу игрушку - клеточное поле 19*19, крестики и нолики, надо составить 5 в ряд. Написал, все, кроме...

Создать массив для игрового поля крестиков-ноликов
Создать массив 13Х13 и заполнить его символами так, чтобы получилось игровое поле для...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru