包含图像、声音。
pygame建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。
Python 语言编写的小游戏:
- # -*- coding: utf-8 -*-
- import sys,pygame,random
- from pygame.locals
- windowWidth=800
- windowHeight=800
- cellSize=20
- head = 0
- def main():
- #初始化
- pygame.init()
- global screen
- screen=pygame.display.set_mode((windowWidth,windowHeight))
- pygame.display.set_caption("Greedy Snake")
- gameStart()
- FPS=pygame.time.Clock()
- startX=cellSize*random.randint(8,windowWidth/cellSize-8)
- startY=cellSize*random.randint(8,windowHeight/cellSize-8)
- snake=[{'x': startX , 'y': startY},
- {'x': startX - 1 * cellSize, 'y': startY},
- {'x': startX - 2 * cellSize, 'y': startY},
- {'x': startX - 3 * cellSize, 'y': startY}]
- appleX = cellSize * random.randint(0, windowWidth / cellSize)
- appleY = cellSize * random.randint(0, windowHeight / cellSize)
- while True:
- FPS.tick(15)
- for event in pygame.event.get():
- if event.type==QUIT:
- pygame.quit()
- sys.exit()
- if event.type==KEYDOWN:
- turn(snake,event)
- move(snake)
- if snake[head]['x']==appleX and snake[head]['y']==appleY:
- appleX = cellSize * random.randint(0, windowWidth / cellSize)
- appleY = cellSize * random.randint(0, windowHeight / cellSize)
- eat(snake)
- if snake[head]['x']<0 or snake[head]['x']>windowWidth or snake[head]['y']<0 or snake[head]['y']>windowHeight:
- gameOver(snake)
- for body in snake[1:]:
- if body==snake[head]:
- gameOver(snake)
- screen.fill((0, 150, 0))
- drawgrid()
- drawSnake(snake)
- pygame.draw.rect(screen, (255, 0, 0), (appleX, appleY, cellSize, cellSize))
- pygame.display.update()
- #绘制网格
- def drawgrid():
- for i in xrange(cellSize,windowWidth,cellSize):
- pygame.draw.line(screen,(0,255,0),(i,0),(i,windowHeight),1)
- for j in xrange(cellSize,windowHeight,cellSize):
- pygame.draw.line(screen,(0,255,0),(0,j),(windowWidth,j),1)
- #绘制蛇
- def drawSnake(snake):
- for cood in snake:
- pygame.draw.rect(screen,(150,150,0),(cood['x'],cood['y'],cellSize,cellSize))
- pygame.draw.rect(screen, (250, 250, 0), (snake[head]['x'], snake[head]['y'], cellSize, cellSize))
- def turn(snake,event):
- # 上下转向
- if snake[head]['y'] == snake[1]['y']:
- if event.key == K_UP:
- del snake[-1]
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
- snake.insert(0, newHead)
- elif event.key == K_DOWN:
- del snake[-1]
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
- snake.insert(0, newHead)
- # 左右转向
- if snake[head]['x'] == snake[1]['x']:
- if event.key == K_LEFT:
- del snake[-1]
- newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- if event.key == K_RIGHT:
- del snake[-1]
- newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- def move(snake):
- # 向左运动
- if snake[head]['x'] < snake[1]['x']:
- del snake[-1]
- newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- # 向右运动
- elif snake[head]['x'] > snake[1]['x']:
- del snake[-1]
- newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- # 向上运动
- elif snake[head]['y'] < snake[1]['y']:
- del snake[-1]
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
- snake.insert(0, newHead)
- # 向下运动
- elif snake[head]['y'] > snake[1]['y']:
- del snake[-1]
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
- snake.insert(0, newHead)
- def eat(snake):
- # 向左运动
- if snake[head]['x'] < snake[1]['x']:
- newHead = {'x': snake[head]['x'] - cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- # 向右运动
- elif snake[head]['x'] > snake[1]['x']:
- newHead = {'x': snake[head]['x'] + cellSize, 'y': snake[head]['y']}
- snake.insert(0, newHead)
- # 向上运动
- elif snake[head]['y'] < snake[1]['y']:
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] - cellSize}
- snake.insert(0, newHead)
- # 向下运动
- elif snake[head]['y'] > snake[1]['y']:
- newHead = {'x': snake[head]['x'], 'y': snake[head]['y'] + cellSize}
- snake.insert(0, newHead)
- def gameStart():
- screen.fill((0, 150, 0))
- drawgrid()
- fontObj1 = pygame.font.Font('freesansbold.ttf', 60)
- textSurfaceObj1 = fontObj1.render('Greedy Snake', True, (255,255,255))
- textRectObj1 = textSurfaceObj1.get_rect()
- textRectObj1.center = (windowWidth/2, windowHeight/3)
- screen.blit(textSurfaceObj1,textRectObj1)
- fontObj2 =pygame.font.Font('freesansbold.ttf', 30)
- textSurfaceObj2 = fontObj2.render('Devloper: JIE ', True,(0, 0, 0))
- textRectObj2 = textSurfaceObj2.get_rect()
- textRectObj2.center = (windowWidth/2, windowHeight*2/3)
- screen.blit(textSurfaceObj2,textRectObj2)
- pygame.display.update()
- flag=True
- while(flag):
- for event in pygame.event.get():
- if event.type==QUIT:
- pygame.quit()
- sys.exit()
- if event.type==KEYDOWN:
- if event.key==K_SPACE:
- flag=False
- def gameOver(snake):
- screen.fill((0, 150, 0))
- drawgrid()
- fontObj = pygame.font.Font('freesansbold.ttf', 60)
- textSurfaceObj1 = fontObj.render('Game over!', True, (255,0,0))
- textRectObj1 = textSurfaceObj1.get_rect()
- textRectObj1.center = (windowWidth/3, windowHeight/3)
- screen.blit(textSurfaceObj1,textRectObj1)
- textSurfaceObj2 = fontObj.render('Score: %s' % (len(snake)-4), True, (255, 0, 0))
- textRectObj2 = textSurfaceObj2.get_rect()
- textRectObj2.center = (windowWidth*2/3, windowHeight*2/3)
- screen.blit(textSurfaceObj2,textRectObj2)
- pygame.display.update()
- while(True):
- for event in pygame.event.get():
- if event.type==QUIT:
- pygame.quit()
- sys.exit()
- if __name__ == '__main__':
- main()


雷达卡


京公网安备 11010802022788号







