Skip to content

Commit 5aa2246

Browse files
committed
Detecção de cadeias de inputs
- Realocação das classes em arquivos exclusivos para elas - Criação do .gitignore para os arquivos do python e do VIM
1 parent dd5933e commit 5aa2246

16 files changed

+234
-146
lines changed

.gitignore

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,9 @@
1-
# Byte-compiled / optimized / DLL files
2-
__pycache__/
3-
*.py[cod]
1+
*~
42

5-
# C extensions
6-
*.so
3+
*.pyc
4+
*.pyo
75

8-
# Distribution / packaging
9-
.Python
10-
env/
11-
build/
12-
develop-eggs/
13-
dist/
14-
downloads/
15-
eggs/
16-
lib/
17-
lib64/
18-
parts/
19-
sdist/
20-
var/
21-
*.egg-info/
22-
.installed.cfg
23-
*.egg
246

25-
# PyInstaller
26-
# Usually these files are written by a python script from a template
27-
# before PyInstaller builds the exe, so as to inject date/other infos into it.
28-
*.manifest
29-
*.spec
7+
*.swp
8+
*.swo
309

31-
# Installer logs
32-
pip-log.txt
33-
pip-delete-this-directory.txt
34-
35-
# Unit test / coverage reports
36-
htmlcov/
37-
.tox/
38-
.coverage
39-
.cache
40-
nosetests.xml
41-
coverage.xml
42-
43-
# Translations
44-
*.mo
45-
*.pot
46-
47-
# Django stuff:
48-
*.log
49-
50-
# Sphinx documentation
51-
docs/_build/
52-
53-
# PyBuilder
54-
target/

Application.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import json
4+
import sfml as sf
5+
6+
class Application :
7+
_instance = None
8+
9+
@classmethod
10+
def instance(klass) :
11+
print klass._instance
12+
if klass._instance == None :
13+
klass._instance = Application()
14+
return klass._instance
15+
16+
def __init__(self):
17+
self.state = None
18+
self.window = None
19+
20+
f = open("config.json")
21+
self.config = json.load(f)
22+
f.close()
23+
24+
def run(self) :
25+
self.window = sf.RenderWindow(sf.VideoMode(800, 600), "Input Test")
26+
self.state = FightState()
27+
28+
self.window.framerate_limit = 60
29+
self.window.key_repeat_enabled = False
30+
31+
clock = sf.Clock();
32+
offset = clock.elapsed_time.seconds - int(clock.elapsed_time.seconds)
33+
34+
last_frame = -1
35+
36+
while self.window.is_open :
37+
frame = int((clock.elapsed_time.seconds - offset) / (1.0 / 60.0))
38+
39+
for event in self.window.events :
40+
41+
if type(event) == sf.CloseEvent :
42+
self.window.close()
43+
break
44+
45+
elif type(event) == sf.KeyEvent and event.pressed and event.code == sf.Keyboard.ESCAPE :
46+
self.window.close()
47+
break
48+
49+
elif type(event) == sf.KeyEvent :
50+
self.state.input(frame, event)
51+
52+
if frame != last_frame :
53+
self.state.update(frame)
54+
self.state.draw(frame, self.window)
55+
56+
last_frame = frame
57+
58+
f = open("log", "w+")
59+
json.dump(self.state.p1.controller.buffer, f, indent=True)
60+
f.close()
61+
62+
from FightState import *

Character.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import json
4+
import sfml as sf
5+
6+
class Character :
7+
8+
def __init__(self, name) :
9+
self.data = None
10+
self.path = "chars/" + name + "/"
11+
self.image = None
12+
self.sprite = None
13+
14+
self.state = ""
15+
self.current_frame = 0
16+
self.frame_count = 0
17+
18+
f = open(self.path + "data.json")
19+
self.data = json.load(f)
20+
f.close()
21+
22+
self.load_image()
23+
self.load_sprite()
24+
25+
self.change_state("idle")
26+
27+
def load_image(self) :
28+
self.image = sf.Image.from_file(self.path + self.data["image"])
29+
self.image.create_mask_from_color(sf.Color(0x00, 0xFF, 0x00))
30+
31+
def load_sprite(self) :
32+
self.sprite = sf.Sprite(sf.Texture.from_image(self.image))
33+
self.sprite.ratio = sf.Vector2(2, 2)
34+
35+
def change_state(self, state) :
36+
self.state = state
37+
self.current_frame = 0
38+
self.frame_count = len(self.data[self.state]["frames"])
39+
40+
def draw(self, frame, window) :
41+
current_frame = self.data[self.state]["frames"][self.current_frame]
42+
43+
self.sprite.texture_rectangle = sf.Rectangle(
44+
sf.Vector2(current_frame["x"], current_frame["y"]),
45+
sf.Vector2(current_frame["w"], current_frame["h"])
46+
)
47+
48+
window.draw(self.sprite)
49+
50+
self.current_frame = (self.current_frame + 1) % self.frame_count

FightState.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# -*- coding: utf-8 -*-
2+
3+
class FightState :
4+
5+
def __init__(self) :
6+
self.p1 = Player("player1", "aoko")
7+
self.p2 = Player("player2", "aoko")
8+
9+
def input(self, frame, event) :
10+
self.p1.input(frame, event)
11+
self.p2.input(frame, event)
12+
13+
def update(self, frame) :
14+
self.p1.update(frame)
15+
self.p2.update(frame)
16+
pass
17+
18+
def draw(self, frame, window) :
19+
self.p1.draw(frame, window)
20+
self.p2.draw(frame, window)
21+
22+
from Player import *

Player.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# -*- conding: utf-8 -*-
2+
3+
class Player :
4+
5+
def __init__(self, player_id, character):
6+
config = Application.instance().config
7+
self.controller = PlayerController(config[player_id])
8+
self.character = Character(character)
9+
10+
def input(self, frame, event) :
11+
self.controller.check(frame, event)
12+
13+
def update(self, frame) :
14+
pass
15+
16+
def draw(self, frame, window) :
17+
self.character.draw(frame, window)
18+
19+
from Application import *
20+
from PlayerController import *
21+
from Character import *

PlayerController.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# -*- coding: utf-8 -*-
2+
3+
class PlayerController :
4+
5+
def __init__(self, keys) :
6+
self.keys = keys
7+
self.repr = {}
8+
9+
for k in keys :
10+
if (k != "confirm") and (k != "cancel") :
11+
self.repr[self.keys[k]] = k
12+
13+
self.buffer = [] # (frame, key, hold)
14+
self.buffer_offset = 0
15+
self.buffer_limit = 30 # 500ms
16+
17+
def check(self, frame, event) :
18+
try :
19+
key = self.repr[event.code]
20+
except :
21+
return
22+
23+
try :
24+
last_frame = self.buffer[-1][0]
25+
last_key = self.buffer[-1][1]
26+
except :
27+
last_frame = -1
28+
last_key = -1
29+
30+
valid_frame = frame - self.buffer_limit
31+
32+
if event.pressed :
33+
if last_frame > valid_frame and key == last_key :
34+
return
35+
36+
self.buffer.append((frame, key, -1))
37+
38+
else :
39+
i = -1
40+
41+
try :
42+
while i >= -len(self.buffer) :
43+
current = self.buffer[i]
44+
45+
if current[1] == key :
46+
self.buffer[i] = (
47+
self.buffer[i][0],
48+
self.buffer[i][1],
49+
frame - self.buffer[i][0]
50+
)
51+
break
52+
i -= 1
53+
except :
54+
pass
55+

README.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

aoko.png

-1.25 MB
Binary file not shown.

chars/aoko/aoko.png

1.28 MB
Loading
File renamed without changes.
Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
#!/usr/bin/python
2-
# -*- coding: utf-8 -*-
3-
4-
data = {
1+
{
2+
"hp" : 1000,
3+
"image": "aoko.png",
54
"idle" : {
65
"start" : [],
76
"frames" : [
@@ -12,15 +11,15 @@
1211
{ "x": 221, "y": 0, "w": 58, "h": 109 },
1312
{ "x": 271, "y": 0, "w": 58, "h": 109 },
1413
{ "x": 323, "y": 0, "w": 58, "h": 109 },
15-
{ "x": 378, "y": 0, "w": 58, "h": 109 },
14+
{ "x": 378, "y": 0, "w": 58, "h": 109 }
1615
],
17-
"recover" : [],
16+
"recover" : []
1817
},
1918
"walk" : {
2019
"start" : [
2120
{ "x": -5, "y": 235, "w": 58, "h": 109 },
2221
{ "x": 50, "y": 235, "w": 58, "h": 109 },
23-
{ "x": 102, "y": 235, "w": 58, "h": 109 },
22+
{ "x": 102, "y": 235, "w": 58, "h": 109 }
2423
],
2524
"frames" : [
2625
{ "x": 162, "y": 235, "w": 58, "h": 109 },
@@ -29,17 +28,12 @@
2928
{ "x": 353, "y": 235, "w": 58, "h": 109 },
3029
{ "x": 433, "y": 235, "w": 70, "h": 109 },
3130
{ "x": 512, "y": 235, "w": 70, "h": 109 },
32-
{ "x": 595, "y": 235, "w": 70, "h": 109 },
31+
{ "x": 595, "y": 235, "w": 70, "h": 109 }
3332
],
3433
"recover" : [
3534
{ "x": 102, "y": 235, "w": 58, "h": 109 },
3635
{ "x": 50, "y": 235, "w": 58, "h": 109 },
37-
{ "x": -5, "y": 235, "w": 58, "h": 109 },
38-
],
36+
{ "x": -5, "y": 235, "w": 58, "h": 109 }
37+
]
3938
}
4039
}
41-
42-
state = "idle"
43-
44-
i = 0;
45-
m = len(data[state]["frames"])

config.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"player1" : {
3+
},
4+
5+
"player2" : {
6+
}
7+
}

0 commit comments

Comments
 (0)