python贪吃蛇教学_python实现贪吃蛇

copycode.gif

1 #-*- coding: utf-8 -*-

2 import pygame, sys, random, time

3 from pygame.locals import *

4

5 pygame.init()

6 font = pygame.font.Font(u"c:\\windows\\fonts\\MSYH.ttf",30)

7 mainClock = pygame.time.Clock()

8 wsurface = pygame.display.set_mode((800,600),0,32)

9 pygame.display.set_caption("My_Snake~")

10

11 Len = 20

12 snakeRect = []

13 for i in range(10,13):

14 snakeRect.append(pygame.Rect(i * (Len) , 50 , Len, Len))

15 food = pygame.Rect(10 * (Len), 10 * (Len), Len, Len)

16 ml = False

17 mr = True

18 mu = False

19 md = False

20 score = 0

21 black = (0, 0, 0)

22 green = (0, 255, 0)

23 white = (255, 255, 255)

24 global FPSCLOCK

25 FPSCLOCK = pygame.time.Clock()

26 #####################################################

27 def judge():

28 if snakeRect[0].left - 15 <= food.left <= snakeRect[0].left + 15 and snakeRect[0].top - 15 <= food.top <= snakeRect[0].top + 15:

29 return True

30 def judge2(a, b):

31 if a.left - 15 <= b.left <= a.left + 15 and a.top - 15 <= b.top <= a.top + 15:

32 return True

33 def checkForKeyPress():

34 #checkForQuit()

35 for event in pygame.event.get([KEYDOWN, KEYUP]):

36 if event.type == KEYUP:

37 continue

38 return event.key

39 return None

40 #######################################################

41 flagg = True

42 speed = 8

43 while True:

44 for event in pygame.event.get():

45 if event.type == QUIT:

46 pygame.QUIT()

47 sys.exit()

48 if event.type == KEYDOWN:

49 if event.key == K_r:

50 snakeRect = []

51 for i in range(10,13):

52 snakeRect.append(pygame.Rect(i * (Len) , 50 , Len, Len))

53 food = pygame.Rect(10 * (Len), 10 * (Len), Len, Len)

54 ml = False

55 mr = True

56 mu = False

57 md = False

58 score = 0

59 flagg = True

60 speed = 8

61 if event.key == K_p:

62 wsurface.fill(black)

63 text_surface1 = font.render('Pause!' , True, (0, 0, 255))

64 wsurface.blit(text_surface1, (10, 50))

65 while checkForKeyPress() == None:

66 pygame.display.update()

67 FPSCLOCK.tick()

68 if event.key == K_LEFT and mr == False:

69 ml = True

70 mr = False

71 mu = False

72 md = False

73 if event.key == K_RIGHT and ml == False:

74 ml = False

75 mr = True

76 mu = False

77 md = False

78 if event.key == K_UP and md == False:

79 ml = False

80 mr = False

81 mu = True

82 md = False

83 if event.key == K_DOWN and mu == False:

84 ml = False

85 mr = False

86 mu = False

87 md = True

88 head = pygame.Rect(snakeRect[0].left,snakeRect[0].top,snakeRect[0].width,snakeRect[0].height)

89 if flagg == False:

90 continue

91 if ml == True:

92 head.right = head.left - 1

93 if mr == True:

94 head.left = head.right + 1

95 if mu == True:

96 head.bottom = head.top - 1

97 if md == True:

98 head.top = head.bottom + 1

99 snakeRect.insert(0, head)

100 #判断失败和重新游戏

101 if head.right < 0 or head.left > 800 or head.bottom < 0 or head.top > 600 or snakeRect[0] in snakeRect[1:]:

102 wsurface.fill(white)

103 text_surface2 = font.render('Press R to restart!' , True, (0, 0, 255))

104 wsurface.blit(text_surface2, (50, 80))

105 pygame.display.update()

106 while checkForKeyPress() == None:

107 pygame.display.update()

108 FPSCLOCK.tick()

109 break

110 flagg = False

111 continue

112 flagg = True

113 if judge():

114 score = score + 10

115 speed = speed + 1

116 while True:

117 flag = True

118 food.left = random.randrange(10,800)

119 food.top = random.randrange(10,600)

120 for temp in snakeRect:

121 if judge2(food, temp):

122 flag = False

123 if flag == True:

124 break

125 else:

126 snakeRect.pop()

127 wsurface.fill(black)

128 for i in range(len(snakeRect)):

129 pygame.draw.rect(wsurface,green,snakeRect[i])

130 pygame.draw.rect(wsurface,white,food)

131 text_surface = font.render(u"分数: " + str(score), True, (0, 0, 255))

132 wsurface.blit(text_surface, (10, 50))

133 pygame.display.update()

134 mainClock.tick(speed)

135

136

137

138

139

copycode.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值