iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎样用Python制作一个贪吃蛇游戏
  • 248
分享到

怎样用Python制作一个贪吃蛇游戏

游戏python 2023-09-25 11:09:46 248人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一,首先我们可以使用python的tkinter函数库来生成一个窗口 代码如下: import tkinter as tk //导入tkinter函数库win = tk.Tk() //创建一个窗口win.title("Python Snak

一,首先我们可以使用python的tkinter函数库来生成一个窗口

代码如下:

import tkinter as tk //导入tkinter函数库win = tk.Tk() //创建一个窗口win.title("Python Snake") //设置窗口的标题win.mainloop() //保留窗口

代码运行效果如下: 

我们可以看到怎样一个窗口,但目前的效果还是远远不够的,所以,我们还需要对这个窗口进行一个优化

二:基本参数设置

贪吃蛇的蛇身和墙都用方格来表示,所以先设置一下方格的边长,还有窗体的高度和宽度。这里的30是像素。

side = 30 //正方形边长height = 20*side //20个正方形的边长width = 20*side //20个正方形的边长

但是此时运行显然是显示不出来的,因为还没有设置进去。

这里可以用geometry函数来设置。

s = str(width) + "x" + str(height)win.geometry(s)

怎样一个窗口就设置好了

三:贪吃蛇的初始化

定义初始化函数:

def init():

首先,新建一个画布工具。面积和窗口一样.,然后放置在指定地方,所有格子贴在一起不好看,设个间距,然后填充

def init():    canvas = tk.Canvas(win,height=height,width=width) //新建画布工具    canvas.pack() //放置在指定地方    margin = 4 //间距    for i in range(20):        for j in range(20):            canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill = "grey")

效果如下:

然后把墙设置出来,用黑色表示。

if(i == 0 or i == 19 or j == 0 or j == 19):  //墙体显示     canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill = "black")

那么,接下来再放蛇进去。我这里把初始位置设为(6,6)

  start_x = 6 //蛇的初始坐标X  start_y = 6 //蛇的初始坐标Y

蛇最初占两个格子,向右移动,这里初始为绿色,这样明显一点。

if((i == start_x and j == start_y)or (i == start_x+1 and j == start_y)): //蛇的初始移动向右          canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill = "green")

在函数外面定义一个空列表snake=[],然后在刚刚初始化蛇身的代码后面,把蛇身保存进列表。

snake.append([i,j])

四:随机生成cookie

定义一个生成cookie的函数:(这里我们就不讲述详细步骤了)

import random//生成cookiedef set_cookie():    ci=random.randint(0,19) //随机生成cookie的横纵坐标    cj=random.randint(0,19)    //保证生成的cookie不在蛇身里    while [ci,cj] in snake:        ci=random.randint(1,18) //随机生成cookie        cj=random.randint(1,18)    return [ci,cj]    ci,cj=set_cookie() //生成cookie    if i == ci and j == cj:         canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill = "red")

五:蛇的移动与转向

其实这里就是把列表里的蛇的坐标更新一下,然后在窗口里更新图像即可。(这里我们还是就不讲述详细步骤了)

def snake_move():    move = [1,0]    del(snake[0])snake.append([snake[len(snake)-1][0]+move[0],snake[len(snake)-1][1]+move[1]])    def update():    win.update()    canvas.create_rectangle(snake[0][0]*side,snake[0][1]*side,(snake[0][0]+1)*side-margin,(snake[0][1]+1)*side-margin,fill="grey")snake_move()canvas.create_rectangle((snake[len(snake)-1][0])*side,(snake[len(snake)-1][1])*side,(snake[len(snake)-1][0]+1)*side-margin,(snake[len(snake)-1][1]+1)*side-margin,fill="yellow")    win.after(500,update)    def rotage(event):    if move[1] and event.keysym=='Left':        move[0]=-1        move[1]=0    elif move[1] and event.keysym=='Right':        move[0]=1        move[1]=0    elif move[0] and event.keysym=='Up':        move[0]=0        move[1]=-1    elif  move[0] and event.keysym=='Down':        move[0]=0        move[1]=1

别忘记在主函数里完成聚焦和绑定:

canvas.focus_set()canvas.bind("",rotage)canvas.bind("",rotage)canvas.bind("",rotage)canvas.bind("",rotage)

六:蛇吃cookie的相关操作

cookie=[]cookie.append([ci,cj])def check():    if snake[len(snake)-1] == cookie[0]:        return True    return Falsedef eat():    cookie[0][0],cookie[0][1]=set_cookie()canvas.create_rectangle(cookie[0][0]*side,cookie[0][1]*side,(cookie[0][0]+1)*side-margin,(cookie[0][1]+1)*side-margin,fill="red")    snake.insert(0,[snake[0][0]-move[0],snake[0][1]-move[1]])    if snake[0][0]>=19 or snake[0][0]<=0 or snake[0][1]>=19 or snake[0][1]<=0:        canvas.create_rectangle(snake[0][0]*side,snake[0][1]*side,(snake[0][0]+1)*side-margin,(snake[0][1]+1)*side-margin,fill="black")    if check():      eat()

七:游戏的结束和计分功能

def check_lose():    x=snake[len(snake)-1][0]    y=snake[len(snake)-1][1]    check=[]    for i in range(len(snake)):        check.append([snake[i][0],snake[i][1]])    del(check[len(check)-1])    if [x,y] in check:        return True    if x<=0 or x>=19 or y<=0 or y>=19:        return True    if check_lose():        win.destroy()        return     import time        time.sleep(2000)

八:分数输出

        

score=[0]score[0]+=10t=[]t.append(time.time())from tkinter import messageboxresult="Your Score is "+str(score[0])+", time is "+str(int(t[1]-t[0]))+" second"messagebox.showinfo("Game Over!",result)

九,最后,我们来看看完整代码

import tkinter as tkfrom tkinter import messageboximport randomimport timeside=30#正方形边长height=20*side#20个正方形的边长width=20*side#20个正方形的边长margin=4#间距snake=[]#蛇身的坐标move=[1,0]#移动方向cookie=[]#cookiescore=[0]#得分t=[]#时间#窗口初始化def init():    ci,cj=set_cookie()#生成cookie    start_x=6#蛇的初始坐标    start_y=6    cookie.append([ci,cj])#保存cookie    for i in range(20):        for j in range(20):            canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill="grey")            if(i==0 or i==19 or j==0 or j==19):#墙体显示                 canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill="black")            if((i==start_x and j==start_y)or (i==start_x+1 and j==start_y)):#蛇的初始移动向右                 canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill="yellow")                 snake.append([i,j])            if i==ci and j==cj:                 canvas.create_rectangle(i*side,j*side,(i+1)*side-margin,(j+1)*side-margin,fill="blue")    t.append(time.time())#初始时间    update()#生成cookiedef set_cookie():    ci=random.randint(1,18)#随机生成cookie的横纵坐标    cj=random.randint(1,18)    #保证生成的cookie不在蛇身里    while [ci,cj] in snake:        ci=random.randint(1,18)#随机生成cookie        cj=random.randint(1,18)    return [ci,cj]#蛇移动def snake_move():    del(snake[0])    snake.append([snake[len(snake)-1][0]+move[0],snake[len(snake)-1][1]+move[1]])#更新窗口def update():    win.update()    if check():        eat()    canvas.create_rectangle(snake[0][0]*side,snake[0][1]*side,(snake[0][0]+1)*side-margin,(snake[0][1]+1)*side-margin,fill="grey")    snake_move()    canvas.create_rectangle((snake[len(snake)-1][0])*side,(snake[len(snake)-1][1])*side,(snake[len(snake)-1][0]+1)*side-margin,(snake[len(snake)-1][1]+1)*side-margin,fill="yellow")    if check_lose():        t.append(time.time())        result="Your Score is "+str(score[0])+", time is "+str(int(t[1]-t[0]))+" second"        messagebox.showinfo("Game Over!",result)#弹窗显示分数和时间        time.sleep(2000)        win.destroy()        return     win.after(500,update)#蛇的转向def rotage(event):    if move[1] and event.keysym=='Left':        move[0]=-1        move[1]=0    elif move[1] and event.keysym=='Right':        move[0]=1        move[1]=0    elif move[0] and event.keysym=='Up':        move[0]=0        move[1]=-1    elif  move[0] and event.keysym=='Down':        move[0]=0        move[1]=1#检查是否吃到cookiedef check():    if snake[len(snake)-1] == cookie[0]:        return True    return False#蛇吃了cookie会发生什么def eat():    score[0]+=10#得分加10分    cookie[0][0],cookie[0][1]=set_cookie()    canvas.create_rectangle(cookie[0][0]*side,cookie[0][1]*side,(cookie[0][0]+1)*side-margin,(cookie[0][1]+1)*side-margin,fill="blue")    snake.insert(0,[snake[0][0]-move[0],snake[0][1]-move[1]])    if snake[0][0]>=19 or snake[0][0]<=0 or snake[0][1]>=19 or snake[0][1]<=0:        canvas.create_rectangle(snake[0][0]*side,snake[0][1]*side,(snake[0][0]+1)*side-margin,(snake[0][1]+1)*side-margin,fill="black")#游戏结束def check_lose():    #蛇头的坐标    x=snake[len(snake)-1][0]    y=snake[len(snake)-1][1]    #蛇身    check=[]    for i in range(len(snake)):        check.append([snake[i][0],snake[i][1]])    del(check[len(check)-1])    if [x,y] in check:        return True    if x<=0 or x>=19 or y<=0 or y>=19:        return True    return False#主函数win=tk.Tk()#创建窗口win.title("AC Snake")#标题s=str(width)+"x"+str(height)win.geometry(s)canvas=tk.Canvas(win,height=height,width=width)#新建画布工具canvas.pack()#放置在指定地方canvas.focus_set()#聚焦canvas.bind("",rotage)canvas.bind("",rotage)canvas.bind("",rotage)canvas.bind("",rotage)init()win.mainloop()

来源地址:https://blog.csdn.net/qq_66912943/article/details/131252401

--结束END--

本文标题: 怎样用Python制作一个贪吃蛇游戏

本文链接: https://www.lsjlt.com/news/417310.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎样用Python制作一个贪吃蛇游戏
    一,首先我们可以使用Python的tkinter函数库来生成一个窗口 代码如下: import tkinter as tk //导入tkinter函数库win = tk.Tk() //创建一个窗口win.title("Python Snak...
    99+
    2023-09-25
    游戏 python
  • Python怎样制作贪吃蛇游戏
    这篇文章给大家介绍Python怎样制作贪吃蛇游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言:文章利用Python pygame做一个贪吃蛇的小游戏而且讲清楚每一段代码是用来干嘛的。据说是贪吃蛇游戏是1976年,...
    99+
    2023-06-22
  • Pygame代码 制作一个贪吃蛇小游戏
    目录用到的 Pygame 函数创建屏幕创建 snake使 snake 动起来处理 Game Over增加食物snake 的成长展示得分 用到的 Pygame 函数 贪吃蛇小游戏用到的...
    99+
    2024-04-02
  • 使用pygame制作一个贪吃蛇的小游戏
    之前我们已经学习了如果使用pygame创建一个窗口,现在我们来学习使用pygame来制作一个经典的小游戏—贪吃蛇。首先我们需要导入待使用的模块:import pygame, sys, randomfrom pygame.locals imp...
    99+
    2023-06-02
  • 怎么用Python写贪吃蛇游戏
    怎么用Python写贪吃蛇游戏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前几天,有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典...
    99+
    2023-06-02
  • 利用Flutter制作经典贪吃蛇游戏
    目录前言使用 Flutter 作为游戏引擎画蛇2D 渲染的基础创建蛇填写列表将蛇移动到下一个位置添加运动和速度添加控件改变方向吃东西和提高速度在屏幕上显示食物消耗和再生食物检测碰撞并...
    99+
    2024-04-02
  • C语言制作贪吃蛇小游戏
    本文实例为大家分享了C语言制作贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 直接上代码 ​#include <stdio.h> #include <stdlib...
    99+
    2024-04-02
  • 怎么用PHP GUI做一个贪吃蛇游戏
    本篇内容介绍了“怎么用PHP GUI做一个贪吃蛇游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装扩展官方手册的安装步骤是linux的:...
    99+
    2023-06-29
  • 怎么用Vue做个贪吃蛇游戏
    这篇文章主要介绍了怎么用Vue做个贪吃蛇游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Vue做个贪吃蛇游戏文章都会有所收获,下面我们一起来看看吧。Vue.js写一个命令行贪吃蛇游戏安装npm ...
    99+
    2023-07-04
  • Python制作当年第一款手机游戏-贪吃蛇游戏(练习)
    目录1. 创建游戏窗口1.1 游戏初始化1.2 初始化蛇的位置 蛇的长度 10 10 也就是蛇的 X Y 坐标1.3 初始化食物的位置1.4 开启游戏循环1.5 填充背景为白色1.6...
    99+
    2024-04-02
  • python实现贪吃蛇游戏
    文章目录 1、效果2、实现过程3、代码 1、效果 2、实现过程 导入 Pygame 和 random 模块。初始化 Pygame。设置游戏界面大小、背景颜色和游戏标题。定义颜色常量。...
    99+
    2023-09-29
    python 游戏 pygame
  • python怎么实现贪吃蛇游戏
    要实现贪吃蛇游戏,可以使用Python中的pygame库来进行游戏界面的绘制和键盘事件的监听。以下是一个简单的贪吃蛇游戏的示例代码:...
    99+
    2023-08-09
    python
  • 使用unity怎么实现一个贪吃蛇游戏
    使用unity怎么实现一个贪吃蛇游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下using UnityEngine;using UnityEn...
    99+
    2023-06-14
  • 如何使用Canvas写一个贪吃蛇游戏
    这篇文章主要介绍了如何使用Canvas写一个贪吃蛇游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。之前在慕课网看了几集Canvas的视频,一直想着写点东西练练手。感觉贪吃蛇...
    99+
    2023-06-09
  • JavaScript如何编写一个贪吃蛇游戏
    这篇文章主要介绍了JavaScript如何编写一个贪吃蛇游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。写的比较乱,有个逻辑错误:蛇吃了果...
    99+
    2024-04-02
  • 如何用Pygame制作简单的贪吃蛇游戏
    这篇文章主要讲解了“如何用Pygame制作简单的贪吃蛇游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Pygame制作简单的贪吃蛇游戏”吧!安装与导入使用pip install py...
    99+
    2023-07-02
  • 教你用Pygame制作简单的贪吃蛇游戏
    目录1.序言2.安装与导入3.定义后续需要的参数4.绘制蛇与食物5.游戏规则与运行6.成品展示7.完整代码总结1.序言 目前基本上软测会用到的工具或者第三方库都已经被写完,本着不要逮...
    99+
    2024-04-02
  • 使用Java怎么实现一个贪吃蛇小游戏
    这篇文章将为大家详细讲解有关使用Java怎么实现一个贪吃蛇小游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 程序结构  程序结构图如图:2. 程序设计思路2.1 Data类作用:连接st...
    99+
    2023-06-14
  • 怎样用python打造最经典的贪吃蛇游戏
    这篇文章将为大家详细讲解有关怎样用python打造最经典的贪吃蛇游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言今天为大家介绍一个用Python开发的经典游戏|贪吃蛇,只需要短短的30...
    99+
    2023-06-02
  • python贪吃蛇游戏代码怎么写
    下面是一个简单的Python贪吃蛇游戏的代码示例:```pythonimport pygameimport random# 游戏窗口...
    99+
    2023-08-14
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作