20 игр на Python своими руками с полным исходным кодом
20 проектов по созданию игр на Python с.полным кодом.
Делаем Марио. Создаем днопользовательскую игру, где игрок (Марио) должен уворачиваться от огненных шаров, вылетающих из дракона.
Это клон адаптация игры с динозавриком на google chrome под названием «T-Rex Dino Run».
Игра ведется в простом интерфейсе, в котором используются только кнопки и текст.
Человек может начать викторину, нажав на кнопку «Старт». Также можно выбрать тип слов, которые необходимо исправить в викторине.
Игра «Камень, бумага, ножницы» на Python разработана с использованием Tkinter и графического интерфейса пользователя (GUI).
Эта игра «Прыгающий мяч» использует Canvas для прорисовки объектов.
Игра «Виселица» не требует никаких специальных модулей, кроме random и time.
Игра «Змейка» — это классическая аркадная игра.
Военная игра «Самолеты» на Python на pygame
Это игра между компьютером и пользователем. Простая танковая игра Python.
Игра с хорощей графикой и удобным управлением.
Создаем свой тетрис на питоне.
Три крутые игры на Python с исходниками
Уверен, что вы хоть раз играли в эту интересную, но простую игру.
Цель этой игры, отбивать мяч от платформы и не упустить его.
При создании игры используются такие библиотеки как:
- tkinter, эта библиотека предустановленна на большинстве версиях Python и используется для создания самого оконного приложения.
- time, в нашем случае будет использоваться, что бы задать скорость мячу и платформе. Для установки зайдите в командную строку от имени администратора и напишите: pip install time проверьте что pip у вас установлен.
- random, в нашем случае будет использоваться , что бы мяч отскакивал в разных направлениях. Эта библиотека так же предустановленна на всех версиях Python.
- pygame, используется для создания графического интерфейса нашей игры. Эту библиотеку нужно скачать через командную строку, прописав: pip install pygame
from tkinter import * import time import random import pygame class Ball(): def __init__(self, canvas, platform, color): self.canvas = canvas self.platform = platform self.oval = canvas.create_oval(200, 200, 215, 215, fill=color) self.dir = [-3, -2, -1, 1, 2, 3] self.x = random.choice(self.dir) self.y = -1 self.touch_bottom = False def touch_platform(self, ball_pos): platform_pos = self.canvas.coords(self.platform.rect) if ball_pos[2] >= platform_pos[0] and ball_pos[0] <= platform_pos[2]: if ball_pos[3] >= platform_pos[1] and ball_pos[3] <= platform_pos[3]: return True return False def draw(self): self.canvas.move(self.oval, self.x, self.y) pos = self.canvas.coords(self.oval) if pos[1] <= 0: self.y = 3 if pos[3] >= 400: self.touch_bottom = True if self.touch_platform(pos) == True: self.y = -3 if pos[0] <= 0: self.x = 3 if pos[2] >= 500: self.x = -3 class Platform(): def __init__(self, canvas, color): self.canvas = canvas self.rect = canvas.create_rectangle(230, 300, 330, 310, fill=color) self.x = 0 self.canvas.bind_all(», self.left) self.canvas.bind_all(», self.right) def left(self, event): self.x = -2 def right(self, event): self.x = 2 def draw(self): self.canvas.move(self.rect, self.x, 0) pos=self.canvas.coords(self.rect) if pos[0] <= 0: self.x = 0 if pos[2] >= 500: self.x = 0 window = Tk() window.title(«Аркада») window.resizable(0, 0) window.wm_attributes(«-topmost», 1) canvas = Canvas(window, width=500, height=400) canvas.pack() platform = Platform(canvas, ‘green’) ball = Ball(canvas, platform, ‘red’) while True: if ball.touch_bottom == False: ball.draw() platform.draw() else: break window.update() time.sleep(0.01) window.mainloop()=>
Вот и весь код для этой интересной, простой и увлекательной игры. Вы так же можете модернизировать игру, добавив в неё например количество балов за отбитые мячи, или второй мяч.
Игра №2. Тетрис.
Эту игру знают все! Главная задача игрока не дать разным, геометрическим фигурам достигнуть «ФИНИША».
import sys, random from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication from PyQt5.QtCore import Qt, QBasicTimer, pyqtSignal from PyQt5.QtGui import QPainter, QColor
Вы видите библиотеки, которые будут использоваться при создании данной игры, всех их нужно загрузить через командную строку вашего компьютера.
После того как установили нужные нам библиотеки, создаём класс с нашими переменными. класс назовём Tetris и будем использовать свойства отцовского класса, чтобы каждый раз не прописывать все переменные заново для каждого последующего класса.
class Tetris(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.tboard = Board(self) self.setCentralWidget(self.tboard) self.statusbar = self.statusBar() self.tboard.msg2Statusbar[str].connect(self.statusbar.showMessage) self.tboard.start() self.resize(180, 380) self.center() self.setWindowTitle(‘Tetris’) self.show() def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
После создания отцовского класса Tetris, создаём все остальные классы и переменные для уже других функций.
class Board(QFrame): msg2Statusbar = pyqtSignal(str) BoardWidth = 10 BoardHeight = 22 Speed = 300 def __init__(self, parent): super().__init__(parent) self.initBoard() def initBoard(self): self.timer = QBasicTimer() self.isWaitingAfterLine = False self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.board = [] self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard() def shapeAt(self, x, y): return self.board[(y * Board.BoardWidth) + x] def setShapeAt(self, x, y, shape): self.board[(y * Board.BoardWidth) + x] = shape def squareWidth(self): return self.contentsRect().width() // Board.BoardWidth def squareHeight(self): return self.contentsRect().height() // Board.BoardHeight def start(self): if self.isPaused: return self.isStarted = True self.isWaitingAfterLine = False self.numLinesRemoved = 0 self.clearBoard() self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.newPiece() self.timer.start(Board.Speed, self) def pause(self): if not self.isStarted: return self.isPaused = not self.isPaused if self.isPaused: self.timer.stop() self.msg2Statusbar.emit(«paused») else: self.timer.start(Board.Speed, self) self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.update()
def paintEvent(self, event): painter = QPainter(self) rect = self.contentsRect() boardTop = rect.bottom() — Board.BoardHeight * self.squareHeight() for i in range(Board.BoardHeight): for j in range(Board.BoardWidth): shape = self.shapeAt(j, Board.BoardHeight — i — 1) if shape != Tetrominoe.NoShape: self.drawSquare(painter, rect.left() + j * self.squareWidth(), boardTop + i * self.squareHeight(), shape) if self.curPiece.shape() != Tetrominoe.NoShape: for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY — self.curPiece.y(i) self.drawSquare(painter, rect.left() + x * self.squareWidth(), boardTop + (Board.BoardHeight — y — 1) * self.squareHeight(), self.curPiece.shape()) def keyPressEvent(self, event): if not self.isStarted or self.curPiece.shape() == Tetrominoe.NoShape: super(Board, self).keyPressEvent(event) return key = event.key() if key == Qt.Key_P: self.pause() return if self.isPaused: return elif key == Qt.Key_Left: self.tryMove(self.curPiece, self.curX — 1, self.curY) elif key == Qt.Key_Right: self.tryMove(self.curPiece, self.curX + 1, self.curY) elif key == Qt.Key_Down: self.tryMove(self.curPiece.rotateRight(), self.curX, self.curY) elif key == Qt.Key_Up: self.tryMove(self.curPiece.rotateLeft(), self.curX, self.curY) elif key == Qt.Key_Space: self.dropDown() elif key == Qt.Key_D: self.oneLineDown() else: super(Board, self).keyPressEvent(event) def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if self.isWaitingAfterLine: self.isWaitingAfterLine = False self.newPiece() else: self.oneLineDown() else: super(Board, self).timerEvent(event) def clearBoard(self): for i in range(Board.BoardHeight * Board.BoardWidth): self.board.append(Tetrominoe.NoShape) def dropDown(self): newY = self.curY while newY > 0: if not self.tryMove(self.curPiece, self.curX, newY — 1): break newY -= 1 self.pieceDropped() def oneLineDown(self): if not self.tryMove(self.curPiece, self.curX, self.curY — 1): self.pieceDropped() def pieceDropped(self): for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY — self.curPiece.y(i) self.setShapeAt(x, y, self.curPiece.shape()) self.removeFullLines() if not self.isWaitingAfterLine: self.newPiece()
def removeFullLines(self): numFullLines = 0 rowsToRemove = [] for i in range(Board.BoardHeight): n = 0 for j in range(Board.BoardWidth): if not self.shapeAt(j, i) == Tetrominoe.NoShape: n = n + 1 if n == 10: rowsToRemove.append(i) rowsToRemove.reverse() for m in rowsToRemove: for k in range(m, Board.BoardHeight): for l in range(Board.BoardWidth): self.setShapeAt(l, k, self.shapeAt(l, k + 1)) numFullLines = numFullLines + len(rowsToRemove) if numFullLines > 0: self.numLinesRemoved = self.numLinesRemoved + numFullLines self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.isWaitingAfterLine = True self.curPiece.setShape(Tetrominoe.NoShape) self.update() def newPiece(self): self.curPiece = Shape() self.curPiece.setRandomShape() self.curX = Board.BoardWidth // 2 + 1 self.curY = Board.BoardHeight — 1 + self.curPiece.minY() if not self.tryMove(self.curPiece, self.curX, self.curY): self.curPiece.setShape(Tetrominoe.NoShape) self.timer.stop() self.isStarted = False self.msg2Statusbar.emit(«Game over») def tryMove(self, newPiece, newX, newY): for i in range(4): x = newX + newPiece.x(i) y = newY — newPiece.y(i) if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight: return False if self.shapeAt(x, y) != Tetrominoe.NoShape: return False self.curPiece = newPiece self.curX = newX self.curY = newY self.update() return True def drawSquare(self, painter, x, y, shape): colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00] color = QColor(colorTable[shape]) painter.fillRect(x + 1, y + 1, self.squareWidth() — 2, self.squareHeight() — 2, color) painter.setPen(color.lighter()) painter.drawLine(x, y + self.squareHeight() — 1, x, y) painter.drawLine(x, y, x + self.squareWidth() — 1, y) painter.setPen(color.darker()) painter.drawLine(x + 1, y + self.squareHeight() — 1, x + self.squareWidth() — 1, y + self.squareHeight() — 1) painter.drawLine(x + self.squareWidth() — 1, y + self.squareHeight() — 1, x + self.squareWidth() — 1, y + 1)
После создаём класс уже для самих объектов( фигур), назовём его Tetrominoe.
class Tetrominoe(object): NoShape = 0 ZShape = 1 SShape = 2 LineShape = 3 TShape = 4 SquareShape = 5 LShape = 6 MirroredLShape = 7
И ещё один класс, но уже будем задавать координаты фигурам.
class Shape(object): coordsTable = ( ((0, 0), (0, 0), (0, 0), (0, 0)), ((0, -1), (0, 0), (-1, 0), (-1, 1)), ((0, -1), (0, 0), (1, 0), (1, 1)), ((0, -1), (0, 0), (0, 1), (0, 2)), ((-1, 0), (0, 0), (1, 0), (0, 1)), ((0, 0), (1, 0), (0, 1), (1, 1)), ((-1, -1), (0, -1), (0, 0), (0, 1)), ((1, -1), (0, -1), (0, 0), (0, 1)) ) def __init__(self): self.coords = [[0,0] for i in range(4)] self.pieceShape = Tetrominoe.NoShape self.setShape(Tetrominoe.NoShape) def shape(self): return self.pieceShape def setShape(self, shape): table = Shape.coordsTable[shape] for i in range(4): for j in range(2): self.coords[i][j] = table[i][j] self.pieceShape = shape def setRandomShape(self): self.setShape(random.randint(1, 7)) def x(self, index): return self.coords[index][0] def y(self, index): return self.coords[index][1] def setX(self, index, x): self.coords[index][0] = x def setY(self, index, y): self.coords[index][1] = y def minX(self): m = self.coords[0][0] for i in range(4): m = min(m, self.coords[i][0]) return m
И завершаем наш код
def maxX(self): m = self.coords[0][0] for i in range(4): m = max(m, self.coords[i][0]) return m def minY(self): m = self.coords[0][1] for i in range(4): m = min(m, self.coords[i][1]) return m def maxY(self): m = self.coords[0][1] for i in range(4): m = max(m, self.coords[i][1]) return m def rotateLeft(self): if self.pieceShape == Tetrominoe.SquareShape: return self result = Shape() result.pieceShape = self.pieceShape for i in range(4): result.setX(i, self.y(i)) result.setY(i, -self.x(i)) return result def rotateRight(self): if self.pieceShape == Tetrominoe.SquareShape: return self result = Shape() result.pieceShape = self.pieceShape for i in range(4): result.setX(i, -self.y(i)) result.setY(i, self.x(i)) return result if __name__ == ‘__main__’: app = QApplication([]) tetris = Tetris() sys.exit(app.exec_())
Прикрепил код по кусочкам, код длинный единым кодом его не прикрепить.
Это немного не то, о чём вы подумали, это танки «на бумаге» они работают без графического интерфейса, выводя информацию на экран.
Для создания данной игры нам потребуется всего ода библиотека, random.
Создадим два обычных танка, которые будут иметь рандомный домаг, и один супер танк, у которого будет много xp и урона. У всех танков будет определённое количество xp, урона и брони, а так же свой экипаж.
import random class Tank: «»»Template of tanks»»» def __init__(self, model, armor, min_damage, max_damage, health): self.model = model self.armor = armor self.damage = random.randint(min_damage, max_damage) self.health = health def print_info(self): print(f»
Но если вы запустите нашу игру, ничего не произойдёт. Нужно прописать команду, которой танки будут стрелять друг по другу.
tank1 = Tank(«T-34», 90, 20, 30, 100) tank2 = Tank(«Tiger», 120, 10, 50, 120) tank1.print_info() tank2.print_info() tank1.shot(tank2) tank1.shot(tank2) tank1.shot(tank2) tank1.shot(tank2) tank1.shot(tank2) tank1.shot(tank2) tank1.shot(tank2)
Вот полный код программы:
import random class Tank: «»»Template of tanks»»» def __init__(self, model, armor, min_damage, max_damage, health): self.model = model self.armor = armor self.damage = random.randint(min_damage, max_damage) self.health = health def print_info(self): print(f»
Вы можете менять количество выстрелов и т.п.
Если хотите больше крутых кодов на Python, поддержите копеечкой 🙂 вот если что, номер карты: 2202 2067 9305 7600
Какие игры написаны на пайтоне
В этой статье рассмотрим игры, для написания которых использовался пайтон . Python курсы обучают детей создавать собственные игры на пайтоне и других языках.
Sims 4
Игра, что уже много лет держится в лидерах среди игр по симуляции жизни. И по показателям Симс 4 стала самой покупаемой игрой среди женщин. После выхода игры в мир за первые четверо суток было куплено 408,150 экземпляров в разных странах. Всего на сегодня куплено более 1.1 миллиона копий этой игры. Sims 4 использует пайто н для реализации игрового моддинга , что дало возможность без проблем дополнять игру и изменять ее параметры.
Battlefield
Battlefield — любимая игра многих. Она не написана всецело на Python. Но разработчики использовали этот язык для серверных элементов и отдельных скриптов для управления логикой игры. Пайтон помог ускорить процесс создания игры и не отразился на производительности. Battlefield вышла в 2005 году и имеет спрос в жанре симулятор войны.
EVE Online
Игра EVE Online многопользовательская. Каждый выбирает для себя роль и переноситься в мир научной-фантастики. На данный момент база игры насчитывает около 500 000 участников. Написана игра всецело на StacklessPython, поэтому эта игра является одним из самых ярких представителей игр написанных на Python.
Mount & Blade
Компьютерная ролевая игра, что не имеет аналогов. Игрок помещается в эпоху среднего века. Отправляется в путешествие по широкомасштабной карте, собирает армию и сражается с противниками в реальном времени. Все скрипты игры написаны на пайтоне . Благодаря этому игра может быть модульной, к ней можно легко сделать дополнение и внести изменения в механизм игры, анимацию и текстуры. При этом системные файлы останутся без изменений. Интересный факт, что Mount & Blade создали всего два человека — муж с женой.
Программист обучение
Если ваш ребенок увлекается играми, то направление программирования откроет для него цифровой мир. В котором он сможет создать собственную игру. В этом поможет питон для школьников, как вы уже убедились, этот язык используют даже всемирно известные игры.
Civilization IV
Игра в жанре пошаговой стратегии. Каждый выбирает свою стратегию: быть дипломатом, что мирным путем завоюет весь мир или идти в наступление и отвоевать мир у противников.
Для создания этой игры разработчики в большей части использовали Python. Это дает игрокам возможность сделать свою модификацию игры.
Frets On Fire (FoF)
Игра код, который может просмотреть кто угодно. Это музыкальная игра, что имитирует подобную игру Guitar Hero. FoF полностью создана на пайтоне , что позволяет начинающим разработчикам использовать игру как платформу для практики и изучения кодинга .
Если после прочтения этой статьи вы вдохновились на изучение языка программирования Python, то IT курсы обучают детей с нуля.
Программирование с онлайн школой программирования для детей — это самый быстрый и эффективный способ научиться кодингу . Мы имеем широкий выбор различных направлений для разного возраста и уровня знаний. У нас есть 2 формата обучения: онлайн и в офисе. IT школа находиться на м. Академгородок, м. Житомирская.
Оставьте номер и мы поможем подобрать курс
Сделай шаг к успешному будущему
ТОП интересных программ, написанных на Python
Python – один из пяти самых востребованных языков программирования. Его применяют в разных IT-сферах, включая веб-разработку, машинное обучение, разработку приложений и так далее. Ниже представлены интересные проекты на Python для начинающих и опытных программистов.
Проекты, созданные с участием Python
С помощью этого языка программирования было создано немало разработок, но не всех из них обрели успех. Однако, есть крупные проекты на Python, о которых стоит узнать. К ним относятся программы, игры и сайты.
Игры
На Python разработали сотни простых проектов небольшого масштаба, но, чтобы в полной мере оценить возможности этого языка, рассмотрим только крупные.
Mount and Blade
Mount and blade – это RPG, у которого отсутствуют аналоги. Это целый средневековый мир с глобальной картой. Игрок может путешествовать по нему, создавать армию, завоевывать себе славу и власть. Главное отличие – битва в стиле средневекового симулятора сражений, управление персонажем от третьего лица, наличие огромного количества воинов, следующих приказам. Эта система уникальна и не имеет аналогов. В ней собраны стратегия, RPG и экшн. Масштаб игры поистине впечатляет.
Для написания всех скриптов использовался Python. Для игры не нужен мощный компьютер. Благодаря применению Python возможна модуляция проекта. При желании, умелые пользователи могут самостоятельно дополнять игру механикой, текстурой и анимацией. Системные файлы игры, при этом, остаются неизменными.
Battlefield
Battlefield – игра, нашедшая место в сердцах миллионов пользователей. На Python были написаны несколько ее скриптов, логика и серверная часть.
Дата выхода игры – 2005 год. Она обладала подходящими для компьютеров тех лет системными требованиями. Благодаря участию Python, процесс разработки шел быстрее.
EVE Online
В EVE Online Python стал основой для разработки игровой логики и серверной части. Использовалась улучшенная версия интерпретатора.
Sims 4
Sims является самым известным симулятором жизни. Сложно найти игру, более востребованную среди лиц женского пола. Она всегда успешно продавалась. Python использовался, чтобы обеспечить игровой моддинг. Пользователи могут расширить игровые возможности, создавая дополнительный контент
Программы
BitTorrent
Этот торрент-клиент занимает лидирующую позицию среди всех программ в своей категории. Его полностью написали на Python (до шестой версии).
Blender
Отличная программа для 3D-дизайнеров. Благодаря большому количеству преимуществ, может составить конкуренцию даже таким гигантам, как Maya и 3DMax. С помощью Python разработчики создали логику, импорт, экспорт, автоматическое выполнение задач и работу инструментов. Программа бесплатная.
GIMP
GIMP – популярный редактор, позволяющий работать с растровой и векторной графикой. Это достойная замена Adobe Photoshop. С помощью Python были созданы фильтры, дополнительные модули и некоторые скрипты.
Конечно, это далеко не весь список проектов на Python. Такая востребованность данного языка программирования подтверждает его пригодность для создания качественного программного обеспечения.
Ближайшие наборы на курсы
Обучение проводится offline и online.
Подробности уточняйте у наших специалистов.
Уважаемые студенты, записывайтесь, пожалуйста, заранее: за неделю до начала курса, как правило, свободных мест уже не остается
Курс: Компьютер с нуля
Группа по выходным
Занятия: сб, вс 10:00 – 12:30
Длительность: 24 ак. часа
Начало: 09 марта 2024
Свободные места: нет Стоимость: 270 бел. рублей
Стоимость: 216 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Бизнес-анализ в сфере разработки ПО
Группа по выходным
Занятия: сб, вс 11:00 – 14:00
Длительность: 64 ак. часа
Начало: 09 марта 2024
Свободные места: 1 место Стоимость: 950 бел. рублей
Стоимость: 760 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Тестирование ПО
Группа по выходным
Занятия: сб, вс 10:00 – 13:00
Длительность: 64 ак. часа
Начало: 09 марта 2024
Свободные места: 1 место Стоимость: 950 бел. рублей
Стоимость: 760 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Управление проектами в сфере разработки ПО
Группа по будням
Занятия: вт, чт 19:00 – 22:00
Длительность: 64 ак. часа
Начало: 12 марта 2024
Свободные места: 2 места Стоимость: 950 бел. рублей
Стоимость: 903 бел. рубля
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Компьютер с нуля
Группа по будням (вечерняя)
Занятия: ср, пт 19:00 – 21:30
Длительность: 24 ак. часа
Начало: 13 марта 2024
Свободные места: 3 места
Стоимость: 270 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Программирование Java SE (базовый уровень)
Группа по будням
Занятия: вт, чт 19:00 – 22:00
Длительность: 160 ак. часов
Начало: 14 марта 2024
Свободные места: есть Стоимость: 2490 бел. рублей
Стоимость: 2241 бел. рубль
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Компьютер с нуля
Группа по будням (дневная)
Занятия: вт, чт 13:00 – 15:30
Длительность: 24 ак. часа
Начало: 14 марта 2024
Свободные места: 3 места Стоимость: 270 бел. рублей
Стоимость: 243 бел. рубля
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Программирование Python/Django
Группа по будням
Занятия: пн, чт 19:00 – 22:00
Длительность: 160 ак. часов
Начало: 14 марта 2024
Свободные места: 5 мест Стоимость: 2490 бел. рублей
Стоимость: 2241 бел. рубль
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Тестирование ПО
Группа по будням
Занятия: вт, пт 19:00 – 22:00
Длительность: 64 ак. часа
Начало: 15 марта 2024
Свободные места: есть
Стоимость: 950 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Углубленный офис (Word, Excel)
Группа по выходным
Занятия: сб, вс 10:00 – 12:30
Длительность: 30 ак. часов
Начало: 16 марта 2024
Свободные места: 1 место
Стоимость: 350 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: 3D моделирование
Группа по будням(дизайн)
Занятия: пн, пт 19:00 – 22:00
Длительность: 120 ак. часов
Начало: 18 марта 2024
Свободные места: 5 мест Стоимость: 1745 бел. рублей
Стоимость: 1570 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Web-разработки на JavaScript(React), HTML, CSS
Группа по будням
Занятия: вт, чт 19:00 – 22:00
Длительность: 160 ак. часов
Начало: 19 марта 2024
Свободные места: 5 мест Стоимость: 2490 бел. рублей
Стоимость: 2241 бел. рубль
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Автоматизация тестирования ПО
Группа по будням
Занятия: вт, чт 19:00 – 22:00
Длительность: 128 ак. часов
Начало: 26 марта 2024
Свободные места: есть Стоимость: 1890 бел. рублей
Стоимость: 1795 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Тестирование ПО
Группа по выходным
Занятия: сб, вс 10:00 – 13:00
Длительность: 64 ак. часа
Начало: 30 марта 2024
Свободные места: есть
Стоимость: 950 бел. рублей
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!
Курс: Интернет-маркетинг
Группа по будням
Занятия: пн, ср 18:30 – 21:30
Длительность: 64 ак. часа
Начало: 01 апреля 2024
Свободные места: есть Стоимость: 950 бел. рублей
Стоимость: 903 бел. рубля
ПОЛУЧИТЬ СКИДКУ
Возможна оплата по частям!