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
:})
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.
@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()
@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
@szafran98: jak chcesz moge dac pliki do gry grafiki/mapa bo nie odpalisz gry
@kamilwr2k17: ok i dzięki za pomoc
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ą.
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 )
@szafran98: a jest jakaś możliwość bez zmiany kodu wykryć kolizje
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.
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.
@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() ```
@Spine: a wiesz może jak zrobić animacje chodznia nowy kod masz na gurze
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...
@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ć
@Spine: ??
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