python贪吃蛇代码写好了怎么运行-怎样从零开始用 Python 写一个贪吃蛇?

一、前言

看了提问者在另一个回答的评论

/>真的觉得提问者应该试试pygame。"工欲善其事,必先利其器。”个人认为,python与其他编程语言相比,亮点在于它有丰富的第三方库。比如用python做爬虫,原生库urllib2和第三方库requests相比,哪个效率更高?

二、推荐

pygame顾名思义,python和game相结合,专注于2D游戏开发。pygame很容易入门。网上有一些不错的教程,在此推荐我的入门教程:-Daydayblog-第1页(貌似博客不见了?——2016.10.15)

博客提供了16个章节:

pygame游戏编程(1)--pygame简介及安装

pygame游戏编程(2)--第一个pygame程序

pygame游戏编程(3)--文本打印及字体

pygame游戏编程(4)--像素、颜色和图像

pygame游戏编程(5)--surface对象

pygame游戏编程(6)--窗口显示

pygame游戏编程(7)--绘制几何图像

pygame游戏编程(8)--event事件

pygame游戏编程(9)--动画之直线运动

pygame游戏编程(10)--动画之向量

pygame游戏编程(11)--人机交互

pygame游戏编程(12)--人工智能

pygame游戏编程(13)--声音

pygame游戏编程(14)--音乐播放器

pygame游戏编程(15)--贪吃蛇游戏

三、贪吃蛇

没错,博客作者提供了如何使用pygame开发贪吃蛇的教程,详见pygame游戏编程(16)--贪吃蛇游戏-pygame教程-Daydayblog,作者程序运行界面如下: />

贪吃蛇主要包括以下几个方面:物体表示:蛇和苹果如何存储和显示、蛇如何移动和吃苹果变长;

字体显示:提示玩家该如何操作,显示玩家的分数;

人机交互:使用键盘的方向键来控制蛇的移动;

矩形绘图:绘制各种基本的图形来组成图像。

使用pygame开发贪吃蛇,您只需要先学会:

pygame简介及安装

surface对象

窗口显示

绘制几何图形

event事件

人机交互

四、成果

pygame开发2D游戏简直不能太简单,我粗略看了教程之后,就自主完成两个游戏开发:

1、贪吃蛇

/> /> />

附上本人贪吃蛇游戏代码(很多细节没处理好,勿喷。)

#!/usr/bin/env python

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

import sys,pygame,random

from pygame.locals import *

windowWidth=600

windowHeight=600

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()

2、打飞机

/> /> />附上本人打飞机游戏代码(很多细节没处理好,勿喷。)

#!/usr/bin/env python

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

import sys,pygame,random

from pygame.locals import *

windowWidth=420

windowHeight=600

cellSize=20

shots=[]#飞行的子弹

enemys=[]#飞行的敌机

def main():

#初始化

global shoted

shoted= 0

global enemyed

enemyed = 0

pygame.init()

pygame.key.set_repeat(10) #重复响应一个按键

global screen,guard

screen=pygame.display.set_mode((windowWidth,windowHeight))

pygame.display.set_caption("aircraft")

gamestart()

FPS=pygame.time.Clock()

guard=[{'x':windowWidth/2-cellSize/2,'y':windowHeight-cellSize},#中0

{'x':windowWidth/2-cellSize/2,'y':windowHeight-2*cellSize},#上1

{'x': windowWidth / 2-cellSize*3/2, 'y': windowHeight - cellSize},#左2

{'x': windowWidth / 2+cellSize/2, 'y': windowHeight - cellSize}]#右3

while True:

screen.fill((0, 0, 0))

FPS.tick(5)

gamemedium()

for event in pygame.event.get():

if event.type==QUIT:

pygame.quit()

sys.exit()

if event.type==KEYDOWN:

#飞机左移

if event.key==K_LEFT and guard[2]['x']>-1:

for body in guard:

body['x']-=cellSize

#飞机右移

if event.key == K_RIGHT and guard[3]['x'] < windowWidth:

for body in guard:

body['x'] += cellSize

#发射子弹

if event.key==K_UP:

shoted+=1

shot={'x':guard[1]['x'],'y':guard[1]['y']}

shots.insert(0,shot)

#子弹飞行

if shots != [] :

for s in shots:

s['y']-=2*cellSize

flag=True

while(flag and shots!=[]):

flag=False

if shots[-1]['y']<0:

del shots[-1]

flag=True

#产生敌机

if random.randint(0,1)==0:

newenemy={'x':cellSize*random.randint(0,windowWidth/cellSize-1),'y':0}

enemys.insert(0,newenemy)

if enemys!=[]:

for enemy in enemys:

enemy['y'] += 0.5*cellSize #敌机飞行速度

drawenemys()

delshots=[]

delenemys=[]

for i in xrange(len(shots)):

for j in xrange(len(enemys)):

if len(shots) != [] and len(enemys) != []:

if shots[i]['x']==enemys[j]['x'] and shots[i]['y']

delshots.insert(0,i)

delenemys.insert(0,j)

for i in delshots:

del shots[i]

for j in delenemys:

del enemys[j]

enemyed+=1

if len(enemys)!=0:

if enemys[len(enemys)-1]['y']>windowHeight-cellSize:

gameover()

drawshots()

#drawgrid()

drawguard()

pygame.display.update()

#绘制网格

def drawgrid():

for i in xrange(cellSize,windowWidth,cellSize):

pygame.draw.line(screen,(255,255,255),(i,0),(i,windowHeight),1)

for j in xrange(cellSize,windowHeight,cellSize):

pygame.draw.line(screen,(255,255,255),(0,j),(windowWidth,j),1)

#绘制自己的战机

def drawguard():

for body in guard:

pygame.draw.rect(screen, (255, 255, 255), (body['x'], body['y'], cellSize, cellSize))

#绘制子弹

def drawshots():

for s in shots:

pygame.draw.rect(screen, (255, 255, 255), (s['x']+cellSize/3, s['y']+cellSize/4, cellSize / 3, cellSize/2))

#绘制敌机

def drawenemys():

for e in enemys:

pygame.draw.rect(screen, (255, 255, 255), (e['x'], e['y'], cellSize, cellSize/2))

pygame.draw.rect(screen, (255, 255, 255), (e['x']+cellSize/4, e['y']+cellSize/2, cellSize/2, cellSize / 2))

#游戏开始界面

def gamestart():

#drawgrid()

fontObj1 = pygame.font.Font('freesansbold.ttf', 60)

textSurfaceObj1 = fontObj1.render('Aircraft', 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('Developer : JIE', True,(255, 255, 255))

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 gamemedium():

fontObj1 = pygame.font.Font('freesansbold.ttf', 20)

textSurfaceObj1 = fontObj1.render('enemy: %d'%enemyed , True, (255, 255, 0))

textRectObj1 = textSurfaceObj1.get_rect()

textRectObj1.center = (windowWidth-3*cellSize, 2*cellSize)

screen.blit(textSurfaceObj1, textRectObj1)

fontObj2 = pygame.font.Font('freesansbold.ttf', 20)

textSurfaceObj2 = fontObj2.render('shot: %d' % shoted, True, (255, 255, 0))

textRectObj2 = textSurfaceObj2.get_rect()

textRectObj2.center = (2*cellSize, 2*cellSize)

screen.blit(textSurfaceObj2, textRectObj2)

#游戏结束界面

def gameover():

#drawgrid()

fontObj1 = pygame.font.Font('freesansbold.ttf', 50)

textSurfaceObj1 = fontObj1.render('Game over!', True, (255, 0, 0))

textRectObj1 = textSurfaceObj1.get_rect()

textRectObj1.center = (windowWidth / 2, windowHeight*3 / 8)

screen.blit(textSurfaceObj1, textRectObj1)

fontObj2 = pygame.font.Font('freesansbold.ttf', 30)

textSurfaceObj2 = fontObj2.render('shot: %d'%shoted, True, (255, 255, 255))

textRectObj2 = textSurfaceObj2.get_rect()

textRectObj2.center = (windowWidth / 2, windowHeight * 8 / 16)

screen.blit(textSurfaceObj2, textRectObj2)

fontObj3 = pygame.font.Font('freesansbold.ttf', 30)

textSurfaceObj3 = fontObj3.render('enemy: %d' % enemyed, True, (255, 255, 255))

textRectObj3 = textSurfaceObj3.get_rect()

textRectObj3.center = (windowWidth / 2, windowHeight * 9 / 16)

screen.blit(textSurfaceObj3, textRectObj3)

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

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值