Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
grzegorz1
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 15
1

Сделать графический интерфейс для крестиков-ноликов

17.04.2017, 00:33. Просмотров 455. Ответов 3
Метки нет (Все метки)

Здравствуйте. Есть код для крестиков-ноликов, все более-менее работает.
Хочу сделать GUI с помощью PyQT, пока сложно все это доходит до меня (PyQy имею ввиду).
Если не сложно, обьясните в двух словах, как через PyQT лучше всего сделать поле для конкретно моего кода:

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import sys
 
 
 
field = {1:'.',2:'.',3:'.',
         4:'.',5:'.',6:'.',
         7:'.',8:'.',9:'.',}
 
 
 
def turn_comp():
    print('Computer thinking...\n')
    checking = []
    import random
    global field
    for x in range(1, 10):
        if field[x] == '.':
            checking.append(x)
    if field[1]=='X' and field[2]=='X' and field[3] != 'O':
        field[3] = 'O'
    elif field[1]=='X' and field[3]=='X' and field[2] != 'O' :
        field[2] = 'O'
    elif field[2]=='X' and field[3]=='X' and field[1] != 'O':
        field[1] = 'O'
    elif field[4]=='X' and field[5]=='X' and field[6] != 'O':
        field[6] = 'O'
    elif field[5]=='X' and field[6]=='X'and field[4] != 'O':
        field[4] = 'O'
    elif field[4]=='X' and field[6]=='X' and field[5] != 'O':
        field[5] = 'O'
    elif field[7]=='X' and field[8]=='X' and field[9] != 'O' :
        field[9] = 'O'
    elif field[7]=='X' and field[9]=='X' and field[8] != 'O':
        field[8] = 'O'
    elif field[8]=='X' and field[9]=='X' and field[7] != 'O':
        field[7] = 'O'
    elif field[1] == 'X' and field[5] == 'X' and field[9] != 'O':
        field[9] = 'O'
    elif field[1] == 'X' and field[9] == 'X' and field[5] != 'O':
        field[5] = 'O'
    elif field[5] == 'X' and field[9] == 'X' and field[1] != 'O':
        field[1] = 'O'
    elif field[3] == 'X' and field[5] == 'X' and field[7] != 'O':
        field[7] = 'O'
    elif field[3] == 'X' and field[7] == 'X' and field[5] != 'O':
        field[5] = 'O'
    elif field[7] == 'X' and field[5] == 'X' and field[3] != 'O':
        field[3] = 'O'
    elif field[1] == 'X' and field[4] == 'X' and field[7] != 'O':
        field[7] = 'O'
    elif field[1] == 'X' and field[7] == 'X' and field[4] != 'O':
        field[4] = 'O'
    elif field[7] == 'X' and field[4] == 'X' and field[1] != 'O':
        field[1] = 'O'
    elif field[2] == 'X' and field[5] == 'X' and field[8] != 'O':
        field[8] = 'O'
    elif field[2] == 'X' and field[8] == 'X' and field[5] != 'O':
        field[5] = 'O'
    elif field[5] == 'X' and field[8] == 'X' and field[2] != 'O':
        field[2] = 'O'
    elif field[3] == 'X' and field[6] == 'X'and field[9] != 'O':
        field[9] = 'O'
    elif field[6] == 'X' and field[9] == 'X' and field[3] != 'O':
        field[3] = 'O'
    else:
        field[random.choice(checking)] = 'O'
    for x in range(1,9,3):
        for y in range(3):
            print(field[x+y],end='')
        print()
    if field[3] == 'X' and field[9] == 'X' and field[6] != 'O':
        field[6] = 'O'
    elif field[1]=='O'  and field[2]=='O' and field[3]=='O':
        sys.exit('YOU LOSE')
    elif field[4]=='O'  and field[5]=='O' and field[6]=='O':
        sys.exit('YOU LOSE')
    elif field[7]=='O'  and field[8]=='O' and field[9]=='O':
        sys.exit('YOU LOSE')
    elif field[1]=='O'  and field[4]=='O' and field[7]=='O':
        sys.exit('YOU LOSE')
    elif field[2]=='O'  and field[5]=='O' and field[8]=='O':
        sys.exit('YOU LOSE')
    elif field[3]=='O'  and field[6]=='O' and field[9]=='O':
        sys.exit('YOU LOSE')
    elif field[1]=='O'  and field[5]=='O' and field[9]=='O':
        sys.exit('YOU LOSE')
    elif field[3]=='O'  and field[5]=='O' and field[7]=='O':
        sys.exit('YOU LOSE')
    elif not '.' in list(field.values()): sys.exit('DRAW')
 
    else: turn_user()
 
def turn_user():
    global field
    field[int(input('Please, enter your coord:'))] = 'X'
    for x in range(1,9,3):
        for y in range(3):
            print(field[x+y],end='')
        print()
    if field[1]=='X'  and field[2]=='X' and field[3]=='X':
        sys.exit('YOU WIN')
    elif field[4]=='X'  and field[5]=='X' and field[6]=='X':
        sys.exit('YOU WIN')
    elif field[7]=='X'  and field[8]=='X' and field[9]=='X':
        sys.exit('YOU WIN')
    elif field[1]=='X'  and field[4]=='X' and field[7]=='X':
        sys.exit('YOU WIN')
    elif field[2]=='X'  and field[5]=='X' and field[8]=='X':
        sys.exit('YOU WIN')
    elif field[3]=='X'  and field[6]=='X' and field[9]=='X':
        sys.exit('YOU WIN')
    elif field[1]=='X'  and field[5]=='X' and field[9]=='X':
        sys.exit('YOU WIN')
    elif field[3]=='X'  and field[5]=='X' and field[7]=='X':
        sys.exit('YOU WIN')
    elif not '.' in list(field.values()): sys.exit('DRAW')
    else: turn_comp()
 
 
turn_user()
Просто вообще никак в голову не укладываеться, как для словаря можно сделать поле в виде 3*3 и при клике на определенную клетку будет изменяться значение словаря.

Извините за нубство и заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2017, 00:33
Ответы с готовыми решениями:

Создать графический интерфейс для программы
Написали с руководителем программу на языке python, запускается через функцию в...

Графический интерфейс
Приветствую. Есть скрипт для питона, возможно ли ему написать графическую...

Tkinter. Зависает графический интерфейс
Здравствуйте! Написал такой код: # -*- coding: utf-8 -*- from Tkinter import...

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

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

3
shvyrevvg
534 / 505 / 257
Регистрация: 12.05.2016
Сообщений: 1,469
17.04.2017, 10:11 2
Цитата Сообщение от grzegorz1 Посмотреть сообщение
Просто вообще никак в голову не укладываеться, как для словаря можно сделать поле в виде 3*3 и при клике на определенную клетку будет изменяться значение словаря.
Рисуете поле(paintEvent и QPainter в помощь), при клике мышью(mousePressEvent) проверяете в какое поле попали(изменяете свой словарь), перерисовываете. Загуглите примеры игр на qt.
1
grzegorz1
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 15
17.04.2017, 10:41  [ТС] 3
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Рисуете поле(paintEvent и QPainter в помощь), при клике мышью(mousePressEvent) проверяете в какое поле попали(изменяете свой словарь), перерисовываете. Загуглите примеры игр на qt.
Спасибо большое
0
shvyrevvg
534 / 505 / 257
Регистрация: 12.05.2016
Сообщений: 1,469
17.04.2017, 10:51 4
grzegorz1, http://doc.qt.io/qt-5/qtdesigner-taskmenuextension-tictactoe-cpp.html
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2017, 10:51

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

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

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


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

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

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