(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{107:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return b})),a.d(t,"rightToc",(function(){return o})),a.d(t,"default",(function(){return m}));var n=a(2),r=a(6),l=(a(0),a(131)),i={title:"Course requirements",description:"Requirements to finish the NI-APH course"},b={unversionedId:"requirements",id:"requirements",isDocsHomePage:!1,title:"Course requirements",description:"Requirements to finish the NI-APH course",source:"@site/docs\\requirements.md",slug:"/requirements",permalink:"/docs/requirements",version:"current",sidebar:"docs",previous:{title:"Environment",permalink:"/docs/environment"},next:{title:"PIXI-ECS Docs",permalink:"/docs/ecsdocs"}},o=[{value:"Total evaluation",id:"total-evaluation",children:[]},{value:"Project rules",id:"project-rules",children:[{value:"Evaluation",id:"evaluation",children:[]},{value:"How to start",id:"how-to-start",children:[]},{value:"Project description",id:"project-description",children:[]},{value:"Instructions for submitting",id:"instructions-for-submitting",children:[]},{value:"Milestones",id:"milestones",children:[]}]},{value:"Exam requirements",id:"exam-requirements",children:[]},{value:"Evaluation table",id:"evaluation-table",children:[]}],c={rightToc:o};function m(e){var t=e.components,a=Object(r.a)(e,["components"]);return Object(l.b)("wrapper",Object(n.a)({},c,a,{components:t,mdxType:"MDXLayout"}),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"demonstrate some degree of effort in your project")),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"prove that you have learned something")),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"have fun"))),Object(l.b)("h2",{id:"total-evaluation"},"Total evaluation"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"will be collected on ",Object(l.b)("a",Object(n.a)({parentName:"li"},{href:"https://grades.fit.cvut.cz/"}),"grades.fit.cvut.cz")),Object(l.b)("li",{parentName:"ul"},"100 points, 70 for the project, 30 for the exam"),Object(l.b)("li",{parentName:"ul"},"to pass, you need to get:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"35 points from your project"),Object(l.b)("li",{parentName:"ul"},"15 points from the exam"),Object(l.b)("li",{parentName:"ul"},"50 points in total")))),Object(l.b)("h2",{id:"project-rules"},"Project rules"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"you can work as an individual or as a group of two (in such a case, however, the complexity of the work should look like so)"),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"implement a simple web game")),Object(l.b)("li",{parentName:"ul"},"if you haven't worked with any game engine yet, ",Object(l.b)("strong",{parentName:"li"},"it's recommended to choose PixiJS library"),", since it will be provided with many examples and minigames",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"yet, you can use any game engine you like"))),Object(l.b)("li",{parentName:"ul"},"the game will be deployed as a ",Object(l.b)("strong",{parentName:"li"},"web application")," (you can either use gitlab CI/CD or any service of your choosing)"),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"the topic is solely up to you"),", yet it must be approved by the lecturer"),Object(l.b)("li",{parentName:"ul"},"the game, especially the implementation of its mechanics, must be your own contribution. If you use any 3rd party libraries, tools, assets, or any existing minigames as a template project, it must be documented in the readme"),Object(l.b)("li",{parentName:"ul"},"game assets, such as images and sounds, should have ",Object(l.b)("strong",{parentName:"li"},"Public Domain")," license or any other license that makes the assets freely available"),Object(l.b)("li",{parentName:"ul"},"pay your utmost attention to the technical solution, ",Object(l.b)("strong",{parentName:"li"},"clean code")," and polished gameplay"),Object(l.b)("li",{parentName:"ul"},"the deadline is set at ",Object(l.b)("strong",{parentName:"li"},"10.1.2021"))),Object(l.b)("h3",{id:"evaluation"},"Evaluation"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"in order to receive maximum points, you must prove that ",Object(l.b)("strong",{parentName:"li"},"some effortful work went into your solution and you analyzed well the mechanics you implemented")," "),Object(l.b)("li",{parentName:"ul"},"the only mandatory part is the Component Architecture",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"implement your game using ECS pattern (or any other specific pattern if the library/engine you chose supports it)"),Object(l.b)("li",{parentName:"ul"},"requirements: functional behavior of the game is divided into components that communicate primarily via messaging pattern"))),Object(l.b)("li",{parentName:"ul"},"it is better to submit a very simple yet polished and completed game than an ambicious somehow-working prototype"),Object(l.b)("li",{parentName:"ul"},"some mechanics you may choose from:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"interesting AI"),Object(l.b)("li",{parentName:"ul"},"advanced pathfinding"),Object(l.b)("li",{parentName:"ul"},"dialogue tree for event-based adventure game"),Object(l.b)("li",{parentName:"ul"},"particle systems"),Object(l.b)("li",{parentName:"ul"},"advanced steering behaviors"),Object(l.b)("li",{parentName:"ul"},"adaptive audio"),Object(l.b)("li",{parentName:"ul"},"advanced randomness (Perlin Noise)"),Object(l.b)("li",{parentName:"ul"},"looting table"),Object(l.b)("li",{parentName:"ul"},"physics engine (simple collision detector and resolver)")))),Object(l.b)("h3",{id:"how-to-start"},"How to start"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"analyse a few existing games"),Object(l.b)("li",{parentName:"ul"},"pick up some interesting mechanics"),Object(l.b)("li",{parentName:"ul"},"choose one mechanic that will be the most challenging one from technical perspective"),Object(l.b)("li",{parentName:"ul"},"make up or download very simple assets (dots, squares, circles)"),Object(l.b)("li",{parentName:"ul"},"start prototyping"),Object(l.b)("li",{parentName:"ul"},"bring your gaming mechanics to perfection"),Object(l.b)("li",{parentName:"ul"},"polish your game (better assets, better HUD,...)"),Object(l.b)("li",{parentName:"ul"},"prepare your game for submitting (add readme, diagrams, refactor your code a bit,...)")),Object(l.b)("h3",{id:"project-description"},"Project description"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"submit until 8.10."),Object(l.b)("li",{parentName:"ul"},"content: your team, engine/library of your choosing, list of game mechanics")),Object(l.b)("p",null,Object(l.b)("strong",{parentName:"p"},"Example:")),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"Genre: Platformer"),Object(l.b)("li",{parentName:"ul"},"Library: PixiJS"),Object(l.b)("li",{parentName:"ul"},"Space: 2D world, sidescroller, grid environment, 2 maps to choose from"),Object(l.b)("li",{parentName:"ul"},"Objects: animated player, enemies, power-ups, weapons, platforms"),Object(l.b)("li",{parentName:"ul"},"Actions",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"running, jumping over platforms, picking up power-ups, killing enemies, switching weapons"))),Object(l.b)("li",{parentName:"ul"},"Rules",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"player has got 2 weapons: a laser and a rifle. The laser affects the target instantly, the rifle shoots projectiles at a given speed"),Object(l.b)("li",{parentName:"ul"},"enemies spawn randomly"),Object(l.b)("li",{parentName:"ul"},"there is no exit. The goal is to survive as long as possible."),Object(l.b)("li",{parentName:"ul"},"power-ups are falling from above. They add damage boost and extra speed to the player"))),Object(l.b)("li",{parentName:"ul"},"Technical mechanic",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"AI behavior - enemies will jump over platforms, chasing the player, capable of avoiding projectiles")))),Object(l.b)("h3",{id:"instructions-for-submitting"},"Instructions for submitting"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"create your own repository under your username. The name should be NI-APH ",Object(l.b)("inlineCode",{parentName:"li"},"gitlab.fit.cvut.cz//NI-APH")),Object(l.b)("li",{parentName:"ul"},"assign access permission to the lecturer (loginname svecadam)"),Object(l.b)("li",{parentName:"ul"},"if you choose to use PixiJS or ThreeJS library for your work:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"fork this repo to your own project"),Object(l.b)("li",{parentName:"ul"},"execute script ",Object(l.b)("inlineCode",{parentName:"li"},"npm run clean-repo"),", this will remove all materials, slides and other things not related to coding"),Object(l.b)("li",{parentName:"ul"},"remove all unnecessary dependencies from ",Object(l.b)("inlineCode",{parentName:"li"},"package.json")),Object(l.b)("li",{parentName:"ul"},"execute ",Object(l.b)("inlineCode",{parentName:"li"},"npm run dev")),Object(l.b)("li",{parentName:"ul"},"go to ",Object(l.b)("inlineCode",{parentName:"li"},"localhost:1234"),", you should see the skeleton project"),Object(l.b)("li",{parentName:"ul"},"skeleton is located in ",Object(l.b)("inlineCode",{parentName:"li"},"src/my-game"),", loaded from ",Object(l.b)("inlineCode",{parentName:"li"},"view/index.html")),Object(l.b)("li",{parentName:"ul"},"happy working"))),Object(l.b)("li",{parentName:"ul"},"your repository must contain ONLY your game and documentation in the README (or any other files that are linked from the readme)"),Object(l.b)("li",{parentName:"ul"},"readme should contain following information:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"where the game is deployed"),Object(l.b)("li",{parentName:"ul"},"how to make the game install and run"),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"diagram of the game architecture")),Object(l.b)("li",{parentName:"ul"},"short description and manual, if necessary")))),Object(l.b)("h3",{id:"milestones"},"Milestones"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"until 8.10"),", prepare the description of your project:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"your team (if you are gonna work as an individual or in a group of two)"),Object(l.b)("li",{parentName:"ul"},"list of game mechanics (space, objects, action, rules)"),Object(l.b)("li",{parentName:"ul"},"library/game engine you chose"),Object(l.b)("li",{parentName:"ul"},"send it all to the lecturer either via e-mail or in the MSTeams chat"))),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"on 26.11 and 3.12")," for each group respectively:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"every team/individual will present their progress during the lab"))),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"until ",Object(l.b)("del",{parentName:"strong"},"5.1.")," 10.1. 2021"),Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"finish and submit your project"))),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"after ",Object(l.b)("del",{parentName:"strong"},"5.1.")," 10.1. 2021"),Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"schedule a meeting with the lecturer for the final evaluation and the oral exam")))),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Date"),Object(l.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Description"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"8.10."),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"List of mechanics for approval")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"26.11 / 3.12"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Presentation of the progress")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),Object(l.b)("del",{parentName:"td"},"5.1.")," 10.1."),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Deadline")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"January"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Evaluation + exam")))),Object(l.b)("h2",{id:"exam-requirements"},"Exam requirements"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"just oral part, ",Object(l.b)("strong",{parentName:"li"},"30 points")," in total"),Object(l.b)("li",{parentName:"ul"},"3 questions from topics that are marked with orange and red bulb in the slides"),Object(l.b)("li",{parentName:"ul"},Object(l.b)("strong",{parentName:"li"},"in order to pass, you must receive 15 points from the exam and 50 points in total"))),Object(l.b)("h2",{id:"evaluation-table"},"Evaluation table"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"according to the Study and Examination Rules for Students of CTU ")),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Grade"),Object(l.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Range"),Object(l.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Meaning"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"A"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"90+"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"excellent")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"B"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"80-89"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"very good")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"C"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"70-79"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"good")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"D"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"60-69"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"fine")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"E"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"50-59"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"satisfactory")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"F"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"0-49"),Object(l.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"unsatisfactory")))))}m.isMDXComponent=!0}}]);