蕪湖市住房和城鄉(xiāng)建設(shè)委員會網(wǎng)站職業(yè)技能培訓(xùn)網(wǎng)站
隨著學(xué)期的開始,同學(xué)們也即將進(jìn)入計算機相關(guān)課程的課程設(shè)計了,對于python課程設(shè)計的小伙伴,可能有些是需要利用pygame來寫應(yīng)該小游戲的,因為最近很多小伙伴同學(xué)也在想我要一些基于python的pygame模塊做的游戲項目,此外我的博客里也有一些之前寫的pygame游戲項目,有一般難度的python恐龍快跑小游戲(代碼量共計300行左右)鏈接:python--谷歌恐龍快跑小項目_恐龍快跑代碼_DY.memory的博客-CSDN博客,python城堡保衛(wèi)戰(zhàn)游戲(代碼量共計500行左右)鏈接:python--城堡保衛(wèi)戰(zhàn)_DY.memory的博客-CSDN博客,也要難度較高一點的如飛機大戰(zhàn)(代碼里共計800行左右)鏈接:python--飛機大戰(zhàn)(課程設(shè)計)_python飛機大戰(zhàn)_DY.memory的博客-CSDN博客,python射擊闖關(guān)游戲(代碼量共計1100行左右)鏈接:python大作業(yè)高分項目--射擊闖關(guān)游戲_python射擊游戲_DY.memory的博客-CSDN博客等等項目,這些項目具體使用什么python知識和具體功能什么的我在這就不具體介紹了,需要的小伙伴同學(xué)們可以翻看我的具體博客!
今天這期博客主要給大家?guī)淼氖抢胮ygame實現(xiàn)各級菜單欄的功能,因為部分同學(xué)在做相關(guān)設(shè)計的時候可能會用到各級菜單欄的功能來使自己程序更加友好高效,使自己的程序更加靈活,同時也是容易加分的地方,所以這期菜單功能的代碼已經(jīng)寫好,同學(xué)們只需在對應(yīng)的部分添加對應(yīng)要實現(xiàn)的功能即可,好了下面進(jìn)入代碼分享!
代碼用的知識自然是pygame和一些python基礎(chǔ),共兩個類文件,代碼共計120行左右!
代碼如下:
button_new.py
import pygame#按鈕類
class Button():def __init__(self, x, y, image, scale):width = image.get_width()height = image.get_height()self.image = pygame.transform.scale(image, (int(width * scale), int(height * scale)))self.rect = self.image.get_rect()self.rect.topleft = (x, y)self.clicked = Falsedef draw(self, surface):action = Falsepygame.draw.rect(surface, (0, 0, 0), (self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()))bk = pygame.draw.rect(surface, (255, 255, 255), (self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()), 3)#得到鼠標(biāo)的位置pos = pygame.mouse.get_pos()#判斷鼠標(biāo)劃過按鈕并點擊if bk.collidepoint(pos):if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False:self.clicked = Trueaction = Truepygame.draw.rect(surface, (0, 0, 255),(self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()))if pygame.mouse.get_pressed()[0] == 0:self.clicked = False#畫按鈕到屏幕surface.blit(self.image, (self.rect.x, self.rect.y))return action
main_new.py
import pygame
import button_newpygame.init()#創(chuàng)建游戲窗口
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Main Menu")#定義游戲變量
game_paused = False
menu_state = "main"#定義字體
font = pygame.font.SysFont("華文楷體", 40)#定義顏色
TEXT_COL = (255, 255, 255)#加載圖片
resume_img = font.render("重新開始", True, TEXT_COL)
options_img = font.render("選擇操作", True, TEXT_COL)
quit_img = font.render("退出程序", True, TEXT_COL)
video_img = font.render("難度設(shè)置", True, TEXT_COL)
audio_img = font.render("音樂設(shè)置", True, TEXT_COL)
keys_img = font.render("按鍵設(shè)置", True, TEXT_COL)
back_img = font.render("返回上節(jié)", True, TEXT_COL)#創(chuàng)建實例
resume_button = button_new.Button(336, 125, resume_img, 1)
options_button = button_new.Button(336, 250, options_img, 1)
quit_button = button_new.Button(336, 375, quit_img, 1)
video_button = button_new.Button(336, 75, video_img, 1)
audio_button = button_new.Button(336, 200, audio_img, 1)
keys_button = button_new.Button(336, 325, keys_img, 1)
back_button = button_new.Button(336, 450, back_img, 1)def draw_text(text, font, text_col, x, y):img = font.render(text, True, text_col)screen.blit(img, (x, y))#游戲循環(huán)
run = True
while run:screen.fill((52, 78, 91))#判斷游戲是否暫停if game_paused == True:#判斷游戲狀態(tài)if menu_state == "main":#在屏幕畫按鈕if resume_button.draw(screen):game_paused = Falseif options_button.draw(screen):menu_state = "options"if quit_button.draw(screen):run = False#判斷操作按鈕是否開啟if menu_state == "options":#定義一個操作按鈕if video_button.draw(screen):print("你點擊了難度設(shè)置")if audio_button.draw(screen):print("你點擊了音樂設(shè)置")if keys_button.draw(screen):print("你點擊了按鍵設(shè)置")if back_button.draw(screen):menu_state = "main"else:draw_text("程序運行中(按空格鍵暫停)", font, TEXT_COL, 140, 250)#事件處理器for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:game_paused = Trueif event.type == pygame.QUIT:run = Falsepygame.display.update()pygame.quit()
運行效果圖如下:
?
?
?
?
?
?