python之游戏开发-贪吃蛇

#!/usr/bin/env python# coding=utf-8import pygameimport sysimport random

# 全局定义,screen的长和宽SCREEN_X = 600SCREEN_Y = 600

# 蛇类# 点以25为单位class Snake(object):  # 定义一个类--Snake,默认使用object类,如果你有更好的话,可以替换它    # 初始化各种需要的属性 [开始时默认向右/身体块x5]    def __init__(self):  # 定义init方法,第一个参数永远都是self本身,在__init__方法内部,可以把各种属性绑定到self,因为self指向创建实例的本身。        # 有了__init__方法,在创建实例的时候,就不能传入空的参数来,必须传入与__init__方法匹配的参数,但是self不需要穿        # 举例,如果是def __init__(self,name,score):这种类型的话,那么self不需要,但是name和score必须要有的        self.dirction = pygame.K_RIGHT        self.body = []        for x in range(5):            self.addnode()  # 调用addnode函数,增加身体,循环5次后,蛇身初始值为5个node

    # 增加贪吃蛇身体长度的函数,无论何时 都在前端增加蛇块    def addnode(self):        left, top = (0, 0)  # 默认是0        if self.body:            left, top = (self.body[0].left, self.body[0].top)        node = pygame.Rect(left, top, 25, 25)  # 一个node节点的大小        if self.dirction == pygame.K_LEFT:            node.left -= 25        elif self.dirction == pygame.K_RIGHT:            node.left += 25        elif self.dirction == pygame.K_UP:            node.top -= 25        elif self.dirction == pygame.K_DOWN:            node.top += 25        self.body.insert(0, node)  # 插入节点

    # 删除最后一个块,pop默认从最后弹出元素    def delnode(self):        self.body.pop()

    # 死亡判断    def isdead(self):        # 撞墙,身体top部位不在SCREEN中的X或者Y值中(0,600),认为撞墙死亡        if self.body[0].x not in range(SCREEN_X):            return True        if self.body[0].y not in range(SCREEN_Y):            return True            # 撞自己,头部和身体任意一部分碰撞。body[0]是第一个元素,body[1:]取的是从第二个元素开始,到完结        if self.body[0] in self.body[1:]:            return True        return False

    # 移动!    def move(self):        self.addnode()        self.delnode()

    # 改变方向 但是左右、上下不能被逆向改变    def changedirection(self, curkey):        LR = [pygame.K_LEFT, pygame.K_RIGHT]        UD = [pygame.K_UP, pygame.K_DOWN]        if curkey in LR + UD:            if (curkey in LR) and (self.dirction in LR):                return            if (curkey in UD) and (self.dirction in UD):                return            self.dirction = curkey

# 食物类# 方法: 放置/移除# 点以25为单位class Food:    def __init__(self):        self.rect = pygame.Rect(-25, 0, 25, 25)

    def remove(self):        self.rect.x = -25

    def set(self):        if self.rect.x == -25:            allpos = []            # 不靠墙太近 25 ~ SCREEN_X-25 之间            for pos in range(25, SCREEN_X - 25, 25):                allpos.append(pos)            self.rect.left = random.choice(allpos)            self.rect.top = random.choice(allpos)            print(self.rect)

def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):    # 获取系统字体,并设置文字大小    cur_font = pygame.font.SysFont("宋体", font_size)    # 设置是否加粗属性    cur_font.set_bold(font_bold)    # 设置是否斜体属性    cur_font.set_italic(font_italic)    # 设置文字内容    text_fmt = cur_font.render(text, 1, color)    # 绘制文字    screen.blit(text_fmt, pos)

def main():    pygame.init()    screen_size = (SCREEN_X, SCREEN_Y)    screen = pygame.display.set_mode(screen_size)    pygame.display.set_caption(‘Snake‘)    clock = pygame.time.Clock()    scores = 0    isdead = False

    # 蛇/食物    snake = Snake()    food = Food()

    while True:        for event in pygame.event.get():            if event.type == pygame.QUIT:                sys.exit()            if event.type == pygame.KEYDOWN:                snake.changedirection(event.key)                # 死后按space重新                if event.key == pygame.K_SPACE and isdead:                    return main()

        screen.fill((255, 255, 255))

        # 画蛇身 / 每一步+1分        if not isdead:            scores += 1            snake.move()        for rect in snake.body:            pygame.draw.rect(screen, (20, 220, 39), rect, 0)

            # 显示死亡文字        isdead = snake.isdead()        if isdead:            show_text(screen, (100, 200), ‘YOU DEAD!‘, (227, 29, 18), False, 100)            show_text(screen, (150, 260), ‘press space to try again...‘, (0, 0, 22), False, 30)

            # 食物处理 / 吃到+50分        # 当食物rect与蛇头重合,吃掉 -> Snake增加一个Node        if food.rect == snake.body[0]:            scores += 50            food.remove()            snake.addnode()

            # 食物投递        food.set()        pygame.draw.rect(screen, (136, 0, 21), food.rect, 0)

        # 显示分数文字        show_text(screen, (50, 500), ‘Scores: ‘ + str(scores), (223, 223, 223))

        pygame.display.update()        clock.tick(10)

if __name__ == ‘__main__‘:    main()

原文地址:https://www.cnblogs.com/Lynn123/p/11824519.html

时间: 2024-10-07 06:06:55

python之游戏开发-贪吃蛇的相关文章

Python:游戏:贪吃蛇(附源码)

贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么画? 蛇是由一个个小方块组成的,那么我们可以用一个 list 记录每一个小方块的坐标,显示的时候将所有小方块画出来即可. 2.蛇怎么移动? 第一反应就是想蚯蚓蠕动一样,每一个方块向前移动一格,但这样做很麻烦,仔细想下,其实除了头尾,蛇的其他部分根本就没有动过,那就简单了,将下一格的坐标添加到 list 开头,并移除 list 的最后一个元素,就相当于蛇向前移动了一格. 3.如何判定游戏结束? 蛇移动超出了游戏区的范围或者碰到了

C语言 小游戏之贪吃蛇

还记得非常久曾经听群里人说做贪吃蛇什么的,那时候大一刚学了C语言,认为非常难,根本没什么思路. 前不久群里有些人又在谈论C语言贪吃蛇的事了,看着他们在做,我也打算做一个出来. 如今大三,经过了这一年半的编程,如今认为这个C语言的贪吃蛇还是比較简单的,花的时间不非常多! 我认为主要是思路正确,基本上就米什么大的问题. 如今贴上我的代码和我的详解,希望大家多交流. 首先说下我这个贪吃蛇仅仅是一个简单的,游戏结束有2种可能:一碰墙,二自杀即蛇头碰到蛇身. 如有不好之处,请见谅把. 首先说下我这个贪吃蛇

Coco2d-x android win7 Python 搭建游戏开发环境

1:我用电脑配置 win7 3 核 内存8G 台式机,一直想研究Coco2d 游戏开发,所以经过一周的需找,终于把环境搭建好了 2:我用的版本是该版本,至于搭建android开发环境省略了, 3: 2.2>安装ndk,为了使用c++/c进行android开发 下载android-ndk-r8e,然后在eclipse或adt bundle中配置ndk路径. 4: 5:采用VS 编译环境 我之前用的VS2010 感觉用着不爽,所以改成现在的VS 2012 , 6:一般用python建立项目: 用py

结对-开发贪吃蛇游戏-开发环境搭建过程

项目:贪吃蛇游戏开发 环境搭建: Mac下: 1)官网下载jkd1.8版本. 2)下载IDE--eclipse或Myeclipse win下: 1)官网下载JDK,找到符合自己电脑的版本,下载的本地 2)下载IDE--eclipse或Myeclipse 3)配置环境变量: i.计算机->属性->高级系统设置 ii.单击高级系统设置->环境变量在系统变量里面分别设置JAVA_HOME.CLASSPATH和Path iii.在系统变量里找变量名JAVA_HOME,如果没有就点击新建.输入变量

使用Love2D引擎开发贪吃蛇游戏

今天来介绍博主最近捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章当中我们将会涉及到贪吃蛇的基本算法.Lua语言编程等基本的内容,希望能够对大家开发类似的游戏提供借鉴和思考,文章中如有不足之处,还希望大家能够谅解,因为博主的游戏开发基本就是这样慢慢摸索着学习,所以难免会有不足的地方. 游戏算法 我们首先来看看贪吃蛇是怎么移动的? 通过这四张图的演示,我们可以发现这样一个规律: 蛇的移动其实是将蛇

用Java开发贪吃蛇游戏

贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始提示:按空格键开始游戏 让蛇动起来:监听Timer事件,平移数据 实现游戏暂停 实现转向功能 Part 3: 添加食物 吃掉食物 添加死亡条件 实现“重新开始”功能 添加分数和长度 游戏图纸如下: 蛇及游戏框的素材如下:                              Snake主类: 1

C++控制台游戏之贪吃蛇——(1)

做一个贪吃蛇的游戏,不用现成的游戏引擎直接使用控制台.第一个内容应该是需求分析,任何程序都应该基于需求分析来进行.否则全凭脑补,走一步看一步那回滚代码都会让你喊GG. 那么做一个控制台的贪吃蛇游戏需要啥子东西. 1.node类保存坐标点 2.map保存整张地图 3.蛇.蛇的长度.蛇的方向 4.食物结点.食物是否被吃了 5.蛇的移动速度 6.游戏是否失败/结束.游戏是否开始 7.类方法:移动.上下左右.自动生成食物 8.游戏分数(吃到食物的个数) 暂时就想到这么多,还有啥子东西....慢慢想,慢慢

[原创]html5游戏_贪吃蛇

代码随便写写,尚有许多不足,PC与手机端皆可运行 手机端滑屏操作,PC端方向键操作 疑问: 生成食物,与判断是否可以移动方面 有两种实现方式, 1.使用js内存,数组循环判断 2.使用dom的query方法 哪种比较快,哪种比较好? 目前的代码是用第二种方法实现 在线地址: http://wangxinsheng.herokuapp.com/snake 截图: 部分代码: html: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <m

【C语言小游戏】 贪吃蛇

windows编译运行 源代码: /*这是一个贪吃蛇代码,运行环境VC++6.0(亲测完美运行)*/ /*该程序在dos系统下运行,不需要graphics.h头文件*/ #include <windows.h> #include <stdlib.h> #include <time.h> #include <stdio.h> #include <string.h> #include <conio.h> #define N 21 int