200行python代码实现贪吃蛇游戏

本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

这次我们来写一个贪吃蛇游戏

下面贴出具体代码

import pygame
import time
import numpy as np
# 此模块包含游戏所需的常量
from pygame.locals import *

# 设置棋盘的长宽
BOARDWIDTH = 48
BOARDHEIGHT = 28
# 分数
score = 0

class Food(object):
 def __init__(self):
  self.item = (4, 5)

 # 画出食物
 def _draw(self, screen, i, j):
  color = 255, 0, 255
  radius = 10
  width = 10
  # i:1---34 j:1---25
  position = 10 + 20 * i, 10 + 20 * j
  # 画出半径为 10 的粉色实心圆
  pygame.draw.circle(screen, color, position, radius, width)

 # 随机产生食物
 def update(self, screen, enlarge, snack):
  if enlarge:
   self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
   while self.item in snack.item:
    self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
  self._draw(screen, self.item[0], self.item[1])

# 贪吃蛇
class Snack(object):
 def __init__(self):
  # self.item = [(3, 25), (2, 25), (1, 25), (1,24), (1,23),
  # (1,22), (1,21), (1,20), (1,19), (1,18), (1,17), (1,16)]
  # x 水平方向 y 竖直方向
  # 初始方向竖直向上
  self.item = [(3, 25), (2, 25), (1, 25), (1, 24), ]
  self.x = 0
  self.y = -1

 def move(self, enlarge):
  # enlarge 标记贪吃蛇有没有吃到食物
  if not enlarge:
   # 吃到食物删除尾部元素
   self.item.pop()
  # 新蛇头的坐标为旧蛇头坐标加上移动方向的位移
  head = (self.item[0][0] + self.x, self.item[0][1] + self.y)
  # 将新的蛇头坐标插入在 list 最前面
  self.item.insert(0, head)

 def eat_food(self, food):
  global score
  # snack_x,snack_y 蛇头坐标
  # food_x, food_y 食物坐标
  snack_x, snack_y = self.item[0]
  food_x, food_y = food.item
  # 比较蛇头坐标与食物坐标
  if (food_x == snack_x) and (food_y == snack_y):
   score += 100
   return 1
  else:
   return 0

 def toward(self, x, y):
  # 改变蛇头朝向
  if self.x * x >= 0 and self.y * y >= 0:
   self.x = x
   self.y = y

 def get_head(self):
  # 获取蛇头坐标
  return self.item[0]

 def draw(self, screen):
  # 画出贪吃蛇
  # 蛇头为半径为 15 的红色实心圆
  radius = 15
  width = 15
  # i:1---34 j:1---25
  color = 255, 0, 0
  # position 为图形的坐标
  position = 10 + 20 * self.item[0][0], 10 + 20 * self.item[0][1]
  pygame.draw.circle(screen, color, position, radius, width)
  # 蛇身为半径为 10 的黄色实心圆
  radius = 10
  width = 10
  color = 255, 255, 0
  for i, j in self.item[1:]:
   position = 10 + 20 * i, 10 + 20 * j
   pygame.draw.circle(screen, color, position, radius, width)

# 初始界面
def init_board(screen):
 board_width = BOARDWIDTH
 board_height = BOARDHEIGHT
 color = 10, 255, 255
 width = 0
 # width:x, height:y
 # 左右边框占用了 X: 0 35*20
 for i in range(board_width):
  pos = i * 20, 0, 20, 20
  pygame.draw.rect(screen, color, pos, width)
  pos = i * 20, (board_height - 1) * 20, 20, 20
  pygame.draw.rect(screen, color, pos, width)
 # 上下边框占用了 Y: 0 26*20
 for i in range(board_height - 1):
  pos = 0, 20 + i * 20, 20, 20
  pygame.draw.rect(screen, color, pos, width)
  pos = (board_width - 1) * 20, 20 + i * 20, 20, 20
  pygame.draw.rect(screen, color, pos, width)

# 游戏失败
def game_over(snack):
 broad_x, broad_y = snack.get_head()
 flag = 0
 old = len(snack.item)
 new = len(set(snack.item))
 # 游戏失败的两种可能
 # 咬到自身
 if new < old:
  flag = 1
 # 撞到边框
 if broad_x == 0 or broad_x == BOARDWIDTH - 1:
  flag = 1
 if broad_y == 0 or broad_y == BOARDHEIGHT - 1:
  flag = 1

 if flag:
  return True
 else:
  return False

# 打印字符
def print_text(screen, font, x, y, text, color=(255, 0, 0)):
 # 在屏幕上打印字符
 # text是需要打印的文本,color为字体颜色
 # (x,y)是文本在屏幕上的位置
 imgText = font.render(text, True, color)
 screen.blit(imgText, (x, y))

# 按键
def press(keys, snack):
 global score
 # K_w 为 pygame.locals 中的常量
 # keys[K_w] 返回 True or False
 # 上移
 if keys[K_w] or keys[K_UP]:
  snack.toward(0, -1)
 # 下移
 elif keys[K_s] or keys[K_DOWN]:
  snack.toward(0, 1)
 # 左移
 elif keys[K_a] or keys[K_LEFT]:
  snack.toward(-1, 0)
 # 右移
 elif keys[K_d] or keys[K_RIGHT]:
  snack.toward(1, 0)
 # 重置游戏
 elif keys[K_r]:
  score = 0
  main()
 # 退出游戏
 elif keys[K_ESCAPE]:
  exit()

# 游戏初始化
def game_init():
 # pygame 初始化
 pygame.init()
 # 设置游戏界面大小
 screen = pygame.display.set_mode((BOARDWIDTH * 20, BOARDHEIGHT * 20))
 # 设置游戏标题
 pygame.display.set_caption('贪吃蛇游戏')
 # sound = pygame.mixer.Sound(AUDIONAME)
 # channel = pygame.mixer.find_channel(True)
 # channel.play(sound)
 return screen

# 开始游戏
def game(screen):
 snack = Snack()
 food = Food()
 # 设置中文字体和大小
 font = pygame.font.SysFont('SimHei', 20)
 is_fail = 0
 while True:
  for event in pygame.event.get():
   if event.type == QUIT:
    exit()
  # 填充屏幕
  screen.fill((0, 0, 100))
  init_board(screen=screen)
  # 获得用户按键命令
  keys = pygame.key.get_pressed()
  press(keys, snack)
  # 游戏失败打印提示
  if is_fail:
   font2 = pygame.font.Font(None, 40)
   print_text(screen, font2, 400, 200, "GAME OVER")
  # 游戏主进程
  if not is_fail:
   enlarge = snack.eat_food(food)
   food.update(screen, enlarge, snack)
   snack.move(enlarge)
   is_fail = game_over(snack=snack)
   snack.draw(screen)
  # 游戏刷新
  pygame.display.update()
  time.sleep(0.1)

# 主程序
def main():
 screen = game_init()
 game(screen)

if __name__ == '__main__':
 main()

程序运行效果

简单截图了一下
可以按住方向键移动蛇的运动方向

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 200行python代码实现贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 这次我们来写一个贪吃蛇游戏 下面贴出具体代码 import pygame import time import numpy as np # 此模块包含游戏所需的常量 from pygame.locals import * # 设置棋盘的长宽 BOARDWIDTH = 48 BOARDHEIGHT = 28 # 分数 score = 0 class Food(object): def __init__(self):

  • 150行python代码实现贪吃蛇游戏

    上篇博文我们实现了两百行代码实现贪吃蛇游戏,这次我们来实现一个代码量更加少,功能却更加完整的 python代码实现贪吃蛇游戏,具体代码与文件可以访问我的GitHub地址获取 游戏截图 动图 贪吃蛇python代码 """贪吃蛇""" import random import sys import time import pygame from pygame.locals import * from collections import deque

  • Python实现智能贪吃蛇游戏的示例代码

    目录 前言 基本环境配置 实现效果 实现代码 前言 我想大家都玩过诺基亚上面的贪吃蛇吧,本文将带你一步步用python语言实现一个snake小游戏. 基本环境配置 版本:Python3 系统:Windows 相关模块:pygame pip install pygame安装即可 实现效果 实现代码 import random, pygame, sys from pygame.locals import * import time ''' ''' FPS = 1 ##WINDOWWIDTH = 64

  • 使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到最初体型 4.变色食物:吃了会根据食物颜色改变蛇的颜色 #coding=UTF-8 from Tkinter import * from random import randint import tkMessageBox class Grid(object): def __init__(self,

  • 200行python代码实现2048游戏

    Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案以及可行的改进方向 本文为第2篇–200行Python代码实现2048 一.分析与函数设计 1.1 游戏玩法 2048这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢.相撞时会相加.(介绍来自百度百科) 1.2 函数设计 _init _() 初始化4*4游戏地图,分数等游戏基本数据 is_gameover() 判

  • 200 行python 代码实现 2048 游戏

    创建游戏文件 2048.py 首先导入需要的包: import curses from random import randrange, choice from collections import defaultdict 主逻辑 用户行为 所有的有效输入都可以转换为"上,下,左,右,游戏重置,退出"这六种行为,用 actions 表示 actions = ['Up', 'Left', 'Down', 'Right', 'Restart', 'Exit'] 有效输入键是最常见的 W(上

  • Python turtle实现贪吃蛇游戏

    本文实例为大家分享了Python turtle实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 # Simple Snake Game in Python 3 for Beginners import turtle import time import random delay = 0.1 # Score score = 0 high_score = 0 # Set up the screen wn = turtle.Screen() wn.title("Snake Game by @Toky

  • 小 200 行 Python 代码制作一个换脸程序

    简介 在这篇文章中我将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的脸替换为另一幅图片的脸. 这个过程分四步: 检测脸部标记. 旋转.缩放.平移和第二张图片,以配合第一步. 调整第二张图片的色彩平衡,以适配第一张图片. 把第二张图像的特性混合在第一张图像中. 1.使用 dlib 提取面部标记 该脚本使用 dlib 的 Python 绑定来提取面部标记: Dlib 实现了 Vahid Kazemi 和 Josephine Sullivan 的<使用回归树一毫秒脸部对准>

  • python实现简单贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码: from turtle import * from random import randrange from time import sleep ### 定义变量 snake = [[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]] apple_x = randrange(-20,20)*10 apple_y = randrange(-20,20)*10 aim_x = 1

  • python语言实现贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 新手自学python(简易贪吃蛇代码) 环境python3.7 刚刚大学毕业进入工作岗位,发现同事基本都会写py脚本,于是自学了一下,并写了一个简单的贪吃蛇代码,我觉得写的还是比较容易看懂,适合新手接触python. # -*- coding: utf-8 -*- import tkinter as tk # 使用Tkinter前需要先导入 import tkinter.messagebox import pic

随机推荐