python开发案例:基于Pygame的贪吃蛇小游戏

news/2024/7/5 20:58:37 标签: pygame, 游戏开发, python

python实现贪吃蛇小游戏,贪吃蛇大家基本都非常清楚吧,Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发。允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块可以支持多个操作系统。 Pygame是免费的,它是在LGPL许可证下发布的,你可以用它来创建免费软件、共享软件和商业游戏。
先来看看效果展示:
在这里插入图片描述
看完了效果图,一定自己想开发一个玩一下吧,过过瘾,敲代码玩游戏两不误的办法就是自己写游戏。

python">"""
author:鹏鹏写代码
"""
import pygame, sys, time, random
from pygame.locals import *
pygame.init()  
fpsClock = pygame.time.Clock() 
playSurface = pygame.display.set_mode((640, 480))  
pygame.display.set_caption('贪吃蛇游戏')
#定义一些颜色
redColour = pygame.Color(255, 0, 0)  
blackColour = pygame.Color(0, 0, 0)  
whiteColour = pygame.Color(255, 255, 255)  
greyColour = pygame.Color(150, 150, 150) 
#初始化了一些程序中用到的变量
snakePosition = [100,100]  
snakeSegments = [[100,100],[80,100],[60,100]]  
raspberryPosition = [300,300]  #树莓位置
raspberrySpawned = 1        #是否吃到树莓,1为没有吃到,0是吃到。
direction = 'right'            #运动方向
changeDirection = direction

def gameOver():  
    gameOverFont = pygame.font.Font('simfang.ttf', 72)
    gameOverSurf = gameOverFont.render('Game Over', True, greyColour)  
    gameOverRect = gameOverSurf.get_rect()  
    gameOverRect.midtop = (320, 10)  
    playSurface.blit(gameOverSurf, gameOverRect)  
    pygame.display.flip()  
    time.sleep(5)  
    pygame.quit()  
    sys.exit()
while True: 
    for event in pygame.event.get():  
         if event.type == QUIT:  
             pygame.quit()  
             sys.exit()  
         elif event.type == KEYDOWN: 
            if event.key == K_RIGHT or event.key == ord('d'):  
                 changeDirection = 'right' 
            if event.key == K_LEFT or event.key == ord('a'):  
                 changeDirection = 'left' 
            if event.key == K_UP or event.key == ord('w'):  
                 changeDirection = 'up' 
            if event.key == K_DOWN or event.key == ord('s'):  
                 changeDirection = 'down' 
            if event.key == K_ESCAPE:  
                 pygame.event.post(pygame.event.Event(QUIT))
    if changeDirection == 'right' and not direction == 'left':  
             direction = changeDirection 
    if changeDirection == 'left' and not direction == 'right':  
             direction = changeDirection 
    if changeDirection == 'up' and not  direction == 'down':
             direction = changeDirection
    if changeDirection == 'down' and not direction == 'up':
             direction = changeDirection
    if direction == 'right':  
         snakePosition[0] += 20  
    if direction == 'left':  
         snakePosition[0] -= 20 
    if direction == 'up':  
         snakePosition[1] -= 20 
    if direction == 'down':  
         snakePosition[1] += 20
    #将蛇的身体增加一节,同时将这节放在蛇的头部
    snakeSegments.insert(0,list(snakePosition))
    #检查蛇头部的X和Y坐标是否等于树莓(玩家的目标点)的坐标
    if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
        raspberrySpawned = 0
    else:
        snakeSegments.pop()
    #增加一个新的树莓到游戏界面中: 
    if raspberrySpawned == 0:  
         x = random.randrange(1,32)  
         y = random.randrange(1,24)  
         raspberryPosition = [int(x*20),int(y*20)]  
    raspberrySpawned = 1
    playSurface.fill(blackColour)  
    for position in snakeSegments:  
         pygame.draw.rect(playSurface,whiteColour,Rect  
         (position[0], position[1], 20, 20))  
    pygame.draw.rect(playSurface,redColour,Rect  
         (raspberryPosition[0], raspberryPosition[1], 20, 20))  
    pygame.display.flip()
    if snakePosition[0] > 620 or snakePosition[0] < 0: 
         gameOver()  
    if snakePosition[1] > 460 or snakePosition[1] < 0: 
         gameOver()
    for snakeBody in snakeSegments[1:]:  
        if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:  
           gameOver()
    fpsClock.tick(10) 

同学们快来尝试一下吧!


http://www.niftyadmin.cn/n/1870558.html

相关文章

C++工程师第三篇---面向对象的程序设计

C面向对象的程序设计&#xff0c;主要总结C的类和对象&#xff0c;还有C继承&#xff0c;重载&#xff0c;多态&#xff0c;还有就是数据抽象&#xff0c;数据封装&#xff0c;还讲述了C接口&#xff0c;&#xff08;抽象类&#xff09;&#xff1b; 如果有需要PDF版本的&#…

跟我学SpringMVC目录汇总贴

第一章 Web MVC简介 第二章 Spring MVC入门 第三章 DispatcherServlet详解 第四章 Controller接口控制器详解&#xff08;1&#xff09; 第四章 Controller接口控制器详解&#xff08;2&#xff09; 第四章 Controller接口控制器详解&#xff08;3&#xff09; 第四章 Co…

Python Error :NameError name ‘reload‘ is not defined 问题

今日编程遇到这么一个问题&#xff1a; 对于 Python 2.X&#xff1a; import sys reload(sys) sys.setdefaultencoding("utf-8")对于 < Python 3.3&#xff1a; import imp imp.reload(sys)注意&#xff1a; Python 3 与 Python 2 有很大的区别&#xff0c;其中…

C,C++,Python实现兔子生兔子问题

文章目录题目描述&#xff1a;C语言方式&#xff1a;C方式&#xff1a;python方式&#xff1a;题目描述&#xff1a; 假设一对兔子的成熟期是一个月&#xff0c;即一个月可长成成兔&#xff0c;那么&#xff0c;如果每对成兔每个月都生一对小兔&#xff0c;一对新生的小兔从第…

python error:TypeError: unsupported operand type(s) for +=: ‘builtin_function_or_method‘ and ‘int‘

问题描述&#xff1a; 关于python报错&#xff1a;TypeError: unsupported operand type(s) for : ‘builtin_function_or_method’ and int’ 错误展示&#xff1a; 出现如下这种错误&#xff0c;是什么原因呢&#xff1f; 例如&#xff1a; i 0 while i < 100:sum ii …

SpringMVC 控制器向视图传值的方式

在SpringMVC中&#xff0c;控制器向视图传值一般有三中方式&#xff0c;分别是通过ModelAndView、ModelMap、Session&#xff0c;下面将讲述三种传值方式 ModelAndView 将控制器方法的返回值设为ModelAndView&#xff0c;并且向ModelAndView中添加数据&#xff0c;在视图的re…

python error:UnboundLocalError: local variable ‘sum‘ referenced before assignment

问题&#xff1a;UnboundLocalError: local variable ‘sum’ referenced before assignment 代码部分&#xff1a; 运行错误截图&#xff1a; 原因分析&#xff1a;这是因为在函数内部对变量赋值进行修改后&#xff0c;该变量就会被Python解释器认为是局部变量而非全局变量…

C,C++,Python怎么实现“三天打鱼两天晒网”的渔夫打鱼晒网问题?

文章目录1.问题描述2.怎么实现3.代码实现1.Python实现2.C语言实现3.C实现1.问题描述 如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔&#xff0c;两天晒一次网&#xff0c;编程实现当输入 2011 1 月 1 日以后的任意一天&#xff0c;输出该渔夫是在打渔还是在晒网。 2.怎…