[ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
[Python] ovladanie mysou

Registrovaný: 23.12.08
Prihlásený: 18.08.17
Príspevky: 515
Témy: 17 | 17
Bydlisko: Levice
NapísalOffline : 10.01.2015 20:19 | [Python] ovladanie mysou

Jedna sa o hru, ovladanie cez sipky ide ale ked som to skusal prerobit na tahanie mysou tak my to nefungovalo. Ak by sa nasiel niekto kto by to vedel bol by som vdacny.
Kód:
import tkinter

class Hrac:
    def __init__(self, r, s):
        self.r = r
        self.s = s

    def kresli(self, g, vel, farba):
        self.g = g
        self.vel = vel
        x,y = self.s*vel, self.r*vel
        self.id = g.create_oval(x+4,y+4,x+vel-4,y+vel-4,fill=farba)

    def posun(self, dr, ds):
        self.r += dr
        self.s += ds
        self.g.move(self.id, ds*self.vel, dr*self.vel)

class Box:
    def __init__(self, r, s):
        self.r = r
        self.s = s

    def kresli(self, g, vel, farba):
        self.g = g
        self.vel = vel
        x,y = self.s*vel, self.r*vel
        self.id = g.create_rectangle(x+4,y+4,x+vel-4,y+vel-4,fill=farba)

    def posun(self, dr, ds):
        self.r += dr
        self.s += ds
        self.g.move(self.id, ds*self.vel, dr*self.vel)

class Program:
    def __init__(self, meno_suboru):
        t = open(meno_suboru)
        self.vyska = int(t.readline().strip())
        self.pole = [None] * self.vyska
        self.box = []
        for i in range(self.vyska):
            self.pole[i] = list(t.readline().strip())
            for j in range(len(self.pole[i])):
                if self.pole[i][j] == '#':
                    self.hrac = Hrac(i,j)
                    self.pole[i][j] = '.'
                if self.pole[i][j] == 'a':
                    self.box.append(Box(i,j))
                    self.pole[i][j] = '.'
        self.vel = int(t.readline().strip())
        self.farba = t.readline().split()
        t.close()
        self.sirka = len(self.pole[0])
        self.g = tkinter.Canvas(bg='white',width=self.sirka*self.vel,
                         height=self.vyska*self.vel)
        self.g.pack()
        self.kresli()
        self.g.bind_all('<Up>', self.hore)
        self.g.bind_all('<Left>', self.vlavo)
        self.g.bind_all('<Right>', self.vpravo)
        self.g.bind_all('<Down>', self.dole)
       
    def kresli(self):
        for i in range(self.vyska):
            for j in range(self.sirka):
                x,y = j*self.vel, i*self.vel
                f = self.farba['*.+'.index(self.pole[i][j])+2]
                self.g.create_rectangle(x,y,x+self.vel,y+self.vel,fill=f)
        self.hrac.kresli(self.g, self.vel, self.farba[0])
        for box in self.box:
            box.kresli(self.g, self.vel, self.farba[1])
       
    def hore(self, e):
        self.posun(-1, 0)

    def vlavo(self, e):
        self.posun(0, -1)

    def vpravo(self, e):
        self.posun(0, 1)

    def dole(self, e):
        self.posun(1, 0)

    def daj_box(self, r, s):
        for i in range(len(self.box)):
            if self.box[i].r==r and self.box[i].s==s:
                return i
        return -1
       
    def posun(self, dr, ds):
        r = self.hrac.r + dr
        s = self.hrac.s + ds
        if r<0 or r>=self.vyska or s<0 or s>=self.sirka or self.pole[r][s]=='*':
            return
        b = self.daj_box(r,s)
        if b >= 0:
            rr = r + dr
            ss = s + ds
            if rr<0 or rr>=self.vyska or ss<0 or ss>=self.sirka or self.pole[rr][ss]=='*':
                return
            if self.daj_box(rr,ss) >= 0:
                return
            self.box[b].posun(dr,ds)
        self.hrac.posun(dr,ds)
           
        for b in self.box:
            if self.pole[b.r][b.s] != '+':
                return



Program('mapa1.txt')         


a .txt
Kód:
8
*****************
*.#.*...***.a..+*
*...*...*+*..*.**
*...*..a.....*..*
*.........****..*
***********.....*
******+....a....*
*****************
30
red blue gray white yellow


_________________
PC: CPU: AMD Ryzen 5 1600X + Cooler Master Hyper 412S (2x Enermax UCMA12),GPU: GIGABYTE nVidia GTX660 OC 2GB,MB: Gigabyte AX370-Gaming K3,RAM: Corsair Vengeance LPX 2x8GB DDR4 3200MHz,PSU: Seasonic S12II 430W,SSD: Samsung 850 EVO 250GB,HDD1: WD Caviar Black 640GB WD6401AALS,HDD2: WD Caviar Green 1TB WD10EARS,HDD3: WD Caviar Green 1TB WD10EZRX,DVD: Samsung SH-S223C,Case: CoolerMaster CM 690 + 3x Enermax Magma UCMA12,Fan Controller: Zalman ZM-MFC2,LCD: Samsung SyncMaster 2333SW 23"
NTB: Dell Vostro 5470 CPU: Intel Core i5 4200U,GPU: nVidia GT740M,RAM: DDR3 8GB 1600MHz,SSD: Crucial MX300 525GB,LCD: 14"
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 12.11.14
Prihlásený: 04.08.15
Príspevky: 27
Témy: 3 | 3
NapísalOffline : 23.04.2015 1:34 | [Python] ovladanie mysou

:D nečakal by som že tu uvidím toľko zadaní z matfyzu :D Po absolvovaní predmetov s prof. Blahom sa tento kód nedá zmýliť. Škoda že som tu nebol v Januáry, helpol by som .. ak by to niekoho ešte zaujímalo, tak pre ťahanie myšou by si musel kompletne prerobiť kód. Toto je prisposobené na posuny o +-1. Ak by si chcel panáka preniesť hocikde na mapu potreboval by si nieco typu mouse.onrelease napr. ... v dokumentacii tkinter by si nasiel ze je to .bind("<ButtonRelease-1>", funct()) .. samozrejme nejaký globálny boolean či mouse.buttonclick trafil panáka.
Prepočítať súradnice e.x a e.y s pozíciami políčok a priamo prideliť (po preverení, či niesi mimo mapu / na stene / tam kde nemáš) k self.x a self.y .... nasleduje prekreslenie. Ak ťaháš zas len o jedno tak kontroluješ rovinnú orientáciu kurzora vzhľadom na pozíciu hráča, čo by po absolvovaní matiky mala byť banalita.


 [ Príspevkov: 2 ] 


[Python] ovladanie mysou



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Ovladanie 2 pc jednou mysou/klavesnicou

v Externé zariadenia

3

955

15.01.2008 19:41

andrejko99

V tomto fóre nie sú ďalšie neprečítané témy.

Python

v Perl, Python, Ruby, CGI

12

965

02.07.2021 8:41

void

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

python

v Perl, Python, Ruby, CGI

1

778

19.12.2011 23:09

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Python, program

v Perl, Python, Ruby, CGI

6

1129

02.07.2013 19:04

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

Python zoznam

v Perl, Python, Ruby, CGI

1

735

14.06.2013 21:35

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

python LinearDiscriminantAnalysis

v Perl, Python, Ruby, CGI

0

511

22.08.2016 13:23

marian_r

V tomto fóre nie sú ďalšie neprečítané témy.

Python skusenosti

v Perl, Python, Ruby, CGI

19

1389

12.07.2013 23:36

phodinux

V tomto fóre nie sú ďalšie neprečítané témy.

Python-funkcia

v Perl, Python, Ruby, CGI

12

759

12.11.2014 0:21

Misosvk

V tomto fóre nie sú ďalšie neprečítané témy.

Help python

v Perl, Python, Ruby, CGI

6

1858

20.04.2009 8:18

bji

V tomto fóre nie sú ďalšie neprečítané témy.

Vyvojar Python

v Ponuka práce

0

668

31.05.2012 20:47

webwrx

V tomto fóre nie sú ďalšie neprečítané témy.

Python a pxssh

v Perl, Python, Ruby, CGI

0

371

11.01.2018 9:19

arno

V tomto fóre nie sú ďalšie neprečítané témy.

python - jednoduchá úloha

v Perl, Python, Ruby, CGI

5

1022

08.06.2020 14:50

ux

V tomto fóre nie sú ďalšie neprečítané témy.

Je vhodny python?

v Perl, Python, Ruby, CGI

1

839

02.09.2021 1:32

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Python a import

v Perl, Python, Ruby, CGI

11

973

03.01.2016 16:35

Kraliček

V tomto fóre nie sú ďalšie neprečítané témy.

Python vs PHP

v Perl, Python, Ruby, CGI

2

500

16.03.2018 1:30

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Python pre začiatočníkov

v Perl, Python, Ruby, CGI

1

638

08.09.2020 11:14

Joeyeti



© 2005 - 2025 PCforum, edited by JanoF