楼主: 奇点ML
1077 0

[程序分享] 用 Python 和 Pygame 写的小游戏贪吃蛇! [推广有奖]

  • 0关注
  • 0粉丝

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
25 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
243 点
帖子
4
精华
0
在线时间
3 小时
注册时间
2017-7-17
最后登录
2017-7-24

楼主
奇点ML 发表于 2017-7-21 14:20:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Pygame 介绍--Pygame是跨平台Python模块,专为电子游戏设计。
包含图像、声音。pygame
建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python


Python 语言编写的小游戏:

  1. # -*- coding: utf-8 -*-
  2. import sys,pygame,random
  3. from pygame.locals

  4. windowWidth=800
  5. windowHeight=800
  6. cellSize=20
  7. head = 0

  8. def main():
  9.     #初始化
  10.     pygame.init()
  11.     global screen
  12.     screen=pygame.display.set_mode((windowWidth,windowHeight))
  13.     pygame.display.set_caption("Greedy Snake")
  14.     gameStart()
  15.     FPS=pygame.time.Clock()
  16.     startX=cellSize*random.randint(8,windowWidth/cellSize-8)
  17.     startY=cellSize*random.randint(8,windowHeight/cellSize-8)

  18.     snake=[{'x': startX , 'y': startY},
  19.            {'x': startX - 1 * cellSize, 'y': startY},
  20.             {'x': startX - 2 * cellSize, 'y': startY},
  21.            {'x': startX - 3 * cellSize, 'y': startY}]
  22.     appleX = cellSize * random.randint(0, windowWidth / cellSize)
  23.     appleY = cellSize * random.randint(0, windowHeight / cellSize)

  24.     while True:
  25.         FPS.tick(15)
  26.         for event in pygame.event.get():
  27.             if event.type==QUIT:
  28.                 pygame.quit()
  29.                 sys.exit()
  30.             if event.type==KEYDOWN:
  31.                 turn(snake,event)
  32.         move(snake)
  33.         if snake[head]['x']==appleX and snake[head]['y']==appleY:
  34.             appleX = cellSize * random.randint(0, windowWidth / cellSize)
  35.             appleY = cellSize * random.randint(0, windowHeight / cellSize)
  36.             eat(snake)

  37.         if snake[head]['x']<0 or snake[head]['x']>windowWidth or snake[head]['y']<0 or snake[head]['y']>windowHeight:
  38.             gameOver(snake)
  39.         for body in snake[1:]:
  40.             if body==snake[head]:
  41.                 gameOver(snake)

  42.         screen.fill((0, 150, 0))
  43.         drawgrid()
  44.         drawSnake(snake)
  45.         pygame.draw.rect(screen, (255, 0, 0), (appleX, appleY, cellSize, cellSize))

  46.         pygame.display.update()

  47. #绘制网格
  48. def drawgrid():
  49.     for i in xrange(cellSize,windowWidth,cellSize):
  50.         pygame.draw.line(screen,(0,255,0),(i,0),(i,windowHeight),1)
  51.     for j in xrange(cellSize,windowHeight,cellSize):
  52.         pygame.draw.line(screen,(0,255,0),(0,j),(windowWidth,j),1)

  53. #绘制蛇
  54. def drawSnake(snake):
  55.     for cood in snake:
  56.         pygame.draw.rect(screen,(150,150,0),(cood['x'],cood['y'],cellSize,cellSize))
  57.     pygame.draw.rect(screen, (250, 250, 0), (snake[head]['x'], snake[head]['y'], cellSize, cellSize))

  58. def turn(snake,event):
  59.     # 上下转向
  60.     if snake[head]['y'] == snake[1]['y']:
  61.         if event.key == K_UP:
  62.             del snake[-1]
  63.             newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
  64.             snake.insert(0, newHead)

  65.         elif event.key == K_DOWN:
  66.             del snake[-1]
  67.             newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
  68.             snake.insert(0, newHead)

  69.     # 左右转向
  70.     if snake[head]['x'] == snake[1]['x']:
  71.         if event.key == K_LEFT:
  72.             del snake[-1]
  73.             newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
  74.             snake.insert(0, newHead)

  75.         if event.key == K_RIGHT:
  76.             del snake[-1]
  77.             newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
  78.             snake.insert(0, newHead)


  79. def move(snake):
  80.     # 向左运动
  81.     if snake[head]['x'] < snake[1]['x']:
  82.         del snake[-1]
  83.         newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
  84.         snake.insert(0, newHead)
  85.     # 向右运动
  86.     elif snake[head]['x'] > snake[1]['x']:
  87.         del snake[-1]
  88.         newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
  89.         snake.insert(0, newHead)
  90.     # 向上运动
  91.     elif snake[head]['y'] < snake[1]['y']:
  92.         del snake[-1]
  93.         newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
  94.         snake.insert(0, newHead)
  95.     # 向下运动
  96.     elif snake[head]['y'] > snake[1]['y']:
  97.         del snake[-1]
  98.         newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
  99.         snake.insert(0, newHead)

  100. def eat(snake):
  101.     # 向左运动
  102.     if snake[head]['x'] < snake[1]['x']:
  103.         newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
  104.         snake.insert(0, newHead)
  105.     # 向右运动
  106.     elif snake[head]['x'] > snake[1]['x']:
  107.         newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
  108.         snake.insert(0, newHead)
  109.     # 向上运动
  110.     elif snake[head]['y'] < snake[1]['y']:
  111.         newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
  112.         snake.insert(0, newHead)
  113.     # 向下运动
  114.     elif snake[head]['y'] > snake[1]['y']:
  115.         newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
  116.         snake.insert(0, newHead)

  117. def gameStart():
  118.     screen.fill((0, 150, 0))
  119.     drawgrid()
  120.     fontObj1 = pygame.font.Font('freesansbold.ttf', 60)
  121.     textSurfaceObj1 = fontObj1.render('Greedy Snake', True, (255,255,255))
  122.     textRectObj1 = textSurfaceObj1.get_rect()
  123.     textRectObj1.center = (windowWidth/2, windowHeight/3)
  124.     screen.blit(textSurfaceObj1,textRectObj1)

  125.     fontObj2 =pygame.font.Font('freesansbold.ttf', 30)
  126.     textSurfaceObj2 = fontObj2.render('Devloper: JIE ', True,(0, 0, 0))
  127.     textRectObj2 = textSurfaceObj2.get_rect()
  128.     textRectObj2.center = (windowWidth/2, windowHeight*2/3)
  129.     screen.blit(textSurfaceObj2,textRectObj2)

  130.     pygame.display.update()
  131.     flag=True
  132.     while(flag):
  133.         for event in pygame.event.get():
  134.             if event.type==QUIT:
  135.                 pygame.quit()
  136.                 sys.exit()
  137.             if event.type==KEYDOWN:
  138.                 if event.key==K_SPACE:
  139.                     flag=False


  140. def gameOver(snake):
  141.     screen.fill((0, 150, 0))
  142.     drawgrid()
  143.     fontObj = pygame.font.Font('freesansbold.ttf', 60)
  144.     textSurfaceObj1 = fontObj.render('Game over!', True, (255,0,0))
  145.     textRectObj1 = textSurfaceObj1.get_rect()
  146.     textRectObj1.center = (windowWidth/3, windowHeight/3)
  147.     screen.blit(textSurfaceObj1,textRectObj1)

  148.     textSurfaceObj2 = fontObj.render('Score: %s' % (len(snake)-4), True, (255, 0, 0))
  149.     textRectObj2 = textSurfaceObj2.get_rect()
  150.     textRectObj2.center = (windowWidth*2/3, windowHeight*2/3)
  151.     screen.blit(textSurfaceObj2,textRectObj2)

  152.     pygame.display.update()
  153.     while(True):
  154.         for event in pygame.event.get():
  155.             if event.type==QUIT:
  156.                 pygame.quit()
  157.                 sys.exit()

  158. if __name__ == '__main__':
  159.     main()
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 论坛币 收起 理由
残阳_等待 + 60 + 10 精彩帖子

总评分: 经验 + 60  论坛币 + 10   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-13 15:15