子供の頃のゲームの4番目のゲームについて書いたのですが、以前にプレイした非常に面白いゲーム、鳥であるファットバードクイックフライを思いついたのですが、鋼管のゲームを通して、常にクリックして位置を調整することで、今日書きます。このゲーム〜
Pythonゲーム開発:(太った鳥はすぐに飛ぶ)
開発には、サードパーティライブラリのpygameとpythonの基本的な構文を使用します。このゲームのコードは100行以下であるため、初心者でも簡単に理解できます。最も重要なことは、このゲームを開発することで、Pythonの基本的な知識を安定させるだけでなく、料理のように退屈なコードを生き生きとさせることができるということです。
** pygameのインストール:** pip install pygame;(コンパイラがある場合は設定にインポートできます)
最初のステップ:ゲームの基本的なフレームワークを理解します。
ゲームの形成は、実行中のインターフェイスの継続的な更新であり、無限ループはこの機能を実現できます。ループの内部はゲームのメインモジュールです。
import pygame,time
from pygame.locals import *#导入库文件
img=pygame.image.load('图片url')#加载图片素材
def GameOver():
pygame.quit()#游戏退出
def main():
pygame.init()#游戏初始化
windowSize=pygame.display.set_mode([480,640])#游戏窗口界面
pygame.display.set_caption('游戏名称')#游戏标题设置
pygame.display.update()#游戏界面刷新
while True:
'''游戏主体模块'''
'''事件响应'''
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()#游戏退出
windowsSize.fill(pygame.Color(R,G,B))#窗体背景颜色填充,默认为黑色
pygame.display.update()#游戏界面刷新
time.sleep('休眠时间')#一般是0.05-0.09
if __name__=='__main__':
main()#主函数
実行結果:(背景色は黒、サイズは480 * 640フォーム)
ステップ2:単純な画像を描画し、単純なボタン応答を実装します。
まず、オブジェクト指向の概念が何であるかを理解し、その後の操作を容易にするために必要なクラスを適切な方法で構築する必要があります。
class Bird:#胖鸟类
position=[30,200]#鸟的初始位置
birdColor=pygame.Color(255,255,0)#一只黄色的小鸟
speed=1#小鸟的速度
bird_score=0#小鸟得分
クラスを定義した後、このテンプレートを使用して、太った鳥のオブジェクトをインスタンス化できます。bird= Bird();
その後、単純なグラフィック描画を実装するための独自のDrawメソッドを構築しています(pygameは単純な画像描画を実装するための描画を提供します。ここでは単純な長方形を描画します)。
私には学習とコミュニケーションの輪があります。人の数はそれほど多くありませんが、Pythonを学ぶ人は誰でも学び、コミュニケーションするようになります。どのような問題
が発生しますか?お互いに話し合い、学術的な問題を交換します。ペンギングループとのコミュニケーションを学ぶ:745895701
Python関数の定義と使用
def DrawRect(windowsSize,bird):
pygame.draw.rect(windowsSize,bird.birdColor,Rect(bird.position[0],bird.position[1],30,30))
動作結果:(太った鳥である黄色い長方形が画面に表示されました。後の段階でより鮮やかにします)
次に、この小さな太った鳥をボタンの応答で移動させる方法が再び問題になります。pygameは、ボタンの状態を判別するためのtype属性と、トリガーされるボタンを判別するためのkey属性を提供し、さまざまな状況に応じてさまざまなイベントに応答します。
flag=0#这里我们加一个标志位,如果鸟想要飞就不会下降
for event in pygame.event.get():
if event.type == QUIT:
GameOver() #游戏退出
elif event.type==KEYDOWN:#按键响应
if event.key==K_SPACE:
bird.position[1]=bird.position[1]-bird.speed*50*level
#根据等级胖鸟上升或下降
flag=1
if flag==0:#检测位
bird.position[1]=bird.position[1]+bird.speed*10*level
flag=0
これを行った後、それは少しゲームのように感じ始めますか?私たちの小さな太った鳥はスペースを押す頻度に応じて上下することができます(笑)。
ステップ3:障害物の作成と移動。
鳥を作るのと同じように、パイプも同様に作ります。
class PipeLine:#管道类
pipe_x=300#记录管道横坐标位置
pipe_y=[]#留给小鸟飞行的间隙
pipeColor=pygame.Color(115,190,44)#管道的颜色
パイプラインを使用する前に、パイプラインを初期化する必要があります。縦座標の計算に従って、太った鳥のために4つの空の位置を確保し、初期化でこれらの空の位置をマークして、後でパイプラインの障害物を描画できるようにします。以下は、私たちが構築したPipeInitメソッドです。
def PipeInit(pipe):#初始化管道
start = random.randint(0, 10) * 30
pipe.pipe_y.append(start)
pipe.pipe_y.append(start + 30)
pipe.pipe_y.append(start + 60)
pipe.pipe_y.append(start + 90)
太った鳥はスペースバーを使って上下に動きますが、パイプの動きはユーザーが制御せず、移動方向は水平で右から左に順番に移動します。ここではパイプの水平座標位置を使用します。鳥とパイプの相対的な動きをある意味で実現し、パイプの引き抜きと同時にこれらの操作を行うことができます。パイプラインを描画するメソッドを作成しましょう。
def DrawPipeLine(windowSize,pipeList,bird):#绘制管道
for pipe in pipeList:
pipe.pipe_x=pipe.pipe_x - 10
for i in range(0,20):
if i*30 not in pipe.pipe_y:#not in实现空隙的留白
pygame.draw.rect(windowSize, pygame.Color(0,145,0), Rect(pipe.pipe_x, i*30, 60, 30))#绘制矩形管道
if pipe.pipe_x<=-40:#判断管道是否移动出界
bird.g_score = bird.g_score + 1#游戏成绩增加
pipe.pipe_x=480
pipe.pipe_y=[]
PipeInit(pipe)
pipeList.pop()#弹出移出屏幕的管道
pipeList.append(pipe)#将新管道添加进入管道列表
4番目のステップ:ゲームの結果の判断。
これまでのところ、基本的にゲームのすべての機能を実現しましたが、すべてのゲームが終了します。現在、ゲームはマップとスプライトの動きのみを認識し、実現していません。有効化ゲーム終了の機能。ここでは、Checkメソッドを使用してゲームを判断します。
def CheckGame(bird,pipe):#游戏判断
if bird.position[1]<0 or bird.position[1]>570:
pygame.quit()#跑出上下界限
if bird.position[0]+30>pipe[0].pipe_x and bird.position[0]<pipe[0].pipe_x+60:
if bird.position[1]<pipe[0].pipe_y[0] or bird.position[1]+20>pipe[0].pipe_y[3]:
pygame.quit()#游戏退出
この方法で、私の最後の主な機能は終わりました。ゲームが以前と異なっているかどうかを見てみましょう。また、プレイアビリティも質的に飛躍しました(少し興奮して、実行を開始しましょう。簡単なデモを見てみましょう)
ステップ5:ゲームインターフェイスの最適化と画像のインポート。
それはどのように走ることができますか、そしてそれは私たちが期待した太った鳥に似ていますか?しかし、これは少し単調すぎますか?ゲームインターフェイス全体をより鮮やかにし始めましょう。前述のwindowSize.fill()メソッドは、デフォルトで黒で塗りつぶされています。塗りつぶされた背景のRGBカラー値を変更するだけで、背景色を目的の色に変更できます。
この愚かな黄色の小さな太った鳥(それは本当に正方形に見えます)のために、改築をして、太った鳥の写真をインポートし、元の長方形の場所に対応する変更を加えて、生まれ変わるようにしましょう。
ゲームウィザードのインポート形式:flappyBird = pygame.image.load( "Bird.png")#ゲーム画像を読み込む;
windowSize. blit(flappyBird, Rect(brid. position[0], brid. position[1], 30, 30))
#pygame. draw. rect(windowSize, brid, BeidColor, Rect(brid. position[0], brid. position[1], 30, 30))
ゲームスコアのプロンプト情報については、pygameに付属のフォントを使用してフォントサイズを設定し、画面に追加できます(ここでは、スコアプロンプト情報のコードのみを示します。他のプロンプト情報は、次のように入力することもできます。必要)。
font = pygame.font.SysFont('宋体', 24);
text = font.render("Game Score:" + str(bird.g_score), True, (255, 255, 255));
windowsSize.blit(text, Rect(360, 10, 200, 120));#text为所填充的文本内容,Rent(x,y,len,width)
最終的に正常に終了しました(新しい機能モジュールを追加する可能性があります):
ゲームの完全なコード:
import pygame,random,sys,time
from pygame.locals import *#导入库文件
flappyBird = pygame.image.load("Bird.png")#加载游戏图片
level=1#游戏等级
class Brid:#鸟类
position = [10,200]#初始位置
speed=1#移动速度
g_score = 0 # 游戏得分
BridColor=pygame.Color(255,255,0)#颜色黄色
class PipeLine:#管道类
pipe_x=300
pipe_y=[]
pipeColor=pygame.Color(115,190,44)
def GameOver():
pygame.quit()#游戏退出
def Leveling(count):#等级判定
if count<=10:
return 1
else:
return count/10
def GameInit(windowSize,brid):#游戏初始化
windowSize.blit(flappyBird,Rect(brid.position[0], brid.position[1], 30, 30))
pygame.display.update()
def PipeInit(pipe):#初始化管道
start = random.randint(0, 10) * 30
pipe.pipe_y.append(start)
pipe.pipe_y.append(start + 30)
pipe.pipe_y.append(start + 60)
pipe.pipe_y.append(start + 90)
def DrawPipeLine(windowSize,pipeList,bird):#绘制管道
for pipe in pipeList:
pipe.pipe_x=pipe.pipe_x - 10
for i in range(0,20):
if i*30 not in pipe.pipe_y:
pygame.draw.rect(windowSize, pygame.Color(0,145,0), Rect(pipe.pipe_x, i*30, 60, 30))
if pipe.pipe_x<=-40:
bird.g_score = bird.g_score + 1
pipe.pipe_x=480
pipe.pipe_y=[]
PipeInit(pipe)
pipeList.pop()
pipeList.append(pipe)
def CheckGame(bird,pipe):#游戏判断
if bird.position[1]<0 or bird.position[1]>570:
pygame.quit()#跑出上下界限
if bird.position[0]+30>pipe[0].pipe_x and bird.position[0]<pipe[0].pipe_x+60:
if bird.position[1]<pipe[0].pipe_y[0] or bird.position[1]+20>pipe[0].pipe_y[3]:
pygame.quit()#游戏退出
def main():
flag=0#标记位
pygame.init()#游戏初始化
windowsSize=pygame.display.set_mode([480,600])#设置窗口大小
pygame.display.set_caption('FlappyBrid') # 窗口标题
font = pygame.font.SysFont('宋体', 24)
bird=Brid()#创建鸟实例
pipeList=[]#管道列表
pipe1= PipeLine()
pipe2= PipeLine()
PipeInit(pipe1)
pipe2=pipe1#对象的值拷贝
pipe2.pipe_x=pipe2.pipe_x+80
pipeList.append(pipe1)
pipeList.append(pipe2)
windowsSize.fill(pygame.Color(113,197,205))
GameInit(windowsSize,bird)#游戏初始化
DrawPipeLine(windowsSize,pipeList,bird)
while True:#游戏主体
level = Leveling(bird.g_score)
text = font.render("Game Score:" + str(bird.g_score), True, (255, 255, 255))
text1 = font.render("Level:" + str(level), True, (255, 255, 255))
for event in pygame.event.get():
if event.type == QUIT:
GameOver() #游戏退出
elif event.type==KEYDOWN:#按键响应
if event.key==K_SPACE:
bird.position[1]=bird.position[1]-bird.speed*50*level
flag=1
if flag==0:#检测位
bird.position[1]=bird.position[1]+bird.speed*10*level
flag=0
windowsSize.fill(pygame.Color(113,197,205))
CheckGame(bird, pipeList)
DrawPipeLine(windowsSize,pipeList,bird)
windowsSize.blit(text, Rect(360, 10, 200, 120))
windowsSize.blit(text1, Rect(360, 40, 200, 120))
GameInit(windowsSize,bird)
time.sleep(0.1-level/100)
if __name__=='__main__':
main()#主函数
実行中のゲームのスクリーンショット:
総括する
上記は、速く飛ぶ太った鳥のソースコードプロセスです。それを書いて楽しむことができます。
私は、学習とプログラミングが好きな若い男性、タイガーシンボルです。