1

Pygames でパックマン風のゲームを作っています。パックドットの代わりにキノコです。コードは正常に動作します。唯一の問題は、「ゴースト」を実装する方法がわからないことです。私はプログラミングに非常に慣れていないので、簡単にしてください。ありがとう!

これまでの私のコード(ゴーストだけでなく、すべてが機能します):

import pygame

# Define some colors
BLACK    = (   0,   0,   0)
WHITE    = ( 255, 255, 255)
GREEN    = (   0, 255,   0)
RED      = ( 255,   0,   0)
PATHS    = (204 ,155 , 120)
GRASSWALL= (69  , 201,  54)
Stone    = (204 , 204, 204)

pygame.init()

# Set the width and height of the screen [width, height]
size = (800, 500)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Darudernauts")

# Loop until the user clicks the close button.
done = False

# Used to manage how fast the screen updates
clock = pygame.time.Clock()

pygame.mixer.music.load('darude.mp3')
pygame.mixer.music.set_endevent(pygame.constants.USEREVENT)
pygame.mixer.music.play()

player_image = pygame.image.load("C:\Users\Mark\Documents\player.gif").convert()
shroom_image = pygame.image.load("C:\Users\Mark\Documents\shroom.gif").convert()

# Hide the mouse cursor
pygame.mouse.set_visible(0)
# Speed in pixels per frame
x_speed = 0
y_speed = 0
x = 350
y = 200

shroom_list_x = [150,150,150,150,150,150,150,150,150,150,600,600,600,600,600,600,600,600,600,600,200,250,300,350,400,450,500,550,  0, 50,100,650,700,750,  0, 50,100,650,700,750,200,250,300,350,400,450,500,550,300,350,400,450,250,250,250,250,250,250,500,500,500,500,500,500,350,400,350,400,400,-50]
shroom_list_y = [  0, 50,100,150,200,250,300,350,400,450,  0, 50,100,150,200,250,300,350,400,450, 50, 50, 50, 50, 50, 50, 50, 50,100,100,100,100,100,100,350,350,350,350,350,350,400,400,400,400,400,400,400,400,300,300,300,300,100,150,200,250,300,350,100,150,200,250,300,350,100,100,150,150,200,-50]

score = 0
# -------- Main Program Loop -----------
while not done:
    # --- Main event loop
    for event in pygame.event.get(): # User did something
        if event.type == pygame.QUIT: # If user clicked close
            done = True # Flag that we are done so we exit this loop

    move_horizontally = 0
    move_vertically = 0

    if event.type == pygame.KEYDOWN:
        # Figure out if it was an arrow key. If so
        # adjust speed.
        if event.key == pygame.K_LEFT:
            move_horizontally = -50
        if event.key == pygame.K_RIGHT:
            move_horizontally = 50
        if event.key == pygame.K_UP:
            move_vertically = -50
        if event.key == pygame.K_DOWN:
            move_vertically = 50
    # --- Game logic should go here
    #side tps
    if x < -50:
        x = 750
    if x > 800:
        x = -50
    #top/bot tps
    if y < -50:
        y = 450
    if y > 500:
        y = -50

    #midtop
    if x == 150 and y == 0:
        move_horizontally = 0#left

    if x == 600 and y == 0:
        move_horizontally = 0#right

    if x == 150 and y == 450:
        move_horizontally = 0#left

    if x == 600 and y == 450:
        move_horizontally = 0#right

    if x == 150 and y == 50:
        if move_horizontally < 0:
            move_horizontally = 0

    if x == 600 and y == 50:
        if move_horizontally > 0:
            move_horizontally = 0

    if x == 600 and y == 400:
        if move_horizontally > 0:
            move_horizontally = 0

    if x >= 200 and x <= 550 and y == 50:
        if move_vertically < 0:
            move_vertically = 0


    if x == 200 or x == 300 or x == 450 or x == 550:
        if y == 50:
            move_vertically = 0

    if x == 150:
        if y >= 0 and y <= 450:
            if y != 100 and y != 350:
                if move_horizontally < 0:
                    move_horizontally =0

    if x == 200 and y == 400:
        move_vertically = 0

    if x == 550 and y == 400:
        move_vertically = 0

    if x == 300 or x == 350 or x == 400 or x == 450:
        if y == 400:
            move_vertically = 0


    #topleft path
    if x >= 0 and x <= 100 and y == 100:
        move_vertically = 0
    #botright path
    if x >= 0 and x <= 100 and y == 350:
        move_vertically = 0
    #topright path
    if x >= 650 and x <= 800 and y == 100:
        move_vertically = 0
    #botright path
    if x >= 650 and x <= 800 and y == 350:
        move_vertically = 0

    if x == 150:
        if y == 150 or y == 200 or y == 250 or y == 300:
            move_horizontally = 0

    if x == 600:
        if y == 150 or y == 200 or y == 250 or y == 300:
            move_horizontally = 0

    if y == 100 and x == 150:
        if move_horizontally >= 0:
            move_horizontally = 0

    if y == 350 and x == 150:
        if move_horizontally >= 0:
            move_horizontally = 0

    if y == 100 and x == 600:
        if move_horizontally <= 0:
            move_horizontally = 0

    if y == 350 and x == 600:
        if move_horizontally <= 0:
            move_horizontally = 0

    if x == 250 and y == 400:
        if move_vertically > 0:
            move_vertically = 0

    if x == 500 and y == 400:
        if move_vertically > 0:
            move_vertically = 0

    if x == 250 and y == 350:
        move_horizontally = 0

    if x == 500 and y == 350:
        move_horizontally = 0

    if x < 0 or x > 800:
        move_vertically = 0

    if y < 0 or y == 500:
        move_horizontally = 0

    if y == 300:
        if x == 300 or x == 350 or x == 400 or x == 450:
            move_vertically = 0

    if y == 300 and x == 250:
        if move_horizontally < 0:
            move_horizontally = 0

    if y == 300 and x == 500:
        if move_horizontally > 0:
            move_horizontally = 0

    if x == 250 or x == 500:
        if y == 100 or y == 150 or y == 200 or y == 250:
            move_horizontally = 0

    if x == 350:
        if y == 100 or y == 150:
            if move_horizontally < 0:
                move_horizontally = 0

    if x == 400:
        if y == 100 or y == 150:
            if move_horizontally > 0:
                move_horizontally = 0

    if x == 350 and y == 200:
        if move_horizontally < 0:
            move_horizontally = 0
        elif move_vertically > 0:
            move_vertically = 0

    if x == 400 and y == 200:
        if move_horizontally > 0:
            move_horizontally = 0
        elif move_vertically > 0:
            move_vertically = 0

    x = x + move_horizontally
    y = y + move_vertically


    if score == 69:
        print "VICTORY!!! YOU'VE COLLECTED 69 MUSHROOMS!!!"

    # --- Drawing code should go here

    # First, clear the screen to white. Don't put other drawing commands
    # above this, or they will be erased with this command.
    screen.fill(Stone)

    pygame.draw.rect(screen,GRASSWALL,[0,0,150,100])#TOPLEFT
    pygame.draw.rect(screen,GRASSWALL,[0,150,150,200])#MIDLEFT
    pygame.draw.rect(screen,GRASSWALL,[0,400,150,100])#BOTLEFT

    pygame.draw.rect(screen,GRASSWALL,[650,0,150,100])#TOPRIGHT
    pygame.draw.rect(screen,GRASSWALL,[650,150,150,200])#MIDRIGHT
    pygame.draw.rect(screen,GRASSWALL,[650,400,150,100])#BOTRIGHT

    pygame.draw.rect(screen,GRASSWALL,[200,0,400,50])#MIDTOP
    pygame.draw.rect(screen,GRASSWALL,[200,450,400,50])#MIDBOT

    pygame.draw.rect(screen,GRASSWALL,[200,100,50,300])#JUNGLEFT
    pygame.draw.rect(screen,GRASSWALL,[550,100,50,300])#JUNGRIGHT
    pygame.draw.rect(screen,GRASSWALL,[300,350,200,50])#JUNGBOT

    pygame.draw.rect(screen,GRASSWALL,[300,250,200,50])#BASEBOT
    pygame.draw.rect(screen,GRASSWALL,[300,100,50,150])#BASELEFT
    pygame.draw.rect(screen,GRASSWALL,[450,100,50,150])#BASERIGHT

    player_image = pygame.image.load("C:\Users\Mark\Documents\player.gif").convert()
    shroom_image = pygame.image.load("C:\Users\Mark\Documents\shroom.gif").convert()
    # --- Go ahead and update the screen with what we've drawn.
        # Get the current mouse position. This returns the position
    # as a list of two numbers.

    x += x_speed
    y += y_speed

##    print x
##    print y

    # Copy image to screen:
    screen.blit(player_image, [x, y])

    for shrm in range(0, len(shroom_list_x)-1):
        if x == shroom_list_x[shrm] and y == shroom_list_y[shrm]:
            shroom_list_x.pop(shrm)
            shroom_list_y.pop(shrm)
            score += 1
            print "SCORE:",score,"mushrooms"

        screen.blit(shroom_image, [shroom_list_x[shrm], shroom_list_y[shrm]])
    pygame.display.flip()

    # --- Limit to 7 frames per second
    clock.tick(10)

# Close the window and quit.
# If you forget this line, the program will 'hang'
# on exit if running from IDLE.
pygame.quit()
4

1 に答える 1

0

あなたの質問は、ゲーム開発サイト [ https://gamedev.stackexchange.com/]に向けられているようですが、いくつかアドバイスをします。非常に単純な敵の場合、プレイヤー オブジェクトと衝突するとゲーム オーバーを引き起こすオブジェクトとして「ゴースト」を作成するのが最善です。AI に関して言えば、「ゴースト」が壁に衝突するまで従う方向を割り当てるなどの簡単なことから始めて、ランダムな整数を呼び出してその新しい方向を決定することができます。シンプルで要点。ただし、前に述べたように、より適切な回答については、ゲーム開発または他の場所にいる人に尋ねてください。また、このサイトでは、概念ではなくプログラミング エラーやバグを扱います。幸運を!

于 2015-01-17T01:23:31.983 に答える