import sys, pygame
pygame.locals から import *
ランダムインポート randrange から
up =lambda x:(x[0]-1,x[1])
down = lambda x :(x [0] +1,x[1])
左 = ラムダ x : (x[0],x[1]-1)
右 = ラムダ x : (x[0],x[1] +1)
tl = lambda x :xtr = lambda x :x==0 and 3 or x-1
dire = [up,left,down, right]
move = ラムダ x,y:[y(x[0])]+x[:-1]
grow = ラムダ x,y:[y(x[0])]+x
s = [(5,5),(5,6),(5,7)]
d = 上
食べ物 = randrange(0,30),randrange(0,40)
FPSCLOCK=pygame .time.Clock()
pygame.init()
pygame.display.set_mode((800,600))
pygame.mouse.set_visible(0)
screen = pygame.display. get_surface()
screen.fill((0,0,0))
times=0.0
while True:
time_passed = FPSCLOCK.tick(30)
if 回>=150:
回 =0.0
s = move(s,d)
else:
times +=time_passed
for イベント in pygame.event.get():
ifevent.type == QUIT :
sys.exit()
ifevent.type == KEYDOWN およびevent.key == K_UP:
s = move(s,d)
if events.type == KEYDOWN およびevent .key == K_LEFT:
d=dire[tl(dire.index(d))]
ifevent.type == KEYDOWN およびevent.key == K_RIGHT:
d=dire [tr( dire.index(d))]
if s[0]==food:
s = give(s,d)
food =randrange(0,30),randrange(0, 40)
if s[0] in s[1:] or s[0][0]= 30 or s[0][1]break
screen.fill((0,0,0))
for r,c in s:
pygame.draw.rect (screen, (255,0,0),(c*20,r*20,20,20))
pygame.draw.rect(screen,(0,255,0),(food[1]*20, food[0 ]*20,20,20))
pygame.display.update() ゲームのスクリーンショット:
説明:
1. 実際には、pygame は必要ありませんが、いくつかの条件判定を変更すると、半分に短縮できると推定されます。 。 Python のスキルが上がったら、もう一度戻って試してみてください。 。
2. ただし、Snake コードは 50 行でも読むことができます。あまり短く書くと無理です。 。
3. 重要なのは、ラムダ式と関数オブジェクトを使用して回転、移動などのアルゴリズムを実装することです。 。
4. どの「ウォーカー」がより短く書けるか、喜んで教えます....
著者: aiqier