贪吃蛇程序代码python_python 贪吃蛇

贪吃蛇程序代码python_python 贪吃蛇Python贪吃蛇源代码Python代码狂人Python代码大全程序运行截图如下:importpygameaspgfromrandomimportrandintimportsysfrompygame.localsimport*FPS=6#画面帧数,代表蛇的移动速率window_width=600window_height=500cellsize=20c…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Python贪吃蛇源代码

Python代码狂人 Python代码大全

程序运行截图如下:

贪吃蛇程序代码python_python 贪吃蛇

贪吃蛇程序代码python_python 贪吃蛇

import pygame as pg

from random import randint

import sys

from pygame.locals import *

FPS = 6 # 画面帧数,代表蛇的移动速率

window_width = 600

window_height = 500

cellsize = 20

cell_width = int(window_width / cellsize)

cell_height = int(window_height / cellsize)

BGcolor = (0, 0, 0)

BLUE = (0, 0, 255)

RED = (255, 0, 0)

apple_color = (255, 0, 0)

snake_color = (0, 150, 0)

GREEN = (0, 255, 0)

WHITE = (255, 255, 255)

DARKGRAY = (40, 40, 40)

UP = “up”

DOWN = “down”

LEFT = “left”

RIGHT = “right”

HEAD = 0

def main(): # 有函数

global FPSclock, window, BASICFONT

pg.init()

FPSclock = pg.time.Clock()

window = pg.display.set_mode((window_width, window_height))

BASICFONT = pg.font.Font(“freesansbold.ttf”, 18)

pg.display.set_caption(“贪吃蛇”)

showStartScreen()

while True:

runGame()

showGameOverScreen()

def runGame(): # 运行游戏函数

startx = randint(5, cell_width – 6)

starty = randint(5, cell_height – 6)

snakeCoords = [{“x”: startx, “y”: starty}, {“x”: startx – 1, “y”: starty}, {“x”: startx – 2, “y”: starty}]

direction = RIGHT

apple = getRandomLocation()

while True:

for event in pg.event.get():

if event.type == QUIT:

terminate()

elif event.type == KEYDOWN:

if event.key == K_LEFT and direction != RIGHT:

direction = LEFT

elif event.key == K_RIGHT and direction != LEFT:

direction = RIGHT

elif event.key == K_UP and direction != DOWN:

direction = UP

elif event.key == K_DOWN and direction != UP:

direction = DOWN

elif event.key == K_ESCAPE:

terminate()

if snakeCoords[HEAD][“x”] == -1 or snakeCoords[HEAD][“x”] == cell_width or snakeCoords[HEAD][“y”] == -1 or \

snakeCoords[HEAD][“y”] == cell_height:

return

for snakeBody in snakeCoords[1:]:

if snakeBody[“x”] == snakeCoords[HEAD][“x”] and snakeBody[“y”] == snakeCoords[HEAD][“y”]:

return

if snakeCoords[HEAD][“x”] == apple[“x”] and snakeCoords[HEAD][“y”] == apple[“y”]:

apple = getRandomLocation()

else:

del snakeCoords[-1]

if direction == UP:

newHead = {“x”: snakeCoords[HEAD][“x”], “y”: snakeCoords[HEAD][“y”] – 1}

elif direction == DOWN:

newHead = {“x”: snakeCoords[HEAD][“x”], “y”: snakeCoords[HEAD][“y”] + 1}

elif direction == LEFT:

newHead = {“x”: snakeCoords[HEAD][“x”] – 1, “y”: snakeCoords[HEAD][“y”]}

elif direction == RIGHT:

newHead = {“x”: snakeCoords[HEAD][“x”] + 1, “y”: snakeCoords[HEAD][“y”]}

snakeCoords.insert(0, newHead)

window.fill(BGcolor)

drawGrid()

drawSnake(snakeCoords)

drawApple(apple)

drawScore(len(snakeCoords) – 3)

pg.display.update()

FPSclock.tick(FPS)

def drawPressKeyMsg(): # 游戏开始提示信息

pressKeySurf = BASICFONT.render(“press a key to play”, True, BLUE)

pressKeyRect = pressKeySurf.get_rect()

pressKeyRect.topleft = (window_width – 200, window_height – 30)

window.blit(pressKeySurf, pressKeyRect)

def checkForKeyPress(): # 检查是否触发按键

if len(pg.event.get(QUIT)) > 0:

terminate()

keyUpEvents = pg.event.get(KEYUP)

if len(keyUpEvents) == 0:

return None

if keyUpEvents[0].key == K_ESCAPE:

terminate()

return keyUpEvents[0].key

def showStartScreen(): # 开始画面

window.fill(BGcolor)

titleFont = pg.font.Font(“freesansbold.ttf”, 100)

titleSurf = titleFont.render(“snake!”, True, RED)

titleRect = titleSurf.get_rect()

titleRect.center = (window_width / 2, window_height / 2)

window.blit(titleSurf, titleRect)

drawPressKeyMsg()

pg.display.update()

while True:

if checkForKeyPress():

pg.event.get()

return

def terminate(): # 退出

pg.quit()

sys.exit()

def getRandomLocation(): # 出现位置

return {“x”: randint(0, cell_width – 1), “y”: randint(0, cell_height – 1)}

def showGameOverScreen(): # 游戏结束

gameOverFont = pg.font.Font(“freesansbold.tff”, 150)

gameSurf = gameOverFont.render(“Game”, True, WHITE)

overSurf = gameOverFont.render(“over”, True, WHITE)

gameRect = gameSurf.get_rect()

overRect = overSurf.get_rect()

gameRect.midtop = (window_width / 2, 10)

overRect.midtop = (window_width / 2, gameRect.height10 + 25)

window.blit(gameSurf, gameRect)

window.blit(overSurf, overRect)

drawPressKeyMsg()

pg.display.update()

pg.time.wait(500)

checkForKeyPress()

while True:

if checkForKeyPress():

pg.event.get()

return

def drawScore(score): # 显示分数

scoreSurf = BASICFONT.render(“Score:%s” % (score), True, WHITE)

scoreRect = scoreSurf.get_rect()

scoreRect.topleft = (window_width – 120, 10)

window.blit(scoreSurf, scoreRect)

def drawSnake(snakeCoords): # 画蛇

for coord in snakeCoords:

x = coord[“x”] * cellsize

y = coord[“y”] * cellsize

snakeSegmentRect = pg.Rect(x, y, cellsize, cellsize)

pg.draw.rect(window, snake_color, snakeSegmentRect)

snakeInnerSegmentRect = pg.Rect(x + 4, y + 4, cellsize – 8, cellsize – 8)

pg.draw.rect(window, GREEN, snakeInnerSegmentRect)

def drawApple(coord):

x = coord[“x”] * cellsize

y = coord[“y”] * cellsize

appleRect = pg.Rect(x, y, cellsize, cellsize)

pg.draw.rect(window, apple_color, appleRect)

def drawGrid(): # 画方格

for x in range(0, window_width, cellsize):

pg.draw.line(window, DARKGRAY, (x, 0), (x, window_height))

for y in range(0, window_height, cellsize):

pg.draw.line(window, DARKGRAY, (0, y), (window_width, y))

if __name__ == “__main__”:

main()

程序调试过程中遇到问题,欢迎在本文后留言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169553.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关于记忆化搜索

    关于记忆化搜索转载自:http://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5847876记忆化搜索: 算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动

  • MT4-MQL4语言EA自动交易编程入门到精通[通俗易懂]

    MT4-MQL4语言EA自动交易编程入门到精通[通俗易懂]MT4-MQL4语言EA自动交易编程入门到精通

  • datax(9):Job和TaskGroup的通讯机制

    datax(9):Job和TaskGroup的通讯机制先后看完了TaskGroupContainer和JobContainer,梳理下他们的关系与职责;一,各自职责JobContainer:Job执行器,负责Job全局拆分、调度、前置语句和后置语句等工作的工作单元。类似Yarn中的JobTrackerTaskGroupContainer:TaskGroup执行器,负责执行一组Task的工作单元,类似Yarn中的TaskTracker(Yarn中的JobTracker和Yarn中的TaskTracker通过RPC进行通讯);二.

  • Java面试问题总结带答案(多线程)

    Java面试问题总结带答案(多线程)问题总结(均在网上搜索和书本摘抄所得,如若侵权请联系立即删除)多线程开启线程的方式说说进程,线程,协程之间的区别线程之间是如何通信的?什么是Daemon线程?它有什么意义?集合Hashmaphash的概念hash冲突hash算法应该考虑哪些点什么是HashMap,什么时候选择HashMap?多线程开启线程的方式说说进程,线程,协程之间的区别1.进程:通俗理解一个运行起来的程序或者软件叫做进程。进程是操作系统资源分配的基本单位。默认情况下一个进程会提供一个线程(主线程),线程依附在进程里,

  • Java面试之基础及语法

    Java面试之基础及语法Java面试之基础及语法

  • 开源四足机器人 附设计图及代码「建议收藏」

    斯坦福学生机器人俱乐部(StanfordStudentRoboticsclub)ExtremeMobility团队最近迎来了一名新成员——一个名为StanfordDoggo的四足机器人。这个机器人能跳1米多高,还能表演后空翻。与其他四足机器人动辄上万美元的成本不同,这个机器人的成本降到了3000美元以下,而且设计团队开源了该机器人的设计图、代码以及材料清单。任何感兴趣的人…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号