diff --git a/asset/asset.svg b/asset/asset.svg index fb2c333..0f8ca51 100644 --- a/asset/asset.svg +++ b/asset/asset.svg @@ -25,9 +25,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1.4" - inkscape:cx="-896.36165" - inkscape:cy="178.40018" + inkscape:zoom="3.959798" + inkscape:cx="-1038.4591" + inkscape:cy="251.12477" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -716,5 +716,22 @@ inkscape:connector-curvature="0" inkscape:export-xdpi="96" inkscape:export-ydpi="96" /> + + diff --git a/asset/canon.png b/asset/canon.png new file mode 100644 index 0000000..312e4e6 Binary files /dev/null and b/asset/canon.png differ diff --git a/main.py b/main.py index 2039194..d9af084 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ import pygame from models import Perso + pygame.init() @@ -20,23 +21,25 @@ WHITE=(255,255,255) BLUE=(0,0,255) RED=(255,0,0) -perso1 = Perso('Alice',200,200,pygame.K_o,pygame.K_l,pygame.K_k,pygame.K_m,pygame.K_SPACE,'perso1','projectile1') -perso2 = Perso('Bjorn',600,600,pygame.K_z,pygame.K_s,pygame.K_q,pygame.K_d,pygame.K_SPACE,'perso2','projectile2') +perso = Perso('Alice',200,200,pygame.K_z,pygame.K_s,pygame.K_q,pygame.K_d,pygame.K_SPACE,'perso1','canon.png','projectile1') -speed = 1 + +clock = pygame.time.Clock() while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True + keystate = pygame.key.get_pressed() - - perso1.check_keys(keystate,screen_width,screen_height,speed) - perso2.check_keys(keystate,screen_width,screen_height,speed) + perso.check_keys(keystate,screen_width,screen_height) screen.fill(BACKGROUND) - perso1.draw(screen) - perso2.draw(screen) - pygame.display.flip() \ No newline at end of file + perso.draw(screen) + pygame.display.flip() + + + clock.tick(30) + \ No newline at end of file diff --git a/models.py b/models.py index f72161a..f4dd650 100644 --- a/models.py +++ b/models.py @@ -7,6 +7,7 @@ import pygame from time import time import numpy as np from numpy import sqrt +from math import atan, degrees decision_matrix = np.array([[0,1,2],[3,4,5],[6,7,8]]) suffix_matrix = ['_up_left.png', @@ -20,12 +21,12 @@ suffix_matrix = ['_up_left.png', '_down_right.png',] img_path = 'asset/' -cap_speed = 2 +cap_speed = 10 deceleration = 1.1 class Perso(): - def __init__(self,name,posx,posy,key_up,key_down,key_left,key_right,key_fire,texture,texture_proj): + def __init__(self,name,posx,posy,key_up,key_down,key_left,key_right,key_fire,texture,texture_canon,texture_proj): self.name = name self.posx = posx self.posy = posy @@ -36,23 +37,24 @@ class Perso(): self.key_left = key_left self.key_right = key_right self.key_fire = key_fire - self.imgs = [pygame.image.load(img_path+texture+'_up_left.png'), - pygame.image.load(img_path+texture+'_up.png'), - pygame.image.load(img_path+texture+'_up_right.png'), - pygame.image.load(img_path+texture+'_left.png'), - pygame.image.load(img_path+texture+'_down.png'), - pygame.image.load(img_path+texture+'_right.png'), - pygame.image.load(img_path+texture+'_down_left.png'), - pygame.image.load(img_path+texture+'_down.png'), - pygame.image.load(img_path+texture+'_down_right.png'),] + self.imgs = [pygame.image.load(img_path+texture+'_up_left.png').convert_alpha(), + pygame.image.load(img_path+texture+'_up.png').convert_alpha(), + pygame.image.load(img_path+texture+'_up_right.png').convert_alpha(), + pygame.image.load(img_path+texture+'_left.png').convert_alpha(), + pygame.image.load(img_path+texture+'_down.png').convert_alpha(), + pygame.image.load(img_path+texture+'_right.png').convert_alpha(), + pygame.image.load(img_path+texture+'_down_left.png').convert_alpha(), + pygame.image.load(img_path+texture+'_down.png').convert_alpha(), + pygame.image.load(img_path+texture+'_down_right.png').convert_alpha(),] self.img = self.imgs[0] + self.canon = pygame.image.load(img_path+texture_canon).convert_alpha() self.texture_proj = texture_proj self.size = self.img.get_size() self.projectiles = [] self.last_fire = time() - def check_keys(self,keystate,screen_width,screen_height,speed): + def check_keys(self,keystate,screen_width,screen_height): # If an interresting key is pressed if keystate[self.key_left] or keystate[self.key_right] or keystate[self.key_up] or keystate[self.key_down]: @@ -122,8 +124,25 @@ class Perso(): # select img index = decision_matrix[self.direction[1]+1,self.direction[0]+1] self.img = self.imgs[index] - surface.blit(self.img,(self.posx,self.posy)) - #print("Projectiles for {}: {}".format(self.name,len(self.projectiles))) + + #Calculate canon rotation: + x_mouse, y_mouse = pygame.mouse.get_pos() + if x_mouse==self.posx: + x_mouse+=0.1 + degres = degrees(abs(atan((y_mouse-self.posy)/(x_mouse-self.posx)))) + if y_mouse > self.posy: + degres = -degres + if x_mouse < self.posx: + degres = 180-degres + + canon = pygame.transform.rotate(self.canon,degres) + + # Get rects + perso_rect = self.img.get_rect() + canon_rect = canon.get_rect() + + surface.blit(self.img,(self.posx-perso_rect.center[0],self.posy-perso_rect.center[1])) + surface.blit(canon,(self.posx-canon_rect.center[0],self.posy-canon_rect.center[1])) def fire(self,name,texture): if (time()-self.last_fire> 0.2): @@ -142,7 +161,7 @@ class Projectile(): self.direction = direction index = decision_matrix[self.direction[1]+1,self.direction[0]+1] - self.img = pygame.image.load(img_path+texture+suffix_matrix[index]) + self.img = pygame.image.load(img_path+texture+suffix_matrix[index]).convert_alpha() def move(self): self.position = (self.position[0]+self.speed*self.direction[0],self.position[1]+self.speed*self.direction[1])