You are on page 1of 3

2022. 09. 10. 9:02 kigyojatek.

py

1 from tkinter import *

2 from tkinter import messagebox

3 from random import randrange

4
5 #kígyó egy eleme

6 class Elem:

7 def __init__(self, x, y, dx, dy, ei):

8 self.x = x

9 self.y = y

10 self.dx = dx

11 self.dy = dy

12 self.ei = ei

13

14 #élelem

15 class Kaja:

16 def __init__(self, x, y):

17 self.x = x

18 self.y = y

19

20

21 #új táp létrehozása

22 def ujTap():

23 x = randrange((meretX - 40)//20) * 20 + 20

24 y = randrange((meretY - 40)//20) * 20 + 20

25 tapok.append(Kaja(x, y))

26

27 #új elem hozzáadása

28 def ujElem():

29 x = elemek[-1].x - elemek[-1].dx * 20

30 y = elemek[-1].y - elemek[-1].dy * 20

31 elemek.append(Elem(x, y, elemek[-1].x, elemek[-1].y, elemek.index(elemek[-1])))

32
33 #kezdeti kígyó létrehozása

34 def init():

35 elemek.append(Elem(meretX//2, meretY//2, 1, 0, -1))

36 elemek.append(Elem(meretX//2-20, meretY//2, 1, 0, 0))

37 elemek.append(Elem(meretX//2-40, meretY//2, 1, 0, 1))

38

39 for i in range(mTap):

40 ujTap()
41

42 #játék vége

43 def jvege():

44 global fut

45 fut = False
46 messagebox.showinfo('Játék vége', 'Pontszám: ' + str(pont))

47 abl.destroy()

48

49 #billentyűzet figyelése

50 def figyel(event):

51 dx = elemek[0].dx

52 dy = elemek[0].dy

53 if event.keysym == "Left" and elemek[0].dx == 0:

54 dx, dy = -1, 0

55 if event.keysym == "Right" and elemek[0].dx == 0:

56 dx, dy = 1, 0

57 if event.keysym == "Up" and elemek[0].dy == 0:


58 dx, dy = 0, -1

59 if event.keysym == "Down" and elemek[0].dy == 0:

60 dx, dy = 0, 1

61 for el in reversed(elemek):

62 if elemek.index(el) > 0:

63 el.dx = elemek[el.ei].dx

64 el.dy = elemek[el.ei].dy

65 elemek[0].dx = dx

66 elemek[0].dy = dy

67

68 #kígyó megjelenítése

file:///home/pi/.config/Thonny/temp/thonny_h7k6jfil.html 1/3
2022. 09. 10. 9:02 kigyojatek.py
69 def rajzol():

70 can.delete('all')

71 for el in elemek:

72 can.create_rectangle(el.x, el.y, el.x+20, el.y+20, fill='dark olive green')

73 for t in tapok:

74 can.create_oval(t.x, t.y, t.x+10, t.y+10, fill='maroon')

75
76 #kígyóelemek átcímzése

77 def atrak():
78 for el in reversed(elemek):

79 if elemek.index(el) > 0:

80 el.x = elemek[el.ei].x

81 el.y = elemek[el.ei].y

82
83 #eldönti, hogy egyzik-e a pozíció valamelyik táppal

84 def tape():

85 v = -1
86 for t in tapok:

87 if t.x in range(elemek[0].x, elemek[0].x+20) and t.y in range(elemek[0].y,


elemek[0].y+20):

88 v = tapok.index(t)

89 return v

90
91 #kígyó mozgatása

92 def mozgat():

93 global pont
94 pont += 1

95 pnt['text'] = 'Hossz: ' + str(len(elemek)) + ', Pontszám: ' + str(pont)

96 t = tape()

97 if t >= 0:

98 megesz(t)

99 #jobbra

100 if elemek[0].dx == 1:
101 if elemek[0].x < meretX-20:
102 atrak()

103 elemek[0].x += 20

104 else:

105 jvege()

106 #balra

107 if elemek[0].dx == -1:

108 if elemek[0].x > 0:

109 atrak()

110 elemek[0].x -= 20

111 else:

112 jvege()

113 #le

114 if elemek[0].dy == 1:
115 if elemek[0].y < meretY-20:
116 atrak()

117 elemek[0].y += 20

118 else:

119 jvege()

120 #fel

121 if elemek[0].dy == -1:

122 if elemek[0].y > 0:

123 atrak()

124 elemek[0].y -= 20

125 else:

126 jvege()

127 rajzol()

128 if fut:

129 abl.after(500, mozgat)


130 else:

131 pnt['text'] = ''

132

133 #hossz növelése a táplálékkal

134 def megesz(t):

135 global pont


136 pont += 5

file:///home/pi/.config/Thonny/temp/thonny_h7k6jfil.html 2/3
2022. 09. 10. 9:02 kigyojatek.py
137 ujElem()

138 if len(elemek) == maxHossz:

139 jvege()
140 tapok.pop(t)

141 #can.delete(tapok[t])

142 ujTap()

143

144 #globális változók

145 elemek = []

146 tapok = []
147 maxHossz = 15

148 meretX = 400

149 meretY = 400

150 pont = 0

151 fut = True


152 mTap = 10

153
154
155 #----- Főprogram -----

156 abl = Tk()

157 abl.title('Kígyójáték')

158 abl.bind('<Key>', figyel)


159 pnt = Label(abl)

160 pnt.pack(side=BOTTOM)

161 can = Canvas(abl, width=meretX, height=meretY, bg='light grey')

162 can.pack(side=LEFT)

163 Button(text='Vége', command=jvege).pack(side=BOTTOM)

164
165 init()

166 rajzol()

167 mozgat()

168 abl.mainloop()

169

file:///home/pi/.config/Thonny/temp/thonny_h7k6jfil.html 3/3

You might also like