设计python游戏贪吃蛇_Python 贪吃蛇游戏
设计内容:
贪吃蛇小游戏
使用工具:
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 贪吃蛇游戏相关推荐
- python脚本 游戏赚金币_python捡金币游戏(上)
创建游戏背景 这里设置了游戏的基本窗口尺寸,标题,以及背景颜色.游戏背景可以使用现成的图片素材,也可以使用单纯的颜色设置,这里采用颜色设置,具体颜色值可以到网上搜索一下就可以了. 添加角色素材 这里添 ...
- python游戏开发库_Python库之游戏开发及虚拟现实
1.PyGame:简单的游戏开发功能库 http://www.pygame.org 提供了基于SDL的简单游戏开发功能及实现引擎 理解游戏对外部输入的响应机制及角色构建和交互机制 Python游戏入门 ...
- python人机石头剪刀布代码_Python实现石头剪刀布游戏的代码
利用随机函数制作石头剪刀布小游戏 程序只运行一次 import random a = input("请出拳(石头/剪刀/布):") b = ["剪刀", &qu ...
- python数字组合算法_python猜数字游戏快速求解解决方案
python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...
- python写的游戏有哪些_python做的游戏有哪些
比较大型的,使用Python的游戏有两个,一个是<EVE>,还有一个是<文明>.另外GitHub上有很多开源的小游戏,下面给大家介绍一下: 1. Github上面有个项目Fre ...
- python五子棋程序教程_python实现五子棋游戏
本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python ...
- python游戏制作软件_python制作小游戏(三)
往期回顾python制作小游戏(一)python制作小游戏(二) GitHub: https://github.com/CharlesPikachu/Games 本系列文章中所涉及到的所有源代码以及相 ...
- python五子棋实验报告_python实现五子棋游戏
本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览: #!/usr/bin/env python ...
- python小游戏打地鼠下载_Python 打地鼠小游戏
对于打地鼠游戏需要有一个清晰的逻辑思路,当然要制作打地鼠游戏还需要在Python中导入背景图片.地鼠图片等等.好了我们废话不多说,直接上代码. class GameManager: def __ini ...
- python游戏制作软件_python制作小游戏(二)
下载W3Cschool手机App,0基础随时随地学编程导语 T_T突然发现N久以前我还做过一个系列??? 利用Python制作小游戏??? 好吧,既然做了,就有头有尾吧~~~ 本期我们将制作一个类似八 ...
最新文章
- BaiduSitemap
- 说说后台开发的一些事
- eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
- Apache启动错误:could not bind to address[::]:443
- Dubbo的设计理念原来就藏在这三张图中
- 同行压力(兼谈敏捷团队,绩效管理,自组织团队)
- 微服务 雪崩效应 与 Hystrix 断路器使用入门
- mac 搭建mysql环境_Mac下MySQL环境搭建的步骤详解
- matlab做神经网络的步骤,matlab建立神经网络模型
- 【Codecs系列】AVS1参考代码RM在Windows下编译以及AVS1编解码器的使用方法
- 【自编教材】16万8千字的HTML+CSS基础 适合从0到1-可收藏
- linux下使用PulseAudio获取扬声器的音量和是否静音
- Opencv相机校准之棋盘格标定
- TX2--Tegra架构介绍
- new115.com dz.html,超实用的HTML代码段(赵荣娇)
- 哪几种污水处理工艺适合农村污水治理工程
- uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj
- dw自动滚动图片_DW图片无缝滚动代码
- 简单的扫描枪模拟程序
- Carla release与ros-bridge
热门文章
- 6 岁学编程,9 岁给电脑杂志社撰稿,19 岁收月薪 2 万 的 Offer | 程序人生 2020
- Map转json遇到一些问题
- Pytorch实现语义分割指标
- chrome java支持_如何将JAVA插件支持Chrome
- j2me模拟器java游戏存档修改,j2me loader模拟器中文
- 谭浩强c语言第六版答案,C语言谭浩强版本第6章课后练习题答案
- 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(二)
- tcping命令详解
- R2017b-Matlab安装教程
- 火山软件开发访问网页查找电话号和读写文件应用