Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

M5Prog

PROG les 1: Herhaling Functions, Classes en Arrays

Opdracht 1 Functions, Methods, Parameters & return type

Ik heb een Functions, Methods, Parameters & return type gebruikt.

Balls falling

CreateBall Script

Opdracht 2 Class, Object, Constructor & Instantiate

Ik heb Class, Object, Constructor en Instantiate gebruikt.

Towers spawning

Game Script

Opdracht 3 List en loop

Ik heb Lists en loops gebruikt.

Cubes spawning

Enemy Spawner Script
Enemy Controller Script

PROG les 2: Action Events

Opdracht 4: Action Events

Ik heb Action Events gebruikt.

Player moving and pickup up spheres

Player Movement Script
Pickup Script
Scoreboard Script

PROG les 3: Debugging

Opdracht 5A : Wat veroorzaakt de bugs?

De Enemy schiet nooit

delta.magnitude is altijd &gt shotRange omdat shotRange gelijk aan 0 is.

Het schot raakt de speler niet

targetTag is verkeerd getypt en gebruikt voordat de CallShot functie het kan veranderen met _targetTag

Opdracht 5B : Vastleggen van Mythe bugs

Issue1
Issue2
Issue3

Opdracht 5C : Breakpoints

Breakpoint

Opdracht 5D : Bijhouden bugs voor Towerdefense

Issue TD

PROG les 4: Single Responsibility (SRP) en Don't Repeat Yourself (DRY)

Opdracht 6: SRP

Ik heb de schip script opgesplit.

Github Link

Opdracht 7: DRY

Ik heb de movement scripts gecombineerd en de message scripts gecombineerd.

Github Link

PROG les 5: OOP Inheritance

Opdracht 8: Inheritance

Ik heb inheritance gebruikt.

Player shooting enemies

Shoot From Camera Script
Projectile Script
Enemy Parent Script
Brute Script
Elf Script

Opdracht 9: Encapsulation

Ik heb elke variable een voor een alle encapsulation veranderd

PDF Link

M6Prog

Les 1 - Code Conventies in Unity

Oefening 1

public class GameManager : MonoBehaviour
{
    public bool isPlayerDead;
    public Int HP;
    private float jumpPower;
}

Oefening 2

public class BaseEnemy : Monobehaviour
{
    [SerializeField] float speed = 9;
    [SerializeField] int health = 100;

    void TakeDamage(int damage)
    {
        health -= damage;
    }

    float CalculateRange(float modifier)
    {
        return range
    }
}

public class Enemy : BaseEnemy
{
    [SerializeField] GameObject player;
    [SerializeField] float attackRange = 2f;

    void Attack()
    {
        // Attack logic
    }

    void OnTriggerEnter(Collision other)
    {
        if(other.CompareTag("Trap"))
        {
            TakeDamage(50);
        }
    }

    void Update()
    {
        if (Distance(gameObject.transform,position, player.transform.position) > CalculateRange(speed/5)
        {
            Attack();
        }
    }
    
}

Opdracht 1

Ik heb een inventory systeem gemaakt volgen de conventies.

Items in inventory

Inventory System Script
Inventory Item Script

PROG les 7: Class Diagrams

Opdracht 10: Class Diagram van je TD project

Ik heb een class diagram van de TD project in mermaid gemaakt.

---
title: Tower Defense
---
classDiagram

    Flowfield ..> Cell
    Flowfield ..> GridDirection
    GridController ..> Flowfield
    TowerController ..> PlayerStats
    TowerController ..> BulletDamage
    TowerSpawner ..> GridController
    TowerSpawner ..> Cell
    BulletDamage ..> EnemyController
    EnemyController ..> GridController
    EnemyController ..> PlayerStats
    EnemyController ..> WaveSpawner
    EnemyController ..> Cell
    WaveSpawner ..> GridController
    GridDirection <..> Cell

    class Flowfield {
        +Dictionary~string, TileBase~ tileDictionary
        +Tilemap roughTerrainTilemap
        +Tilemap impassibleTerrainTilemap
        +Cell[,] grid
        +Vector2Int gridSize
        +float cellRadius
        +float cellDiameter
        -Cell destinationCell

        +CreateGrid()
        +CreateCostField()
        +CreateIntegrationField(Cell destinationCell)
        +CreateFlowfield()
        +GetCardinalCells(Vector2Int nodeIndex, List~GridDirection~ directions) List~Cell~
        +GetCellAtRelativePosition(Vector2Int originPosition, Vector2Int relativePosition) Cell
        +WorldToCell(Vector3 worldPosition) Cell
    }

    class GridController {
        +Tilemap roughTerrainTilemap
        +Tilemap impassibleTerrainTilemap
        +Vector2Int gridSize
        +float cellradius
        +Flowfield currentFlowfield

        +InitializeFlowfield()
        -Start()
    }

    class PlayerStats {
        +int money
        -TMP_Text healthDisplay
        -TMP_Text moneyDisplay
        -int health

        +LoseHealth(int damage)
        +ChangeMoney(int loss)
    }

    class Shop {
        -GameObject ShopUI

        +OnClick()
    }

    class TowerController {
        -GameObject bulletPrefab 
        -Text towerLevelDisplay 
        -List~GameObject~ targetList
        -PlayerStats playerStats 
        -CircleCollider2D towerCollider 
        -GameObject bullet 
        -int level
        -int damage
        -float delay
        -bool isAttacking

        +UpgradeTower()
        -TowerAttack()
        -OnTriggerEnter2D(Collider2D other)
        -OnTriggerExit2D(Collider2D other)
        -Start()
    }
    
    class TowerSpawner {
        -Tilemap impassibleTerrainTilemap
        -GridController gridController
        -PlayerStats playerStats
        -GameObject towerPrefab
        -GameObject towerPreview
        -Cell cellBelow
        -Vector3 mousePosition
        -Vector3 roundedMousePosition
        -bool isPlacing

        +PlaceTower()
        +OnRightClick(InputAction.CallbackContext context)
        +OnLeftClick(InputAction.CallbackContext context)
        -Update()
    }

    class BulletDamage {
        +Vector3 moveDirection
        +int damage
        -float speed
        -float timer

        -OnTriggerEnter2D(Collider2D collision)
        -FixedUpdate()
    }

    class EnemyController {
        -int health
        -float speed
        -GridController gridController
        -WaveSpawner waveSpawner
        -PlayerStats playerStats
        -Cell cellBelow

        +LoseHealth(int damage)
        -FixedUpdate()
        -Start()    
    }

    class WaveSpawner {
        +int enemiesAlive
        -GridController gridController
        -TMP_Text WaveText
        -GameObject[] enemyList
        -int waveCount
        -float delay
        -float waveBudget
        -Vector3 spawnPosition

        +OnSpacebar(InputAction.CallbackContext context)
        -SpawnWave()
        -Start()
    }

    class Cell["Cell(Vector3 _worldPosition, Vector2Int _gridIndex)"] {
        +Vector3 worldPosition
        +Vector2Int gridIndex
        +GridDirection bestDirection
        +bool hasTower
        +byte cost
        +ushort bestCost

        +SetCost(int amount)
    }

    class GridDirection["GridDirection(int x, int y)"] {
        +Vector2Int vector
        +GridDirection None
        +GridDirection North
        +GridDirection East
        +GridDirection South
        +GridDirection West

        +GetDirectionFromVector(Vector2Int vector) GridDirection
    }

    class GridDebug {
        +Sprite[] flowfieldIcons
        -GridController gridController
        -bool displayGrid
        -FlowfieldDisplayType currentDisplayType

        +DrawFlowfield()
        +ClearCellDisplay()
        -DisplayAllCells()
        -DisplayDestinationCell()
        -DisplayCell(Cell cell)
        -DrawGrid(Vector2Int drawGridSize, Color drawColor, float drawCellRadius)
        -OnDrawGizmos()
        -OnValidate()
    }
Loading

TowerDefense Repository

Les 3 - Data Structures in Unity

Oefening 1

  1. Bool
  2. MonoBehaviour
  3. Vector3
  4. Struct

Oefening 2

public class Enemy : MonoBehaviour {
    public bool enemyType;

    public struct Stats {
        public float health;
        public float damage;
        public float speed;
    }
}

Opdracht 3: Inventory & Item Management System

Ik heb data structuren gebruikt om een inventory te maken.

Filtering items by type

Inventory Script
Item Script
Item Stats Script
Item Template Script
Item Type Script

Les 4 - Delegates

Opdracht 4: Score Collection Game

Ik heb een score collection game gemaakt met loose coupling.

Player beweegt en pakt ballen op

Player Movement Script
Pickup Script
Scoreboard Script

PROG: OOP Abstractie

Oefening: Pickup & Trap Systeem

Ik heb abstractie gebruikt om code te hergebruiken.

Player pakt collectables

Collectable Manager Script
Collectable Script
Health Pickup Script
Coin Pickup Script
Damage Trap Script

Polymorfisme

Praktische Opdracht: Battle Arena

Ik heb polymorfisme gebruikt om een battle arena te maken.

Battle arena waar enemies je aanvallen

Battle Manager Script
Enemy Script
Zombie Script
Goblin Script
Dragon Script
Phoenix Script
Vampire Script
Minotaur Script
Banshee Script
Troll Script
Werewolf Script

Les 7 : Early Return Patterns

Practische Opdracht : Flatten the Pyramid

Ik heb early returns gebruikt om code te denesten.

public bool IsPlayerReadyToAttack(Player player)
{
    if (player == null) return false;
    
    //Level1
    if (!player.isAlive) return false;
    
    //Level
    if (player.attackCooldown > 0) return false;

    //Level3
    if (player.target == null) return false;

    //Level4
    if (!player.target.isAlive) return false;

    //Level5
    if (Vector3.Distance(player.transform.position, 
        player.target.transform.position) >= 5f)
        return false;
    
    //Level6
    // Nog meer geneste conditions met && en ||
    if ((player.mana < 20 || !player.weaponEquipped) &&
        (player.health <= 30 || !player.hasBuff("Strength")))
        return false;

    //Level7
    if (player.isStunned || player.isSlowed) return false;
    
    //Level8
    return true;
}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages