sprawdzenie czy gracz stoi w danym punkcie na mapie pygame

0

Jak zrobić że jak wejde na dany punkt x,y na mapie bp napisz się 1 na chacie (wiem jak napisać ale nie wiem jak sprawdzić czy jest na danym punkcie
:})

1

Współrzędne są liczone od lewego górnego rogu okna. Nie wiem czym wchodzisz, ale jeżeli gracz jest obiektem Rect, to możesz pobrać z niego takie atrybuty:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

Robisz drugi temat o pygame, więc dodam. Jak chcesz pomocy, to wrzuć swój kod.

0

@szafran98:
import pygame
import sys
import random

drewno = 0

pygame.init()

#tworzenie okna
okno = pygame.display.set_mode((1920, 1080))

#nazwa
pygame.display.set_caption("Survival RPG")

#grafiky
icon = pygame.image.load("assets/ikona.png")
gracz = pygame.image.load("sur/postac.png")
krzak = pygame.image.load("sur/kamień.png")
drzewo = pygame.image.load("sur/drzewa.png")
drzewo11 = pygame.image.load("sur/drzewo1.png")
tlo = pygame.image.load('sur/mapa sur.png')

#ikna gry
pygame.display.set_icon(icon)

graczX = random.randint(200,1600)
graczY = random.randint(200,900)
speadX = 0
speadY = 0

krzakX = 340
krzakY = 110

drzewoX = 540
drzewoY = 110

drzewo1X = 800
drzewo1Y = 110

x1 = random.randint(200,1700)
y1 = random.randint(200,860)
x2 = random.randint(200,1700)
y2 = random.randint(200,860)
x3 = random.randint(200,1700)
y3 = random.randint(200,860)
x4 = random.randint(200,1700)
y4 = random.randint(200,860)
x5 = random.randint(200,1700)
y5 = random.randint(200,860)
x6 = random.randint(200,1700)
y6 = random.randint(200,860)
y7 = random.randint(200,1700)
x7 = random.randint(200,860)
x8 = random.randint(200,1700)
y8 = random.randint(200,860)
x9 = random.randint(200,1700)
y9 = random.randint(100,860)
x10 = random.randint(200,1700)
y10 = random.randint(200,860)
x11 = random.randint(200,1700)
y11 = random.randint(200,860)
x12 = random.randint(200,1700)
y12 = random.randint(200,860)
x13 = random.randint(200,1700)
y13 = random.randint(200,860)
x14 = random.randint(200,1700)
y14 = random.randint(200,860)
x15 = random.randint(200,1700)
y15 = random.randint(200,860)
x16 = random.randint(200,1700)
y16 = random.randint(200,860)
x17 = random.randint(200,1700)
y17 = random.randint(200,860)
x18 = random.randint(200,1700)
y18 = random.randint(200,860)
x19 = random.randint(200,1700)
y19 = random.randint(200,860)
x20 = random.randint(200,1700)
y20 = random.randint(200,860)
x21 = random.randint(200,1700)
y21 = random.randint(200,860)
x22 = random.randint(200,1700)
y22 = random.randint(200,860)
x23 = random.randint(200,1700)
y23 = random.randint(200,860)
x24 = random.randint(200,1700)
y24 = random.randint(200,860)
x25 = random.randint(200,1700)
y25 = random.randint(200,860)

def gracz1(x, y):

okno.blit(gracz, (x, y))

xd1 = random.randint(100,1700)
yd1 = random.randint(100,860)
xd2 = random.randint(100,1700)
yd2 = random.randint(100,860)
xd3 = random.randint(100,1700)
yd3 = random.randint(100,860)
xd4 = random.randint(100,1700)
yd4 = random.randint(100,860)
xd5 = random.randint(100,1700)
yd5 = random.randint(100,860)
xd6 = random.randint(100,1700)
yd6 = random.randint(100,860)
yd7 = random.randint(100,1700)
xd7 = random.randint(100,860)
xd8 = random.randint(100,1700)
yd8 = random.randint(100,860)
xd9 = random.randint(100,1700)
yd9 = random.randint(100,860)
xd10 = random.randint(100,1700)
yd10 = random.randint(100,860)
xd11 = random.randint(100,1700)
yd11 = random.randint(100,860)
xd12 = random.randint(100,1700)
yd12 = random.randint(100,860)
xd13 = random.randint(100,1700)
yd13 = random.randint(100,860)
xd14 = random.randint(100,1700)
yd14 = random.randint(100,860)
xd15 = random.randint(100,1700)
yd15 = random.randint(100,860)
xd16 = random.randint(100,1700)
yd16 = random.randint(100,860)
xd17 = random.randint(100,1700)
yd17 = random.randint(100,860)

def krzak1(x, y):
okno.blit(krzak, (x1, y1))
okno.blit(krzak, (x2, y2))
okno.blit(krzak, (x3, y3))
okno.blit(krzak, (x4, y4))
okno.blit(krzak, (x5, y5))
okno.blit(krzak, (x6, y6))
okno.blit(krzak, (x7, y7))
okno.blit(krzak, (x8, y8))
okno.blit(krzak, (x9, y9))
okno.blit(krzak, (x10, y10))
okno.blit(krzak, (x11, y11))
okno.blit(krzak, (x12, y12))
okno.blit(krzak, (x13, y13))
okno.blit(krzak, (x14, y14))
okno.blit(krzak, (x15, y15))
okno.blit(krzak, (x16, y16))
okno.blit(krzak, (x17, y17))
okno.blit(krzak, (x18, y18))
okno.blit(krzak, (x19, y19))
okno.blit(krzak, (x20, y20))
okno.blit(krzak, (x21, y21))
okno.blit(krzak, (x22, y22))
okno.blit(krzak, (x23, y23))
okno.blit(krzak, (x24, y24))
okno.blit(krzak, (x24, y25))

nx1 = random.randint(200,1700)
ny1 = random.randint(200,860)
nx2 = random.randint(200,1700)
ny2 = random.randint(200,860)
nx3 = random.randint(200,1700)
ny3 = random.randint(200,860)
nx4 = random.randint(200,1700)
ny4 = random.randint(200,860)
nx5 = random.randint(200,1700)
ny5 = random.randint(200,860)
nx6 = random.randint(200,1700)
ny6 = random.randint(200,860)
ny7 = random.randint(200,1700)
nx7 = random.randint(200,860)
nx8 = random.randint(200,1700)
ny8 = random.randint(200,860)
nx9 = random.randint(200,1700)
ny9 = random.randint(100,860)
nx10 = random.randint(200,1700)
ny10 = random.randint(200,860)
nx11 = random.randint(200,1700)
ny11 = random.randint(200,860)
nx12 = random.randint(200,1700)
ny12 = random.randint(200,860)
nx13 = random.randint(200,1700)
ny13 = random.randint(200,860)
nx14 = random.randint(200,1700)
ny14 = random.randint(200,860)
nx15 = random.randint(200,1700)
ny15 = random.randint(200,860)
nx16 = random.randint(200,1700)
ny16 = random.randint(200,860)

def drzewo2(x, y):
okno.blit(drzewo11, (nx1, ny1))
okno.blit(drzewo11, (nx2, ny2))
okno.blit(drzewo11, (nx3, ny3))
okno.blit(drzewo11, (nx4, ny4))
okno.blit(drzewo11, (nx5, ny5))
okno.blit(drzewo11, (nx6, ny6))
okno.blit(drzewo11, (nx7, ny7))
okno.blit(drzewo11, (nx8, ny8))
okno.blit(drzewo11, (nx9, ny9))
okno.blit(drzewo11, (nx10, ny10))
okno.blit(drzewo11, (nx11, ny11))
okno.blit(drzewo11, (nx12, ny12))
okno.blit(drzewo11, (nx13, ny13))
okno.blit(drzewo11, (nx14, ny14))
okno.blit(drzewo11, (nx15, ny15))
okno.blit(drzewo11, (nx16, ny16))

def drzewo1(x, y):
okno.blit(drzewo, (xd1, yd1))
okno.blit(drzewo, (xd2, yd2))
okno.blit(drzewo, (xd3, yd3))
okno.blit(drzewo, (xd4, yd4))
okno.blit(drzewo, (xd5, yd5))
okno.blit(drzewo, (xd6, yd6))
okno.blit(drzewo, (xd7, yd7))
okno.blit(drzewo, (xd8, yd8))
okno.blit(drzewo, (xd9, yd9))
okno.blit(drzewo, (xd10, yd10))
okno.blit(drzewo, (xd11, yd11))
okno.blit(drzewo, (xd12, yd12))
okno.blit(drzewo, (xd13, yd13))
okno.blit(drzewo, (xd14, yd14))
okno.blit(drzewo, (xd15, yd15))
okno.blit(drzewo, (xd16, yd16))
okno.blit(drzewo, (xd17, yd17))

while True:

okno.blit(tlo, (0, 0))

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit(0)
    if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
        sys.exit(0)

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            speadX = -1
        if event.key == pygame.K_RIGHT:
            speadX = 1
        if event.key == pygame.K_UP:
            speadY = -1
        if event.key == pygame.K_DOWN:
            speadY = 1
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            speadX = 0
        if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            speadY = 0

graczX +=  speadX
graczY +=  speadY



zycia = 0

if  graczX <= 100:
    zycia =+ 1
    graczX = 120
    print(zycia)
elif  graczX >= 1700:
    zycia =+ 1
    graczX = 1680
    print(zycia)
if  graczY <= 20:
    zycia =+ 1
    graczY = 40
    print(zycia)
elif  graczY > 910:
    zycia =+ 1
    graczY =+ 840
    print(zycia)

if zycia == 1:
    quit(okno)


gracz1(graczX, graczY)

krzak1(krzakX, krzakY)

drzewo1(drzewoX, drzewoY)

drzewo2(drzewo1X, drzewo1Y)


pygame.display.update()
0

@szafran98: Wysłałem ale nie wiem czy to widzisz bo coś bot że coś zle napisałem i nie wiem
czy został wysłany

0

@szafran98: jak chcesz moge dac pliki do gry grafiki/mapa bo nie odpalisz gry

0

@kamilwr2k17: ok i dzięki za pomoc

1

Tak to wygląda mniej więcej, a na obecną chwilę raczej mniej, bo twój gracz ma tylko dwie współrzędne, więc de facto przedstawia linie, a nie figurę płaską.
screenshot-20210405201322.png

W drugim temacie pisałeś o animacji, ale patrząc na kod, który wkleiłeś, to na twoim miejscu na obecną chwilę dałbym sobie spokój, bo tylko się zniechęcisz. Najpierw musisz ogarnąć solidnie podstawy.

Ja od siebie polecam tą playliste )

0

@szafran98: a jest jakaś możliwość bez zmiany kodu wykryć kolizje

0

Bez zmiany nie. Przecież musisz napisać jak mają być rozpoznawane kolizje. Wszystko rozchodzi się o współrzędne na ekranie. Musisz oglądnąć jakiś tutorial albo poduczyć się czystego Pythona bez Pygame, a potem z pomocą dokumentacji wszystko stanie się jasne.

3
kamilwr2k17 napisał(a):

@szafran98: a jest jakaś możliwość bez zmiany kodu wykryć kolizje

Zmiana kodu jest konieczna nie tylko do wykrywania kolizji. Powinieneś swoje obiekty, albo chociaż ich współrzędne wprowadzić do list oraz rysować i obsługiwać je z wykorzystaniem pętli.

0

@szafran98: mam już lepszy kod i wykrywanie kolizji a wiesz może jak teraz zrobić animacje chodzenia i wstania w miejscu
tu masz kod

from random import randint
import sys

drewnoptk = 0
twodrewno = 0
kamiemptk = 0
twokamien = 0
czas = 1000
czas1 = 999999999999
bn = 1
kp = 1
sc = 0
sck = 0
wys = 1280
szy = 720
sie = 0
kilof = 0

icon = pygame.image.load("assets/ikona.png")
pygame.display.set_icon(icon)

pygame.display.set_caption('Survival RPG')

pygame.init()
okno = pygame.display.set_mode((wys, szy))


class Player:
   def __init__(self):
       self.x_cord = 0
       self.y_cord = 0
       self.image = pygame.image.load("sur/postac.png")
       self.width = self.image.get_width()
       self.height = self.image.get_height()
       self.speed = 4
       self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def tick(self, keys):
       if keys[pygame.K_w]:
           self.y_cord -= self.speed
       if keys[pygame.K_a]:
           self.x_cord -= self.speed
       if keys[pygame.K_s]:
           self.y_cord += self.speed
       if keys[pygame.K_d]:
           self.x_cord += self.speed
       if keys[pygame.K_ESCAPE]:
           sys.exit()
       if keys[pygame.K_1]:
           global sie
           global kilof
           sie = 1
           kilof = 0
           print("mam siekiere")
           print(sie)
           print(kilof)
       if keys[pygame.K_2]:
           sie = 0
           kilof = 1
           print("mam kilof")
           print(sie)
           print(kilof)
       if keys[pygame.K_n]:
           global twodrewno
           global drewnoptk
           global bn
           global czas1
           if drewnoptk > 10:
               twodrewno += 1
               drewnoptk -= 10
               bn += 1
               czas1 = 1500
               print("-------")
               print(twodrewno)
               print("-------")
       if keys[pygame.K_m]:
           global twokamien
           global kamiemptk
           global czas
           if kamiemptk > 1:
               kamiemptk -= 1
               twokamien += 1
               print("-------")
               print(twokamien)
               print("-------")
               print(kamiemptk)
               czas -= 200


       if keys[pygame.K_SPACE]:
           global sck
           global sc
           sc += 1
           sck += 1
           print(sc)
           print(sck)







       self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def draw(self):
       okno.blit(self.image, (self.x_cord, self.y_cord))


class drewienko:
   def __init__(self):
       self.x_cord = randint(0, 1280)
       self.y_cord = randint(0, 720)
       self.image = pygame.image.load("sur/drzewa.png")
       self.width = self.image.get_width()
       self.height = self.image.get_height()
       self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def tick(self):
       self.hitbox = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def draw(self):
       okno.blit(self.image, (self.x_cord, self.y_cord))


class kamyczek:
   def __init__(self):
       self.x_cord = randint(0, 1280)
       self.y_cord = randint(0, 720)
       self.image = pygame.image.load("sur/kamień.png")
       self.width = self.image.get_width()
       self.height = self.image.get_height()
       self.hitbox1 = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def tick(self):
       self.hitbox1 = pygame.Rect(self.x_cord, self.y_cord, self.width, self.height)

   def draw(self):
       okno.blit(self.image, (self.x_cord, self.y_cord))






def main():
   run = True
   player = Player()
   clock = 0
   clock1 = 0
   dre = []
   kam = []
   background = pygame.image.load("sur/mapa.png")
   while run:
       global czas
       global czas1
       clock += pygame.time.Clock().tick(60) / czas
       clock1 += pygame.time.Clock().tick(60) / czas1
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               run = False
       keys = pygame.key.get_pressed()
       if clock >= 2:
           clock = 0
           dre.append(drewienko())
       if clock1 >= 4:
           clock1 = 0
           kam.append(kamyczek())



       player.tick(keys)
       for drewno in dre:
           drewno.tick()
       for kamien in kam:
           kamien.tick()
       global sie
       global kilof
       global sc
       global sck

       if sie == 1:
           if sc > 0:
               sc = 0
               sck = 0
               for drewno in dre:
                   global bn
                   global drewnoptk
                   if player.hitbox.colliderect(drewno.hitbox):
                       dre.remove(drewno)
                       drewnoptk += bn #ilosc dostawanego drewna
                       print("Drewno")
                       print(drewnoptk)
                       print("Drewno")
       if kilof == 1:
           if sck > 0:
               sc = 0
               sck = 0
               for kamien in kam:
                   global kp
                   global kamiemptk
                   if player.hitbox.colliderect(kamien.hitbox1):
                       kam.remove(kamien)
                       kamiemptk += kp #ilosc dostawanego drewna
                       print("kamien")
                       print(kamiemptk)
                       print("kamien")

       okno.blit(background, (0, 0))
       player.draw()
       for drewno in dre:
           drewno.draw()

       for kamien in kam:
           kamien.draw()
       pygame.display.update()




if __name__ == "__main__":
   main() ```
0

@Spine: a wiesz może jak zrobić animacje chodznia nowy kod masz na gurze

0

Najprościej w tym przypadku, jakby Twoja postać miała po jednej liście obrazków dla każdej animacji.

Musisz rozbudować metodę draw gracza, żeby wyświetlała odpowiedni obrazek z listy odpowiadającej obecnemu stanowi (chodzenie, stanie itd.). Najlepiej jak indeks obrazka z listy zmienia się co jakiś stały odstęp czasu. Więc musisz dodać timer, w którym odliczasz czas.

W Unity animacje mógłbyś wyklikać w edytorze i nie musiałbyś tego kodować w tak prymitywny sposób...

0

@Spine: a jak byś umiał zrobić coś takiego jak tak byś zrobił a bym przeanalizował i bym coś z tego wywnioskował
fajnie by było :} fajnie by było bo ja nie wiem jak nawet do tego się zabrać

0

@Spine: ??

1

Ja bym umiał i tysiące programistów już przez to przechodziło. Wnioskuj z wygooglowanych przykładów, albo w książkach...

Googluj: "pygame sprite animation".

Twoje pytania dotyczą podstaw, które zostały już opisane przez ludzi.

Powinieneś się uczyć z jakiegoś kompletnego kursu, krok po kroku. Bo właśnie tej całej otoczki Ci brakuje w Twojej edukacji. Swój własny projekt odłóż na później, kiedy załapiesz podstawy na podstawie jakiegoś projektu z kursu.

Niedawno została wydana książka o pygame: https://edu-sense.com/pl/produkty/koduj-w-pythonie-tworzymy-gre-przygodowa

1 użytkowników online, w tym zalogowanych: 0, gości: 1