设计内容:

贪吃蛇小游戏

使用工具:

Geany编辑器,Python中的pygame模块

游戏预览图:

详细代码:

1. 游戏主进程模块:

import sys

from threading import Timer

import time

import pygame

from snake import Snake

from food import Food

import function as fun

def run_game():

'''游戏主进程'''

pygame.init()

screen = pygame.display.set_mode((600,400))

pygame.display.set_caption('Snake Eat')

snake_color = (60,60,60)

bg_color = (230,230,230)

snake = Snake(snake_color,screen)

snakes = [snake]

food = Food(screen)

#游戏难度设置5~10

speed = 9

while True:

fun.check_events(snakes)

time.sleep(1-speed/11)

for value in range(0,len(snakes)):

snakes[value].update(snakes)

fun.check_snake_food_collisions(snakes,food,screen)

fun.update_screen(screen,snakes,food)

fun.check_die(snakes)

run_game()

2.蛇头类

import pygame

from pygame.sprite import Sprite

class Snake():

'''蛇头类'''

def __init__(self,color,screen):

self.screen = screen

self.color = color

self.speed = 20

self.screen_rect = screen.get_rect()

self.rect = pygame.Rect(0,0,20,20)

self.rect.centerx = self.screen_rect.centerx - 10

self.rect.centery = self.screen_rect.centery - 10

self.centerx = float(self.rect.centerx)

self.centery = float(self.rect.centery)

#控制方向的列表

self.direct = [True,False,False,False]

self.number = 0

self.last_x = 0

self.last_y = 0

def draw_snake(self):

pygame.draw.rect(self.screen,self.color,self.rect)

def update(self,snakes):

#记录蛇头的当前位置

snakes[0].last_x = self.centerx

snakes[0].last_y = self.centery

key = self.direct.index(True)

if key == 0:

self.centery -= self.speed

elif key == 1:

self.centery += self.speed

elif key == 2:

self.centerx -= self.speed

elif key == 3:

self.centerx += self.speed

#更新蛇头的位置

snakes[0].rect.centerx = self.centerx

snakes[0].rect.centery = self.centery

3. 果实类

import pygame

from random import randint

class Food():

'''果实类'''

def __init__(self,screen):

self.screen = screen

self.color = (255,0,0)

self.screen_rect = screen.get_rect()

self.rect = pygame.Rect(0,0,20,20)

self.rect.centerx = randint(0,29) * 20 + 10

self.rect.centery = randint(0,19) * 20 + 10

def draw_food(self):

pygame.draw.rect(self.screen,self.color,self.rect)

def update(self,snakes):

'''果实不会出现在蛇身体上'''

flag = True

while flag:

flag = False

self.rect.centerx = randint(0,29) * 20 + 10

self.rect.centery = randint(0,19) * 20 + 10

for value in range(0,len(snakes)):

if self.rect.centerx == snakes[value].rect.centerx and self.rect.centery == snakes[value].rect.centery:

flag = True

4. 蛇身类

import pygame

from pygame.sprite import Sprite

class Snake_Body():

'''蛇身类'''

def __init__(self,color,screen,snakes):

self.screen = screen

self.color = color

self.speed = 20

self.screen_rect = screen.get_rect()

self.rect = pygame.Rect(0,0,20,20)

#获取上一块蛇身的前一次位置

self.rect.centerx = snakes[-1].last_x

self.rect.centery = snakes[-1].last_y

self.last_x = 0

self.last_y = 0

#记录snakes列表中每块蛇身体的index

self.number = -1

def draw_snake(self):

pygame.draw.rect(self.screen,self.color,self.rect)

def update(self,snakes):

#记录蛇身体中某一块的当前位置

snakes[self.number].last_x = snakes[self.number].rect.centerx

snakes[self.number].last_y = snakes[self.number].rect.centery

#更新蛇身体中某一块的位置

snakes[self.number].rect.centerx = snakes[self.number-1].last_x

snakes[self.number].rect.centery = snakes[self.number-1].last_y

5. 游戏函数模块

import sys

import pygame

from food import Food

from snake import Snake

from snake_body import Snake_Body

'''游戏函数模块'''

def check_events(snakes):

'''检查键盘事件,控制方向'''

for event in pygame.event.get():

if event.type == pygame.KEYDOWN:

if event.type == pygame.QUIT:

sys.exit()

elif event.key == pygame.K_RIGHT:

if snakes[0].direct[2]:

break

else:

snakes[0].direct=[False,False,False,True]

elif event.key == pygame.K_LEFT:

if snakes[0].direct[3]:

break

else:

snakes[0].direct=[False,False,True,False]

elif event.key == pygame.K_UP:

if snakes[0].direct[1]:

break

else:

snakes[0].direct=[True,False,False,False]

elif event.key == pygame.K_DOWN:

if snakes[0].direct[0]:

break

else:

snakes[0].direct=[False,True,False,False]

elif event.key == pygame.K_q:

sys.exit()

def update_screen(screen,snakes,food):

screen.fill((230,230,230))

for value in range(0,len(snakes)):

snakes[value].draw_snake()

food.draw_food()

pygame.display.flip()

def check_snake_food_collisions(snakes,food,screen):

'''检测碰撞'''

collision = pygame.sprite.collide_rect(snakes[0],food)

if collision:

for value in range(0,len(snakes)):

snakes[value].number -= 1

food.update(snakes)

eat_food(snakes,screen,food)

def eat_food(snakes,screen,food):

'''吃到果实'''

snake_body = Snake_Body((0,0,255),screen,snakes)

snakes.append(snake_body)

def check_die(snakes):

'''检测死亡'''

if snakes[0].rect.centerx < 0 or snakes[0].rect.centery < 0 or snakes[0].rect.centerx > 600 or snakes[0].rect.centery > 400:

sys.exit()

for value in range(1,len(snakes)):

collision = pygame.sprite.collide_rect(snakes[0],snakes[value])

if collision:

sys.exit()

6.总结

游戏做的比较简单,有不足之处可以留言。

设计python游戏贪吃蛇_Python 贪吃蛇游戏相关推荐

  1. python脚本 游戏赚金币_python捡金币游戏(上)

    创建游戏背景 这里设置了游戏的基本窗口尺寸,标题,以及背景颜色.游戏背景可以使用现成的图片素材,也可以使用单纯的颜色设置,这里采用颜色设置,具体颜色值可以到网上搜索一下就可以了. 添加角色素材 这里添 ...

  2. python游戏开发库_Python库之游戏开发及虚拟现实

    1.PyGame:简单的游戏开发功能库 http://www.pygame.org 提供了基于SDL的简单游戏开发功能及实现引擎 理解游戏对外部输入的响应机制及角色构建和交互机制 Python游戏入门 ...

  3. python人机石头剪刀布代码_Python实现石头剪刀布游戏的代码

    利用随机函数制作石头剪刀布小游戏 程序只运行一次 import random a = input("请出拳(石头/剪刀/布):") b = ["剪刀", &qu ...

  4. python数字组合算法_python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  5. python写的游戏有哪些_python做的游戏有哪些

    比较大型的,使用Python的游戏有两个,一个是<EVE>,还有一个是<文明>.另外GitHub上有很多开源的小游戏,下面给大家介绍一下: 1. Github上面有个项目Fre ...

  6. python五子棋程序教程_python实现五子棋游戏

    本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python ...

  7. python游戏制作软件_python制作小游戏(三)

    往期回顾python制作小游戏(一)python制作小游戏(二) GitHub: https://github.com/CharlesPikachu/Games 本系列文章中所涉及到的所有源代码以及相 ...

  8. python五子棋实验报告_python实现五子棋游戏

    本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python ...

  9. python小游戏打地鼠下载_Python 打地鼠小游戏

    对于打地鼠游戏需要有一个清晰的逻辑思路,当然要制作打地鼠游戏还需要在Python中导入背景图片.地鼠图片等等.好了我们废话不多说,直接上代码. class GameManager: def __ini ...

  10. python游戏制作软件_python制作小游戏(二)

    下载W3Cschool手机App,0基础随时随地学编程导语 T_T突然发现N久以前我还做过一个系列??? 利用Python制作小游戏??? 好吧,既然做了,就有头有尾吧~~~ 本期我们将制作一个类似八 ...

最新文章

  1. BaiduSitemap
  2. 说说后台开发的一些事
  3. eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
  4. Apache启动错误:could not bind to address[::]:443
  5. Dubbo的设计理念原来就藏在这三张图中
  6. 同行压力(兼谈敏捷团队,绩效管理,自组织团队)
  7. 微服务 雪崩效应 与 Hystrix 断路器使用入门
  8. mac 搭建mysql环境_Mac下MySQL环境搭建的步骤详解
  9. matlab做神经网络的步骤,matlab建立神经网络模型
  10. 【Codecs系列】AVS1参考代码RM在Windows下编译以及AVS1编解码器的使用方法
  11. 【自编教材】16万8千字的HTML+CSS基础 适合从0到1-可收藏
  12. linux下使用PulseAudio获取扬声器的音量和是否静音
  13. Opencv相机校准之棋盘格标定
  14. TX2--Tegra架构介绍
  15. new115.com dz.html,超实用的HTML代码段(赵荣娇)
  16. 哪几种污水处理工艺适合农村污水治理工程
  17. uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj
  18. dw自动滚动图片_DW图片无缝滚动代码
  19. 简单的扫描枪模拟程序
  20. Carla release与ros-bridge

热门文章

  1. 6 岁学编程,9 岁给电脑杂志社撰稿,19 岁收月薪 2 万 的 Offer | 程序人生 2020
  2. Map转json遇到一些问题
  3. Pytorch实现语义分割指标
  4. chrome java支持_如何将JAVA插件支持Chrome
  5. j2me模拟器java游戏存档修改,j2me loader模拟器中文
  6. 谭浩强c语言第六版答案,C语言谭浩强版本第6章课后练习题答案
  7. 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(二)
  8. tcping命令详解
  9. R2017b-Matlab安装教程
  10. 火山软件开发访问网页查找电话号和读写文件应用