python是一種很簡(jiǎn)單的語(yǔ)言,快速入門(mén)后可以做很多事情!爬蟲(chóng)、數(shù)據(jù)分析、自動(dòng)化運(yùn)維、機(jī)器學(xué)習(xí)、定量分析等!
但是從入門(mén)到高級(jí)的過(guò)程有時(shí)會(huì)非常痛苦。希望有有趣的例子。
比如通過(guò)游戲來(lái)學(xué)編程是一個(gè)非常好的途徑,大概就200多行,非常不錯(cuò)!1、打飛機(jī)的游戲
打飛機(jī)的游戲估計(jì)很多人都玩過(guò),雷霆戰(zhàn)機(jī)相信很多80后的小伙伴都玩過(guò)!Python也能開(kāi)發(fā)這樣的飛機(jī)射擊游戲,而且代碼量還不大.
2、代碼量200多行
看起來(lái)打飛機(jī)的游戲應(yīng)該蠻復(fù)雜的吧,結(jié)果我看了作者的源代碼之后,發(fā)現(xiàn)才200多行!而且結(jié)構(gòu)非常清晰完整,最重要的人家不僅代碼寫(xiě)的漂亮,注釋非常完整,讓別人看的一目了然,好的代碼習(xí)慣真的很重要,德藝雙馨啊!
1.代碼的結(jié)構(gòu)
2.游戲的角色文件gameRole
整個(gè)游戲分三個(gè)角色,下面我一一來(lái)解釋一下,思路其實(shí)非常清晰的。
1).一個(gè)是子彈:
初始化子彈的圖片,然后得到它在畫(huà)布上的坐標(biāo),并控制它的移動(dòng)速度
2).敵機(jī)
會(huì)隨機(jī)出一堆敵人的飛機(jī),直管往前沖,從屏幕的上方往下方蜂擁而至,不需要考慮其他的行為!
敵機(jī)有幾個(gè)重要的屬性,比如它的飛行圖片和擊落的圖片,然后獲取的屏幕上的坐標(biāo)。敵機(jī)的行為就一個(gè)飛,而且是只會(huì)往前飛。
3).我方戰(zhàn)機(jī)
# 玩家類(lèi) class Player): def __init__(self, plane_img, player_rect, init_pos): (self) self.image = [] # 用來(lái)存儲(chǔ)玩家對(duì)象精靈圖片的列表 for i in range(len(player_rect)): self.image.append(player_rect[i]).convert_alpha()) = player_rect[0] # 初始化圖片所在的矩形 .topleft = init_pos # 初始化矩形的左上角坐標(biāo) = 8 # 初始化玩家速度,這里是一個(gè)確定的值 = () # 玩家飛機(jī)所發(fā)射的子彈的集合 = 0 # 玩家精靈圖片索引 = False # 玩家是否被擊中 def shoot(self, bullet_img): bullet = Bullet(bullet_img, .midtop) .add(bullet) def moveUp(self): if .top <= 0: .top = 0 else: .top -= def moveDown(self): if .top >= SCREEN_HEIGHT - .height: .top = SCREEN_HEIGHT - .height else: .top += def moveLeft(self): if .left <= 0: .left = 0 else: .left -= def moveRight(self): if .left >= SCREEN_WIDTH - .width: .left = SCREEN_WIDTH - .width else: .left +=我方的戰(zhàn)機(jī)稍微復(fù)雜一點(diǎn),因?yàn)槭悄兄鹘锹?!它有這么幾個(gè)主要的屬性,飛行的圖片,被擊落的圖片,屏幕坐標(biāo),它的子彈等等!然后我們需要控制它的飛機(jī)方向,向上,向下,左邊和右邊,發(fā)射子彈。
3.主游戲部分文件mainGame
1).先是初始化游戲的界面大小,字體等等,讀取聲音和圖片和基本配置:
# 初始化游戲 () screen = ((SCREEN_WIDTH, SCREEN_HEIGHT)) ('飛機(jī)大戰(zhàn)') # 載入游戲音樂(lè) bullet_sound = ('resources/sound;) enemy1_down_sound = ('resources/sound;) game_over_sound = ('resources/sound;) bulle) enemy1_down_) game_over_) ('resources/sound;) (-1, 0.0) ) # 載入背景圖 background = pygame.image.load('resources/image;).convert() game_over = pygame.image.load('resources/image;) filename = 'resources/image; plane_img = pygame.image.load(filename)2).游戲的邏輯部分
其實(shí)用一個(gè)大的while 循環(huán)來(lái)寫(xiě)整個(gè)游戲的邏輯部分
while running: # 控制游戲最大幀率為60 clock.tick(60) # 控制發(fā)射子彈頻率,并發(fā)射子彈 if not : if shoot_frequency % 15 == 0: bulle() (bullet_img) shoot_frequency += 1 if shoot_frequency >= 15: shoot_frequency = 0 # 生成敵機(jī) if enemy_frequency % 50 == 0: enemy1_pos = [random.randint(0, SCREEN_WIDTH - enemy1_rect.width), 0] enemy1 = Enemy(enemy1_img, enemy1_down_imgs, enemy1_pos) enemie(enemy1) enemy_frequency += 1 if enemy_frequency >= 100: enemy_frequency = 0 # 移動(dòng)子彈,若超出窗口范圍則刪除 for bullet in : bullet.move() if bullet.rect.bottom < 0: .remove(bullet) # 移動(dòng)敵機(jī),若超出窗口范圍則刪除 for enemy in enemies1: enemy.move() # 判斷玩家是否被擊中 if (enemy, player): enemie(enemy) enemie(enemy) = True game_over_() break if enemy.rect.top > SCREEN_HEIGHT: enemie(enemy) # 將被擊中的敵機(jī)對(duì)象添加到擊毀敵機(jī)Group中,用來(lái)渲染擊毀動(dòng)畫(huà) enemies1_down = (enemies1, , 1, 1) for enemy_down in enemies1_down: enemie(enemy_down) # 繪制背景 (0) (background, (0, 0)) # 繪制玩家飛機(jī) if not : (player.image[], ) # 更換圖片索引使飛機(jī)有動(dòng)畫(huà)效果 = shoot_frequency // 8 else: = player_down_index // 8 (player.image[], ) player_down_index += 1 if player_down_index > 47: running = False # 繪制擊毀動(dòng)畫(huà) for enemy_down in enemies_down: if enemy_down.down_index == 0: enemy1_down_() if enemy_down.down_index > 7: enemie(enemy_down) score += 1000 continue [enemy_down.down_index // 2], enemy_down.rect) enemy_down.down_index += 1 # 繪制子彈和敵機(jī) .draw(screen) enemie(screen)上面這一堆代碼其實(shí)就是干下面幾個(gè)事情:
- 先繪制出背景幕布
- 再繪制出玩家的戰(zhàn)機(jī),敵機(jī)
- 綁定戰(zhàn)機(jī)和敵機(jī)的鼠標(biāo)和鍵盤(pán)響應(yīng)事件
- 發(fā)射子彈,通過(guò)坐標(biāo)來(lái)判斷子彈和敵機(jī)的碰撞,以及敵機(jī)和玩家戰(zhàn)機(jī)的碰撞
- 最后還要計(jì)算得分:
整個(gè)源碼量很小,非常簡(jiǎn)潔!大家可以試著讀一讀源碼,然后運(yùn)行一下,可以做一些修改,這樣的有趣的小游戲代碼,難度適中!對(duì)菜鳥(niǎo)快速了解Python的類(lèi),模塊的使用非常有幫助,然后自己可以增加一些功能!
2019最新的Python入門(mén)教程都以打包好,熱愛(ài)Python的小伙伴可以關(guān)注后私信小編“學(xué)習(xí)”獲?。?/p>
1.《子彈怎么做mini事件看這里!十分鐘就能用Python教你開(kāi)發(fā)出一個(gè)迷你打飛機(jī)的游戲》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀(guān)點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《子彈怎么做mini事件看這里!十分鐘就能用Python教你開(kāi)發(fā)出一個(gè)迷你打飛機(jī)的游戲》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/3198346.html