最簡(jiǎn)單之打飛機(jī)游戲編程

大家好思犁。小編通過這段時(shí)間學(xué)習(xí)做了一個(gè)超級(jí)簡(jiǎn)單的打飛機(jī)〈海現(xiàn)在貢獻(xiàn)給大家。

我們先要建兩個(gè).py文件激蹲。小編在這里是建的是主程序文件:pplane_main.py ?和工具文件: pplane_sprites.py

現(xiàn)在我先看主程序規(guī)劃pplane_main.py:

#主程序

import pygame

from pplane_sprites import *

#子彈的

ZIDAN_DE = pygame.USEREVENT+1

pygame.init()

pygame.mixer.music.load('兒童歌曲-黑貓警長(zhǎng)1(1).mp3')

pygame.mixer.music.play()

#主程序類

class PlaneGame(object):

????#初始化

????def __init__(self):

????????#游戲窗口

????????self.screen = pygame.display.set_mode((SCEREN_RECT.width,SCEREN_RECT.height))

????????#游戲標(biāo)題

????????pygame.display.set_caption('小蜜蜂')

????????#創(chuàng)建游戲時(shí)鐘

????????self.clock = pygame.time.Clock()

????????#創(chuàng)建精靈和精靈組

? ? ? ? self.__cretar_sprite()

????????pygame.time.set_timer(DIJI_BA,1000)

????????pygame.time.set_timer(ZIDAN_DE,200)

????????self.life1 = 1

????????self.life2 = 1

? ? ? ? ?#游戲開始

????def start_game(self):

????????print('游戲開始')

????????while True:

????????????self.clock.tick(60)

????????????#監(jiān)聽事件

????????????self.__event_handler()

????????????#碰撞檢測(cè)

????????????self.__check_collide()

????????????#精靈組更新繪制

????????????self.__update_sprites()

????????????#刷新

????????????pygame.display.update()

????????????#精靈精靈組

????def __cretar_sprite(self):

????????bg1 = Background('./images/background.png')

????????bg2 = Background('./images/background.png')

????????bg2.rect.x = bg2.rect.width

????????self.back_group = pygame.sprite.Group(bg1,bg2)

????????self.hero = Hero('./images/me1.png')

????????self.hero_group = pygame.sprite.Group(self.hero)

????????self.enemy = Enemy('./images/enemy1.png')

????????self.enemy_group = pygame.sprite.Group(self.enemy)

????????self.hero2 = Hero2('./images/life.png')

????????self.hero2_group = pygame.sprite.Group(self.hero2)

????????self.hero3 = Hero3('./images/life.png')

????????self.hero3_group = pygame.sprite.Group(self.hero3)

????????# #事件監(jiān)聽

????def __event_handler(self):

????????for event in pygame.event.get():

????????print(event)

????????if event.type == pygame.QUIT:

????????????self.__game_over()

????????elif event.type == DIJI_BA:

????????????self.enemy_group.add(Enemy('./images/enemy1.png'))

????????elif event.type == ZIDAN_DE:

????????????self.hero.fort()

????????????self.hero2.fort()

????????????self.hero3.fort()

????????elif event.type == pygame.KEYDOWN:

????????????if event.key == pygame.K_UP:

????????????????self.hero.panduan1 = True

????????????????self.hero2.panduan5 = True

????????????????self.hero3.panduana = True

????????????elif event.key == pygame.K_DOWN:

????????????????self.hero.panduan2 = True

????????????????self.hero2.panduan6 = True

????????????????self.hero3.panduanb = True

????????????elif event.key == pygame.K_LEFT:

????????????????self.hero.panduan3 = True

? ?????????????? self.hero2.panduan7 = True

????????????????self.hero3.panduanc = True

? ? ? ? ? ? elif event.key == pygame.K_RIGHT:

????????????????self.hero.panduan4 = True

????????????????self.hero2.panduan8 = True

????????????????self.hero3.panduand = True

????????????elif event.type ==pygame.KEYUP:

????????????????if event.key == pygame.K_UP:

????????????????????self.hero.panduan1 = False

????????????????????self.hero2.panduan5 = False

????????????????????self.hero3.panduana = False

????????????elif event.key == pygame.K_DOWN:

????????????????????self.hero.panduan2 =False

????????????????????self.hero2.panduan6 = False

????????????????????self.hero3.panduanb =False

????????????elif event.key == pygame.K_LEFT:

????????????????self.hero.panduan3 = False

????????????????self.hero2.panduan7 =False

????????????????self.hero3.panduanc =False

????????????elif event.key == pygame.K_RIGHT:

????????????????self.hero.panduan4 = False

????????????????self.hero2.panduan8 =False

????????????????self.hero3.panduand =False

????#碰撞檢測(cè)

????def __check_collide(self):

????????pygame.sprite.groupcollide(self.hero.bullte_group,self.enemy_group,True,True)

????????eneims = pygame.sprite.spritecollide(self.hero,self.enemy_group,True)

????????pygame.sprite.groupcollide(self.hero2.bulltea_group,self.enemy_group,True,True)

????????eneime = pygame.sprite.spritecollide(self.hero2,self.enemy_group,True)

????????pygame.sprite.groupcollide(self.hero3.bulltes_group,self.enemy_group,True,True)

????????eneima = pygame.sprite.spritecollide(self.hero3,self.enemy_group,True)

????????#主機(jī)碰撞

????????if len(eneims)>0:

????????????self.hero.kill()

????????????self.hero2.kill()

????????????self.hero3.kill()

????????????self.__game_over()

????????elif len(eneime)>0:

????????????self.life1 -= 1

????????????if self.life1 == 0:

????????????#主機(jī)移動(dòng)

????????????????self.hero.diaoyong1=False

????????????????self.hero.diaoyong2 = True

????????????????self.hero.diaoyong3 = False

????????????????self.hero.diaoyong4 = False

????????#僚機(jī)1移動(dòng)

????????????????self.hero3.liaojiyidong3 = False

????????????????self.hero3.liaojiyidong4 = True

????????#僚機(jī)2移動(dòng)

????????????????self.hero2.liaojiyidong1 = False

????????????????self.hero2.liaojiyidong2 = False

????????????????self.hero2.rect.y = -10000

????????????????self.hero2.rect.x = -10000

????????????????self.hero2.kill()

? ? ? ?elif len(eneima)>0:

? ? ? ? ? ?self.life2 -= 1

????????????if self.life2 == 0:

#主機(jī)移動(dòng)

????????????????self.hero.diaoyong1=False

????????????????self.hero.diaoyong2 = False

????????????????self.hero.diaoyong3 = True

????????????????self.hero.diaoyong4 = False

#僚機(jī)1移動(dòng)

????????????????self.hero2.liaojiyidong1 = False

????????????????self.hero2.liaojiyidong2 = True

#僚機(jī)2移動(dòng)

????????????????self.hero3.liaojiyidong3 = False

????????????????self.hero3.liaojiyidong4 = False

????????????????self.hero3.rect.y = -10000

????????????????self.hero3.rect.x = -10000

????????????????self.hero3.kill()

????????elif self.life2 == 1 and self.life1 == 1:

#主機(jī)移動(dòng)

????????????self.hero.diaoyong1=False

????????????self.hero.diaoyong2 = False

????????????self.hero.diaoyong3 = False

????????????self.hero.diaoyong4 = True

#僚機(jī)1移動(dòng)

????????????self.hero2.liaojiyidong1 = True

????????????self.hero2.liaojiyidong2 = False

#僚機(jī)2移動(dòng)

????????????self.hero3.liaojiyidong3 = True

????????????self.hero3.liaojiyidong4 = False

????????elif self.life2 == 0 and self.life1 == 0:

#主機(jī)移動(dòng)

????????????self.hero.diaoyong1=True

????????????self.hero.diaoyong2 = False

????????????self.hero.diaoyong3 = False

????????????self.hero.diaoyong4 = False

#僚機(jī)1移動(dòng)

????????????self.hero2.liaojiyidong1 = False

????????????self.hero2.liaojiyidong2 = False

#僚機(jī)2移動(dòng)

????????????self.hero3.liaojiyidong3 = False

????????????self.hero3.liaojiyidong4 = False

#精靈組更新和繪制

????def __update_sprites(self):

#繪制背景

????????self.back_group.update()

????????self.back_group.draw(self.screen)

#繪制英雄1

????????self.hero_group.update()

????????self.hero_group.draw(self.screen)

#繪制僚機(jī)1

????????self.hero2_group.update()

????????self.hero2_group.draw(self.screen)

#繪制僚機(jī)2

????????self.hero3_group.update()

????????self.hero3_group.draw(self.screen)

#敵機(jī)

????????self.enemy_group.update()

????????self.enemy_group.draw(self.screen)

#英雄子彈

????????self.hero.bullte_group.update()

????????self.hero.bullte_group.draw(self.screen)

#僚機(jī)1子彈

????????self.hero2.bulltea_group.update()

????????self.hero2.bulltea_group.draw(self.screen)

#僚機(jī)2子彈

????????self.hero3.bulltes_group.update()

????????self.hero3.bulltes_group.draw(self.screen)

#游戲結(jié)束

? ? ?def __game_over(self):

????????print('游戲結(jié)束')

????????pygame.quit()

????????exit()

if __name__? == '__main__':

????game = PlaneGame()

????game.start_game()



現(xiàn)在是工具文件pplane_sprites.py:

import pygame

import random

#設(shè)置窗口常量

SCEREN_RECT = pygame.Rect(0,0,700,480)

DIJI_BA = pygame.USEREVENT

class GameSprite(pygame.sprite.Sprite):

????def __init__(self,image_name,speed = 1):

????????super().__init__()

????????self.image = pygame.image.load(image_name)

????????self.rect = self.image.get_rect()

????????self.speed = speed

????def update(self):

????????self.rect.x -= self.speed

#背景類

class Background(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name)

????def update(self):

????????super().update()

????????if self.rect.right== 0:

????????????self.rect.x= SCEREN_RECT.width

#英雄1

class Hero(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name)

????????self.rect.centery = SCEREN_RECT.centery

????????self.rect.left = SCEREN_RECT.left +20

????????self.panduan1 = False

????????self.panduan2 =False

????????self.panduan3 =False

????????self.panduan4 =False

????????self.diaoyong1 =False

????????self.diaoyong2 = False

????????self.diaoyong3 = False

????????self.diaoyong4 = False

????????self.bullte_group = pygame.sprite.Group()

????def update(self):

????????if self.diaoyong1 == True:

????????????if self.panduan1 == True and self.rect.y >= 0:

????????????????self.rect.y -= 5

????????????elif self.panduan2 == True and self.rect.y <= SCEREN_RECT.height-self.rect.height:

????????????????self.rect.y += 5

????????????elif self.panduan3 == True and self.rect.x >= 0:

????????????????self.rect.x -= 5

????????????elif self.panduan4 == True and self.rect.x <= SCEREN_RECT.width-self.rect.width:

????????????????self.rect.x += 5

? ? ? ????elif self.diaoyong2 == True:

? ? ? ? ? ? if self.panduan1 == True and self.rect.y >= 0:

????????????????self.rect.y -= 5

????????????elif self.panduan2 == True and self.rect.bottom <= 418 :

????????????????self.rect.y += 5

????????????elif self.panduan3 == True and self.rect.x >= 0:

????????????????self.rect.x -= 5

????????????elif self.panduan4 == True and self.rect.x <= SCEREN_RECT.width-self.rect.width:

????????????????self.rect.x += 5

????????elif self.diaoyong3 == True:

????????????if self.panduan1 == True and self.rect.y >=62 :

????????????????self.rect.y -= 5

????????????elif self.panduan2 == True and self.rect.y <= SCEREN_RECT.height-self.rect.height:

????????????????self.rect.y += 5

????????????elif self.panduan3 == True and self.rect.x >= 0:

????????????????self.rect.x -= 5

????????????elif self.panduan4 == True and self.rect.x <= SCEREN_RECT.width-self.rect.width:

????????????????self.rect.x += 5

? ? ? ? elif self.diaoyong4 == True:

????????????if self.panduan1 == True and self.rect.y >= 55:

????????????????self.rect.y -= 5

????????????elif self.panduan2 == True and self.rect.bottom <= 430:

????????????????self.rect.y += 5

????????????elif self.panduan3 == True and self.rect.x >= 0:

????????????????self.rect.x -= 5

????????????elif self.panduan4 == True and self.rect.x <= SCEREN_RECT.width-self.rect.width:

????????????????self.rect.x += 5

????def fort(self):

????????for i in (1,2,3):

????????????self.bullte = Bullte('./images/bullet1.png')

????????????self.bullte.rect.left = self.rect.right + i*20

????????????self.bullte.rect.centery = self.rect.centery

????????????self.bullte_group.add(self.bullte)

#敵機(jī)

class Enemy(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name)

????????self.rect.left = SCEREN_RECT.width

????????self.speed = random.randint(1,3)

????????ma_y = SCEREN_RECT.height-self.rect.height

????????self.rect.y = random.randint(0,ma_y)

????def update(self):

????????super().update()

????????if self.rect.right <= 0:

????????????self.kill()

#子彈

class Bullte(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name,-10)

????def update(self):

????????super().update()

? ? ? ? if self.rect.left > SCEREN_RECT.width:

????????????self.kill()

#僚機(jī)1

class Hero2(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name)

????????self.hero1=Hero('./images/me1.png')

????????self.rect.centery = self.hero1.rect.centery -90

????????self.rect.left = self.hero1.rect.left-10

????????self.panduan5 = False

????????self.panduan6 = False

????????self.panduan7 =False

????????self.panduan8 =False

????????self.liaojiyidong1 = False

????????self.liaojiyidong2 = False

????????self.bulltea_group = pygame.sprite.Group()

????def update(self):

????????if self.liaojiyidong1 == True:

????????????if self.panduan5 == True and self.rect.y >=0:

????????????????self.rect.y -= 5

????????????elif self.panduan6 == True and self.rect.bottom <= 321:

????????????????self.rect.y += 5

????????????elif self.panduan7 == True and self.rect.left >= 10:

????????????????self.rect.x -= 5

????????????elif self.panduan8 == True and self.rect.right <=621:

????????????????self.rect.x += 5

????????elif self.liaojiyidong2 == True:

????????????if self.panduan5 == True and self.rect.y >=0:

????????????????self.rect.y -= 5

????????????elif self.panduan6 == True and self.rect.bottom <= 362:

????????????????self.rect.y += 5

????????????elif self.panduan7 == True and self.rect.left >= 10:

????????????????self.rect.x -= 5

????????????elif self.panduan8 == True and self.rect.right <=621:

????????????????self.rect.x += 5

????def fort(self):

????????for i in (1,2,3):

????????????self.bulltea = Bullte('./images/bullet1.png')

????????????self.bulltea.rect.left = self.rect.right + i*20

????????????self.bulltea.rect.centery = self.rect.centery

????????????self.bulltea_group.add(self.bulltea)

#僚機(jī)2

class Hero3(GameSprite):

????def __init__(self,image_name):

????????super().__init__(image_name)

????????self.hero1=Hero('./images/me1.png')

????????self.rect.centery = self.hero1.rect.centery +90

????????self.rect.left = self.hero1.rect.left-10

????????self.panduana = False

????????self.panduanb = False

????????self.panduanc =False

????????self.panduand =False

????????self.liaojiyidong3 = False

????????self.liaojiyidong4 = False

????????self.bulltes_group = pygame.sprite.Group()

????def update(self):

????????if self.liaojiyidong3 == True:

????????????if self.panduana == True and self.rect.top >= 159:

????????????????self.rect.y -= 5

????????????elif self.panduanb == True and self.rect.bottom <= SCEREN_RECT.bottom:

????????????????self.rect.y += 5

? ? ? ? ????? elif self.panduanc == True and self.rect.left >= 10:

????????????????self.rect.x -= 5

????????????elif self.panduand == True and self.rect.right <=621:

????????????????self.rect.x += 5

????????elif self.liaojiyidong4 == True:

????????????if self.panduana == True and self.rect.top >=118:

????????????????self.rect.y -= 5

????????????elif self.panduanb == True and self.rect.bottom <= SCEREN_RECT.bottom:

????????????????self.rect.y += 5

????????????elif self.panduanc == True and self.rect.left >= 10:

????????????????self.rect.x -= 5

????????????elif self.panduand == True and self.rect.right <=621:

????????????????self.rect.x += 5

????def fort(self):

????????for i in (1,2,3):

????????????self.bulltes = Bullte('./images/bullet1.png')

????????????self.bulltes.rect.left = self.rect.right + i*40

????????????self.bulltes.rect.centery = self.rect.centery

????????????self.bulltes_group.add(self.bulltes)

小編就能寫到這了棉磨、希望對(duì)你們有所幫助!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末学辱,一起剝皮案震驚了整個(gè)濱河市乘瓤,隨后出現(xiàn)的幾起案子环形,更是在濱河造成了極大的恐慌,老刑警劉巖衙傀,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抬吟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡统抬,警方通過查閱死者的電腦和手機(jī)拗军,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓄喇,“玉大人,你說我怎么就攤上這事交掏∽逼” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵盅弛,是天一觀的道長(zhǎng)钱骂。 經(jīng)常有香客問我,道長(zhǎng)挪鹏,這世上最難降的妖魔是什么见秽? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮讨盒,結(jié)果婚禮上解取,老公的妹妹穿的比我還像新娘。我一直安慰自己返顺,他們只是感情好禀苦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遂鹊,像睡著了一般振乏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秉扑,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天慧邮,我揣著相機(jī)與錄音,去河邊找鬼舟陆。 笑死误澳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吨娜。 我是一名探鬼主播脓匿,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宦赠!你這毒婦竟也來了陪毡?” 一聲冷哼從身側(cè)響起米母,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毡琉,沒想到半個(gè)月后铁瞒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桅滋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年慧耍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丐谋。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芍碧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出号俐,到底是詐尸還是另有隱情泌豆,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布吏饿,位于F島的核電站踪危,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏猪落。R本人自食惡果不足惜贞远,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笨忌。 院中可真熱鬧蓝仲,春花似錦、人聲如沸蜜唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁余。三九已至擎勘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颖榜,已是汗流浹背棚饵。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掩完,地道東北人噪漾。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像且蓬,于是被迫代替她去往敵國和親欣硼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,334評(píng)論 0 10
  • 各位禾美的家人大家晚上好恶阴!首先非常感謝公司提供的發(fā)展平臺(tái)诈胜,以及同事們對(duì)我的幫助豹障。關(guān)于我的上半年總結(jié)我想從兩個(gè)方面來...
    簡(jiǎn)書米閱讀 590評(píng)論 0 1
  • 帶著孫女學(xué)學(xué)挖土 文/我心飛翔 午后的陽光,漸漸退掉了它的灼熱焦匈,小孫女一覺醒來血公,吃點(diǎn)東西,喝足了水缓熟,我們準(zhǔn)備下樓累魔。...
    我心飛翔XFJ閱讀 170評(píng)論 0 0
  • 今天得知自己大學(xué)廣播臺(tái)的師兄得了惡性淋巴瘤。 照片上的他非常非常瘦够滑,完全不是大學(xué)時(shí)候結(jié)結(jié)實(shí)實(shí)的樣子垦写。而且臉色很差,...
    千秋的布丁醬閱讀 325評(píng)論 0 1
  • 平臺(tái):Windows 類型:虛擬機(jī)鏡像 軟件包:.net coreneo application server...
    ITknight閱讀 439評(píng)論 0 0