Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 18.06.2022
Сообщений: 5

Игра "Война вирусов"

19.06.2022, 11:15. Показов 2340. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кое-что сделано, но нужна помощь с добавлением функций.
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
import pygame
import sys
import pygame_menu
 
pygame.init()
surface = pygame.display.set_mode((510, 510))
pygame.display.set_caption("Война вирусов")
 
 
def start_the_game():
    size_block = 40
    margin = 10
    screen = pygame.display.set_mode((510, 510))
    green = (0,255,0)
    white = (255,255,255)
    red = (255,0,0)
    mas = [[0]*10 for i in range(10)]
    query = 0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit(0)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x_mouse, y_mouse = pygame.mouse.get_pos()
                print(f'x={x_mouse} y={y_mouse}')
                col = x_mouse // (margin+size_block)
                row = y_mouse // (margin+size_block)
                if mas[row][col]==0:
                    if query%2==0:
                        mas[row][col]='x'
                    else:
                        mas[row][col] = 'o'
                    query+=1
        for row in range(10):
            for col in range(10):
                if mas[row][col]=='x':
                    color = red
                elif mas[row][col] =='o':
                    color = green
                else:
                    color = white
                x = col*size_block+(col+1)*margin
                y = row * size_block + (row + 1) * margin
                pygame.draw.rect(screen, color, (x, y, size_block, size_block))
                if color==red:
                    pygame.draw.line(screen,white, (x,y), (x+size_block,y+size_block),3)
                    pygame.draw.line(screen, white, (x + size_block, y), (x, y + size_block), 3)
                elif color==green:
                    pygame.draw.circle(screen,white, (x+size_block//2,y+size_block//2), size_block//2-3,3)
        pygame.display.update()
 
 
menu = pygame_menu.Menu('Приветсвуем', 510, 510,
                       theme=pygame_menu.themes.THEME_DARK)
 
menu.add.button('Играть', start_the_game)
menu.add.button('Правила')
menu.add.button('Выйти', pygame_menu.events.EXIT)
 
menu.mainloop(surface)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2022, 11:15
Ответы с готовыми решениями:

"Война вирусов"
При создании цикла на вывод победителя pygame зависает. Нужна помощь с созданием окна окончания игры с возможностью перезапуска игры. ...

Игра "Война Вирусов". Оценка позиции для алгоритма Альфа-Бета отсечения
Я создаю игру "Война Вирусов" на языке Visual Prolog. Правила игры описаны здесь: ...

Война вирусов
Не смог найти нигде эту игру, а у самого что-то проблемы с этим... Вот мой код, может тут подскажете, если так проще вам будет ...

6
171 / 111 / 65
Регистрация: 26.06.2020
Сообщений: 331
19.06.2022, 16:59
Цитата Сообщение от Zeras Посмотреть сообщение
нужна помощь с добавлением функций.
Что куда добавлять?
0
0 / 0 / 0
Регистрация: 18.06.2022
Сообщений: 5
20.06.2022, 15:19  [ТС]
Систему убивания — объявление убитым некоторого чужого символа, который находится на доступной клетке.
Возможность ставить знак через убитые символы
Ограничения для постановки знаков - что бы ходы начинались с верхнего правого и нижнего левого углов
0
171 / 111 / 65
Регистрация: 26.06.2020
Сообщений: 331
20.06.2022, 22:21
Правила где?
0
0 / 0 / 0
Регистрация: 18.06.2022
Сообщений: 5
21.06.2022, 13:12  [ТС]
Играют в «войну вирусов» два игрока на доске 10 на 10 клеток, один крестиками, другой ноликами.
Ходят поочерёдно. Начинают крестики. Каждый ход состоит из трёх отдельных последовательных ходов (назовём их «ходиками»).
Каждый «ходик» является либо размножением, либо убиванием. Размножение — это выставление своего символа в любую доступную пустую клетку доски, а убивание — это объявление убитым некоторого чужого символа, который находится на доступной клетке.
Клетка считается доступной для крестиков, если она либо непосредственно соприкасается (по вертикали, горизонтали или диагонали) с живым крестиком, либо через цепочку убитых ноликов(но не через цепочку убитых крестиков!).
Аналогично определяются клетки, доступные для ноликов: либо непосредственно соприкасающиеся с одним из ноликов, либо через цепочку убитых крестиков.
Убитые крестики обводятся кружком, убитые нолики закрашиваются. Если игра ведётся не на бумажной доске, а при помощи доски «многоразового использования» и фишек с изображениями крестиков и ноликов, то убитую фишку надо накрыть своей фишкой.
В начале игры доска пуста, и полей доступных для крестиков нет, поэтому в порядке исключения они имеют право сделать свой первый «ходик» на a1. Точно также нолики имеют право своим первым «ходиком» выставиться на k10.
В любой момент игрок может отказаться от хода. Однако выполнение вместо полного хода лишь одного или двух «ходиков» запрещается, за исключением того случая, когда выполнить полный ход невозможно в принципе.
Запрещается:
Ставить свой символ в уже занятую клетку.
Убивать уже убитые символы противника.
Целью игры является полное уничтожение колонии противника (то есть убивание всех вражеских символов). Если оба игрока, считая такое уничтожение невозможным, отказываются от хода, партия считается закончившейся вничью.
0
171 / 111 / 65
Регистрация: 26.06.2020
Сообщений: 331
22.06.2022, 05:32
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
import pygame
import sys
import pygame_menu
 
pygame.init()
surface = pygame.display.set_mode((510, 510))
pygame.display.set_caption("Война вирусов")
 
 
def start_the_game():
    size_block = 40
    margin = 10
    screen = pygame.display.set_mode((510, 510))
    green = (0,255,0)
    white = (255,255,255)
    red = (255,0,0)
    blue = (0, 0, 255)
    mas = [[0]*10 for i in range(10)]
    query = 0
    step = 'x'
    startX = True
    startO = True
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit(0)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x_mouse, y_mouse = pygame.mouse.get_pos()
                print(f'x={x_mouse} y={y_mouse}')
                col = x_mouse // (margin+size_block)
                row = y_mouse // (margin+size_block)
                
                if startX == True:
                   if step == 'x' and col == 0 and row == 0:
                        mas[row][col]='x'
                        query+=1
                        startX = False
                if startO == True:
                    if step == 'o' and col == 9 and row == 9:
                        mas[row][col] ='o'
                        query+=1
                        startO = False
                   
                if startX == False:
                    if step == 'x':
                        if mas[row][col] == 0:
                            mas[row][col]='x'
                            query+=1
                        if mas[row][col] == 'o':
                            mas[row][col] = 's' # убитый o
                            query+=1
                if startO == False:    
                    if step == 'o':
                        if mas[row][col] == 0:
                            mas[row][col] ='o'
                            query+=1
                        if mas[row][col] == 'x':
                            mas[row][col] = 'z' # убитый x
                            query+=1
                    
                if query == 3:
                    if step == 'x':
                        step = 'o'
                    elif step == 'o':
                        step = 'x'
                    query = 0
 
        for row in range(10):
            for col in range(10):
                if mas[row][col]=='x':
                    color = red
                elif mas[row][col] =='o':
                    color = green
                elif mas[row][col] =='z':
                    color = red
                elif mas[row][col] =='s':
                    color = blue
                else:
                    color = white
                x = col*size_block+(col+1)*margin
                y = row * size_block + (row + 1) * margin
                pygame.draw.rect(screen, color, (x, y, size_block, size_block))
                if color==red:
                   if mas[row][col] !='z':
                       pygame.draw.line(screen,white, (x,y), (x+size_block,y+size_block),3)
                       pygame.draw.line(screen, white, (x + size_block, y), (x, y + size_block), 3)
                   else:
                       pygame.draw.line(screen,white, (x,y), (x+size_block,y+size_block),3)
                       pygame.draw.line(screen, white, (x + size_block, y), (x, y + size_block), 3)
                       pygame.draw.circle(screen,white, (x+size_block//2,y+size_block//2), size_block//2-3,3)
                elif color==green and mas[row][col] !='s':
                   pygame.draw.circle(screen,white, (x+size_block//2,y+size_block//2), size_block//2-3,3)
        pygame.display.update()
 
 
menu = pygame_menu.Menu('Приветсвуем', 510, 510,
                       theme=pygame_menu.themes.THEME_DARK)
 
menu.add.button('Играть', start_the_game)
menu.add.button('Правила')
menu.add.button('Выйти', pygame_menu.events.EXIT)
 
menu.mainloop(surface)
1
171 / 111 / 65
Регистрация: 26.06.2020
Сообщений: 331
22.06.2022, 19:56
Лучший ответ Сообщение было отмечено Zeras как решение

Решение

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import pygame
import sys
import pygame_menu
 
pygame.init()
surface = pygame.display.set_mode((510, 510))
pygame.display.set_caption("Война вирусов")
 
 
def  check_step(m, r, c, step):
    
    mas = [[0]*12 for i in range(12)]
    
    k = 0
    p = 0
    for i in range(1, 11):
        for j in range(1, 11):
            mas[i][j] = m[k][p]
            if p < 9:
                p += 1
            else:
                p = 0
        if k < 9:
            k += 1
        else:
            k = 0
    
    row = r + 1
    col = c + 1
    
    if (   mas[row - 1][col - 1] == step 
        or mas[row - 1][col] == step 
        or mas[row - 1][col + 1] == step 
        or mas[row][col - 1] == step 
        or mas[row][col + 1] == step
        or mas[row + 1][col - 1] == step 
        or mas[row + 1][col] == step 
        or mas[row + 1][col + 1] == step): 
        return True
    
    return False
 
def start_the_game():
    size_block = 40
    margin = 10
    screen = pygame.display.set_mode((510, 510))
    green = (0,255,0)
    white = (255,255,255)
    red = (255,0,0)
    blue = (0, 0, 255)
    mas = [[0]*10 for i in range(10)]
    query = 0
    step = 'x'
    startX = True
    startO = True
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit(0)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x_mouse, y_mouse = pygame.mouse.get_pos()
                print(f'x={x_mouse} y={y_mouse}')
                col = x_mouse // (margin+size_block)
                row = y_mouse // (margin+size_block)
                
                if startX == True:
                   if step == 'x' and col == 0 and row == 0:
                        mas[row][col]='x'
                        query+=1
                        startX = False
                        
                if startO == True:
                    if step == 'o' and col == 9 and row == 9:
                        mas[row][col] ='o'
                        query+=1
                        startO = False
                        
                if startX == False:
                    if step == 'x' and check_step(mas, row, col, step):
                        if mas[row][col] == 0:
                            
                            mas[row][col]='x'
                            query+=1
                        if mas[row][col] == 'o':
                            mas[row][col] = 's' # убитый o
                            query+=1
                if startO == False:    
                    if step == 'o' and check_step(mas, row, col, step):
                        if mas[row][col] == 0:
                            mas[row][col] ='o'
                            query+=1
                        if mas[row][col] == 'x':
                            mas[row][col] = 'z' # убитый x
                            query+=1
                    
                if query == 3:
                    if step == 'x':
                        step = 'o'
                    elif step == 'o':
                        step = 'x'
                    query = 0
 
        for row in range(10):
            for col in range(10):
                if mas[row][col]=='x':
                    color = red
                elif mas[row][col] =='o':
                    color = green
                elif mas[row][col] =='z':
                    color = red
                elif mas[row][col] =='s':
                    color = blue
                else:
                    color = white
                x = col*size_block+(col+1)*margin
                y = row * size_block + (row + 1) * margin
                pygame.draw.rect(screen, color, (x, y, size_block, size_block))
                if color==red:
                   if mas[row][col] !='z':
                       pygame.draw.line(screen,white, (x,y), (x+size_block,y+size_block),3)
                       pygame.draw.line(screen, white, (x + size_block, y), (x, y + size_block), 3)
                   else:
                       pygame.draw.line(screen,white, (x,y), (x+size_block,y+size_block),3)
                       pygame.draw.line(screen, white, (x + size_block, y), (x, y + size_block), 3)
                       pygame.draw.circle(screen,white, (x+size_block//2,y+size_block//2), size_block//2-3,3)
                elif color==green and mas[row][col] !='s':
                   pygame.draw.circle(screen,white, (x+size_block//2,y+size_block//2), size_block//2-3,3)
        pygame.display.update()
 
 
menu = pygame_menu.Menu('Приветсвуем', 510, 510,
                       theme=pygame_menu.themes.THEME_DARK)
 
menu.add.button('Играть', start_the_game)
menu.add.button('Правила')
menu.add.button('Выйти', pygame_menu.events.EXIT)
 
menu.mainloop(surface)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2022, 19:56
Помогаю со студенческими работами здесь

Амиго, Вконтакте, Война Престолов, Искать в интернете - Удаление вирусов
Добрый день! Столкнулся, как и многие, с такой проблемой. После скачивания книги нахватался всяких штук типа &quot;Амиго&quot;,...

Война!
Капитан Керам должен принять трудное решение. Шел 2147 год, в мире шла большая война. Его солдаты были вместе в начале войны, два года...

Война
Войны ведется не только на поле битвы, но и в глубине души!! а вы как сочетаете ??

Война с ol меню
Здравствуйте, уважаемые форумчане! С недавних пор решил попробовать себя в роли вебмастера (чем-то надо пенсионеру занять себя), увы не...

Война с loading
Здравствуйте, как можно сделать, чтобы сперва появлялся Loading... и через 5 секунд появлялось $('#outputx').html(data); ? ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru