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

Путанница и ошибки в самописной игре на питоне

14.05.2023, 22:24. Показов 1130. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый вечер, уважаемые форумчане!
Решил создать игру на питоне(работа на автомат в универе), но возникли некоторые баги и непонятности, с которыми не знаю как бороться. Примерно 2 недели сидел сам, перерабатывал и разбирался, что-то получилось исправить, а что-то нет. И вот я здесь. Не судите строго, на питоне до этого кроме задачек по типу решения квадратных уравнения или чего-то сложнее простейших графиков не писал (Основные языки - Си и С++). Рад буду любому материалу и информации по теме. Литература и гайды на ютубе будут очень полезны.

Для начала общая концепция игры и что должно было быть:
2d игра, вид сверху. Квадратная карта с размерами 800x800px, 2 точки спавна (одна для юзера и одна для нейро-юзера(пользователь за которого играет самописная нейронная сеть и которая учится на ходах юзера, которым управляет человек)) и одна точка выхода. Нейро-юзер должен уметь ходить по карте и ловить пользователя. Если нейронка поймала пользователя, у него отнимается одна жизнь и игра начинается сначала. Сам же пользователь может кидать мячики в нейронку, тем самым затормаживая её. Если пользователь дошел до выхода из карты, то он выиграл. Cкрин того, что есть на данный момент, находится в самом конце сообщения. Зеленый квадрат - спавн пользователя, синий - спавн нейронки, белый - выход, красные - ловушки.

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

модуль map.py (Создает карту и инициализирует её)
Кликните здесь для просмотра всего текста

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
import random
 
# Константы для настройки карты
MAP_WIDTH = 50  # ширина карты
MAP_HEIGHT = 50  # высота карты
TRAP_COUNT = 10  # количество ловушек на карте
COMPLEXITY = 0.75  # сложность карты, от 0 до 1
 
# Объекты на карте
EMPTY = 0  # пустое место
WALL = 1  # стена
TRAP = 2  # ловушка
USER_SPAWN = 3  # точка спавна пользователя
NEURO_SPAWN = 4  # точка спавна нейросети
EXIT = 5
 
# Создание двумерного массива, заполненного пустыми местами
map_array = [[EMPTY for y in range(MAP_HEIGHT)] for x in range(MAP_WIDTH)]
 
# Список точек спавна
spawn_points = []
 
 
def is_wall(x, y):
    """
    Функция проверяет, является ли клетка (x, y) на карте стеной.
    :param x: координата x клетки
    :param y: координата y клетки
    :return: True, если клетка является стеной, иначе False
    """
    if x < 0 or y < 0 or x >= MAP_WIDTH or y >= MAP_HEIGHT:
        # если координаты выходят за пределы карты, то считаем, что это стена
        return True
    else:
        return map_array[x][y] == WALL
 
 
# Функция для добавления стен на карту
def add_walls():
    for x in range(MAP_WIDTH):
        for y in range(MAP_HEIGHT):
            if x == 0 or y == 0 or x == MAP_WIDTH - 1 or y == MAP_HEIGHT - 1:
                map_array[x][y] = WALL
            elif random.random() > COMPLEXITY:
                map_array[x][y] = WALL
 
# Функция для добавления ловушек на карту
def add_traps():
    for i in range(TRAP_COUNT):
        x = random.randint(1, MAP_WIDTH - 2)
        y = random.randint(1, MAP_HEIGHT - 2)
        map_array[x][y] = TRAP
 
 
def add_spawns():
    # добавляем точку спавна пользователя в левый верхний угол карты
    user_spawn_x = random.randint(3, 5)
    user_spawn_y = random.randint(3, 5)
    map_array[user_spawn_x][user_spawn_y] = USER_SPAWN
    spawn_points.append((user_spawn_x, user_spawn_y))
 
    # добавляем точку спавна нейросети в правый нижний угол карты
    neuro_spawn_x = MAP_WIDTH - random.randint(3, 25)
    neuro_spawn_y = MAP_HEIGHT - random.randint(3, 25)
    map_array[neuro_spawn_x][neuro_spawn_y] = NEURO_SPAWN
    spawn_points.append((neuro_spawn_x, neuro_spawn_y))
 
 
def add_level_exit():
    # Находим центр карты
    center_x = MAP_WIDTH // 2
    center_y = MAP_HEIGHT // 2
 
    # Находим координаты ближайшей точки спавна нейросети
    neuro_spawn_x = None
    neuro_spawn_y = None
    for x in range(MAP_WIDTH):
        for y in range(MAP_HEIGHT):
            if map_array[x][y] == NEURO_SPAWN:
                neuro_spawn_x = x
                neuro_spawn_y = y
                break
        if neuro_spawn_x is not None:
            break
 
    # Определяем, в какой половине карты находится нейросеть
    neuro_half = "left" if neuro_spawn_x < center_x else "right"
 
    # Выбираем случайную точку на той же стороне карты, где находится нейросеть
    if neuro_half == "left":
        exit_x = random.randint(5, center_x)
    else:
        exit_x = random.randint(center_x, MAP_WIDTH - 2)
    exit_y = random.randint(1, MAP_HEIGHT - 1)
 
    # Устанавливаем точку перехода на следующий уровень
    map_array[exit_x][exit_y] = EXIT
 
 
# Функция для инициализации карты
def map_init():
    # Добавляем стены на карту
    add_walls()
 
    # Добавляем ловушки на карту
    add_traps()
 
    # Добавляем точки спавна на карту
    add_spawns()
 
    # Добавляем точку перехода на следующий уровень
    add_level_exit()
 
 
# инициализируем карту
map_init()


Проблемы: константа COMPLEXITY по факту выражает не сложность, а легкость игры, то есть на значении 1 на карте вообще нет стен, также имеется достаточно много констант, которые дублируются не только в этом модуле и которые по хорошему надо бы вынести в отдельный файл const.py. Я это обязательно сделаю, но как-нибудь потом (возможно никогда).Остальное написано коряво, но работает вроде как правильно.

Модуль player.py (Нужен для создания, инициализации и отрисовки игрока в виде шестиугольника (это временно, пока нет текстуры))
Кликните здесь для просмотра всего текста

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
import math
import pygame
import map
 
 
class Player:
    def __init__(self, x=100, y=200):
        self.x = x
        self.y = y
        self.move_up_flag = False
        self.move_down_flag = False
        self.move_left_flag = False
        self.move_right_flag = False
 
    def move_up(self):
        if map.is_wall(self.x, self.y - 1):
            print("Cannot move up, there is a wall.")
        else:
            self.y -= 1
 
    def move_down(self):
        if map.is_wall(self.x, self.y + 1):
            print("Cannot move down, there is a wall.")
        else:
            self.y += 1
 
    def move_left(self):
        if map.is_wall(self.x - 1, self.y):
            print("Cannot move left, there is a wall.")
        else:
            self.x -= 1
 
    def move_right(self):
        if map.is_wall(self.x + 1, self.y):
            print("Cannot move right, there is a wall.")
        else:
            self.x += 1
 
    def handle_events(self, event):
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                self.direction = "up"
            if event.key == pygame.K_DOWN:
                self.direction = "down"
            if event.key == pygame.K_LEFT:
                self.direction = "left"
            if event.key == pygame.K_RIGHT:
                self.direction = "right"
 
    def draw(self, screen):
        # определяем цвет и размер игрока
        color = (0, 128, 255)
        radius = 5
 
        # определяем координаты вершин шестиугольника
        points = [
            (self.x + radius * math.cos(0), self.y + radius * math.sin(0)),
            (self.x + radius * math.cos(1 * math.pi / 3),
             self.y + radius * math.sin(1 * math.pi / 3)),
            (self.x + radius * math.cos(2 * math.pi / 3),
             self.y + radius * math.sin(2 * math.pi / 3)),
            (self.x + radius * math.cos(math.pi),
             self.y + radius * math.sin(math.pi)),
            (self.x + radius * math.cos(4 * math.pi / 3),
             self.y + radius * math.sin(4 * math.pi / 3)),
            (self.x + radius * math.cos(5 * math.pi / 3),
             self.y + radius * math.sin(5 * math.pi / 3))
        ]
 
        # рисуем шестиугольник
        pygame.draw.polygon(screen, color, points)
 
    def update(self):
        if self.move_up_flag:
            self.move_up()
        elif self.move_down_flag:
            self.move_down()
        elif self.move_left_flag:
            self.move_left()
        elif self.move_right_flag:
            self.move_right()


Проблемы: Player не ходит. Абсолютно отказывается ходить при нажатии w a s d. Подозреваю, что тут не только в модуле player, но в основном видимо в нем.

Последний модуль map_rendering.py (Изначально придумывался для того, чтобы тихо и спокойно рисовать карту и никого не трогать, но по факту кроме всего этого он еще является и main всей игры, а также свалкой, в которую импортируются все остальные модули.)
Кликните здесь для просмотра всего текста

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
import pygame
import map
from player import Player
 
# Константы для настройки карты
SCREEN_WIDTH = 1000  # ширина экрана
SCREEN_HEIGHT = 1000  # высота экрана
TILE_SIZE = 20  # размер одного квадратика на карте
WALL_TEXTURE = pygame.image.load("wall_texture.png")  # текстура стен
ROAD_TEXTURE = pygame.image.load("road_texture.png")  # текстура дороги
 
 
def set_screen_size(size):
    global screen_size
    screen_size = size
 
 
# Инициализация библиотеки pygame
pygame.init()
 
# Задаем размеры экрана
screen_size = (TILE_SIZE * 50, TILE_SIZE * 50)  # Здесь умножаем на 50,
# чтобы увеличить размер клеток в 50 раз
set_screen_size(screen_size)
 
# Создание окна
screen = pygame.display.set_mode(screen_size)
 
# Изменение размеров текстур для соответствия размеру клетки на карте
TEXTURE_SIZE = (20, 20)
wall_texture = pygame.transform.scale(WALL_TEXTURE, TEXTURE_SIZE)
road_texture = pygame.transform.scale(ROAD_TEXTURE, TEXTURE_SIZE)
 
# Функция для отрисовки карты на экране
 
 
def draw_map():
    for x in range(map.MAP_WIDTH):
        for y in range(map.MAP_HEIGHT):
            tile = map.map_array[x][y]
            tile_rect = pygame.Rect(
                x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE)
 
            # Отрисовка текстуры для стен
            if tile == map.WALL:
                screen.blit(wall_texture, tile_rect)
            # Отрисовка текстуры для дороги
            elif tile == map.EMPTY:
                screen.blit(road_texture, tile_rect)
            # Отрисовка текстуры для ловушки
            elif tile == map.TRAP:
                pygame.draw.rect(screen, (255, 0, 0), tile_rect)
            elif tile == map.USER_SPAWN:
                pygame.draw.rect(screen, (50, 205, 50), tile_rect)
            elif tile == map.NEURO_SPAWN:
                pygame.draw.rect(screen, (50, 50, 255), tile_rect)
            elif tile == map.EXIT:
                pygame.draw.rect(screen, (255, 255, 255), tile_rect)
 
# Функция для тестирования отрисовки карты
 
 
def test_map_rendering():
    # Создание объекта player
    player = Player()
 
    # Создание бесконечного цикла для отрисовки карты
    while True:
        # Обработка событий
        for event in pygame.event.get():
            player.handle_events(event)
            if event.type == pygame.QUIT:
                pygame.quit()
                return
 
        player.update()
 
        # Очистка экрана
        screen.fill((255, 255, 255))
 
        # Отрисовка карты
        draw_map()
 
        # Отрисовка игрока
        player.draw(screen)
 
        # Обновление экрана
        pygame.display.update()
 
 
# Запуск функции тестирования
test_map_rendering()


Проблемы: Можно было бы написать, что весь модуль - это одна сплошная проблема. Но в основном грешу на функцию test_map_rendering, которая изначально рисовала только красивую карту, но потом обрела игровой цикл и получилось то, что получилось. Больше всего грешу именно на этот модуль, ибо по идее его надо разнести на несколько. Как минимум вычленить из него часть main в отдельный модуль, а также убрать test_map_rendering. Также мне кажется, что причина того, почему Player не перемещается по карте именно в игровом цикле в фунции test_map_rendering.

В качестве общей проблемы уже наблюдаю не очень хорошую архитектуру проекта. У меня нет класса Map, хотя по идее он должен быть. Ну а про модули, которые будут создавать нейронку и обучать ее, а также давать пользователю полоску здоровья и возможность пуляться кружочками в нейронку я уж и не говорю. Пока застрял на передвижении пользователя.

Я буду крайне благодарен любой информации по теме, а также дельной критике и советам по исправлению. И особенно ревью кода, но только с пояснениями, ибо главная цель - разобраться, а не сдать работу(ибо на гитхабе полно работ, которые можно было бы сдать за свои. Это не тот случай.). Спасибо, что дочитали до конца.

Сама же игра выглядит вот так:
Миниатюры
Путанница и ошибки в самописной игре на питоне  
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2023, 22:24
Ответы с готовыми решениями:

Нужно сделать меню и рестарт после смерти в простенькой игре на питоне
Мне нужно меню с началом игры, информацией о себе и выходом а также после смерти возможность перезапустить игру пожалуйста помогите у...

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

Ошибки кодировок в Питоне при чтении файлов
Добрый день опять про &quot;charmap codec can't decode byte 0x98&quot; Я начинающий программист и уже второй день бьюсь с проблемой кодировок. ...

3
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
15.05.2023, 00:52  [ТС]
Уважаемые форумчане, очень прошу помощи. Сам не знаю уже как подступиться к проблеме. Мне нужно хотя бы мало мальски понять что не так и я найду способ это исправить
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
15.05.2023, 21:17
Цитата Сообщение от daniil_novel Посмотреть сообщение
Пока застрял на передвижении пользователя.
Написал небольшой шаблон, возможно поможет

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import pygame
import random
 
WIDTH,HEIGHT,FPS = 800,800,30
WHITE,BLACK,RED,GREEN,BLUE = (255, 255, 255),(0, 0, 0),(255, 0, 0),(0, 255, 0),(0, 0, 255)
WALL_TEXTURE = pygame.image.load("img/wall_texture.png") #текстура стен  (размер картинки 20x20)
PERS_TEXTURE = pygame.image.load("img/pers_texture.png") #текстура игрока (размер картинки 20x20)
 
tmap = [
        'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW',
        'W......................................W',
        'W...WWWW...............................W',
        'W......................................W',
        'W..............WWW.....................W',
        'W......................................W',
        'W...........................WWW........W',
        'W....W......................W..........W',
        'W....W....................WWW..........W',
        'W..WWW........................W........W',
        'W.............................W........W',
        'W..............................W.......W',
        'W..............................WWW.....W',
        'W.........WWW..........................W',
        'W...........W..........................W',
        'W...........W..........................W',
        'W......................................W',
        'W.....WWW....................E.........W',
        'W.......W..............................W',
        'W.......W..............................W',
        'W.......WWWW...........................W',
        'W................W.....................W',
        'W................W.....................W',
        'W................WWW...................W',
        'W......................................W',
        'W......................................W',
        'W......................................W',
        'W.............................WWWW.....W',
        'W......................................W',
        'W......................................W',
        'W......................................W',
        'W......................................W',
        'W...............WWW....................W',
        'W......................................W',
        'W......................................W',
        'W......................................W',
        'W.......WWWW...................P.......W',
        'W......................................W',
        'W......................................W',
        'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW',
        ]
 
class Player(pygame.sprite.Sprite):
    def __init__(self,x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = PERS_TEXTURE
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speedx = 0
        self.speedy = 0
 
    def collide_block(self, direction):
        if direction == 'x':
            hits = pygame.sprite.spritecollide(self, walls, False)
            if hits:
                if self.speedx > 0: self.rect.x = hits[0].rect.left - self.rect.width
                if self.speedx < 0: self.rect.x = hits[0].rect.right
                    
        if direction == 'y':
            hits = pygame.sprite.spritecollide(self, walls, False)
            if hits:
                if self.speedy > 0: self.rect.y = hits[0].rect.top - self.rect.height
                if self.speedy < 0: self.rect.y = hits[0].rect.bottom
              
    def update(self):
        self.speedx = 0
        self.speedy = 0
        keystate = pygame.key.get_pressed()
        
        if keystate[pygame.K_LEFT]: self.speedx = -8
        if keystate[pygame.K_RIGHT]: self.speedx = 8
        if keystate[pygame.K_UP]: self.speedy = -8
        if keystate[pygame.K_DOWN]: self.speedy = 8
        self.rect.x += self.speedx
        self.collide_block('x')
        self.rect.y += self.speedy
        self.collide_block('y')
        
        if self.rect.right > WIDTH: self.rect.right = WIDTH
        if self.rect.left < 0: self.rect.left = 0
        if self.rect.bottom > HEIGHT: self.rect.bottom = HEIGHT
        if self.rect.top < 0: self.rect.top = 0
 
class Wall(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = WALL_TEXTURE
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
 
class Enemy(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = PERS_TEXTURE
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 2
      
    def move_towards_player(self, player_x, player_y):
        if self.rect.x < player_x:
            self.rect.x += self.speed
        elif self.rect.x > player_x:
            self.rect.x -= self.speed
 
        if self.rect.y < player_y:
            self.rect.y += self.speed
        elif self.rect.y > player_y:
            self.rect.y -= self.speed
 
pygame.init()   # Создаем игру и окно
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
 
all_sprites = pygame.sprite.Group()
walls = pygame.sprite.Group()
enemies = pygame.sprite.Group()
 
for i,row in enumerate(tmap):         #Карта
    for j,column in enumerate(row):
        if column == 'W':             #Стена
            w = Wall(j*20,i*20)
            all_sprites.add(w)
            walls.add(w)
        if column == 'P':             # Игрок    
            player = Player(j*20,i*20)
            all_sprites.add(player)
        if column == 'E':             #Враг
            enemy = Enemy(j*20,i*20)
            all_sprites.add(enemy)
 
running = True # Цикл игры
while running:         
    for event in pygame.event.get():  # События
        if event.type == pygame.QUIT:
            running = False
        
# Обновление
    all_sprites.update()
    e = player.rect.x
    enemy.move_towards_player(e, player.rect.y)
#Рендеринг
    screen.fill((200,200,200))
    all_sprites.draw(screen)
 
    pygame.display.flip()
    clock.tick(FPS)
pygame.quit()
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
21.05.2023, 03:43  [ТС]
Спасибо, честно говоря, не особо помогло. Решение принципиально другое. Я уже пофиксил эту вещь. Оказывается, что с проверками перемудрил и не ту координату передавал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2023, 03:43
Помогаю со студенческими работами здесь

Путанница
Доброго времени суток. Некая проблема возникла, решение которой мне неизвестно. Вот всё хорошо: выводится ошибка, если вместо...

ValueError. Линейная регрессия и нахождение среднеквадратичной ошибки на питоне
В задаче требуется найти среднеквадратичное отклонение для заданного набора данных. X - хранит в себе признаки, y - ожидаемые ответы. По...

ARP путанница
Доброго времни суток всем. Запутался вот.... Какие записи должна содержать таблица маршрутизации шлюза, объединяющего две сети для...

Путанница с кодировками
Здравствуйте, буду очень признателен помощи. В общем перед правкой сайта сделал бэкап БД. Потом что-то намудрил в phpMyAdmin с...

Тайные знаки и путанница ссылок с указателями
Всего два вопроса. #include &lt;iostream&gt; using namespace std; void fn(int&amp; b) { int c = 0; do {


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru