疯狂贪吃蛇(python版)

疯狂贪吃蛇(python版)

这是一款只要有pygame就可以运行的小游戏。(含代码)你可以直接 复制黏贴 至你的python编译器。然后就可以玩啦!

工具/原料
Pygame
Python3
Pycharm(选用)

打开python编译器/文本编辑器(新建一个文件,例:贪吃蛇.txt)并打开。(python编译器可以直接 右键 这个文件,选择打开方式,再打开即可)

代码复制:

import pygame
from sys import exit
import random


class Point():
   row = 0
   clo = 0

   def __init__(self, row, clo):
       self.row = row
       self.clo = clo

   def copy(self):
       return Point(row=self.row, clo=self.clo)


# 初始化
pygame.init()
width = 1500
hight = 700

ROW = 30
CLO = 35

direct = 'left'
window = pygame.display.set_mode((width, hight))
pygame.display.set_caption('贪吃蛇游戏')

# 蛇头坐标定在中间
head = Point(row=int(ROW / 2), clo=int(CLO / 2))
# 初始化蛇身的元素数量
snake = [
   Point(row=head.row, clo=head.clo + 1),
   Point(row=head.row, clo=head.clo + 2),
   Point(row=head.row, clo=head.clo + 3)
]


# 生成食物并且不让食物生成在蛇的身体里面
def gen_food():
   while 1:
       position = Point(row=random.randint(0, ROW - 1), clo=random.randint(0, CLO - 1))
       is_coll = False
       if head.row == position.row and head.clo == position.clo:
           is_coll = True
       for body in snake:
           if body.row == position.row and body.clo == position.clo:
               is_coll = True
               break
       if not is_coll:
           break
   return position


# 定义坐标
# 蛇头颜色可以自定义
head_color = (0, 158, 128)
# 食物坐标
snakeFood = gen_food()
# 食物颜色
snakeFood_color = (255, 255, 0)

snake_color = (200, 147, 158)


# 需要执行很多步画图操作 所以定义一个函数
def rect(point, color):
   # 定位 画图需要left和top
   left = point.clo * width / CLO
   top = point.row * hight / ROW
   # 将方块涂色
   pygame.draw.rect(window, color, (left, top, width / CLO, hight / ROW))


quit = True
# 设置帧频率
clock = pygame.time.Clock()
while quit:
   # 处理帧频 锁帧
   clock.tick(15)
   # pygame.event.get()获取当前事件的队列 可以同时发生很多事件
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           quit = False
       elif event.type == pygame.KEYDOWN:
           # 这里小细节蛇不可以直接左右上下 要判断当前是在什么状态下前行
           if event.key == 273 or event.key == 119:
               if direct == 'left' or direct == 'right':
                   direct = 'top'
           if event.key == 274 or event.key == 115:
               if direct == 'left' or direct == 'right':
                   direct = 'bottom'
           if event.key == 276 or event.key == 97:
               if direct == 'top' or direct == 'bottom':
                   direct = 'left'
           if event.key == 275 or event.key == 100:
               if direct == 'top' or direct == 'bottom':
                   direct = 'right'
   # 吃东西
   eat = (head.row == snakeFood.row and head.clo == snakeFood.clo)

   # 处理蛇的身子
   # 1.把原来的头插入到snake的头上
   # 2.把最后一个snake删掉
   if eat:
       snakeFood = Point(row=random.randint(0, ROW - 20), clo=random.randint(0, CLO - 20))
   snake.insert(0, head.copy())
   if not eat:
       snake.pop()

   # 移动一下
   if direct == 'left':
       head.clo -= 1
   if direct == 'right':
       head.clo += 1
   if direct == 'top':
       head.row -= 1
   if direct == 'bottom':
       head.row += 1
   dead = False
   if head.clo < 0 or head.row < 0 or head.clo >= CLO or head.row >= ROW:
       dead = True
   for body in snake:
       if head.clo == body.clo and head.row == body.row:
           dead = True
           break
   if dead:
       for i in range(100):
           print("")
       print('你只有一滴血了!')
       for i in range(50):
           print('')
       quit = False

   # 背景画图
   pygame.draw.rect(window, (245, 135, 155), (0, 0, width, hight))

   # 蛇头
   rect(head, head_color)
   # 绘制食物
   rect(snakeFood, snakeFood_color)
   # 绘制蛇的身子
   for body in snake:
       rect(body, snake_color)

   # 交还控制权
   pygame.display.flip()

这样,我们直接运行就行了!
想要寻找更详细,带图片的讲解?
请访问:
https://jingyan.baidu.com/article/e8cdb32b7db8b076042bad39.html

注意!上访的链接均为作者本人创作的!

不存在任何版权问题!

喜欢的点个赞
评论区?
我会及时回复的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值