Главная » 2016 » Март » 18 » Пишем игры на Python
15:59
Пишем игры на Python


Урок 1   Создаём простое игровое окно.

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

Для начала и знакомства программирования на Питоне удобно использовать сайт http://programarcadegames.com. В русской версии не плохо описаны операторы циклов и варианты использования элементарных прямоугольников. Но примеры программ можно использовать лишь в качестве простых конструкторов для полноценных  прикладных программ. Первая программа с движущимися частицами может быть использована как элемент создания футажей  с перемещающимися частицами по определенному закону. В видео можно посмотреть какие примеры кодов описываются на сайте http://programarcadegames.com.Ссылок на страницы кодов данного сайта не даю, так как процесс поиска интересующего вас материала позволит больше прочесть , а следовательно больше узнать о питоне.

 

Возможно создавать звёзды, снег, дождь, используя случайные числа. Самый простой способ: начать с цикла for для рисования кружков в случайных x,y позициях. Особенность кода в том ,что мы создаем снежинки(вернее их координаты -х и у) при помощи функции random до  основного цикла while.И заносим все снежинки в список.

 
for i in range(50):
x=random.randrange(0,400)
y=random.randrange(0,400)
star_list.append([x,y])

 

 
 

Внутри главного цикла while, программа может использовать цикл for для рисования каждой снежинки.

 
 
 
 

Копируем код программы в редактор и запускаем на исполнение.

 

попробуем разобрать простое игровое окно.

Код представляет собой окно черного цвета с падающим снегом белых точек.

значение каждой строки подписано, изменяем и удаляем элементы для закрепления практических навыков.

 

Код Python
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# СОЗДАЁМ ИГРОВОЕ ПОЛЕ рандомный снег



import pygame # импортируем библиотеку
import random # импортируем модуль генератора случайных чисел
window = pygame.display.set_mode((700,600))# создаём окно
pygame.display.set_caption('hello pygame') # титул строка

screen = pygame.Surface((700,600)) # создаем игровое поле

 
snow_list = [] # создаем пустой список
for i in range(50):# создаем 50 точек
 x = random.randrange(0,700) # координате присвоить случайное значение от 0 до 700
 y = random.randrange(0,600) # координате присвоить случайное значение от 0 до 600
 snow_list.append([x, y])# заносим в список


done = True# некая переменная
while done:# условие существования игрового цикла
 for e in pygame.event.get():# для любого события
 
 if e.type == pygame.QUIT:# если было закрытие окна
 done = False # цикл будет закончен(меняем значение условия жизни цикла)
 screen.fill((0,0,0)) # экран закрашиваем черным
 for item in snow_list: # для каждого элемента из списка snow_list
 item[1] += 1 # текущей координате у прибавляам 1
 pygame.draw.circle(screen,(255,255,255),item,2) # рисуем окружность(на экране (черным цветом),в х.у,радиусом 2)
 pygame.time.delay(1) # системная задержка(мили сек.)-умен
 
 if item[1]>600: # если координата у элемента больше600 то
 item[1] = 0 # координате у элемента присвоить значение 0
 item[0] = random.randrange(700) # координате х присвоить случайное значение до 700 
 
 window.blit(screen,(0,0))# на окне прорисовываем поле игры
 
 pygame.display.flip()# отображаем полностью дисплей(окно)

Добавляем эффект ветра - наклон падения снега:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# СОЗДАЁМ ИГРОВОЕ ПОЛЕ рандомный снег


import os
import pygame # импортируем библиотеку
import random # импортируем модуль генератора случайных чисел
window = pygame.display.set_mode((600,600))# создаём окно
pygame.display.set_caption('hello pygame') # титул строка

screen = pygame.Surface((600,600)) # создаем игровое поле

 
snow_list = [] # создаем пустой список
for i in range(150):# создаем 150 точек
 x = random.randrange(0,600) # координате присвоить случайное значение от 0 до 600
 y = random.randrange(0,600) # координате присвоить случайное значение от 0 до 600
 snow_list.append([x, y])# заносим в список


done = True# некая переменная
while done:# условие существования игрового цикла
 for e in pygame.event.get():# для любого события
 
 if e.type == pygame.QUIT:# если было закрытие окна
 done = False # цикл будет закончен(меняем значение условия жизни цикла)
 
 
 
 screen.fill((0,0,0)) # экран закрашиваем черным
 for item in snow_list: # для каждого элемента из списка snow_list
 item[0] -=1
 item[1] +=1 # текущей координате у прибавляам 1
 
 pygame.draw.circle(screen,(255,255,255),item,2) # рисуем окружность(на экране (,белым цветом),в х.у,радиусом 2)
 #pygame.time.delay(1) # системная задержка(мили сек.)-умен
 
 if item[1]>600 : # если координата у элемента больше600 то
 item[1] = 0 # координате у элемента присвоить значение 0
 item[0] = random.randrange(600) # координате х присвоить случайное значение до 600 
 
 if item[0]<0 : # если координата х элемента меньше 0, то
 item[0] = 600 # координате х элемента присвоить значение 600
 item[1] = random.randrange(600)
 window.blit(screen,(0,0))# на окне прорисовываем поле игры
 pygame.time.delay(2) # системная задержка(мили сек.)-умен
 pygame.display.flip()# отображаем полностью дисплей(окно)

 Код перемещение танков и их уничтожение:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
   
    
#!/usr/bin/env python
# -*- coding: utf-8 -*-import pygame


# СТРЕЛЯЛКА ПО БЛОКАМ ПУЛЕЙ

 

import pygame
import random
# Define some colors
BLACK = ( 0, 0, 0)
WHITE = ( 255, 255, 255)
RED = ( 255, 0, 0)
BLUE = ( 0, 0, 255)
# --- Classes
class Block(pygame.sprite.Sprite):

    def __init__(self,filename ):
# Call the parent class (Sprite) constructor
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(filename)
        self.rect = self.image.get_rect()
      
   
def update(self):
        self.rect.y += 1
        pygame.time.delay(3) # системная задержка(мили сек.)-уменьшаем скорость

class Player(pygame.sprite.Sprite):

    def __init__(self,filename):

# Call the parent class (Sprite) constructor
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(filename)
        self.rect = self.image.get_rect()
    def update(self):

# Get the current mouse position. This returns the position
# as a list of two numbers.
        pos = pygame.mouse.get_pos()
# Set the player x position to the mouse x position
        self.rect.x = pos[0]
class Bullet(pygame.sprite.Sprite):

    def __init__(self):
# Call the parent class (Sprite) constructor
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([4, 10])
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
    def update(self):
       
        self.rect.y -= 6
        
        # --- Create the window
# Initialize Pygame
pygame.init()

# Set the height and width of the screen
screen_width = 700
screen_height = 680
screen = pygame.display.set_mode([screen_width, screen_height])
#
#
all_sprites_list = pygame.sprite.Group()
# List of each block in the game
block_list = pygame.sprite.Group()
# List of each bullet
bullet_list = pygame.sprite.Group()
# --- Create the sprites

for i in range(20):
# This represents a block
    block = Block('t3.gif')
# Set a random location for the block
    block.rect.x = random.randrange(screen_width)
    block.rect.y = random.randrange(350)
# Add the block to the list of objects
    block_list.add(block)
    all_sprites_list.add(block)
 
 # Create a red player block
player = Player('t1.gif')
all_sprites_list.add(player)
#Loop until the user clicks the close button.
done = False
# Используется для управления  быстрого обновления экрана
clock = pygame.time.Clock()
score = 0
player.rect.y = 630
# -------- Main Program Loop -----------
while not done:
# --- Event Processing
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        elif event.type == pygame.MOUSEBUTTONDOWN:
# Fire a bullet if the user clicks the mouse button
            bullet = Bullet()
# передаем координаты игрока для пули
            bullet.rect.x = player.rect.x +15
            bullet.rect.y = player.rect.y
# Add the bullet to the lists
            all_sprites_list.add(bullet)
            bullet_list.add(bullet)
# --- Game logic
# Вызов метода Update() на все спрайты
    all_sprites_list.update()

  #Рассчитать механику для каждой пули
    for bullet in bullet_list:
# для каждой пули проверяем попадание в блок и блок заносим в список
        block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)
# Для каждого блока  удалить пулю и добавить к счету
        for block in block_hit_list:
            bullet_list.remove(bullet)
            all_sprites_list.remove(bullet)
            score += 1

# Удалить пулю, если она летит вверх за пределы экрана
        if bullet.rect.y < -10:
            bullet_list.remove(bullet)
            all_sprites_list.remove(bullet)

            # --- воспроизводим экран
# Clear the screen
    screen.fill((0,250,250))
# Draw all the spites
    all_sprites_list.draw(screen)
# Go ahead and update the screen with what we've drawn.
    pygame.display.flip()
# --- Limit to 20 frames per second
    clock.tick(60)
    
pygame.quit()

Категория: игры на Python | Просмотров: 4818 | Добавил: kuzma | Рейтинг: 4.0/1
Всего комментариев: 2
avatar
1 max99919991 • 21:53, 21.09.2016
я полностю сделал как у вас , но у меня не запускаеться
avatar
2 floydii1010 • 15:33, 08.02.2019
в коде ошибка в 27 строке, не читает код
avatar

Программирование игр на Python

Django - создание сайтов с нуля

Javascript - просто используем готовые решения