Главная » 2015 » Июнь » 11 » УРОК 6 Варианты кнопок меню
17:41
УРОК 6 Варианты кнопок меню

Варианты оформления и реализации кнопок для меню

Если вы прошли предыдущие уроки и у вас возникло желание улучшить ваши разработки предлагаю варианты организации кнопок.

пример программы - сохраняем рисунки и музыку с урока 3 в туже папку, что и командный код и добавляем рисунки:

b1.gif b2.gif

mash1.gif    b3.gif

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Добавляем к статической странице кнопки при помощи класса Sprite

import sys
import os
import pygame
pygame.init()

# окно
window = pygame.display.set_mode((600,630))# создаём окно
pygame.display.set_caption('Masha and Misha') # титул строка
# поле игры-холст
info_string = pygame.Surface((600,30)) # информационная строка
screen = pygame.Surface((600,600)) # создаем игровое поле(экран)
pygame.font.init() # иницифлизация модуля шрифтов       
 
# загрузка музыки
#pygame.mixer.music.load('music1.mp3')
def men(a,b):     # отображение клавиш упрвления из пункта OPTION меню
    done = True   # условие существования цикла меню
    pygame.mixer.music.stop()
    pygame.key.set_repeat(0,0) # отключение залипания кнопок
    pygame.mouse.set_visible(True) # курсор мышки видим
    
    
        
    while done:
        screen.fill((100,0,200)) # закраска игрового поля(экрана меню)
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                sys.exit()
            if e.type == pygame.KEYDOWN:
                
                if e.key == pygame.K_ESCAPE:
                    done = False   
        

                    
                              
        im2 = pygame.transform.flip(im1,True,False)# переворот изображения im1 - горизонтально
        screen.blit(im1,(40,140)) # отображаем картинку
        screen.blit(im2,(420,140)) # отображаем картинку
         # отображаем информационную строку
        screen.blit(b,(180,100))
        screen.blit(inf_font.render(u'движение вниз - курсор DOWN',1,(0,250,250)),(130,260))   
        screen.blit(inf_font.render(u'движение вверх - курсор UP',1,(0,250,250)),(130,300))
        screen.blit(inf_font.render(u'движение влево - курсор LEFT',1,(0,250,250)),(130,340))
        screen.blit(inf_font.render(u'движение вправо - курсор RIGHT',1,(0,250,250)),(130,380))
        screen.blit(inf_font.render(u'огонь - ПРОБЕЛ',1,(0,250,250)),(180,200))
        screen.blit(inf_font.render(u'выход в меню - ESC',1,(0,250,250)),(180,500))
        window.blit(screen,(0,30)) # прорисовка на окне экрана для меню
            
                       
        pygame.display.flip()   # всё отобразить          

class Sprite:
    def __init__(self,xpos,ypos,filename):
        self.x = xpos
        self.y = ypos
        self.bitmap=pygame.image.load(filename) # создаем рисунок-загрузка из файла
        
    def obgrey (self):# отображение обьекта на игровом поле(экране)
        screen.blit(pygame.transform.flip(self.bitmap,True,False),(self.x,self.y))    
         
         
    
    def render (self):# отображение обьекта на игровом поле(экране)
        screen.blit(self.bitmap,(self.x,self.y))


def Intersect(x1,x2,y1,y2,dl1,dl2):# dl1,dl2-параметры цели----функция столкновения
    if (x1>x2-dl1) and (x1<x2+dl1) and (y1>y2-dl2) and (y1<y2+dl2):
        return 1
    else:
        return 0                    
        
class Button(pygame.sprite.Sprite): # класс кнопка загружаем картинку кнопки
    def __init__(self,x,y,filename ):#(название,коорд х,коорд у,название файла картинки)

        pygame.sprite.Sprite.__init__(self)
       
        self.image = pygame.image.load(filename)# загружаем картинку из файла
        self.rect = self.image.get_rect() # определяем экземпляр как прямоугольник,координаты как у прямоугольника
        self.rect[0] = x #присваиваем положение координатам
        self.rect[1] = y
        all_sprites_list.add(self)# заносим в список всех спрайтов
    def update(self,w,h):
        click = pygame.mouse.get_pressed() # нажатие кнопки мышки
        mouse = pygame.mouse.get_pos() # кооздинаты мышки
        # Проверка положения курсора мышки - не находится ли он на кнопке
        if self.rect[0]+w>mouse[0]>self.rect[0] and self.rect[1]+h+30>mouse[1]>self.rect[1]+30:
            screen.blit(im,(self.rect[0]+w,self.rect[1]))
            if click[0] == 1:#если нажата левая кнопка
                if self == close:#если кнопка = закрыть
                    sys.exit() #выйти в систему
                if self == game:#если копка играть
                    games()# переходим к функции игра
                if self == options:#если кнопка функции
                    men(im1,b) # переходим к  функции описания клавиш             
        

       
inf_font = pygame.font.SysFont('Comic Sans MS',24) #задаём шрифт
all_sprites_list = pygame.sprite.Group() # список спрайтов (для использования функции отображения draw)
        
# поле игры-холст

close = Button(160,450,'b1.gif')# создаём кнопку 1  
game = Button(178,300,'b2.gif')# создаём кнопку 2
options = Button(200,175,'b3.gif')# создаём кнопку 3
b = inf_font.render(u'клавиши управления',1,(0,250,250)) # строка в подпункте
im1 =pygame.image.load(u'm2.gif') # создаём картинку 1
im =pygame.image.load(u'mash1.gif') # создаём картинку маши
def games():
    pygame.font.init() # иницифлизация модуля шрифтов       
    speed_font =pygame.font.SysFont('Comic Sans MS',24)        
    inf_font = pygame.font.SysFont('Comic Sans MS',24)
    label_font = pygame.font.Font(None,32)# создаем рабочий шрифт(None-стандарт,32-размер)        

    im1 =pygame.image.load(u'm2.gif')
    hero = Sprite(200,350,'mash2.gif')# создаём героя маша
    fon = Sprite(0,0,'fon1.gif')

    zet = Sprite(10,100,'m2.gif')# создаём цель миша

    zet.right = False

    strela=Sprite(-60,350,'banca.gif')# создание стрелы      
    strela.push = False

 

# загрузка звуков
    sound1 = pygame.mixer.Sound('s11.wav')
    sound2 = pygame.mixer.Sound('s2.ogg')

# подготовка к игре
    arrow_color = 250
    zet.step = 0.6 # начальная скорость движения-миша
    enumerator = 0 # количество попаданий(счёт)
    dd = 0 #количество патронов
    pygame.key.set_repeat(1,1)# повтор нажатия

    
   
   
    dum = True
    while dum:# условие существования игрового цикла
    
    #pygame.mixer.music.stop()
    

        for e in pygame.event.get():# для любого события
        
            if e.type == pygame.QUIT:# если было закрытие окна
                sys.exit()
        #if dum == False:
            #men(am1,b)      
        
   
            if e.type == pygame.KEYDOWN: # если была нажата клавиша
                if e.key == pygame.K_LEFT:
                    if hero.x >10:
                        hero.x -= 1
                if e.key == pygame.K_RIGHT:
                    if hero.x <550:
                        hero.x += 1                
                if e.key == pygame.K_UP:
                    if hero.y >270:
                        hero.y -= 1
                if e.key == pygame.K_DOWN:
                    if hero.y <580:
                        hero.y += 1        
                if e.key == pygame.K_SPACE:
                    if strela.push == False:
                        strela.x = hero.x        
                        strela.y = hero.y
                        strela.push = True   # для ограничения запуска следующей стрелы
                if e.key == pygame.K_ESCAPE:  # выход в меню по нажатию ESC
                    dum = False
                    pygame.key.set_repeat(1,1)  # включение залипания
                    pygame.mouse.set_visible(False) # курсор не видим
                
            if e.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[2]:
                           
                    m = pygame.mouse.get_pos()
                    hero.x = m[0]-25
                    hero.y= m[1]-50
        
            if e.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[0]:
                    if strela.push == False:
                        strela.x = hero.x
                        strela.y = hero.y
                        strela.push = True
        
            if e.type == pygame.MOUSEMOTION:# перемещение героя мышкой  
                pygame.mouse.set_visible(False) # скрытие курсора       
                m = pygame.mouse.get_pos()    # получение координат мыши
                if m[0]>10 and m[0]<550:    # ограничение выхода героя за мышкой
                    hero.x = m[0]# передача координат герою
                if m[1]>300 and m[1]<550:
                    hero.y= m[1]
# закраска           
        screen.fill((25,250,70))# зарисовка игрового поля(экрана)    
        info_string.fill((45,90,45))
 # изменение цвета названия- плавно   
        arrow_color +=0.1
        if arrow_color >250:
            arrow_color = 100
# движение до границы поля и переключения движения-миша
   
        if zet.right == True:
            zet.x += zet.step       # можем менять скорость
        
   
            if zet.x >510:
                zet.right = False
        else:
            zet.x -= zet.step  
        
            if zet.x <0:
                zet.right = True
    
    
   
        if strela.push == True:# движение стрелы
            if strela.y>0:
                strela.y -=1
            else:
                strela.x = -60
                strela.push = False
                dd +=1
            # звук промаха
                sound_channel = sound2.play()
        if Intersect(strela.x,zet.x,strela.y,zet.y,48,48) == True:# условие столкновения
            strela.x = -60
            strela.push = False
            zet.step -=0.1
            enumerator +=1
            dd +=1
        # звук попадания
            sound_channel = sound1.play()
 # отображаем информационную строку
        info_string.blit(inf_font.render(u'сьел: '+str(enumerator),1,(0,250,250)),(5,0))
        info_string.blit(speed_font.render(u'баночки-'+str(dd),1,(250,250,0)),(450,0))    
        info_string.blit(label_font.render(u'маша+миша',1,(0,arrow_color,10)),(200,5))
 
 # отображаем элементы#
        fon.render()
    
        if zet.right == False:
            zet.render()
        else:
            zet.obgrey()
    
    
        strela.render()
        hero.render()
        window.blit(info_string,(0,0))# на окне прорисовываем информационную строку
    
        window.blit(screen,(0,30))# на окне прорисовываем поле игры
   
        pygame.display.flip()# отображаем полностью дисплей(окно)
        if enumerator == 6:
            zet.step = 0.6
            enumerator = 0
            dd = 0
            
            dum = False
            pygame.key.set_repeat(1,1)# повтор нажатия
            pygame.mouse.set_visible(False) # курсор не видим


done = True  # создаем условие существования цикла игры
while done:
    pygame.mouse.set_visible(True)
    screen.fill((100,0,200)) # закраска игрового поля
    for e in pygame.event.get():   # для любого события  
        if e.type == pygame.QUIT:  # если событие выход(крестик)
            sys.exit()                     # выход в систему
        if e.type == pygame.KEYDOWN:         # если событие нажатие клавиши
            if e.key == pygame.K_ESCAPE:     # если клавиша Esc
                sys.exit()                    # выход в систему
    
   
    
    screen.blit(im1,(440,40)) # на экране отобразить рис1(m1) в координате х=240, у=140
    im2 = pygame.transform.flip(im1,True,False)# поворот обьекта im1 - горизонтально    
    screen.blit(im2,(40,40)) # отображение обьекта im2 на экране  
    all_sprites_list.draw(screen)      
    options.update(200,80)
    game.update(240,90)
    close.update(270,90)
    window.blit(screen,(0,30)) # прорисовка на окне экрана для меню
            
                       
    pygame.display.flip()

Пример 2  

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Добавляем к статической странице кнопки при помощи класса Sprite

import sys
import os
import pygame
pygame.init()

# окно
window = pygame.display.set_mode((600,630))# создаём окно
pygame.display.set_caption('Masha and Misha') # титул строка
# поле игры-холст
info_string = pygame.Surface((600,30)) # информационная строка
screen = pygame.Surface((600,600)) # создаем игровое поле(экран)
pygame.font.init() # иницифлизация модуля шрифтов       
 
# загрузка музыки
pygame.mixer.music.load('music1.mp3')
def men(a,b):     # отображение клавиш упрвления из пункта OPTION меню
    done = True   # условие существования цикла меню
    pygame.mixer.music.stop()
    pygame.key.set_repeat(0,0) # отключение залипания кнопок
    pygame.mouse.set_visible(True) # курсор мышки видим
    
    
        
    while done:
        screen.fill((100,0,200)) # закраска игрового поля(экрана меню)
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                sys.exit()
            if e.type == pygame.KEYDOWN:
                
                if e.key == pygame.K_ESCAPE:
                    done = False   
        

                    
                              
        im2 = pygame.transform.flip(im1,True,False)# переворот изображения im1 - горизонтально
        screen.blit(im1,(40,140)) # отображаем картинку
        screen.blit(im2,(420,140)) # отображаем картинку
         # отображаем информационную строку
        screen.blit(b,(180,100))
        screen.blit(inf_font.render(u'движение вниз - курсор DOWN',1,(0,250,250)),(130,260))   
        screen.blit(inf_font.render(u'движение вверх - курсор UP',1,(0,250,250)),(130,300))
        screen.blit(inf_font.render(u'движение влево - курсор LEFT',1,(0,250,250)),(130,340))
        screen.blit(inf_font.render(u'движение вправо - курсор RIGHT',1,(0,250,250)),(130,380))
        screen.blit(inf_font.render(u'огонь - ПРОБЕЛ',1,(0,250,250)),(180,200))
        screen.blit(inf_font.render(u'выход в меню - ESC',1,(0,250,250)),(180,500))
        window.blit(screen,(0,30)) # прорисовка на окне экрана для меню
            
                       
        pygame.display.flip()   # всё отобразить          

class Sprite:
    def __init__(self,xpos,ypos,filename):
        self.x = xpos
        self.y = ypos
        self.bitmap=pygame.image.load(filename) # создаем рисунок-загрузка из файла
        
    def obgrey (self):# отображение обьекта на игровом поле(экране)
        screen.blit(pygame.transform.flip(self.bitmap,True,False),(self.x,self.y))    
         
         
    
    def render (self):# отображение обьекта на игровом поле(экране)
        screen.blit(self.bitmap,(self.x,self.y))


def Intersect(x1,x2,y1,y2,dl1,dl2):# dl1,dl2-параметры цели----функция столкновения
    if (x1>x2-dl1) and (x1<x2+dl1) and (y1>y2-dl2) and (y1<y2+dl2):
        return 1
    else:
        return 0                    
        
class Button(pygame.sprite.Sprite): # класс кнопка загружаем картинку кнопки
    def __init__(self,x,y,filename ):#(название,коорд х,коорд у,название файла картинки)

        pygame.sprite.Sprite.__init__(self)
       
        self.image = pygame.image.load(filename)# загружаем картинку из файла
        self.rect = self.image.get_rect() # определяем экземпляр как прямоугольник,координаты как у прямоугольника
        self.rect[0] = x #присваиваем положение координатам
        self.rect[1] = y
        all_sprites_list.add(self)# заносим в список всех спрайтов
    def button(self,ac,ic,w,h):# изменяющий цвет прямоугольник (название кнопки,актив цвет,не актив цвет,ширина,высота прямоугольника)
        click = pygame.mouse.get_pressed() # нажатие кнопки мышки
        mouse = pygame.mouse.get_pos() # кооздинаты мышки
    # Проверяем не попадает курсор на кнопку?
        if self.rect[0]+w>mouse[0]>self.rect[0] and self.rect[1]+h+30>mouse[1]>self.rect[1]+30:
            pygame.draw.rect(screen,ac,(self.rect[0]+25,self.rect[1]+10,w,h))
            if click[0] == 1:#если нажата левая кнопка
                if self == close:#если кнопка = закрыть
                    sys.exit() #выйти в систему
                if self == game:
                    games()
                if self == options:
                    men(im1,b)                
        else:
            pygame.draw.rect(screen,ic,(self.rect[0]+25,self.rect[1]+10,w,h))    

        
inf_font = pygame.font.SysFont('Comic Sans MS',24) #задаём шрифт
all_sprites_list = pygame.sprite.Group() # список спрайтов (для использования функции отображения draw)
        
# поле игры-холст

close = Button(160,450,'b1.gif')# создаём кнопку 1  
game = Button(178,300,'b2.gif')# создаём кнопку 2
options = Button(200,175,'b3.gif')# создаём кнопку 3
b = inf_font.render(u'клавиши управления',1,(0,250,250)) # строка в подпункте
im1 =pygame.image.load(u'm2.gif') # создаём картинку 1
def games():
    pygame.font.init() # иницифлизация модуля шрифтов       
    speed_font =pygame.font.SysFont('Comic Sans MS',24)        
    inf_font = pygame.font.SysFont('Comic Sans MS',24)
    label_font = pygame.font.Font(None,32)# создаем рабочий шрифт(None-стандарт,32-размер)        

    im1 =pygame.image.load(u'm2.gif')
    hero = Sprite(200,350,'mash2.gif')# создаём героя маша
    fon = Sprite(0,0,'fon1.gif')

    zet = Sprite(10,100,'m2.gif')# создаём цель миша

    zet.right = False

    strela=Sprite(-60,350,'banca.gif')# создание стрелы      
    strela.push = False

 

# загрузка звуков
    sound1 = pygame.mixer.Sound('s11.wav')
    sound2 = pygame.mixer.Sound('s2.ogg')

# подготовка к игре
    arrow_color = 250
    zet.step = 0.6 # начальная скорость движения-миша
    enumerator = 0 # количество попаданий(счёт)
    dd = 0 #количество патронов
    pygame.key.set_repeat(1,1)# повтор нажатия

    
   
   
    dum = True
    while dum:# условие существования игрового цикла
    
    #pygame.mixer.music.stop()
    

        for e in pygame.event.get():# для любого события
        
            if e.type == pygame.QUIT:# если было закрытие окна
                sys.exit()
        #if dum == False:
            #men(am1,b)      
        
   
            if e.type == pygame.KEYDOWN: # если была нажата клавиша
                if e.key == pygame.K_LEFT:
                    if hero.x >10:
                        hero.x -= 1
                if e.key == pygame.K_RIGHT:
                    if hero.x <550:
                        hero.x += 1                
                if e.key == pygame.K_UP:
                    if hero.y >270:
                        hero.y -= 1
                if e.key == pygame.K_DOWN:
                    if hero.y <580:
                        hero.y += 1        
                if e.key == pygame.K_SPACE:
                    if strela.push == False:
                        strela.x = hero.x        
                        strela.y = hero.y
                        strela.push = True   # для ограничения запуска следующей стрелы
                if e.key == pygame.K_ESCAPE:  # выход в меню по нажатию ESC
                    dum = False
                    pygame.key.set_repeat(1,1)  # включение залипания
                    pygame.mouse.set_visible(False) # курсор не видим
                
            if e.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[2]:
                           
                    m = pygame.mouse.get_pos()
                    hero.x = m[0]-25
                    hero.y= m[1]-50
        
            if e.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[0]:
                    if strela.push == False:
                        strela.x = hero.x
                        strela.y = hero.y
                        strela.push = True
        
            if e.type == pygame.MOUSEMOTION:# перемещение героя мышкой  
                pygame.mouse.set_visible(False) # скрытие курсора       
                m = pygame.mouse.get_pos()    # получение координат мыши
                if m[0]>10 and m[0]<550:    # ограничение выхода героя за мышкой
                    hero.x = m[0]# передача координат герою
                if m[1]>300 and m[1]<550:
                    hero.y= m[1]
# закраска           
        screen.fill((25,250,70))# зарисовка игрового поля(экрана)    
        info_string.fill((45,90,45))
 # изменение цвета названия- плавно   
        arrow_color +=0.1
        if arrow_color >250:
            arrow_color = 100
# движение до границы поля и переключения движения-миша
   
        if zet.right == True:
            zet.x += zet.step       # можем менять скорость
        
   
            if zet.x >510:
                zet.right = False
        else:
            zet.x -= zet.step  
        
            if zet.x <0:
                zet.right = True
    
    
   
        if strela.push == True:# движение стрелы
            if strela.y>0:
                strela.y -=1
            else:
                strela.x = -60
                strela.push = False
                dd +=1
            # звук промаха
                sound_channel = sound2.play()
        if Intersect(strela.x,zet.x,strela.y,zet.y,48,48) == True:# условие столкновения
            strela.x = -60
            strela.push = False
            zet.step -=0.1
            enumerator +=1
            dd +=1
        # звук попадания
            sound_channel = sound1.play()
 # отображаем информационную строку
        info_string.blit(inf_font.render(u'сьел: '+str(enumerator),1,(0,250,250)),(5,0))
        info_string.blit(speed_font.render(u'баночки-'+str(dd),1,(250,250,0)),(450,0))    
        info_string.blit(label_font.render(u'маша+миша',1,(0,arrow_color,10)),(200,5))
 
 # отображаем элементы#
        fon.render()
    
        if zet.right == False:
            zet.render()
        else:
            zet.obgrey()
    
    
        strela.render()
        hero.render()
        window.blit(info_string,(0,0))# на окне прорисовываем информационную строку
    
        window.blit(screen,(0,30))# на окне прорисовываем поле игры
   
        pygame.display.flip()# отображаем полностью дисплей(окно)
        if enumerator == 6:
            zet.step = 0.6
            enumerator = 0
            dd = 0
            
            dum = False
            pygame.key.set_repeat(1,1)# повтор нажатия
            pygame.mouse.set_visible(False) # курсор не видим


done = True  # создаем условие существования цикла игры
while done:
    pygame.mouse.set_visible(True)
    screen.fill((100,0,200)) # закраска игрового поля
    for e in pygame.event.get():   # для любого события  
        if e.type == pygame.QUIT:  # если событие выход(крестик)
            sys.exit()                     # выход в систему
        if e.type == pygame.KEYDOWN:         # если событие нажатие клавиши
            if e.key == pygame.K_ESCAPE:     # если клавиша Esc
                sys.exit()                    # выход в систему
    options.button((255,0,0),(50,0,0),200,75)# отображаем подложку кнопки1 (актив цвет,не актив цвет,ширина,высота)
    game.button((255,0,0),(50,0,0),220,85)# отображаем подложку кнопки1 (актив цвет,не актив цвет,ширина,высота)
    close.button((255,0,0),(50,0,0),273,95)# отображаем подложку кнопки2 (актив цвет,не актив цвет,ширина,высота)
    screen.blit(im1,(440,40)) # на экране отобразить рис1(m1) в координате х=240, у=140
    im2 = pygame.transform.flip(im1,True,False)# поворот обьекта im1 - горизонтально    
    screen.blit(im2,(40,40)) # отображение обьекта im2 на экране  
    all_sprites_list.draw(screen)      
    
    window.blit(screen,(0,30)) # прорисовка на окне экрана для меню
            
                       
    pygame.display.flip()

Просмотров: 996 | Добавил: kuzma | Рейтинг: 0.0/0
Всего комментариев: 0
avatar

Сайт создан для помощи тем, кто делает первые шаги в программировании.

- автор идеи Кузьма Кузин

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

-совместная работа с группой молодых программистов

Срипты для автоматического заработка на SEO сайтах.

- для всех пользователей всё по цене в 1 EUR