Pythonのゲーム開発 - スネーク

#!は/ usr / binに/ PythonのENV 
#= UTF-コーディング8
インポートpygameの
インポートSYS
インポートランダム

#グローバル定義、画面の幅と長さ
SCREEN_X = 600
SCREEN_Y = 600


#ヘビ
の単位で#25ポイント
クラススネーク(オブジェクト) :#は、クラス--Snake、デフォルトのオブジェクトクラスを定義する方が良いとあなたがそれを置き換えることができている場合
#は、様々な性質は、[スタートX5でデフォルト右/本体ブロック]を必要な初期化
DEF __init __(自己)します。#defineをINIT方法は、最初のパラメータは、自己自身常に、__init__メソッド内で、あなたは自分のポイントが自身のインスタンスを作成するため、プロパティのすべての種類は、自己にバインドされて置くことができます。
__init__方法で#、時間内のインスタンスを作成し、あなたは空のパラメータを渡すことはできません、あなたはパラメータを渡す必要があります__init__方法と一致しますが、摩耗自己する必要はありません
、それはデフ__(自己、__initされている場合、たとえば、#名前、スコア):その後、自己の必要はありませんが、名前とスコア持っている必要があり、このタイプの
self.dirction = pygame.K_RIGHT
self.body = []
レンジでX(のための5):
self.addnode()#1に、addNode通話機能が、増加体は、5サイクル後、5匹の蛇ノードの初期値

本体の長さの関数を増加#ヘビは、増加しているときはいつでもフロントエンドブロックでヘビ
デフにaddNode(自己) :
左、トップ=(0、0)はデフォルト#0
self.body IF:
左、トップ=(self.body [0] .LEFT、self.body [0] .top)
ノード= pygame.Rect(左トップのサイズ、25、25ノードの)#ノード
self.dirction == pygame.K_LEFT IF:
node.left - = 25
のelif self.dirction == pygame.K_RIGHT:
node.left = + 25
のelif self.dirction == pygame.K_UP:
node.top - = 25
のelif self.dirction == pygame.K_DOWN:
node.top = + 25
self.body.insert(0、ノード)挿入ノード#

#最後のデフォルトからポップ要素ポップ、最後のブロックを削除
DEFのdelnode(セルフ):
self.body.pop()

死の裁きを
DEF isdead(セルフ):
は、XまたはY値ではない身体のトップ部分の画面で、壁にぶつかります( 0600)、その死の壁
IF self.body [0] .Xない範囲(SCREEN_X)中:
trueを返します
IFのself.body [0] .Yない範囲(SCREEN_Y)に:
trueを返します
#は自分の頭を打ちますそして、体の衝突のいずれかの部分。ボディ[0]最初の要素、体である[1:]第二の要素から取られているが、最後の
IF self.body [0] self.bodyで[1:]:
リターン真の
リターン偽

#モバイル!
:DEF(セルフ)に移動
self.addnode()
self.delnode()

の変化方向を、しかし、左右、上下逆に変更することはできません
デフchangedirection(自己、curkeyを):
= LR [pygame.K_LEFT、pygame.K_RIGHT]
UD = [pygame.K_UP、pygame.K_DOWN]
IFにおけるUD curkey LR +:
IF(LRでcurkey)および(LRでself.dirction):
リターン
UDにおけるIF(curkey )とUD中(self.dirction):
リターン
self.dirction = curkey


#-food
#方法:配置/除去
の単位で#25のポイント
クラス食べ物:
DEF __init __(自己):
self.rect pygame.Rect =( - 25、0、25、25)

DEF削除(自己):
self.rect.x = -25

DEF SET(自己):
:self.rect.x == -25 IF
allpos = []
があまりにも近い壁25にあります〜間SCREEN_X-25
: - (25、25 25、SCREEN_X)用POSにおける範囲
allpos.append(POS)
self.rect.left = random.choice(allpos)
self.rect.top = random.choice(allpos)
プリント(self.rect)


(スクリーン、POS、テキスト、カラー、font_bold =偽、FONT_SIZE = 60、font_italic =偽)DEF show_text:
取得システムフォントと設定文字サイズ
cur_font = pygame.font.SysFont( "ゴシック"、FONT_SIZE)
セットかボールド属性
cur_font.set_bold(font_bold)
はイタリック属性の設定
cur_font.set_italic(font_italic)
セットテキスト
text_fmt = cur_font.render(テキスト,. 1、カラー)
#ドローテキスト
screen.blit(text_fmt、POS)が


DEFメイン( ):
pygame.init()
screen_size =(SCREEN_X、SCREEN_Y)
スクリーン= pygame.display.set_mode(screen_size)
pygame.display.set_caption( 'スネーク')
クロック= pygame.time.Clock()
スコア= 0
isdead =偽

#蛇/食物
蛇=スネーク( )
食品=食品()

真中:
pygame.event.get()内のイベントのために:
event.type == pygame.QUIT場合:
sys.exit()
event.type == pygame.KEYDOWN場合:
snake.changedirection(イベント.KEY)
死后按スペース重新
場合event.key == pygame.K_SPACEとisdead:
リターンメイン()

screen.fill((255、255、255))

ビデオヘビ#/ + 1分の各ステップ
でない場合isdead:
スコア+ = 1
snake.move()
snake.bodyでRECT用:
pygame.draw.rect(画面、(20、220、39)と、RECT、0)

死#表示テキスト
isdead = snake.isdead()
isdead IF:
show_text(画面、(100、200である)、 '!YOU DEADの'、(227、29、18である)、偽、100)
show_text(画面、(150、260。 )、(0、0、22である)、偽「もう一度試して...スペースキーを押しに」、30)

食品加工/分+50が食べる
食品RECTは、食べたときと#スネークヘッドの一致を- >スネークは、ノードを増やします
== snake.body IF food.rect [0]:
スコア+ = 50
food.remove()
snake.addnode()

食品#送達
food.set()
pygame.draw.rect(画面、(136、0、21である)、food.rect、0)

スコアは、テキスト表示
show_text(画面、(50、500 )、 'スコア:' + STRを(スコア)、(223、223、223))

pygame.display.update()
clock.tick(10)


IF __name__ == '__main__':
メイン()

おすすめ

転載: www.cnblogs.com/Lynn123/p/11824519.html