[ 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

947

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

957

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

775

19.12.2011 23:09

Ďuri

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

Python zoznam

v Perl, Python, Ruby, CGI

1

732

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

506

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

1372

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

754

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

1854

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

663

31.05.2012 20:47

webwrx

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

Python, program

v Perl, Python, Ruby, CGI

6

1125

02.07.2013 19:04

reDo

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

Je vhodny python?

v Perl, Python, Ruby, CGI

1

831

02.09.2021 1:32

JanoF

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

python - jednoduchá úloha

v Perl, Python, Ruby, CGI

5

1014

08.06.2020 14:50

ux

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

Python a import

v Perl, Python, Ruby, CGI

11

965

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

492

16.03.2018 1:30

JanoF

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

Python alebo c++

v Perl, Python, Ruby, CGI

13

1855

25.06.2013 19:58

phodinux

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

Python- web dotaz

v Perl, Python, Ruby, CGI

2

1570

08.02.2010 8:53

juho



© 2005 - 2024 PCforum, edited by JanoF