master
Voussoir 2015-03-10 21:21:17 -07:00
parent bd4c62af18
commit d9f16c22af
5 changed files with 58 additions and 134 deletions

View File

@ -1,123 +0,0 @@
import tkinter
import threading
import time
class CanvasGame:
def managementthread(self):
while True:
w = self.pressed_dict.get('w', False)
s = self.pressed_dict.get('s', False)
a = self.pressed_dict.get('a', False)
d = self.pressed_dict.get('d', False)
if w:
self.velocity_y -= self.velocity_speedup
if s:
self.velocity_y += self.velocity_speedup
if a:
self.velocity_x -= self.velocity_speedup
if d:
self.velocity_x += self.velocity_speedup
if not any(movement for movement in [w,a,s,d]):
nondirectional = abs(self.velocity_x) + abs(self.velocity_y)
nondirectional /= 2
if nondirectional < self.velocity_minimum:
self.velocity_x = 0
self.velocity_y = 0
else:
if self.velocity_x != 0:
self.velocity_x *= self.velocity_slowdown
if self.velocity_y != 0:
self.velocity_y *= self.velocity_slowdown
self.velocity_x = self.numbercap(self.velocity_x, self.velocity_maximum)
self.velocity_y = self.numbercap(self.velocity_y, self.velocity_maximum)
self.player_x += self.velocity_x
self.player_y += self.velocity_y
x = self.x_camera + self.player_x
y = self.y_camera + self.player_y
xdiff = x - self.gamewidthcenter
ydiff = y - self.gameheightcenter
if xdiff > self.camera_distance:
self.x_camera -= abs(xdiff / self.camera_distance)
elif xdiff < -self.camera_distance:
self.x_camera += abs(xdiff / self.camera_distance)
if ydiff > self.camera_distance:
self.y_camera -= abs(ydiff / self.camera_distance)
elif ydiff < -self.camera_distance:
self.y_camera += abs(ydiff / self.camera_distance)
#print(self.player_x, x)
self.canvas.coords(self.player, x-self.player_radius, y-self.player_radius,
x+self.player_radius, y+self.player_radius)
self.label_coordinates.configure(text="%d, %d" % (self.player_x, self.player_y))
time.sleep(0.017)
def numbercap(self, i, cap):
if i > cap:
i = cap
elif i < -cap:
i = -cap
return i
def pushkey(self, event):
#print(event.char, "Down")
self.pressed_dict[event.char] = True
def releasekey(self, event):
#print(event.char, "Up")
self.pressed_dict[event.char] = False
def __init__(self):
self.t = tkinter.Tk()
self.pressed_dict = {}
self.gamewidth = 640
self.gameheight = 480
self.gamewidthcenter = self.gamewidth / 2
self.gameheightcenter = self.gameheight / 2
self.canvas = tkinter.Canvas(self.t, width=self.gamewidth, height=self.gameheight)
self.x_camera = (self.gamewidth / 2)
self.y_camera = (self.gameheight / 2)
x = 0
y = 0
self.player_x = x
self.player_y = y
self.player_radius = 3
self.player = self.canvas.create_oval(x-self.player_radius, y-self.player_radius,
x+self.player_radius, y+self.player_radius,
fill="#ff0")
self.camera = self.canvas.create_oval(self.x_camera, self.y_camera, self.x_camera, self.y_camera)
self.camera_distance = 20
self.playerthread = threading.Thread(name="Playerthread", target=self.managementthread)
self.playerthread.daemon = True
self.velocity_x = 0
self.velocity_y = 0
self.velocity_maximum = 4
self.velocity_minimum = 0.2
self.velocity_slowdown = 0.95
self.velocity_speedup = 0.6
self.entities = []
self.label_coordinates = tkinter.Label(self.canvas, text="0, 0")
self.label_coordinates.place(x=self.gamewidthcenter, y=self.gameheight-10, anchor="c")
self.canvas.bind("<KeyPress>", self.pushkey)
self.canvas.bind("<KeyRelease>", self.releasekey)
self.canvas.focus_set()
self.playerthread.start()
self.canvas.pack()
self.t.mainloop()
c = CanvasGame()

View File

@ -1,4 +1,10 @@
Editor Editor
========== ==========
A neat idea that would make for a fun website. Users read and write text files by choosing the file name. If it exists, the text is returned to them for editing. If it does not, it will be created when they press Save. No logins and no file security. Since it's using a database instead of actual txt files, there are no filename character restrictions, only a maximum title length and a couple self-imposed rules for sanity's sake. A neat idea that would make for a fun website. Users read and write text files by choosing the file name. If it exists, the text is returned to them for editing. If it does not, it will be created when they press Save. No logins and no file security. Since it's using a database instead of actual txt files, there are no filename character restrictions, only a maximum title length and a couple self-imposed rules for sanity's sake.
`ctrl+s - save file`
`ctrl+w - return to menu (does not save)`
`ctrl+[ - smaller font`
`ctrl+] - larger font`
`ctrl+/ - toggle linewrap`

View File

@ -17,6 +17,8 @@ class Editor:
self.font_large = ("Consolas", 16) self.font_large = ("Consolas", 16)
self.font_med = ("Consolas", 12) self.font_med = ("Consolas", 12)
self.font_small = ("Consolas", 10) self.font_small = ("Consolas", 10)
self.font_username = "Consolas"
self.font_usersize = 12
self.kilobyte = 1024 self.kilobyte = 1024
self.megabyte = 1048576 self.megabyte = 1048576
@ -98,18 +100,44 @@ class Editor:
self.entities.append(self.label_filesize) self.entities.append(self.label_filesize)
# #
self.scrollbar_editor = tkinter.Scrollbar(self.t) self.scrollbar_editor = tkinter.Scrollbar(self.t)
self.scrollbar_horz = tkinter.Scrollbar(self.t, orient='horizontal')
self.scrollbar_editor.pack(side='right', fill='y') self.scrollbar_editor.pack(side='right', fill='y')
self.text_editor = tkinter.Text(self.t, wrap='word', font=self.font_med, yscrollcommand=self.scrollbar_editor.set) self.scrollbar_horz.pack(side='bottom', fill='x')
self.text_editor = tkinter.Text(self.t, wrap='word', font=self.font_med)
self.text_editor.configure(yscrollcommand=self.scrollbar_editor.set)
self.text_editor.configure(xscrollcommand=self.scrollbar_horz.set)
self.scrollbar_editor.configure(command=self.text_editor.yview) self.scrollbar_editor.configure(command=self.text_editor.yview)
self.scrollbar_horz.configure(command=self.text_editor.xview)
self.text_editor.insert('end', filetext) self.text_editor.insert('end', filetext)
self.text_editor.pack(expand=True, fill='both') self.text_editor.pack(expand=True, fill='both')
self.text_editor.focus_set() self.text_editor.focus_set()
self.text_editor.bind('<Control-s>', self.savefile_smart) self.text_editor.bind('<Control-s>', self.savefile_smart)
self.text_editor.bind('<Control-w>', self.gui_build_fileloader) self.text_editor.bind('<Control-w>', self.gui_build_fileloader)
self.text_editor.bind('<Control-[>', lambda s: self.editor_resize_font(-1))
self.text_editor.bind('<Control-]>', lambda s: self.editor_resize_font(1))
self.text_editor.bind('<Control-/>', self.editor_toggle_wrap)
self.entities.append(self.text_editor) self.entities.append(self.text_editor)
self.entities.append(self.scrollbar_editor) self.entities.append(self.scrollbar_editor)
self.entities.append(self.scrollbar_horz)
### ###
def editor_resize_font(self, direction, *b):
self.font_usersize += direction
if self.font_usersize < 1:
self.font_usersize = 1
font = [self.font_username, self.font_usersize]
self.text_editor.configure(font=font)
self.label_filesize.configure(text=str(self.font_usersize))
def editor_toggle_wrap(self, *b):
mode = self.text_editor.cget('wrap')
if mode == 'word':
self.text_editor.configure(wrap='none')
self.label_filesize.configure(text='word wrap disabled')
if mode == 'none':
self.text_editor.configure(wrap='word')
self.label_filesize.configure(text='word wrap enabled')
def savefile_smart(self, *b): def savefile_smart(self, *b):
try: try:
filetext = self.text_editor.get('0.0', 'end') filetext = self.text_editor.get('0.0', 'end')

Binary file not shown.

View File

@ -40,8 +40,10 @@ class LogoGame:
self.cur = self.sql.cursor() self.cur = self.sql.cursor()
self.stats_main = self.stats_load('stats') self.stats_main = self.stats_load('stats')
self.playerstats_load(self.stats_main.playername) self.playerstats_load(self.stats_main.playername)
self.logos_load()
self.tkinter_elements = [] self.tkinter_elements = []
self.logo_elements = []
self.active_tags = set() self.active_tags = set()
self.w = 1062 self.w = 1062
@ -62,19 +64,20 @@ class LogoGame:
self.t.mainloop() self.t.mainloop()
def update_wh(self, *b): def logos_load(self):
oldw = self.w self.cur.execute('SELECT * FROM logos')
oldh = self.h self.all_logos = self.cur.fetchall()
self.w = self.t.winfo_width()
self.h = self.t.winfo_height()
if oldw != self.w or oldh != self.h:
pass
#self.uirefresher()
def destroy_all_elements(self): def destroy_all_elements(self):
while len(self.tkinter_elements) > 0: while len(self.tkinter_elements) > 0:
self.tkinter_elements[0].destroy() self.tkinter_elements[0].destroy()
del self.tkinter_elements[0] del self.tkinter_elements[0]
self.destroy_all_logos()
def destroy_all_logos(self):
while len(self.logo_elements) > 0:
self.logo_elements[0].destroy()
del self.logo_elements[0]
def gui_build_main(self, *b): def gui_build_main(self, *b):
self.destroy_all_elements() self.destroy_all_elements()
@ -147,22 +150,32 @@ class LogoGame:
self.button_back.grid(row=0, column=0) self.button_back.grid(row=0, column=0)
self.tkinter_elements.append(self.button_back) self.tkinter_elements.append(self.button_back)
# #
#self.frame_gamearea = tkinter.Frame(self.t, bg='#f00')
#self.frame_gamearea.pack(expand=True, fill='both', anchor='w')
#
self.frame_gametaglist = tkinter.Frame(self.t) self.frame_gametaglist = tkinter.Frame(self.t)
self.frame_gametaglist.pack(expand=True, fill='y', anchor='e') self.frame_gametaglist.pack(expand=True, fill='y', anchor='e')
self.tkinter_elements.append(self.frame_gametaglist) self.tkinter_elements.append(self.frame_gametaglist)
# #
button_applytag = tkinter.Button(self.frame_gametaglist, text='Apply', command=self.gui_rebuild_game)
button_applytag.grid(row=0, column=0, sticky='w')
alltags = self.get_all_tags() alltags = self.get_all_tags()
for tag in alltags: for tag in alltags:
intvar = tkinter.IntVar() intvar = tkinter.IntVar()
intvar.title=tag intvar.title=tag
checkbox = tkinter.Checkbutton(self.frame_gametaglist, text=tag, variable=intvar) checkbox = tkinter.Checkbutton(self.frame_gametaglist, text=tag, variable=intvar)
checkbox.intvar = intvar checkbox.intvar = intvar
checkbox.grid(row=alltags.index(tag), column=0, sticky='w') checkbox.grid(row=alltags.index(tag)+1, column=0, sticky='w')
intvar.set(1) intvar.set(1)
self.tkinter_elements.append(checkbox) self.tkinter_elements.append(checkbox)
self.active_tags.add(tag) self.active_tags.add(tag)
### ###
def gui_rebuild_game(self, *b):
self.destroy_all_logos()
def gui_build_logo(self, *b): def gui_build_logo(self, *b):
self.destroy_all_elements() self.destroy_all_elements()
### ###