Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions TATALETAK.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
├──super-mario-python/ # root project
├── README.md # dokumentasi dasar: cara running, dependensi, struktur
├── requirements.txt # daftar dependensi (pygame, etc)
├── .gitignore # file / folder yang di-ignore git (misalnya env, __pycache__, build, dsb)
├── setup.py (opsional) # jika kamu ingin struktur paket / distribusi
├── src/ # kode utama sebagai package
│ ├── __main__.py # entry-point ketika menjalankan `python -m src` atau `python src/`
│ ├── game/ # modul utama game
│ │ ├── __init__.py
│ │ ├── main.py # game loop, init, state switching
│ │ ├── config.py # konfigurasi global (screen size, FPS, tile size, dsb)
│ │ ├── state_manager.py # jika kamu mengelola berbagai state: menu, playing, pause, game over
│ │
│ ├── entities/ # kelas / definisi objek (player, enemy, item, dsb)
│ │ ├── __init__.py
│ │ ├── player.py
│ │ ├── enemy.py
│ │ └── ...
│ │
│ ├── levels/ # definisi level / data level / loader level
│ │ ├── level1.py (atau level1.json / txt)
│ │ └── ...
│ │
│ ├── rendering/ # kode berkaitan dengan gambar / drawing / camera / viewport
│ │ ├── __init__.py
│ │ ├── renderer.py
│ │ └── camera.py
│ │
│ ├── utils/ # utilitas umum: helper functions, collision, math, dsb
│ │ ├── __init__.py
│ │ └── helper.py
│ │
│ └── audio/ # pengaturan musik / sound effects
│ ├── __init__.py
│ └── sound_manager.py
├── assets/ # semua resource: sprites, images, sounds, levels data
│ ├── sprites/ # sprite sheet, karakter, musuh, animasi
│ ├── images/ # background, tiles, UI, dsb
│ ├── sounds/ # efek suara, musik latar
│ └── levels/ # data level (tile map, layout, dsb) jika format external
├── tests/ # (opsional tapi disarankan) unit / integration tests
│ ├── __init__.py
│ └── test_*.py
└── docs/ # dokumentasi tambahan: design doc, panduan kontribusi, dsb
└── ...
7 changes: 7 additions & 0 deletions classes/Dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,15 @@ def __init__(self, filePath, size, screen):
self.coins = 0
self.ticks = 0
self.time = 0
self.font = pygame.font.Font(None, 32)
self.font = pygame.font.Font(None, 32)
self.mario = None

def update(self):
if self.mario:
lives_text = self.font.render(f"LIVES {self.mario.lives}", True, (255, 255, 255))
self.screen.blit(lives_text, (0, 0))

self.drawText("MARIO", 50, 20, 15)
self.drawText(self.pointString(), 50, 37, 15)

Expand Down
11 changes: 10 additions & 1 deletion classes/Level.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from entities.Koopa import Koopa
from entities.CoinBox import CoinBox
from entities.RandomBox import RandomBox

from entities.FireFlower import FireFlower

class Level:
def __init__(self, screen, sound, dashboard):
Expand Down Expand Up @@ -38,6 +38,7 @@ def loadEntities(self, data):
[self.addCoin(x, y) for x, y in data["level"]["entities"]["coin"]]
[self.addCoinBrick(x, y) for x, y in data["level"]["entities"]["coinBrick"]]
[self.addRandomBox(x, y, item) for x, y, item in data["level"]["entities"]["RandomBox"]]
[self.addFireFlower(x, y) for x, y in data["level"]["entities"].get("FireFlower", [])]
except:
# if no entities in Level
pass
Expand Down Expand Up @@ -203,3 +204,11 @@ def addRedMushroom(self, x, y):
self.entityList.append(
RedMushroom(self.screen, self.sprites.spriteCollection, x, y, self, self.sound)
)
def addFireFlower(self, x, y):
from entities.FireFlower import FireFlower
flower = FireFlower(self.screen, self.sprites.spriteCollection, x, y, self, self.sound)
self.entityList.append(flower) # wajib append ke entityList




3 changes: 2 additions & 1 deletion classes/Sprites.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ def __init__(self):
"./sprites/Animations.json",
"./sprites/BackgroundSprites.json",
"./sprites/ItemAnimations.json",
"./sprites/RedMushroom.json"
"./sprites/RedMushroom.json",
"./sprites/FireFlower.json",
]
)

Expand Down
9 changes: 8 additions & 1 deletion entities/CoinBox.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@ def update(self, cam):
self.animation.update()
else:
self.animation.image = self.spriteCollection.get("empty").image
self.item.spawnCoin(cam, self.sound, self.dashboard)
# Jika CoinBox mengandung FireFlower
if hasattr(self, "contains") and self.contains == "fireflower":
from entities.Item import Item
fireflower = Item("FireFlower", self.rect.x, self.rect.y - 32)
self.screen.game.addEntity(fireflower)
else:
self.item.spawnCoin(cam, self.sound, self.dashboard)

if self.time < self.maxTime:
self.time += 1
self.rect.y -= self.vel
Expand Down
33 changes: 33 additions & 0 deletions entities/FireFlower.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from entities.EntityBase import EntityBase
from classes.Collider import Collider
from classes.EntityCollider import EntityCollider
from classes.Animation import Animation
from entities.EntityBase import EntityBase
from classes.Maths import Vec2D

class FireFlower(EntityBase):
def __init__(self, screen, spriteColl, x, y, level, sound):
super(FireFlower, self).__init__(y, x , 0)
self.spriteCollection = spriteColl
self.animation = self.spriteCollection.get("FireFlower").animation
self.screen = screen
self.collision = Collider(self, level)
self.EntityCollider = EntityCollider(self)
self.levelObj = level
self.type = "item"
self.dashboard = level.dashboard
self.sound = sound

def update(self, camera):
if self.alive:
self.drawFireFlower(camera)
else:
self.alive = None

def drawFireFlower(self, camera):
self.screen.blit(self.animation.image, (self.rect.x + camera.x, self.rect.y))
self.animation.update()




10 changes: 10 additions & 0 deletions entities/Flower.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import pygame

class Flower(pygame.sprite.Sprite):
def __init__(self, x, y, image):
super().__init__()
self.image = image
self.rect = self.image.get_rect(topleft=(x, y))

def update(self):
pass
Loading