馬里奧躲避炮彈的python之pygame小游戲源碼

#以下為個(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()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砂碉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子刻两,更是在濱河造成了極大的恐慌增蹭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磅摹,死亡現(xiàn)場(chǎng)離奇詭異滋迈,居然都是意外死亡霎奢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門饼灿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幕侠,“玉大人,你說我怎么就攤上這事碍彭∥钏叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵庇忌,是天一觀的道長(zhǎng)舞箍。 經(jīng)常有香客問我,道長(zhǎng)皆疹,這世上最難降的妖魔是什么疏橄? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮墙基,結(jié)果婚禮上软族,老公的妹妹穿的比我還像新娘刷喜。我一直安慰自己残制,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布掖疮。 她就那樣靜靜地躺著初茶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浊闪。 梳的紋絲不亂的頭發(fā)上恼布,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音搁宾,去河邊找鬼折汞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盖腿,可吹牛的內(nèi)容都是我干的爽待。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼翩腐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鸟款!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茂卦,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤何什,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后等龙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體处渣,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伶贰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霍比。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幕袱。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悠瞬,靈堂內(nèi)的尸體忽然破棺而出们豌,到底是詐尸還是另有隱情,我是刑警寧澤浅妆,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布望迎,位于F島的核電站,受9級(jí)特大地震影響凌外,放射性物質(zhì)發(fā)生泄漏辩尊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一康辑、第九天 我趴在偏房一處隱蔽的房頂上張望摄欲。 院中可真熱鬧,春花似錦疮薇、人聲如沸胸墙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迟隅。三九已至,卻和暖如春励七,著一層夾襖步出監(jiān)牢的瞬間智袭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工掠抬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吼野,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓两波,卻偏偏與公主長(zhǎng)得像瞳步,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雨女,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348