2014-01-06 4 views
-2

Итак, у меня есть школьный проект, и он должен создать игру. Я создал игру, но мы также должны иметь главное меню. Я довольно новичок в PyGame и понятия не имею, как это сделать. Я также довольно новичок в некоторых аспектах программирования, таких как классы. В моей программе у меня есть мое основное имя файла «Computer Science Game.py», и я хочу, чтобы мое главное меню было в другом файле. Затем я хочу, чтобы мое главное меню, когда я нажимаю игру, чтобы загрузить файл «Computer Science Game.py». Я не знаю, как это сделать. Кроме того, PyGame не очень хорош для создания Main Menus, который я потратил на исследование часов, но безрезультатно, может кто-то просто дать мне начало, что я могу расширить, пожалуйста? Спасибо P.S. Это мой первый раз, используя StackOverflow, поэтому, пожалуйста, извините за любые ошибки :)PyGame Главное меню

+0

Хорошо, так что я искал «меню Pygame» в Google, и первая ссылка привела меня в [этой странице] (HTTP://www.pygame.org/tags/menu) на веб-сайте pygame. [Первая ссылка в этом списке] (http://www.pygame.org/project-menu_key-2278-.html) позволяет перейти на страницу, где вы можете загрузить исходный код для примера приложения с помощью меню, реализуемого с помощью pygame. Это помогает? –

+0

Смотрите, как я новичок на Python, я пробовал это, и я запутался:/ –

+0

Вы попробовали загрузить исходный код и посмотреть на него (это включает в себя чтение комментариев)? Здесь вы запрашиваете, чтобы кто-то написал пример кода для меню pygame, что необязательно, потому что пример кода уже доступен. –

ответ

3

Я не собираюсь полностью кодировать, как писать меню для вас, потому что это победит цель занятия класса, но я могу указать вы в правильном направлении.

Как бы идти о написании основного меню будет следующее при условии, что у вас есть меню на две опции: выйти и начать игру (псевдо-код):

initialize all menu variables 

draw menu pix and selections 

while a selection has not been made: 
    look for key inputs (arrow keys/enter/esc) 
     if down arrow pressed: 
      move selection box to next option and note that the selection is on the next object down 
     if up arrow pressed: 
      move selection box to previous option and note that the selection is on the previous object up 
     if escape pressed: 
      quit the game 
     if enter pressed: 
      process which option in the menu was highlighted (quit of quit was selected, etc) and tell the while loop to stop 

    update the display 

set up the game variables and such 

main while loop 
    run the game and get an A+ 

Пожалуйста, дайте мне знать, если это отвечает вашим вопрос. Основная идея заключается в том, что вы добавляете еще один цикл while, который показывает основное меню и отображает его до того, как он перейдет в игру. Это может быть не самый эффективный способ, но для меня это выглядит как самый простой способ сделать что-то.

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

+0

Большое спасибо. :) –

+1

не звучать как нищий, но, пожалуйста, не стесняйтесь оставлять надпись/галочку. ;) Также дайте мне знать, если вам нужна помощь с конкретным кодом, я был бы более чем счастлив помочь. –

+0

Конечно, приятель! : D –

0

Вот несколько полезных функций, которые я использую для таких вещей, как меню:

# `pos` is the `x,y` from `event.pos` 
# x, y is the x/y co-ords from the x/y where you render a button 
# x1, y1 is the width/height for the button. 
# This function will return true if the button is clicked on. 

def button_check(pos, x, y, x1, y1): 
    return pos[0] >= x and pos[0] < x + x1 and pos[1] >= y and pos[1] < y + y1 

# This function will create a nice button with text in it. 
# `sufrace` is like the default 'DISPLAYSURF', `color` is the color of the box 
# `text_color` is the color of the text in the box 
# `x/y` are the co-ords of the button. `width/height` are the dimensions of button 
# `text` is the text for the label. 

def make_button(surface,color,text_color,x,y,width,height,text): 
    pygame.draw.rect(surface, (0,0,0),(x-1,y-1,width+2,height+2),1) #makes outline around the box 
    pygame.draw.rect(surface, color,(x,y,width,height))#mkes the box 

    myfont = pygame.font.SysFont('Arial Black', 15) #creates the font, size 15 (you can change this) 
    label = myfont.render(text, 1, text_color) #creates the label 
    surface.blit(label, (x+2, y)) #renders the label 



#example of use: 
menu_items = ['Play','Load','Volume','High Scores','Exit'] 
while True: 
    for i in range(len(menu_items)-1):#goes through each item 
     make_button(DISPLAYSURF,SILVER,BLACK,10,10+(20*i),120,menu_items[i]) #puts the item into the make_button, `+20*i` will make each item 15px down from the last. 

    for event in pygame.event.get(): 
     if event.type == 5: 
      if event.button == 1: 
       for i in range(len(menu_items)-1):#check every button 

        if button_check(event.pos,10,10+(20*i),120): 
         if i == 0: 
          play() 
         elif i == 1: 
          load() 
         elif i == 4: 
          pygame.quit() 
          sys.exit() 
+0

Я сам этого не испытывал. Я сделаю через секунду – p99will

Смежные вопросы