forked from sd18spring/InteractiveProgramming
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodel.py
More file actions
129 lines (117 loc) · 4.29 KB
/
model.py
File metadata and controls
129 lines (117 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import character
import terrain
import random
import pygame
from pygame.locals import *
class Model:
def __init__(self, *args):
self.game_running = True
self.game_over = False
self.g = 15
self.terrains = []
self.characters = []
for char in args:
self.characters.append(char)
self.terrains.append(terrain.Terrain((200,600), (1100,50)))
def x_movement(self, event, game_object):
"""
Toggles the different modes of acceleration depending on key up
events and key down events.
"""
if (not (event.type == KEYDOWN or event.type == KEYUP) or
game_object.attacking or
game_object.damage_time > 0 or
game_object.shielding):
return
#KEYDOWN events toggle movement on
if event.type == KEYDOWN:
if event.key == game_object.keys["left"]:
game_object.left = True
game_object.right = False
game_object.vel_x = -game_object.speed
elif event.key == game_object.keys["right"]:
game_object.right = True
game_object.left = False
game_object.vel_x = game_object.speed
#KEYUP events toggles movement off
if event.type == KEYUP:
if (event.key == game_object.keys["left"] and
not game_object.right):
game_object.vel_x = 0
elif (event.key == game_object.keys["right"] and
not game_object.left):
game_object.vel_x = 0
"""
#If left XOR right
if game_object.left != game_object.right:
if game_object.left:
game_object.vel_x = -game_object.speed
if game_object.right:
game_object.vel_x = game_object.speed
#Slow character down when there's conflicting input or no input
else:
game_object.vel_x = 0
"""
def y_movement(self, event, game_object):
"""
used to update the v velocity of the object
"""
if event.type == KEYDOWN:
if event.key == game_object.keys["up"] and game_object.jumps > 0:
game_object.vel_y = game_object.jump_vel
game_object.jumps -= 1
def shield(self,event, game_object):
"""
Used to update the shield state of a character
"""
if (game_object.attack_time > 0 or
game_object.damage_time > 0):
return
if event.type == KEYDOWN:
if event.key == game_object.keys["down"]:
game_object.shielding = True
if event.type == KEYUP:
if event.key == game_object.keys["down"]:
game_object.shielding = False
def attack_command(self, event, game_object):
"""
Used to toggle the attacking mode for a character object for a given
amount of time.
"""
if game_object.shielding:
return
if event.type == KEYDOWN:
#NOTE: Change to custom/dynamic character attack button.
if event.key == game_object.keys["attack"]:
game_object.attacking = True
#number of frames spent attacking
game_object.attack_time = 30
def update_motion(self):
"""
Updates the position and velocity and attack hitbox of each character.
"""
for char in self.characters:
if char.in_air(self.terrains[0].rect):
char.vel_y += self.g
elif char.vel_y > 0:
char.vel_y = 0
char.pos_y = self.terrains[0].rect.top - char.height + 1
char.jumps = char.max_jumps
for other_chars in self.characters:
if other_chars.left:
char.detect_damage(other_chars, -1)
else:
char.detect_damage(other_chars, 1)
print(char.damage_time)
char.move()
char.attack_action()
def check_lives(self):
"""
Checks to see a player has lost
"""
for char in self.characters:
if char.lives < 1:
self.game_over = True
def quit(self, event):
if event.type == QUIT:
self.game_running = False