五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

利用python實現(xiàn)flappy bird 游戲(完整代碼)

發(fā)布日期:2021-12-15 01:02 | 文章來源:源碼之家

第一個python文件,flappybirdmain.py ,程序中已經(jīng)有詳細(xì)注釋.。

程序大概流程:1.加載圖片素材文件 2.繪畫開始界面,等待程序開始(按空格) 3 .程序刷新,不斷while 循環(huán)(a.隨機(jī)生成柱子,并移動,然后繪制 b.小鳥自下落 c.檢測鍵盤方向按鍵) 4.程序結(jié)束,繪制結(jié)束界面,把分?jǐn)?shù)記錄到txt文件

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 15 00:27:17 2016
BY LINJUNJI SYSU 1360622136@qq.com
"""
import pygame
from sys import exit
import random
from pygame.locals import *
from pygame.font import *  
from gamerole import *
import os
import datetime
import numpy as np
import operator
#圖片路徑信息
BackGround_image_path1='./sources/background/day.png' #背景圖片
BackGround_image_path2='./sources/background/night.png'
GetStart_image_path='./sources/guide/day/down.png'  #開始界面
GameOver_image_path='./sources/other/gameover.png'
Restart_image_path='./sources/other/restart.png'
Grade_blackball_path='./sources/other/grade_blackball.png'
white_gold_Medal_image_path='./sources/medal/white_gold_medal.png'  #獎牌圖片
gold_image_path='./sources/medal/gold_medal.png'
silver_medal_image_path='./sources/medal/silver_medal.png'
bronze_medal_image_path='./sources/medal/bronze_medal.png'
Ground_image_path='./sources/background/ground.png'#地面圖片
pilar_image_up_path='./sources/pilar/up.png' #柱子圖片
pilar_image_down_path='./sources/pilar/down.png'
Bird_image1_path='./sources/bird/up.png' #小鳥圖片
Bird_image2_path='./sources/bird/med.png'
Bird_image3_path='./sources/bird/down.png'
#游戲窗體設(shè)置
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('falppy_bird') 
#圖片載入
background_day=pygame.image.load(BackGround_image_path1)
background_night=pygame.image.load(BackGround_image_path2)
ground=pygame.image.load(Ground_image_path)
pilar_image_up=pygame.image.load(pilar_image_up_path)
pilar_image_down=pygame.image.load(pilar_image_down_path)
get_start_image=pygame.image.load(GetStart_image_path)
gameover_image=pygame.image.load(GameOver_image_path)
medal_blackball_image=pygame.image.load(Grade_blackball_path)
restart_image=pygame.image.load(Restart_image_path)
bird_images=[]
bird_image_up=pygame.image.load(Bird_image1_path)
bird_image_med=pygame.image.load(Bird_image2_path)
bird_image_down=pygame.image.load(Bird_image3_path)
bird_images.append(bird_image_up)
bird_images.append(bird_image_med)
bird_images.append(bird_image_down)
medal_images=[]
medal1=pygame.image.load(white_gold_Medal_image_path)
medal2=pygame.image.load(gold_image_path)
medal3=pygame.image.load(silver_medal_image_path)
medal4=pygame.image.load(bronze_medal_image_path)
medal_images.append(medal1)
medal_images.append(medal2)
medal_images.append(medal3)
medal_images.append(medal4)
#新建小鳥
bird_pos=[190,190]  #小鳥初始位置
mybird=Bird(bird_images,bird_pos)
#柱子集合
pilar_set = pygame.sprite.Group()
#運行參數(shù)設(shè)置
pilar_frequency=0  #柱子更新參數(shù)
bird_frequency=0#小鳥飛行頻率
clock = pygame.time.Clock()
running=False
score=0
flag=1
def collide_circle(pilar, mybird):  #碰撞檢測函數(shù)
 if mybird.rect.right > pilar.pilar1_rect.left and mybird.rect.left < pilar.pilar1_rect.right:
  if (mybird.rect.top >pilar.pilar1_rect.bottom and mybird.rect.bottom <pilar.pilar2_rect.top):
return False
  else:
return True
 else:
  if mybird.rect.bottom > 400:
return True
  else:
return False
 
def get_history_record(score):  #獲取記錄的得分
 record=[]
 index =0
 if os.path.isfile("record.txt"):#存在:獲取記錄到的內(nèi)容  
  f=open("record.txt")
  line=f.readline()
  line=f.readline()
  while line !="":
record.append([int(line.strip().split(",")[0]),line.strip().split(",")[1]])
line=f.readline()
  f.close()
 record.append([score,str(datetime.datetime.now())])
 record.sort(key=operator.itemgetter(0),reverse=True)
 print record
 while len(record)>10:
  record.pop()
 file_writer = open("record.txt", 'w')
 file_writer.writelines("time"+","+"grade"+"\n")
 for i in range(len(record)):
  file_writer.writelines(str(record[i][0])+","+str(record[i][1])+"\n")
  if int(record[i][0]) == int(score):
index=i
 file_writer.close()
 if index >3:
  index=3
 return record[0][0],index
 
 
while not running:
 clock.tick(60)
 screen.fill(0)
 screen.blit(get_start_image, (0, 0)) 
 pygame.display.update()
 x, y=pygame.mouse.get_pos()
 for event in pygame.event.get():
  if event.type ==pygame.QUIT:
pygame.quit()
exit()
  elif event.type == pygame.MOUSEBUTTONDOWN:
if y<380 and y>300 and x>180 and x <210:
 running=True
 
while True:
 clock.tick(60)
 pilar_frequency +=1 
 #生成柱子
 if pilar_frequency %100==0:
  pilar_pos=[384,random.randint(130, 250)]
  new_pilar=Pilar(pilar_image_up, pilar_image_down, pilar_pos)
  pilar_set.add(new_pilar) 
 if pilar_frequency >=1000:
  pilar_frequency=0 
  flag=(-1)*flag 
 #移動柱子
 for pilar in pilar_set:
  pilar.move()
  if collide_circle(pilar, mybird):  #碰撞檢測代碼
mybird.is_hit=True 
for pilar in pilar_set:
 pilar.stop()
  if pilar.pilar1_rect.right <0:
pilar_set.remove(pilar) 
 #小鳥降落
 mybird.SelfMoveDown() 
 # 繪制背景
 screen.fill(0)
  
 if flag==1:
  screen.blit(background_day, (0, 0)) 
 else:
  screen.blit(background_night, (0, 0))
 #繪制柱子
 for pilar in pilar_set:
  screen.blit(pilar.pilar1_image,pilar.pilar1_rect)
  screen.blit(pilar.pilar2_image,pilar.pilar2_rect)
 #繪制地面
 screen.blit(ground,(0,384))
 #繪制玩家小鳥
 bird_frequency +=1
 if not mybird.is_hit:  #未發(fā)生碰撞
  score +=10
  screen.blit(mybird.image[mybird.image_index],mybird.rect)
  mybird.image_index=bird_frequency % 3 
 else:  #發(fā)生碰撞
  running=False 
  mybird.SelfDiedDown()
  screen.blit(mybird.image[0],mybird.rect)
  has_log=False
  while not running and mybird.is_downtoground:  #畫面切換到結(jié)束界面  
screen.blit(gameover_image,(64,30))
screen.blit(medal_blackball_image,(42,100))
screen.blit(restart_image,(122,270))
if not has_log: 
 bestscore,index=get_history_record(score/100) #獲取歷史記錄情況
 print score/100
 print bestscore,index
 has_log=True
screen.blit(medal_images[index],(75,160))  #要讀取之前保存的信息,
x, y=pygame.mouse.get_pos()  

#目前得分
score_font = pygame.font.Font(None, 36)
score_text = score_font.render(str(score/100), True, (255,255,255))
text_rect = score_text.get_rect()
text_rect.midtop = [290, 145]
screen.blit(score_text, text_rect)
#歷史最佳得分
score_font = pygame.font.Font(None, 36)
score_text = score_font.render(str(bestscore), True, (255,255,255))
text_rect = score_text.get_rect()
text_rect.midtop = [290,200]
screen.blit(score_text, text_rect)

for event in pygame.event.get():
 if event.type ==pygame.QUIT:
  pygame.quit()
  exit()
 elif event.type == pygame.MOUSEBUTTONDOWN:
  if y<360 and y>280 and x>150 and x <240:  #重新開始pilar_set = pygame.sprite.Group()mybird=Bird(bird_images,bird_pos)score=0running=True
pygame.display.update()
  
 # 繪制得分  
 score_font = pygame.font.Font(None, 36)
 score_text = score_font.render(str(score/100), True, (255,255,255))
 text_rect = score_text.get_rect()
 text_rect.midtop = [185, 30]
 screen.blit(score_text, text_rect)
 #屏幕更新
 pygame.display.update()
 #繪制按鍵執(zhí)行代碼
 key_pressed=pygame.key.get_pressed()
 if not mybird.is_hit:
  if key_pressed[K_w] or key_pressed[K_UP]:
mybird.moveUp()
  if key_pressed[K_s] or key_pressed[K_DOWN]:
mybird.moveDown()
  
 for event in pygame.event.get():
  if event.type ==pygame.QUIT:
pygame.quit()
exit()

第二個文件,gamerole.py 定義兩個類,一個是柱子類,定義柱子的生成規(guī)則和移動規(guī)則 一個是小鳥類,定義小鳥位置信息,加載圖片信息以及小鳥的飛行控制

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 15 00:27:17 2016
@author: LINJUNJI 
"""
import pygame
import random
SCREEN_WIDTH =384
SCREEN_HEIGHT=448
INTERVEL=120#兩個障礙之間的間隔
UP_LIMIT=60
DOWN_LIMIT=360
#小鳥類
class Bird(pygame.sprite.Sprite):
 def __init__(self,bird_imgs,init_pos):
  pygame.sprite.Sprite.__init__(self)
  self.image=bird_imgs
  self.rect=self.image[0].get_rect()
  self.rect.midbottom=init_pos
  self.up_speed = 5
  self.down_speed=2
  self.selfdown_speed=2
  self.image_index=0 #圖片索引參數(shù),控制小鳥飛行姿態(tài)變化
  self.is_hit=False 
  self.is_downtoground=False
 
 def SelfMoveDown(self):
  self.rect.top += self.selfdown_speed
 
 def SelfDiedDown(self):
  self.up_speed = 0
  self.down_speed=0
  self.rect.bottom +=self.selfdown_speed*2
  if self.rect.bottom >=400:
self.rect.bottom =400
self.is_downtoground=True
  
 def moveUp(self):
  if self.rect.top<=0:
self.rect.top=0
  else:
self.rect.top -=self.up_speed

 def moveDown(self):
  if self.rect.top>=SCREEN_HEIGHT-self.rect.height:
self.rect.top = SCREEN_HEIGHT-self.rect.height
  else:
self.rect.top += self.down_speed
 '''  
 def moveLeft(self):
  if self.rect.left <= 0:
self.rect.left = 0
  else:
self.rect.left -= self.speed
 def moveRight(self):
  if self.rect.left >= SCREEN_WIDTH - self.rect.width:
self.rect.left = SCREEN_WIDTH - self.rect.width
  else:
self.rect.left += self.speed
 '''
#柱子類
class Pilar(pygame.sprite.Sprite):
 def __init__(self,pilar_image_up,pilar_image_down,init_pos):
  pygame.sprite.Sprite.__init__(self)
  self.pilar1_image=pilar_image_up
  self.pilar2_image=pilar_image_down
  self.pilar1_rect=self.pilar1_image.get_rect()
  self.pilar2_rect=self.pilar2_image.get_rect()
  self.pilar1_rect.bottomleft=init_pos
  self.pilar2_rect.topleft=[init_pos[0],init_pos[1]+INTERVEL]
  self.horizontal_speed=2  #柱子平移的速度
  self.vertical_speed=0.3 #柱子上下移動的速度
  self.direction=random.randint(0,1)  #柱子上下移動的方向
  
 def move(self):
  self.pilar1_rect.left -=self.horizontal_speed#柱子左右移動
  self.pilar2_rect.left -=self.horizontal_speed
  if self.direction == 1:#控制柱子上下移動
self.pilar1_rect.bottom +=self.vertical_speed  
self.pilar2_rect.top +=self.vertical_speed
if self.pilar2_rect.top > DOWN_LIMIT:
 self.direction=0
  else:
self.pilar1_rect.bottom -=self.vertical_speed  
self.pilar2_rect.top -=self.vertical_speed
if self.pilar1_rect.bottom < UP_LIMIT:
 self.direction=1
 def stop(self):
  self.horizontal_speed=0
  self.vertical_speed=0

游戲的素材圖片

到此這篇關(guān)于利用python開發(fā)的flappy bird 游戲的文章就介紹到這了,更多相關(guān)python flappy bird 游戲內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部