Untitled
unknown
plain_text
3 years ago
7.3 kB
9
Indexable
import pygame
import os
import time
pygame.init()
width = 800
height = int(width * 0.8)
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Game cua Nam Le")
#set FPS:
clock = pygame.time.Clock()
FPS = 30
moving_left = False
moving_right = False
shoot = False
nade = False
gravity = 0.75
#Colour of bg:
Cyan = (102,255,255)
RED = (255,0,0)
# bg = pygame.image.load("img/Background/mountain.png")
# bg = pygame.transform.scale(bg,(int(bg.get_width()),int(bg.get_height())))
#image input
bullet_img = pygame.image.load("img/icons/bullet.png").convert_alpha()
grenade_img = pygame.image.load("img/icons/grenade.png").convert_alpha()
class soldier (pygame.sprite.Sprite):
def __init__(self,char_type, x, y, scale, speed, magazine, health):
pygame.sprite.Sprite.__init__(self)
self.char_type = char_type
self.Alive = True
self.jump = False
self.in_air = True
self.flip = False
self.speed = speed
self.direction = 1
self.vel_y = 0
self.scale = scale
self.animation_list = []
self.action = 0
self.index = 0
self.update_time = pygame.time.get_ticks()
self.grenade = 5
self.magazine = magazine
self.start_bullet = magazine
self.shoot_cooldown = 0
self.health = health
self.start_health = self.health
self.alive = True
animation_type = ["Idle","Run", "Jump", "Death"]
for animation in animation_type:
temp = []
num_of_frames = len(os.listdir(f'img/{self.char_type}/{animation}'))
for i in range(0,num_of_frames):
img = pygame.image.load(f"img/{self.char_type}/{animation}/{i}.png").convert_alpha()
img = pygame.transform.scale(img, (int(img.get_width() * self.scale), int(img.get_height()*self.scale)))
temp.append(img)
self.animation_list.append(temp)
self.image = self.animation_list[self.action][self.index]
self.rect = img.get_rect()
self.rect.center = (x,y)
def move (self, moving_left, moving_right):
dx = 0
dy = 0
if moving_left:
dx = -self.speed
self.direction = -1
self.flip = True
if moving_right:
dx = self.speed
self.direction = 1
self.flip = False
#Cap nhat rectangle position
# Nhay
if (self.jump == True and self.in_air == False):
self.vel_y = -11
self.jump = False
self.in_air = True
self.vel_y += gravity
if self.vel_y > 10:
self.vel_y
dy += self.vel_y
#Kiem tra voi nen dat
if self.rect.bottom + dy > 300:
dy = 300 - self.rect.bottom
self.in_air = False
self.rect.x += dx
self.rect.y += dy
def update(self,x):
self.update_animation(x)
self.check_alive()
if self.shoot_cooldown > 0:
self.shoot_cooldown -=1
def update_animation(self, x):
ANIMATION_COOLDOWN = x
#Cap nhat hinh anh theo i:
self.image = self.animation_list[self.action][self.index]
if pygame.time.get_ticks()- self.update_time > ANIMATION_COOLDOWN:
self.update_time = pygame.time.get_ticks()
self.index +=1
#loop to reset back to the first animation
if (self.index >= len(self.animation_list[self.action])):
if self.action == 3:
self.index = len(self.animation_list[self.action])-1
else:
self.index = 0
def update_action(self, new_action):
if new_action != self.action:
self.action = new_action
self.index = 0
self.update_time = pygame.time.get_ticks()
def shoot (self):
if self.shoot_cooldown == 0 and self.magazine > 0:
self.shoot_cooldown = 20
bullet = Bullet(self.rect.centerx +(0.6 * self.rect.size[0]*self.direction), self.rect.centery, self.direction)
bullet_group.add(bullet)
self.magazine -=1
def check_alive(self):
if self.health <= 0:
self.health = 2
self.speed = 0
self.alive = False
self.update_action(3)
def drawn (self):
screen.blit(pygame.transform.flip(self.image,self.flip, False), self.rect)
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y, direction):
pygame.sprite.Sprite.__init__(self)
self.speed = 100
self.image = bullet_img
self.rect = self.image.get_rect()
self.rect.center = (x,y)
self.direction = direction
def update (self):
#movement of bullet
self.rect.x += (self.direction*self.speed)
#check if bullet has gone off screen
if self.rect.right < 0 or self.rect.left >800:
self.kill()
#check collided
if pygame.sprite.spritecollide(player, bullet_group, False):
if player.alive:
player.health -= 5
self.kill()
if pygame.sprite.spritecollide(enemy, bullet_group, False):
if enemy.alive:
enemy.health -= 25
print(enemy.health)
self.kill()
class Grenade(pygame.sprite.Sprite):
def __init__(self, x, y, direction):
pygame.sprite.Sprite.__init__(self)
self.speed = 10
self.image = grenade_img
self.rect = self.image.get_rect()
self.rect.center = (x,y)
self.direction = direction
self.vel_y = -11
def update(self):
self.vel_y += gravity
dx = self.speed * self.direction
dy = self.vel_y
if self.rect.bottom + dy >= 300:
dy = 300 - self.rect.bottom
if self.rect.right > 800 and self.rect.left < 0:
self.speed = -1
self.rect.x += self.speed
self.rect.y += dy
bullet_group = pygame.sprite.Group()
grenade_group = pygame.sprite.Group()
running = True
x = 200
y = 200
player = soldier("player",x,y,3, 5, 20,100)
enemy = soldier("enemy",400,200,3,5,20,100)
# enemy = soldier("Enemy",400,200,3,5)
while running:
clock.tick(FPS)
screen.fill(Cyan)
# screen.blit(bg,(0,0))
pygame.draw.line(screen, RED, (0,300),(800,300) )
player.update(100)
# enemy.update_animation(500)
player.drawn()
enemy.update(100)
enemy.drawn()
player.move(moving_left, moving_right)
bullet_group.update()
bullet_group.draw(screen)
grenade_group.update()
grenade_group.draw(screen)
if (player.Alive == True):
if shoot:
player.shoot()
if nade and player.grenade > 0:
nade = Grenade(player.rect.centerx +(0.5 * player.rect.size[0]*player.direction), player.rect.top, player.direction)
grenade_group.add(nade)
nade = False
player.grenade -= 1
print(player.grenade)
if (player.jump == True):
player.update_action(2)#2: jump
elif (moving_left == True) or (moving_right==True):
player.update_action(1)#1: run
else:
player.update_action(0)#0: idle
player.move(moving_left, moving_right)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
moving_left = True
if event.key == pygame.K_d:
moving_right = True
if event.key == pygame.K_w:
player.jump = True
if event.key == pygame.K_SPACE:
shoot = True
if event.key == pygame.K_q:
nade = True
if event.key == pygame.K_ESCAPE:
running = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_a:
moving_left = False
if event.key == pygame.K_d:
moving_right = False
if event.key == pygame.K_SPACE:
shoot = False
if event.key == pygame.K_q:
nade = False
pygame.display.update()
pygame.quit()
Editor is loading...