網(wǎng)上有很多關(guān)于開(kāi)源pos機(jī)驅(qū)動(dòng)源碼,Python實(shí)現(xiàn)的flappy bird游戲的知識(shí),也有很多人為大家解答關(guān)于開(kāi)源pos機(jī)驅(qū)動(dòng)源碼的問(wèn)題,今天pos機(jī)之家(www.shineka.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!
本文目錄一覽:
1、開(kāi)源pos機(jī)驅(qū)動(dòng)源碼
開(kāi)源pos機(jī)驅(qū)動(dòng)源碼
前文相信大家肯定玩過(guò)或見(jiàn)過(guò)這個(gè)游戲,我之前也一直在手機(jī)上玩flappy bird游戲,閑暇時(shí)間就編寫(xiě)了一個(gè)
是采用python3+pygame模塊制作而成的,運(yùn)行效果非常流暢,會(huì)讓你大吃一驚哦!^_^
一、運(yùn)行效果展示下載游戲之后,注意在自己的python環(huán)境中安裝pygame模塊,如果沒(méi)有安裝可以使用pip install pygame 進(jìn)行安裝
然后使用使用命令運(yùn)行起這個(gè).py文件,運(yùn)行之后的第一個(gè)界面效果如下,是不是很酷炫
當(dāng)點(diǎn)擊上圖中的“Play”按鈕之后的效果如下:
運(yùn)行之后是有音樂(lè)的,大家可以下載代碼的時(shí)候一起將素材下載,這樣就在運(yùn)行時(shí)就能聽(tīng)到音樂(lè)
二、完整代碼下面代碼用到了素材(背景圖片,音樂(lè)等,下載地址:https://docs.qq.com/doc/DYUhqVEJ0d013alVC)
1 import math 2 import os 3 import time 4 from random import randint 5 from random import uniform 6 import pygame 7 from pygame.locals import * #導(dǎo)入一些常用的變量 8 from collections import deque#加入了隊(duì)列 9 10 FPS = 60 11 BK_width="360px",height="auto" />
level = 4#石頭出現(xiàn)的等級(jí) 35 36 BUTTON_width="360px",height="auto" />display.set_mode((BK_width="360px",height="auto" />Sound("lose.wav") 50 music1 = pygame.mixer.Sound("touch.wav") 51 pygame.mixer.music.load("bkm.mp3") 52 font = pygame.font.SysFont('comicsansms', 25) 53 54 55 #用于設(shè)置鳥(niǎo)的種類 56 def little_bird(list): 57 global a_i 58 global b_i 59 global c_i 60 a_i=list[0] 61 b_i=list[1] 62 c_i=list[2] 63 64 65 #用于設(shè)置關(guān)卡難度 66 def seteasy(list): 67 global BK_MOVE_SPEED # 背景每毫秒移動(dòng)的速度 就是柱子移動(dòng)的速度 68 global ADD_TIME # 每隔多少毫秒就增加一個(gè)柱子 69 global TOTAL_PIPE_BODY # 像素值必須為整數(shù) 占窗口的3/5 70 global PIPE_RATE 71 global STONE_LEVEL # 鳥(niǎo)出現(xiàn)的等 72 global BIRD_INIT_SCORE 73 74 BK_MOVE_SPEED = list[0] # 背景每毫秒移動(dòng)的速度 75 ADD_TIME = list[1] # 每隔多少毫秒就增加一個(gè)柱子 76 TOTAL_PIPE_BODY =list[2] # 像素值必須為整數(shù) 占窗口的3/5 77 PIPE_RATE = list[3] 78 Pipe.add_time = list[1] 79 BIRD_INIT_SCORE = list[4] 80 STONE_LEVEL = list[5] 81 82 83 #子彈類 84 class Bullet(pygame.sprite.Sprite): 85 speed = BULLET_SPEED 86 width="360px",height="auto" />rect(self.x,self.y,Bird.width="360px",height="auto" />png')#加載背景圖像259 def load_images():260 #加載所有游戲需要用到的圖像261 #上面寫(xiě)了這個(gè)函數(shù)下面就用了起來(lái) join用于分隔符和元組的拼接 os.path.join 用于路徑的順序拼接262 return {'bk1': load_image('background.png'),263 'bk2':load_image("background2.png"),264 "bk3":load_image("background3.png"),265 "bk4":load_image("background4.png"),266 "bk5":load_image("background5.png"),267 "bk6":load_image("background6.png"),268 'stone':load_image('stone.png'),269 'bullet': load_image('bullet.png'),270 'pipe-end': load_image('pipe_end.png'),271 'pipe-body': load_image('pipe_body.png'),272 'f_u': load_image('fenghuang_up.png'),273 'f_m': load_image('fenghuang_mid.png'),274 'f_w': load_image('fenghuang_down.png'),275 'bird-wingup': load_image('bird_wing_up.png'),276 'bird-wingmid': load_image('bird_wing_mid.png'),277 'bird-wingdown': load_image('bird_wing_down.png')}278 279 def frames_to_msec(frames,fps=FPS):280 return 1000.0*frames/fps #難道限制的意思就是我可以限制圖片出來(lái)的時(shí)間281 282 def msec_to_frames(milliseconds, fps=FPS):283 return fps * milliseconds / 1000.0#轉(zhuǎn)化成對(duì)應(yīng)的幀數(shù)284 #轉(zhuǎn)化成每秒的相應(yīng)的幀數(shù)285 286 287 def game_loop():288 pygame.mixer.music.play(-1)289 pygame.display.set_caption("Flappy Bird")290 clock = pygame.time.Clock()#創(chuàng)建一個(gè)時(shí)鐘對(duì)象291 images = load_images()#建立所有需要的圖像字典292 293 bird = Bird(20,BK_HEIGHT//2,1,(images[a_i],images[b_i] ,images[c_i]))294 score_font = pygame.font.SysFont(None,50,bold=True)#名字 大小 粗體 建立畫(huà)筆 用于記錄 分?jǐn)?shù)295 score_font2 = pygame.font.SysFont(None, 40, bold=True) # 名字 大小 粗體 建立畫(huà)筆 用于記錄 分?jǐn)?shù)296 score_font3 = pygame.font.SysFont(None, 70, bold=True) # 名字 大小 粗體 建立畫(huà)筆 用于記錄 分?jǐn)?shù)297 pipes = deque()298 299 stones =pygame.sprite.Group()#將石頭新建為一個(gè)精靈組300 bullets =pygame.sprite.Group()#將子彈新建為一個(gè)精靈組301 302 pause = done = False303 frames=0304 305 while not done :#當(dāng)沒(méi)有按下中止鍵306 clock.tick(FPS)307 if not (pause or frames%msec_to_frames(Pipe.add_time)):#如果沒(méi)有按下暫停 或者滿足新生成柱子的條件308 pp=Pipe(images['pipe-end'], images['pipe-body'])309 pipes.append(pp)#生成新管子 并加入隊(duì)列310 311 if not (pause or frames%msec_to_frames(Stone.add_time)or bird.level<STONE_LEVEL):312 ss = Stone(images["stone"])313 stones.add(ss) #加入新生成的石頭314 315 #判斷發(fā)生了什么事件進(jìn)行相應(yīng)的處理316 for e in pygame.event.get():317 if e.type == QUIT:318 done = True319 break320 elif e.type == KEYUP :321 if e.key == K_p:322 pause = not pause323 elif e.key ==K_d:#發(fā)射子彈324 bb=Bullet(bird,images["bullet"])325 bullets.add(bb)326 elif e.key ==K_s or e.key == K_SPACE:327 bird.inital_speed = INITAL_SPEED328 329 330 elif e.type == MOUSEBUTTONUP:331 bird.inital_speed =INITAL_SPEED332 333 # 重新更新時(shí)間334 # 使小鳥(niǎo)又進(jìn)入相應(yīng)的運(yùn)動(dòng)的開(kāi)始335 if pause:336 continue # 這個(gè)時(shí)段什么都不做337 338 pygame.sprite.groupcollide(stones,bullets,True,True,pygame.sprite.collide_mask)339 pipe_collision = any(p.collides(bird) for p in pipes)340 stone_collision = any(s.collides(bird) for s in stones)341 342 if pipe_collision:343 pygame.mixer.music.stop()344 done = True345 pygame.mixer.Sound.play(music_lose, -1)346 time.sleep(3.5)347 pygame.mixer.Sound.stop(music_lose)348 time.sleep(0.1)349 350 if stone_collision:351 pygame.mixer.music.stop()352 pygame.mixer.Sound.play(music_lose, -1)353 time.sleep(3.5)354 pygame.mixer.Sound.stop(music_lose)355 time.sleep(0.1)356 done = True357 if 0>=bird.y or bird.y>BK_HEIGHT-Bird.height:358 done = True359 pygame.mixer.music.stop()360 pygame.mixer.Sound.play(music_lose, -1)361 time.sleep(3.5)362 pygame.mixer.Sound.stop(music_lose)363 time.sleep(0.1)364 365 366 screen.blit(images[search_bk(bird)], (0, 0))#畫(huà)背景墻 這種是分開(kāi)兩張的367 368 while pipes and not pipes[0].visible:369 pipes.popleft()#當(dāng)隊(duì)列不為空 且管子 0 已經(jīng)不可見(jiàn)的時(shí)候370 for s in stones:#刪除看不見(jiàn)的石頭371 if not s.visible():372 del s373 for b in bullets:#刪除看不見(jiàn)的子彈374 if not b.visible():375 del b376 377 378 for p in pipes:379 p.update()380 screen.blit(p.image,p.rect)#在指定的位置 畫(huà)柱子381 for s in stones:382 s.update()383 screen.blit(s.image,s.rect)384 385 for b in bullets:386 b.update()387 screen.blit(b.bullet,b.rect)388 389 for p in pipes:390 if bird.x>p.x+Pipe.width="360px",height="auto" />上述代碼是第1版本,簡(jiǎn)單起見(jiàn) 沒(méi)有完全封裝為面向?qū)ο?,等后面有時(shí)間再進(jìn)行完善 目標(biāo)是:全部用類進(jìn)行分裝,然后拆分到多個(gè)模塊中
總結(jié)歡迎大家指出不足,或者你有更好的建議,可以寫(xiě)在評(píng)論區(qū)一起交流。
最后,有需要這個(gè)實(shí)例所有文件的可以點(diǎn)擊下面的鏈接:)
https://docs.qq.com/doc/DYUhqVEJ0d013alVC
以上就是關(guān)于開(kāi)源pos機(jī)驅(qū)動(dòng)源碼,Python實(shí)現(xiàn)的flappy bird游戲的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于開(kāi)源pos機(jī)驅(qū)動(dòng)源碼的知識(shí),希望能夠幫助到大家!
