Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当矩形出现时,如何使其重新出现在屏幕的不同部分';碰撞_Python_Pygame - Fatal编程技术网

Python 当矩形出现时,如何使其重新出现在屏幕的不同部分';碰撞

Python 当矩形出现时,如何使其重新出现在屏幕的不同部分';碰撞,python,pygame,Python,Pygame,我正在制作一个简单的蛇游戏,它所要做的就是显示一个计时器(蛇持续了多长时间),如果蛇碰到任何白色(侧面或自身),则在屏幕上显示一个游戏。我还必须加入一个积分系统,当蛇吃东西的时候。食物是紫色的,我创建了一行代码,上面写着,当“蛇”与紫色碰撞时,将foodx和foody设置到一个新的位置,但不是这样做,而是创建了5个以上的正方形食物,直到系统崩溃。。。有什么帮助吗 这是我的密码 食物变量-第36行, 食物碰撞-第282行, 食物抽取-297(或者只需按住ctrl+F键并键入食物,它不会重复出现太多

我正在制作一个简单的蛇游戏,它所要做的就是显示一个计时器(蛇持续了多长时间),如果蛇碰到任何白色(侧面或自身),则在屏幕上显示一个游戏。我还必须加入一个积分系统,当蛇吃东西的时候。食物是紫色的,我创建了一行代码,上面写着,当“蛇”与紫色碰撞时,将foodx和foody设置到一个新的位置,但不是这样做,而是创建了5个以上的正方形食物,直到系统崩溃。。。有什么帮助吗

这是我的密码

食物变量-第36行, 食物碰撞-第282行, 食物抽取-297(或者只需按住ctrl+F键并键入食物,它不会重复出现太多)

#2019年10月14日
#简单的蛇游戏
#导入变量
导入pygame
导入系统
导入时间
随机输入
pygame.init()
#颜色
白色=(255255)
黑色=(0,0,0)
绿色=(0255,0)
红色=(255,0,0)
蓝色=(0,0255)
黄色=(255255,0)
卡德蓝=(100149237)
SPRINGGREEN=(0255127)
紫色=(154136180)
#屏幕变量
屏幕X=800
屏幕Y=600
屏幕大小=(屏幕X、屏幕Y)
screen=pygame.display.set_模式((屏幕大小),0)
screenW=screen.get_width()#获取屏幕宽度和高度
screenH=屏幕。获取高度()
screenCenterX=int(screenW/2)#获取屏幕中心
屏幕中心Y=int(屏幕H/2)
pygame.display.set_标题(“哈贾尔的蛇游戏”)
#苹果(食物点)变量
foodX=random.randint(50700)
foodY=random.randint(50600)
foodW=2
foodH=2
p1_分数=0
#计时器文本
timertite=pygame.font.SysFont(“控制台”,30)
#设置时钟以控制主循环每秒的帧数
clock=pygame.time.clock()
#碰撞变量
碰撞X=0
碰撞Y=0
CollisionColor=None
屏幕填充(黑色)
pygame.display.update()
clock=pygame.time.clock()
#蛇变量
蛇头X=100
蛇头=300
蛇头W=10
蛇头h=10
蛇头dx=0
蛇头=0
#计时器/FPS
startTime=time.perf_计数器()
elapsedTime=0
#将循环设置为false
简介=正确
级别=错误
游戏=错误
最终=错误
#循环
而简介:
FPS=60
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
简介=错误
级别=错误
游戏=错误
最终=错误
#用于在开始动画中单独移动蛇的代码
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_c:#当按下c时,简介关闭并打开关卡
简介=错误
级别=真
pygame.display.update()
elif event.key==pygame.K_q:
sys.exit()
elif intro==真:
蛇头dx=1
smnakeHeadDY=0
#使蛇自己转弯
如果蛇头X>770:
蛇头dx=0
蛇头=1
如果蛇头>550:
蛇头dx=-1
蛇头=0
如果蛇头X<20:
蛇头dx=0
蛇头=-1
#设置标题和说明的文本
titleFont=pygame.font.SysFont(“arial”,30)
指令1font=pygame.font.SysFont(“arial”,27)
#创建将在屏幕上显示的文本
title=titleFont.render(“蛇游戏”,真,白色)
指令1=指令1font.render(“指令:”,真,白色)
指令2=指令1font.render(“-使用箭头键移动蛇”,真,白色)
指令3=指令1font.render(“-不要撞到墙或蛇!”,True,白色)
instructions4=instructions1Font.render(“-尝试收集食物以提高分数。”,True,白色)
指令5=指令1font.render(“级别:”,真,白色)
指令6=指令1Font.render(“-简单,节奏慢,点正常。”,真,白色)
指令7=指令1font.render(“-中等,节奏稍快,点数加倍。”,真,白色)
指令8=指令1font.render(“-硬,超快,点是四倍的”,真,白色)
指令9=指令1Font.render(“按“c”继续选择级别”,为真,为白色)
#将文本快速显示在屏幕上
屏幕。blit(标题,(200350))
屏幕blit(说明1,(200370))
屏幕blit(说明2,(200385))
屏幕blit(说明3,(200400))
屏幕blit(说明4,(200415))
屏幕blit(说明5,(200438))
屏幕blit(说明6,(200453))
屏幕blit(说明7,(200468))
屏幕blit(说明8,(200483))
屏幕blit(说明9,(200519))
#蛇行
蛇头x=蛇头x+蛇头dx
蛇头=蛇头+蛇头
#画蛇
pygame.draw.rect(屏幕,白色,(蛇头X,蛇头Y,蛇头W,蛇头H),0)
pygame.display.update()
而级别:
时钟滴答声(FPS)
屏幕填充(黑色)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
级别=错误
#用于在开始动画中单独移动蛇的代码
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K#e:#当e是简单级别时开始
FPS=60
级别=错误
游戏=真实
pygame.display.update()
如果event.key==pygame.K#m:#当m为中级时开始
FPS=300
游戏=真实
级别=错误
pygame.display.update()
如果event.key==pygame.K_h:#h为硬级别时开始
pygame.display.update()
FPS=550
游戏=真实
屏幕填充(黑色)
级别=错误
屏幕填充(黑色)
elif event.key==pygame.K_q:
sys.exit()
#更新屏幕
pygame.display.update()
# October 14, 2019
# Simple Snake Game

# importing variables
import pygame
import sys
import time
import random

pygame.init()

# colours
WHITE = (255,255,255)
BLACK = (0, 0, 0)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
YELLOW = (255,255,0)
CADETBLUE = (100,149,237)
SPRINGGREEN = (0,255,127)
PURPLE = (154, 136, 180)

# screen variables
screenX = 800
screenY = 600
screenSize = (screenX, screenY)
screen = pygame.display.set_mode((screenSize), 0)
screenW = screen.get_width() # gets screen width and height
screenH = screen.get_height()
screenCenterX = int(screenW/2) # gets center of screen
screenCenterY = int(screenH/2)
pygame.display.set_caption("Hajar's Snake Game")

# apple (food point) variable
foodX = random.randint(50,700)
foodY = random.randint(50,600)
foodW = 2
foodH = 2
p1_score = 0

# timer text
timerTitle = pygame.font.SysFont("Consolas", 30)

#set up clock to control frames per second of main loop
clock = pygame.time.Clock()

# crash collision variables
collisionX = 0
collisionY = 0
collisionColour = None

screen.fill(BLACK)
pygame.display.update()
clock = pygame.time.Clock()

# snake variables
snakeHeadX = 100
snakeHeadY = 300
snakeHeadW = 10
snakeHeadH = 10
snakeHeadDX = 0
snakeHeadDY = 0

# timer / FPS
startTime = time.perf_counter()
elapsedTime = 0

# set loops to false
intro = True
level = False
game = False
final = False

# loops
while intro:
    FPS = 60
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            intro = False
            level = False
            game = False
            final = False
            # code for moving snake by itself for the start animation
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_c: # when c is pressed the intro closes and opens the levels up
                intro = False
                level = True
                pygame.display.update()
            elif event.key == pygame.K_q:
                sys.exit()       
        elif intro == True:
            snakeHeadDX = 1
            smnakeHeadDY = 0
     # makes the snake turn by itself       
    if snakeHeadX > 770:
        snakeHeadDX = 0
        snakeHeadDY = 1
    if snakeHeadY > 550:
        snakeHeadDX = -1
        snakeHeadDY = 0
    if snakeHeadX < 20:
        snakeHeadDX = 0
        snakeHeadDY = -1

    # setting the text for the title and instructions
    titleFont = pygame.font.SysFont("arial", 30)
    instructions1Font = pygame.font.SysFont("arial", 27)
    # creates the texts that will be blitted onto the screen
    title = titleFont.render("The Snake Game", True, WHITE)
    instructions1 = instructions1Font.render("Instructions:", True, WHITE)
    instructions2 = instructions1Font.render("- use arrow keys to move the snake", True, WHITE)
    instructions3 = instructions1Font.render("- do not hit the walls or your snake!", True, WHITE)
    instructions4 = instructions1Font.render("- try to collect food to up your score.", True, WHITE)
    instructions5 = instructions1Font.render("Levels:", True, WHITE)
    instructions6 = instructions1Font.render("- easy, slow-paced, points are normal.", True, WHITE)
    instructions7 = instructions1Font.render("- medium, slightly more paced, points are doubled.", True, WHITE)
    instructions8 = instructions1Font.render("- hard, super fast, points are quadrupled", True, WHITE)
    instructions9 = instructions1Font.render("press 'c' to continue to choose level", True, WHITE)


    # blits the texts onto screen
    screen.blit(title, (200,350))
    screen.blit(instructions1, (200,370))
    screen.blit(instructions2, (200,385))
    screen.blit(instructions3, (200,400))
    screen.blit(instructions4, (200,415))
    screen.blit(instructions5, (200,438))
    screen.blit(instructions6, (200,453))
    screen.blit(instructions7, (200,468))
    screen.blit(instructions8, (200,483))
    screen.blit(instructions9, (200,519))

    # moves the snake
    snakeHeadX = snakeHeadX + snakeHeadDX
    snakeHeadY = snakeHeadY + snakeHeadDY

    # draws the snake      
    pygame.draw.rect(screen, WHITE,(snakeHeadX, snakeHeadY, snakeHeadW, snakeHeadH), 0)
    pygame.display.update()

while level:
    clock.tick(FPS)
    screen.fill(BLACK)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            level = False
            # code for moving snake by itself for the start animation
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_e: # when e is the easy level starts
                FPS = 60
                level = False
                game = True
                pygame.display.update()
            if event.key == pygame.K_m: # when m is the medium level starts
                FPS = 300
                game = True
                level = False
                pygame.display.update()
            if event.key == pygame.K_h: # when h is the hard level starts
                pygame.display.update()
                FPS = 550
                game = True
                screen.fill(BLACK)
                level = False
                screen.fill(BLACK)
            elif event.key == pygame.K_q:
                sys.exit()  
    # updates the screen
    pygame.display.update()
    # creates the font/size for the levels
    levelTitleFont = pygame.font.SysFont("arial", 30)
    levelFont = pygame.font.SysFont("arial", 27)

    # creates the text content
    levelTitle = levelTitleFont.render("Level Menu:", True, RED)
    easyLevel = levelFont.render("- press 'e' for easy.", True, RED)
    mediumLevel = levelFont.render("- press 'm' for medium.", True, RED)
    hardLevel = levelFont.render("- press 'h' for hard.", True, RED)

    # blits the text onto the screen 
    screen.blit(levelTitle, (100,300))
    screen.blit(easyLevel, (200,390))
    screen.blit(mediumLevel, (200,410))
    screen.blit(hardLevel, (200,430))

    # updates the screen
    pygame.display.update()

while game:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            intro = False
            level = False
            game = False
            final = False
            # code for moving keys
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT and snakeHeadDX != 1:
                snakeHeadDX = -1
                snakeHeadDY = 0
            elif event.key == pygame.K_RIGHT and snakeHeadDX != -1:
                snakeHeadDX = 1
                snakeHeadDY = 0
            elif event.key == pygame.K_UP and snakeHeadDY != 1:
                snakeHeadDX = 0
                snakeHeadDY = -1
            elif event.key == pygame.K_DOWN and snakeHeadDY != -1:
                snakeHeadDX = 0
                snakeHeadDY = 1
            elif event.key == pygame.K_q:
                sys.exit()
            # code for detecting if snake has hit screen
    # right
    if snakeHeadX > screenW - snakeHeadW:
        snakeHeadX = screenCenterX
        snakeHeadY = screenCenterY
        screen.fill(BLACK)
        snakeHeadDX = 0
        snakeHeadDY = 0
    # left
    if snakeHeadX < 0:
        snakeHeadX = screenCenterX
        snakeHeadY = screenCenterY
        screen.fill(BLACK)
        snakeHeadDX = 0
        snakeHeadDY = 0
    # up
    if snakeHeadY < 0:
        snakeHeadX = screenCenterX
        snakeHeadY = screenCenterY
        screen.fill(BLACK)
        snakeHeadDX = 0
        snakeHeadDY = 0
    # down
    if snakeHeadY > screenH - snakeHeadW:
        snakeHeadX = screenCenterX
        snakeHeadY = screenCenterY
        screen.fill(BLACK)
        snakeHeadDX = 0
        snakeHeadDY = 0

    # checking for right side of snake head
    if snakeHeadDX > 0:
            collisionX = snakeHeadX + snakeHeadW + 1
            collisionY = snakeHeadY + snakeHeadH // 2
            collisionColour = screen.get_at((collisionX,collisionY))
    # checking for left side of snake head
    elif snakeHeadDX < 0:
            collisionX = snakeHeadX - 1
            collisionY = snakeHeadY + snakeHeadH // 2
            collisionColour = screen.get_at((collisionX,collisionY))
    # checking for bottom side of snake head
    elif snakeHeadDY > 0:
            collisionX = snakeHeadX + snakeHeadW // 2
            collisionY = snakeHeadY + snakeHeadH + 1
            collisionColour = screen.get_at((collisionX,collisionY))
    # checking for top side of snake head
    elif snakeHeadDY < 0:
            collisionX = snakeHeadX + snakeHeadW // 2
            collisionY = snakeHeadY - 1
            collisionColour = screen.get_at((collisionX,collisionY))

    # resets when the snake collides into itself   
    if collisionColour == RED:
            screen.fill(BLACK)
            snakeHeadX = screenCenterX
            snakeHeadY = screenCenterY
            snakeHeadDX = 0
            snakeHeadDY = 0

    if collisionColour == WHITE:
            screen.fill(BLACK)
            snakeHeadX = screenCenterX
            snakeHeadY = screenCenterY
            snakeHeadDX = 0
            snakeHeadDY = 0
            elapsedTime = int(time.perf_counter() - startTime)

    # when the snake eats food
    if collisionColour == PURPLE:
        foodX = random.randint(50,700)
        foodY = random.randint(50,650)
        p1_score += 1

    # moves the snake
    snakeHeadX = snakeHeadX + snakeHeadDX
    snakeHeadY = snakeHeadY + snakeHeadDY

    #speed
    clock.tick(FPS)

    # draws the snake      
    pygame.draw.rect(screen, WHITE,(snakeHeadX, snakeHeadY, snakeHeadW, snakeHeadH), 0)
    pygame.draw.rect(screen, PURPLE,(foodX, foodY, foodW, foodH), 0)
    pygame.display.update()

while final:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            main = False
            final = False

    ## put code to display score and message here
    ## put code to ask user to play again here


# quit pygame and exit the program (i.e. close everything down)
pygame.quit()
sys.exit()
# when the snake eats food
if collisionColour == PURPLE:
    print("Nom Nom Nom")                # <-- HERE
    # Move the food
    foodX = random.randint(50,700)
    foodY = random.randint(50,650)
    p1_score += 1
# when the snake eats food
if collisionColour == PURPLE:
    print("Nom Nom Nom")
    # Erase the current food
    pygame.draw.rect(screen, BLACK,(foodX, foodY, foodW, foodH), 0)
    # Move the food
    foodX = random.randint(50,700)
    foodY = random.randint(50,650)
    p1_score += 1