#以下為個(gè)人原創(chuàng)代碼召衔,未經(jīng)許可铃诬,不得用于商業(yè)目的!僅供學(xué)習(xí)交流苍凛,侵權(quán)必究趣席!
如需要所有素材請(qǐng)聯(lián)系作者
球球你們來看文章評(píng)論呀呀呀呀呀呀!4己吩坝!
#Exp14_4.py
#encoding=utf-8
import pygame
#import pygame._view 沒有對(duì)應(yīng)的此包,運(yùn)行結(jié)果沒有差別
import random
from pygame.locals import *
import objects,config
def show_text(surface_handle, pos, text, color, font_bold = False, font_size = 13, font_italic = False):
? ? '''
? ? Function:文字處理函數(shù)
? ? Input:surface_handle:surface句柄
? ? ? ? ? pos:文字顯示位置
? ? ? ? ? color:文字顏色
? ? ? ? ? font_bold:是否加粗
? ? ? ? ? font_size:字體大小
? ? ? ? ? font_italic:是否斜體
? ? '''? ? ?
? ? #獲取系統(tǒng)字體stsong(宋體)哑蔫,并設(shè)置文字大小
? ? cur_font = pygame.font.SysFont('stsong' , font_size)
? ? #設(shè)置是否加粗屬性
? ? cur_font.set_bold(font_bold)
? ? #設(shè)置是否斜體屬性
? ? cur_font.set_italic(font_italic)
? ? #設(shè)置文字內(nèi)容
? ? text_fmt = cur_font.render(text, 1, color)
? ? #繪制文字
? ? surface_handle.blit(text_fmt, pos)? ? ? ? ? ? ?
#主程序
if __name__=="__main__":
? ? pygame.init() #初始化所有的pygame模塊
? ? background = pygame.image.load(config.background_image)
? ? star? ? ? = pygame.image.load(config.star_image)
? ? dinosaur? = pygame.image.load(config.dinosaur_image)
? ? dinosaur_rect=dinosaur.get_rect()
? ? background_w=int(background.get_width())
? ? background_h=int(background.get_height())
? ? star_w=int(star.get_width())
? ? star_h=int(star.get_height())
? ? dinosaur_w=int(dinosaur.get_width())
? ? dinosaur_h=int(dinosaur.get_height())
? ? flag=0? #默認(rèn)窗口
? ? if config.full_screen:
? ? ? ? flag=FULLSCREEN #全屏模式
? ? #載入啟動(dòng)畫面钉寝。按圖片的寬弧呐、高創(chuàng)建一個(gè)窗口
? ? start_image = pygame.image.load('d2.jpg')
? ? start_image_w=int(start_image.get_width())
? ? start_image_h=int(start_image.get_height())
? ? start_size=( start_image_w, start_image_h)
? ? start_screen=pygame.display.set_mode(start_size,flag, 32)
? ? pygame.display.set_caption('超級(jí)瑪麗躲避蘑菇')
? ? start_screen.blit(start_image, (0, 0)) #繪制窗口
? ? '''生成超級(jí)瑪麗、蘑菇'''
? ? speed=1
? ? MStar=objects.Star(speed,config.star_image)
? ? MDinosaur=objects.Dinosaur(config.dinosaur_image)
? ? pygame.mouse.set_visible(False)
? ? flag=0
? ? dinosaur_left=background_w/2
? ? dinosaur_top=background_h-dinosaur_h
? ? MDinosaur.rect.left=background_w/2
? ? MDinosaur.rect.top=background_h-dinosaur_h
? ? star_top=-star_h
? ? MStar.rect.top=-star_h
? ? star_num=0
? ? level=1
? ? star_x=random.randrange(0,background_w)
? ? MStar.rect.left=random.randrange(0,background_w)?
? ? start=False
? ? title_info = "游戲載入完成嵌纲,請(qǐng)單擊鼠標(biāo)進(jìn)入游戲俘枫!"?
? ? show_text(start_screen, (50, 400), title_info, (200, 0, 10), True, 30)
? ? pygame.display.flip()#更新窗體
? ? n=0? #用來標(biāo)識(shí)背景是否載入
? ? #主循環(huán)
? ? while True:
? ? ? ? # 檢測(cè)事件
? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? if event.type == QUIT:
? ? ? ? ? ? ? ? #接收到關(guān)閉窗口事件后退出程序
? ? ? ? ? ? ? ? pygame.quit()? ? ? ? ? ?
? ? ? ? ? ? ? ? flag=-1
? ? ? ? ? ? ? ? break
? ? ? ? ? ? if event.type==KEYDOWN and event.key==K_ESCAPE:
? ? ? ? ? ? ? ? #用戶按Esc鍵后退出程序
? ? ? ? ? ? ? ? pygame.quit()?
? ? ? ? ? ? ? ? flag=-1
? ? ? ? ? ? ? ? break
? ? ? ? if flag==-1:
? ? ? ? ? ? break
? ? ? ? # 獲取鍵盤的按鍵情況
? ? ? ? pressed_keys=pygame.key.get_pressed()
? ? ? ? # 獲取鼠標(biāo)的按鍵情況
? ? ? ? pressed_mouse=pygame.mouse.get_pressed()
? ? ? ? # 用start控制游戲的啟、停
? ? ? ? if start:
? ? ? ? ? ? # 讓隕石垂直向下移動(dòng)
? ? ? ? ? ? #star_top+=config.drop_speed*config.speed_increase*level
? ? ? ? ? ? MStar.rect.top+=config.drop_speed*config.speed_increase*level*5
? ? ? ? ? ? '''
? ? ? ? ? ? 如果隕石走出屏幕底部逮走,則從頂部從新走鸠蚪。落下的流隕石加1,將隕石移動(dòng)到屏幕頂端的隨機(jī)位置师溅。? ?
? ? ? ? ? ? '''
? ? ? ? ? ? if MStar.rect.top>background_h:
? ? ? ? ? ? ? ? MStar.rect.top=-5*star_h #star_top=-2*star_h
? ? ? ? ? ? ? ? star_num+=0
? ? ? ? ? ? ? ? MStar.rect.left=random.randrange(0,background_w)?
? ? ? ? ? ? ? ? #star_x=random.randrange(0,background_w)
? ? ? ? ? ? #載入背景
? ? ? ? ? ? if n==0:
? ? ? ? ? ? ? ? screen_size=( background_w, background_h)
? ? ? ? ? ? ? ? screen=pygame.display.set_mode(screen_size,flag,32)
? ? ? ? ? ? ? ? n=n+1
? ? ? ? ? ? #把背景畫上去
? ? ? ? ? ? screen.blit(background, (0,0))
? ? ? ? ? ? #顯示關(guān)數(shù)茅信、隕石數(shù)?
? ? ? ? ? ? # 把隕石畫上去
? ? ? ? ? ? screen.blit(MStar.image, MStar.rect)#(star_x,star_top))
? ? ? ? ? ? # 把動(dòng)物畫上去
? ? ? ? ? ? screen.blit(MDinosaur.image, MDinosaur.rect) #(dinosaur_left,dinosaur_top))
? ? ? ? ? ? # 根據(jù)鼠標(biāo)的位置計(jì)算出動(dòng)物的水平位置
? ? ? ? ? ? MDinosaur.rect.left=pygame.mouse.get_pos()[0]-MDinosaur.rect.width? ?
? ? ? ? ? ? #dinosaur_left=pygame.mouse.get_pos()[0]-dinosaur_w
? ? ? ? ? ? # 控制動(dòng)物,不讓其離開窗口
? ? ? ? ? ? if MDinosaur.rect.left<0:#dinosaur_left<0:
? ? ? ? ? ? ? ? MDinosaur.rect.left=0
? ? ? ? ? ? ''' 若本關(guān)內(nèi)落下的隕石數(shù)達(dá)到設(shè)置值墓臭,則進(jìn)入下一關(guān)蘸鲸,落下的隕石數(shù)清零,
? ? ? ? ? ? ? ? 為下一關(guān)的計(jì)數(shù)做準(zhǔn)備窿锉。
? ? ? ? ? ? ? ? 進(jìn)入下一關(guān)酌摇,游戲暫停。
? ? ? ? ? ? '''? ?
? ? ? ? ? ? if star_num>=config.stars_per_level:
? ? ? ? ? ? ? ? level+=1
? ? ? ? ? ? ? ? star_num=0
? ? ? ? ? ? ? ? start=False
? ? ? ? ? ? ? ? title_info = "恭喜嗡载!順利通關(guān)窑多!請(qǐng)單擊鼠標(biāo)進(jìn)入下一關(guān)!"?
? ? ? ? ? ? ? ? show_text(screen, (100, 200), title_info, (200, 0, 0), True, 20)
? ? ? ? ? ? ? ? if 4<level<=7:
? ? ? ? ? ? ? ? ? ? title_info = "干得漂亮洼滚!繼續(xù)努力埂息!"?
? ? ? ? ? ? ? ? ? ? show_text(screen, (100, 300), title_info, (254, 245, 63), True, 50)
? ? ? ? ? ? ? ? elif 7<level<10:
? ? ? ? ? ? ? ? ? ? title_info = "您是種子級(jí)選手!"?
? ? ? ? ? ? ? ? ? ? show_text(screen, (100, 300), title_info, (253, 40, 17), True, 70)
? ? ? ? ? ? ? ? elif level>=10:
? ? ? ? ? ? ? ? ? ? title_info = "您是天才級(jí)選手遥巴!"?
? ? ? ? ? ? ? ? ? ? show_text(screen, (100, 300), title_info, (156, 156, 10), True, 70)
? ? ? ? ? ? ? ? MStar.image=pygame.image.load(config.li[level%13]) #(image_filename)
? ? ? ? ? ? '''若動(dòng)物碰撞隕石耿芹,則回到第1關(guān),游戲暫停挪哄。'''
? ? ? ? ? ? if MDinosaur.touches(MStar):
? ? ? ? ? ? ? ? MStar.rect.top=-2*star_h
? ? ? ? ? ? ? ? level=1
? ? ? ? ? ? ? ? MStar.image=pygame.image.load('j.gif')
? ? ? ? ? ? ? ? start=False
? ? ? ? ? ? ? ? star_num=0
? ? ? ? ? ? ? ? title_info = "很抱歉吧秕,沒能通關(guān),請(qǐng)單擊鼠標(biāo)回到第一關(guān)迹炼!"?
? ? ? ? ? ? ? ? show_text(screen, (100, 200), title_info, (50, 0 ,255), True, 20)
? ? ? ? else:
? ? ? ? ? ? # 在游戲暫停時(shí)砸彬,按鼠標(biāo)左鍵或鍵盤空格鍵則啟動(dòng)游戲
? ? ? ? ? ? if pressed_keys[K_SPACE]or pressed_mouse[0]:
? ? ? ? ? ? ? ? start=True
? ? ? ? # 更新屏幕,上面的所畫的內(nèi)容才看得見斯入。
? ? ? ? pygame.display.update()