首页 > 其他分享 >贪吃蛇游戏

贪吃蛇游戏

时间:2023-05-15 16:23:46浏览次数:32  
标签:游戏 game window 贪吃蛇 pygame size block snake

import pygame
import random

# 初始化 Pygame 库
pygame.init()

# 游戏窗口的大小
window_width = 800
window_height = 600

# 创建游戏窗口
game_window = pygame.display.set_mode((window_width, window_height))

# 游戏窗口的标题
pygame.display.set_caption('贪吃蛇游戏')

# 定义颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)

# 定义蛇的大小和速度
snake_block_size = 10
snake_speed = 15

# 定义字体
font_style = pygame.font.SysFont(None, 50)


# 显示分数
def show_score(score):
score_font = font_style.render("Score: " + str(score), True, white)
game_window.blit(score_font, [0, 0])


# 画蛇
def draw_snake(snake_block_size, snake_list):
for x in snake_list:
pygame.draw.rect(game_window, green, [x[0], x[1], snake_block_size, snake_block_size])


# 游戏主循环
def game_loop():
game_over = False
game_close = False

# 蛇的初始位置
x1 = window_width / 2
y1 = window_height / 2

# 蛇的移动方向
x1_change = 0
y1_change = 0

# 蛇的长度
snake_list = []
Length_of_snake = 1

# 随机生成食物的位置
foodx = round(random.randrange(0, window_width - snake_block_size) / 10.0) * 10.0
foody = round(random.randrange(0, window_height - snake_block_size) / 10.0) * 10.0

# 游戏循环
while not game_over:

# 游戏结束
while game_close:
game_window.fill(black)
message = font_style.render("Game Over!", True, red)
game_window.blit(message, [window_width / 3, window_height / 3])
show_score(Length_of_snake - 1)
pygame.display.update()

# 按下 Q 键退出游戏,按下 C 键重新开始游戏
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
game_loop()

# 判断按键事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block_size
x1_change = 0

# 判断蛇是否撞墙
if x1 >= window_width or x1 < 0 or y1 >= window_height or y1 < 0:
game_close = True

# 更新蛇的位置
x1 += x1_change
y1 += y1_change

# 游戏窗口背景色
game_window.fill(black)

# 画出食物
pygame.draw.rect(game_window, red, [foodx, foody, snake_block_size, snake_block_size])

# 将蛇的位置加入蛇的列表中
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)

# 如果蛇的长度大于 Length_of_snake,则删除列表中的第一个元素
if len(snake_list) > Length_of_snake:
del snake_list[0]

# 判断蛇是否吃到食物
for x in snake_list[:-1]:
if x == snake_head:
game_close = True

# 画出蛇
draw_snake(snake_block_size, snake_list)

# 显示分数
show_score(Length_of_snake - 1)

# 更新游戏窗口
pygame.display.update()

# 如果蛇吃到食物,则增加蛇的长度,并重新生成食物的位置
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, window_width - snake_block_size) / 10.0) * 10.0
foody = round(random.randrange(0, window_height - snake_block_size) / 10.0) * 10.0
Length_of_snake += 1

# 控制蛇的速度
clock = pygame.time.Clock()
clock.tick(snake_speed)

# 退出 Pygame 库
pygame.quit()

# 退出 Python 解释器
quit()


# 运行游戏主循环
game_loop()

标签:游戏,game,window,贪吃蛇,pygame,size,block,snake
From: https://www.cnblogs.com/angelca/p/17402239.html

相关文章

  • 饥饿游戏搜索HGS算法与BP结合建立多特征输入单个因变量输出的拟合预测模型。
    饥饿游戏搜索HGS算法与BP结合建立多特征输入单个因变量输出的拟合预测模型。其中HGS算法比较新,适合发paper。程序直接替换数据就可以用。程序语言为matlab。ID:7235679045114961......
  • 逃离塔科夫辅助:让你成为游戏中的高手
    随着游戏的发展,越来越多的玩家加入了逃离塔科夫的行列。但是,逃离塔科夫是一款非常具有挑战性的游戏,需要玩家具备很高的游戏技能和经验才能在游戏中获得胜利。为了帮助玩家更好地掌握游戏技巧,我们推出了逃离塔科夫辅助,让你成为游戏中的高手。逃离塔科夫辅助(https://tarko......
  • 「LOJ6734」图上的游戏
    题目点这里看题目。有一张\(n\)个点\(m\)条边的无自环连通无向图,点编号为\(0\simn-1\),边编号为\(0\simm-1\)。你可以执行不超过\(3\times10^4\)次以下询问:给出一个结点\(u\)和一个边的子集\(S\),交互库会告诉你是否存在一条从\(0\)到\(u\)的、只经过\(S\)......
  • 有趣的前端小游戏
    今天搬了一天的家,状态不是很好,分享一个小游戏给大家吧~先介绍一下游戏规则:1、点击play后,游戏会提供4中不同的昆虫供玩家进行选择,这四种昆虫分别为:蟑螂、蛛蛛、蚊子和苍蝇。2、当玩家选择完昆虫后,游戏开始3、游戏会随机的生成玩家选择的昆虫到电脑屏幕,玩家利用鼠标点击到则得一分......
  • 【题解】Luogu[P8818] CSP-S 2022 策略游戏
    一道简单区间rmq分类讨论题,考场上最后5分钟想出来,没写出来,退役了……给定两个序列\(A_{1},\dots,A_{n}\);\(B_1,\dots,B_n\)规定\(C_{i,j}=A_i\timesB_i\)。题目说小L和小Q必定选择最优策略,而小L先选,小Q后选,小L要使得\(C_{i,j}\)尽可能大,小Q要使得\(C_{i,j}\)......
  • 550. 游戏玩法分析 IV
    【题目】Table:Activity+--------------+---------+|ColumnName |Type   |+--------------+---------+|player_id   |int    ||device_id   |int    ||event_date  |date   ||games_played|int    |+--------------+---------+......
  • 游戏APP用户行为分析
    游戏APP用户行为流程:数据导入install_table=pd.read_excel('./Data/游戏APP安装与注册信息.xlsx',sheet_name='安装信息')register_table=pd.read_excel('./Data/游戏APP安装与注册信息.xlsx',sheet_name='注册信息')数据概况print("安装信息:")print(install_......
  • 1218:取石子游戏
     #include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;booljs(inta,intb){if(a<b)swap(a,b);if(a%b==0)returntrue;for(intk=a/b;k>=1;k--)if(!js((a-b*k),b))returntrue;ret......
  • 跳跃游戏V
    给你一个整数数组arr和一个整数darr存储着一些柱子的高度,整数d为你能跳的最远距离,可以选择往左跳和往右跳除此以外,跳跃途径中只能有更低的柱子存在你可以选择数组的任意下标开始跳跃,请你返回你最多可以访问多少个下标1.排序+动态规划classSolution{public: intmaxJu......
  • 跳跃游戏IV
    从0位置跳到末位置,每次可以往左跳、往右跳一格,或跳到有与该位置相同数值的地方,求最小跳跃次数1.广度优先搜索+哈希预处理+动态规划classSolution{public:vector<int>dp;//dp[i]表示到达i位置最小操作数intminJumps(vector<int>&arr){intn=arr.size......