python之pygame实现贪吃蛇小游戏

1 安装pygame

pip install pygame

2 代码如下

import pygame
import sys
import time
import random
from pygame.locals import *

# 初始化pygame
pygame.init()
# 这是游戏框
fps_clock = pygame.time.Clock()
play_sur_face = pygame.display.set_mode((640, 480))
# 设置标题
pygame.display.set_caption("小蛇冲冲冲!!!")
# 加载图标
image = pygame.image.load("game.jpg")
pygame.display.set_icon(image)

# 需要自定义设置一些颜色

RED_COLOR = pygame.Color(255, 0, 0)
BLACK_COLOR = pygame.Color(0, 0, 0)
WITHER_COLOR = pygame.Color(255, 255, 255)
GRE_COLOR = pygame.Color(150, 150, 150)
LIGHT_GRE = pygame.Color(220, 220, 220)

# 游戏结束
def game_over(play_sur_face, score):
    # 显示GAME OVER 并定义字体以及大小
    # game_over_font = pygame.font.Font(‘arial.tff‘, 72)
    game_over_font = pygame.font.Font(‘E:\\untitled\\arial.ttf‘, 72)
    game_over_surf = game_over_font.render("GAME OVER", True, GRE_COLOR)
    game_over_rect = game_over_surf.get_rect()
    game_over_rect.midtop = (320, 125)
    play_sur_face.blit(game_over_surf, game_over_rect)
    # 显示分数并定义字体大小
    score_font = pygame.font.Font(‘E:\\untitled\\arial.ttf‘, 48)
    score_surf = score_font.render(‘score ‘ + str(score), True, GRE_COLOR)
    score_rect = score_surf.get_rect()
    score_rect.midtop = (320, 255)
    play_sur_face.blit(score_surf, score_rect)
    # 刷新页面
    pygame.display.flip()
    time.sleep(5)
    pygame.quit()
    sys.exit()

snake_position = [100, 100]  # 蛇头位置
snake_h = [[100, 100], [80, 100], [60, 100]]  # 初始长度,三个单位
tree_position = [300, 300]
# 初始化树莓的数量
tree = 1
direction = ‘right‘  # 初始化方向
change_direction = direction
score = 0
# 检测例如按键等pygame事件
while True:
    for event in pygame.event.get():
        # print(event.type)
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            # 判断键盘事件
            if event.key == K_RIGHT or event.key == ord(‘d‘):
                change_direction = ‘right‘
            if event.key == K_LEFT or event.key == ord(‘a‘):
                change_direction = ‘left‘
            if event.key == K_UP or event.key == ord(‘w‘):
                change_direction = "up"
            if event.key == K_DOWN or event.key == ord(‘s‘):
                change_direction = ‘down‘
            if event.key == K_ESCAPE:  # 按esc键
                pygame.event.post(pygame.event.Event(QUIT))  # 退出游戏

    if change_direction == "right" and not direction == ‘left‘:
        direction = change_direction
    if change_direction == "left" and not direction == ‘right‘:
        direction = change_direction
    if change_direction == "up" and not direction == ‘down‘:
        direction = change_direction
    if change_direction == "down" and not direction == ‘up‘:
        direction = change_direction

    # 根据放下移动蛇头坐标
    if direction == ‘right‘:
        snake_position[0] += 20
    if direction == ‘left‘:
        snake_position[0] -= 20
    if direction == ‘up‘:
        snake_position[1] -= 20
    if direction == ‘down‘:
        snake_position[1] += 20
    snake_h.insert(0, list(snake_position))

    # 判断是否吃到树莓
    if snake_position[0] == tree_position[0] and snake_position[1] == tree_position[1]:
        tree = 0
    else:
        snake_h.pop()  # 每次将最后一单位蛇身剔除列表

    # 重新生成树莓
    if tree == 0:
        x = random.randrange(1, 32)
        y = random.randrange(1, 24)
        tree_position = [int(20 * x), int(20 * y)]
        tree = 1
        score += 1

    # 刷新显示层
    # def sx_face():
    #     # 绘制pygame显示层
    play_sur_face.fill(BLACK_COLOR)
    for position in snake_h[1:]:  # 蛇身为白色
        pygame.draw.rect(play_sur_face, WITHER_COLOR, Rect(position[0], position[1], 20, 20))
    pygame.draw.rect(play_sur_face, LIGHT_GRE, Rect(snake_position[0], snake_position[1], 20, 20))  # 蛇头为灰色
    pygame.draw.rect(play_sur_face, RED_COLOR, Rect(tree_position[0], tree_position[1], 20, 20))
    # 刷新显示层
    pygame.display.flip()

    # def check_is_alive():
    #     """
    #     判断蛇是否死亡
    #     :return:
    #     """
    if snake_position[0] > 620 or snake_position[0] < 0:  # 超出左右边界
        game_over(play_sur_face, score)
    if snake_position[1] > 460 or snake_position[1] < 0:  # 超出上下边界
        game_over(play_sur_face, score)
    for snack_body in snake_h[1:]:
        if snake_position[0] == snack_body[0] == snack_body[1] == snake_position[1]:
            game_over(play_sur_face, score)
    if len(snake_h) < 40:
        speed = 6 + len(snake_h) // 4
    else:
        speed = 16
    fps_clock.tick(speed)
  
 

原文地址:https://www.cnblogs.com/tianzhh/p/11847107.html

时间: 2024-11-05 17:26:22

python之pygame实现贪吃蛇小游戏的相关文章

贪吃蛇小游戏 (一)

贪吃蛇是一款儿时爱不释手的游戏.近日修行,想玩玩游戏开发.便简单写了个控制台版的贪吃蛇. 程序的简单框架: 建立一张固定大小的MAP,保存输出信息. 当信息有变动时,用system("cls")进行清屏操作,再重新输出实现伪动态. 重点算法在蛇身的移动,转向与增长.三者均基于链表实现. 移动与转向:通过判定移动方向,确定下一步移动的位置后,新建表头结点.将新表头结点置为表头.删除末尾结点. 增长:通过判断尾部移动方向,确定位置后在尾部添加节点. 熟练运用链表的同学,相信也是小菜一碟了.

一个简单的“贪吃蛇”小游戏

一个简单的“贪吃蛇”小游戏 页面结构 简单的21x21的方块,页面结构 id为container的div包含所21个class名为row的div,每个row代表贪吃蛇的一整行,每个row中又包含21个div,代表这一行的每一个div方格,如果这个方格是空的话,div的类名为blank,如果这一个方格表示“贪吃蛇”的“食物”,div的类名为food,如果这一个方格表示“蛇”,div的类名为snake. CSS JS 然后我们思考下一个贪吃蛇游戏需要那些参数, 首先,界面中可见的元素无非就是空方格,

贪吃蛇小游戏的初步尝试制作

这里利用二维数组做为地图,利用集合来存放蛇头和蛇尾的位置坐标,初步实现一个需要键盘控制的贪吃蛇小游戏. 首先,Main函数下面需要一个大循环来让游戏失败的时候能够重新开始,这里我们用了定义了一个bool型的sc,判断sc的true和flase来确定游戏是否开始: static void Main(string[] args)        { bool sc = true; while (sc) //大循环,用于游戏失败重新开始            { 下面是定义一个集合snake_x来存放蛇

使用Html5+JS做的贪吃蛇小游戏

学习了Html5的Canvas的使用,和JS创建对象,做了一个贪吃蛇小游戏,来巩固JS面向对象编程和Canvas的用法. Node.js 1 /** 2 * 格子类,组成贪吃蛇和舞台 3 */ 4 function Node(x,y){ 5 this.x=x; 6 this.y=y; 7 /** 8 * 比较两个格子是否重合 9 */ 10 this.equals=function(x,y){ 11 return this.x==x&&this.y==y; 12 } 13 } Snake.

Java版贪吃蛇小游戏的实现

使用的IDE eclipse JDK版本 1.6 辅助类 Coordinate.java package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other

贪吃蛇小游戏java实现代码分析

贪吃蛇小游戏java实现代码分析 贪吃蛇的小游戏,网上的代码比较多,今天周五,在教研室没啥事做,在电脑中发现了一个贪吃蛇的小游戏,于是就看了下实现的源码,发现别人写的代码确实挺好的,自己也是边加注释边进行理解的去看别人实现的游戏源码,发现还是挺有意思的.自己花了一个下午的时间看了源码,也加了一点小小的功能,于是,不写篇博客觉得对不起自己也,哈哈哈. 此游戏代码的思路非常的清晰,也相当好理解,没有太多难的地方,不过有很多值得学习的地方,因为,这份源码中,对java.awt包中的很多类的很多方法都进

用C写一个功能较为完善的贪吃蛇小游戏

主要功能: 方向控制-食物与增长-变速 1 #include<stdio.h> 2 #include<time.h>//种子-随机数 3 #include<windows.h>//system函数,控制台句柄 4 #include<conio.h>//按键 5 //界面(欢迎界面-游戏界面-结束得分界面)-驱动-方向控制-食物 6 //位置锁定-打印-删除 7 int snake_x[520]={0}; 8 int snake_y[520]={0}; 9 i

python写贪吃蛇小游戏

python的pygame模块写的. 运行界面: # 没搞素材,丑了点 身体跟随蛇头的实现思路: 1. 通过双向链表+两个标志. 链表是为了,蛇头改变方向后,告诉后一个身体,移动后跟着主蛇方向改变,之后身体在告诉后一个身体,跟随前一个身体方向改变. 两个标志(start_flag,change_flag)是为了,每一帧依次改变方向,而不是一个帧内就循环告诉完全部身体方向改变. 2. 加上两个标志,只记录一次前者方向,那么主体发生连续两次改变会出现的情况 解决方式:身体有存前者改变方向的列表 #

JavaScript实现简单贪吃蛇小游戏

之前上Web课,学到JavaScript的时候,老师要求写几个静态页面,要用到JavaScript.想了想就写个贪吃蛇吧.其实之前用pygame写过一次GUI的贪吃蛇,素材都是自己拿画图画的,其丑无比.所以这次还是老老实实用字符吧. 首先,是一些全局变量的定义: 1 <script> 2 var state = 0;//0 wait 1 run 2 over 3 var width = 40; 4 var height = 25; 5 var update = false; 6 var dir