M5Prog
Ik heb een Functions, Methods, Parameters & return type gebruikt.
Ik heb Class, Object, Constructor en Instantiate gebruikt.
Ik heb Lists en loops gebruikt.
Enemy Spawner Script
Enemy Controller Script
Ik heb Action Events gebruikt.
Player Movement Script
Pickup Script
Scoreboard Script
delta.magnitude is altijd > shotRange omdat shotRange gelijk aan 0 is.
targetTag is verkeerd getypt en gebruikt voordat de CallShot functie het kan veranderen met _targetTag
Ik heb de schip script opgesplit.
Ik heb de movement scripts gecombineerd en de message scripts gecombineerd.
Ik heb inheritance gebruikt.
Shoot From Camera Script
Projectile Script
Enemy Parent Script
Brute Script
Elf Script
Ik heb elke variable een voor een alle encapsulation veranderd
M6Prog
public class GameManager : MonoBehaviour
{
public bool isPlayerDead;
public Int HP;
private float jumpPower;
}
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();
}
}
}
Ik heb een inventory systeem gemaakt volgen de conventies.
Inventory System Script
Inventory Item Script
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()
}
- Bool
- MonoBehaviour
- Vector3
- Struct
public class Enemy : MonoBehaviour {
public bool enemyType;
public struct Stats {
public float health;
public float damage;
public float speed;
}
}
Ik heb data structuren gebruikt om een inventory te maken.
Inventory Script
Item Script
Item Stats Script
Item Template Script
Item Type Script
Ik heb een score collection game gemaakt met loose coupling.
Player Movement Script
Pickup Script
Scoreboard Script
Ik heb abstractie gebruikt om code te hergebruiken.
Collectable Manager Script
Collectable Script
Health Pickup Script
Coin Pickup Script
Damage Trap Script
Ik heb polymorfisme gebruikt om een battle arena te maken.
Battle Manager Script
Enemy Script
Zombie Script
Goblin Script
Dragon Script
Phoenix Script
Vampire Script
Minotaur Script
Banshee Script
Troll Script
Werewolf Script
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;
}













