Az alábbi feladatok megoldhatók Unity-n belül, de akár C# parancssori alkalmazásban is.
Szükséged van a megfelelő programkönyvtárra (névtérre).
Tehát a file elején mindenképp írd ki: using UnityEngine;
Ekkor a bemenő értékek beolvasását végezheted a [SerializeField] tagváltozókkal.
A kimenő adatokat pedig kiírathatod Debug.Log() metódus segítségével vagy felvehetsz erre a célra is [SerializeField] tagváltozókat.
A Unity matematikai könyvtárát Mathf néven éred el.
Ne feledd el, hogy megírt MonoBehaviour scripteket, hozzá kell adni egy GameObject-hez!
Szükséged van a megfelelő programkönyvtárra (névtérre).
Tehát a file elején mindenképp írd ki: using System;
Ekkor a bemenő értékek beolvasását végezheted a Console.ReadLine() metódussal.
A kimenő adatokat pedig kiírathatod Console.WriteLine() segítségével.
A C# matematikai könyvtárát Math néven éred el.
using UnityEngine;
OnValidate() Unity üzenetmetódust.Ehelyett használhatsz Start() metódust is, ami az objektum létrejöttekor fut le.
Vagy, olvasd el az OnValidate()-ről szóló elméleti leckét: Az OnValidate metódus.
Számok (int, float) és a string típus
Írj programot, ami kiszámolja a és b lebegőpontos (float) számok
- összegét,
- különbségét,
- szorzatát és
- hányadosát!
A változók, egyszerű típusok és a matematika alapműveletei a számítástechnika alapjai. A programozás minden területén visszaköszönnek és ez alól a játékfejlesztés sem kivétel. Begyakorlásuk és magabiztos használatuk elengedhetetlen bármiféle szoftvert is kíván készíteni az ember.
Példák:
Összeadás: A kardom támadópontjához hozzáadódik a talizmánom támadópontja.
Kivonás: Minden esetben ha találat ér, az életem csökken valamennyivel.
Szorzás: A gyors sorozatban leadott támadással nő a sebzésem (Combo). Minden újabb ütéssel mondjuk 1.1-szerese lesz az előzőnek.
Osztás: Egy RPG játékban 4 fős csapatom talál egy csirkecombot, ami képes 100 életet gyógyítani. Ezt eldönthetem, hogy kik eszik meg. Ha pl. csak a mágus és a tolvaj eszik, akkor ők ketten gyógyulnak 50-50 életpontotat, ha minden bajtárs egyformán kap a zsákmányból, akkor mindenki 25-öt gyógyul.
Írj programot, ami kiírja a, és b egész (int) számok egész hányadosát és osztás utáni maradékát!
Bemenet: 14, 5. Kimenet: 2, 4 (Mivel 14-ben az 5 megvan 2-szer. Maradék, a 4.)
Bemenet: 23, 3. Kimenet: 7, 2 (Mivel 23-ben az 3 megvan 7-szer. Maradék, a 2.)
Bemenet: 4, 66. Kimenet: 0, 4 (Mivel 4-ben az 66 megvan 0-szor. Maradék, a 4.)
Írj programot, ami kiszámolja 5 egész szám pontos átlagát.
class TextConcatenation : MonoBehaviour
{
[SerializeField] int i1, i2, i3, i4, i5; // Bemenetek
[SerializeField] float mean; // Kimenet
void OnValidate()
{
int sum = i1 + i2 + i3 + i4 + i5;
mean = sum / 5f;
}
}int n1 = 4, n2 = 9, n3 = 12, n4 = -2, n5 = 6;
// Számítások elvégzése:
int sum = n1 + n2 + n3 + n4 + n5;
float mean = sum / 5f;
// Kiíratás:
Console.WriteLine(mean);Pl: Egy stratégia játékban egy szamban tároljuk az embereink morálszintjét. Ha az emberek álag moral-ja egy bizonyos szint alá csökken, lázadás tör ki.
Írj programot, ami összefűz 5 string-et szóközzel elválasztva!
string s1 = "Never", s2 = "gonna", s3 = "give", s4 = "you", s5 = "up";
// Számítások elvégzése:
string concatenated = s1 + " " + s2 + " " + s3 + " " + s4 + " " + s5;
// Kiíratás:
concatenated.WriteLine(full);Írj programot, ami kiírja a, és b egész int számok összegét az művelettel együtt!
Például: Ha a bemenet 4 és 7, akkor a következő legyen a kimeneti string változó tartalma:
”4 + 7 = 11”
class EvenTester : MonoBehaviour
{
[SerializeField] int a, b; // Bemenetek
void OnValidate()
{
float sum = a + b;
string text= $"{a} + {b} = {sum}";
Debug.Log(text);
}
}A bemeneti változókat a konzolról olvasd be!
// Beolvasás:
Console.WriteLine("Insert Number 1!");
string line1 = Console.ReadLine();
float a = float.Parse(line1);
Console.WriteLine("Insert Number 2!");
string line2 = Console.ReadLine();
float b = float.Parse(line2);
// Számítások elvégzése:
float sum = a + b;
string textAnswer = $"{a} + {b} = {sum}";
// Kiíratás:
Console.WriteLine(textAnswer);Pl.: Ki akarjuk íratni a játékosnak mennyit fog sebezni a következő ütése. Ebbe bele van számolva a karakter alapsebzése és különböző módosítók amik a felszereléséből jönnek: Sebzés: 4 + 5 (Goblinölő kard) + 3 (Legendás bocskor) = 12
Írj programot, ami bemeneti váltókban kap két egész számot és kiírja a két szám osztásának egész eredményét és maradékát!
Például: Ha a bemenet 38 és 5, akkor ezt írja ki: ”38-ban 5 megvan 7-szer, maradék: 3”
A toldalékolás helyességével ne foglalkozzatok! (Mindegy hogy -ban vagy -ben.)
class Divider : MonoBehaviour
{
[SerializeField] int a, b; // Bemenetek
void Start()
{
int quotient = a / b;
int remainder = a % b;
string text = $"{a}-ben a {a} megvan {quotient}-szer, maradék a(z) {remainder}.";
Debug.Log(text);
}
}Írj programot, ami egy kör sugara alapján kiszámolja annak kerületét és területét.
Keru¨let=2r×π
Teru¨let=r2×π
class Circle : MonoBehaviour
{
[SerializeField] float radius; // Bemenet
[SerializeField] float circumference, area; // Kimenet
void OnValidate()
{
float pi = 3.14f; // Pi értékét felvesszük segédváltozóba
circumference = 2 * radius * pi; // Kerület
area = radius * radius * pi; // Terület
}
}Írj programot, ami kicseréli két string típusú változó értékét!
string a = "John Travolta";
string b = "Nicolas Cage";
string c = a; // Segédváltozó
a = b;
b = c;Írj programot, ami kicseréli két int típusú változó értékét! úgy, hogy egyéb változót nem használ hozzá.
Vizsgáld meg jól, milyen különbségek vannak ez és az előző felada közt. Hátha segít. 😉
int a = 3;
int b = 8;
a += b; // a = a + b = 3 + 8 = 11
b -= a; // b = b - a = 8 - 11 = -3
b = -b; // b = -(-3) = 3
a -= b; // a = a - b = 11 - 3 = 8
// Minden számra működik.
// Próbáld ki nyugodtan!Van egy másik (egyszerűbb) megoldás is:
(a, b) = (b, a); // De ezt nem tanultuk
// Ennek teljes megértéséhez viszont ismerni kéne
// a tuple és a deconstructor programozási fogalmakat,
// amikkel jelen kúrzuson nem foglalkozunk.Gondolkodj úgy mint a számítógép és fejben számold ki, hogy mi lesz az x kezdetű változók értéke, és típusa miután végrehajtjuk a következő kódot!
Kiegészítő anyag: A var kulcsszó behelyettesíthető bármilyen típus helyett lokális változó deklarálásánál, ha egyből definiáljuk is a változót. Ekkor nincs feltétlenül szükség kiírni a típust, hiszen az egyből kiderül az értékadásból.
int a = 2, b = 4, c = 5;
string d = "D" , e = "E", f = "F";
var x1 = a + b + c;
var x2 = a + b + e;
var x3 = b + d + c;
var x4 = f + a + b;
var x5 = a + b * c;
x5 /= 8;
var x6 = x5 / b;
x6++;
var x7 = x6 / 2f;
x7--;
var x8 = -1 * x7;
x8 *= x8;x1 = 11 (int) x2 = “6E” (string) x3 = “4D5” (string) x4 = “F24” (string) x5 = 2 (int) x6 = 1 (int) x7 = -0.5f (float) x8 = 0.25f (float)
Az eldöntendő típus: bool
Találj ki példákat, a valós életből, szoftver- vagy játékfejlesztélsből arra, hogy hol használjuk a logikai ÉS, VAGY, XOR (kizáró vagy) műveletket!
Írj programot, ami megadja egy bemeneti egész számról, hogy maradék nélkül osztható-e
- 7-tel,
- 15-gyel és
- 99-cel!
Bemenet:
451
Kimenet:
Osztható 7-tel: true Osztható 15-tel: false Osztható 99-cel: false
Egy hatlövetű fegyver kódját írjuk épp, amit minden 6. lövés után tölteni kell. Ez ugyanúgy a lövés gomb hatására történik meg. Ha számoljuk, hányszor nyomjuk meg a lövés gombot és ez a szám 7-tel való oszthatóságát teszteljük ennek eredménye, mindig megadja, hogy éppen töltenünk kell-e.
Írj programot, ami megmondja egy bemeneti változóban megadott egész számról, hogy páros-e!
class EvenTester : MonoBehaviour
{
[SerializeField] int number; // Bemenet
[SerializeField] bool isEven; // Kimenet
void OnValidate()
{
isEven = number % 2 == 0; // A szám páros ha osztva 2-vel (% 2)
// nem ad maradékot (==0)
}
}// Beolvasás:
Console.WriteLine("Insert an integer number!");
string line = Console.ReadLine();
int number = int.Parse(line);
// Számítások elvégzése:
bool isEven = number % 2 == 0;
// Kiíratás:
Console.WriteLine("Páros: " + isEven);Írj programot, ami megmondja egy egész számról, hogy maradék nélkül osztható-e egy másik bemeneten megadott számmal!
class DivisibilityTester : MonoBehaviour
{
[SerializeField] int a, b; // Bemenetek
[SerializeField] bool isDivisible; // Kimenet
void OnValidate()
{
isDivisible = a % b == 0;
}
}// Beolvasás:
Console.WriteLine("Insert Number 1!");
string line1 = Console.ReadLine();
int a = int.Parse(line1);
Console.WriteLine("Insert Number 2!");
string line2 = Console.ReadLine();
int b = int.Parse(line2);
// Számítások elvégzése:
bool isDivisible = a % b == 0;
// Kiíratás:
Console.WriteLine($"{a} osztható {b}-vel: " + isDivisible);Írj programot, ami bekéri egy háromszög oldalainak hosszát növekvő sorrendben és kiszámolja, hogy a háromszög derékszögű-e!
Az ilyen számokat Pitagoraszi számhármasnak is nevezzük.
Három olyan egész szám, amiket ha oldalhosszként használunk egy háromszög megépítéséhez a keletkezett háromszög derékszögű lesz.
A Pitagorasz tétel értelmében ezen (a, b, c) számokra igaz, hogy:
a2+b2=c2
Híres pitagoraszi számhármas például a ( 3, 4, 5 )
(3×3)+(4×4)=(5×5)
class PythagoreanTest : MonoBehaviour
{
// Bemeneti változók:
[SerializeField] float a, b, c; // Háromszög oldalai
// Kimeneti változó:
[SerializeField] bool isPythagorean; // Pitagoraszi számhármas-e
void OnValidate()
{
// Pitagorasz-tétel alkalmazása:
isPythagorean = a * a + b * b == c * c;
}
}Egy különös csuklyás árussal találkozunk az út szélén. Az árus elmondja, hogy ő nem hétköznapi kereskedő. Nem csak aranyat fogad el fizetségül hanem vért is. Minden aranypénz helyett elfogad 5 HP-t is. (HP = Health Point = életpont). Egy árucikkért csak aranyban vagy csak vérben fizethetünk. Keverni nem tudunk.
3 pontékét árul a következő árakon
- Bunkók buzogánya: 10 arany
- Trükkös tőr: 4 arany
- Vámpírfog: 13 arany
Azt megengedjük, hogy elfogyjon minden pénzünk, de azt nem, hogy elfogyjunk minden HP-nk és meghaljunk egy árucikkért.
Írj programot, ami a következő változókat bekéri az aranyunk és a és HP-nk mennyiségét, majd ezek alapján kiírja minden egyes árucikkről, hogy meg tudjuk-e venni!
Újra találkozunk az árussal aki éhesebb, mint valaha, ezért hajlandó kicsit engedni a korábbi szabályain.
Oldd meg az előző feladatot azzal a különbséggel, hogy már lehet vegyíteni az egy árucikkért megvételére használt fizetőeszközöket!
Pl.: 10 aranyat érő árucikket már meg lehet venni mondjuk 8 aranyért és 10 HP-ért.
Ezúttal adj választ arra is, hogy mindent meg tudsz-e venni!
Írj programot, ami kiírja, hogy mennyi ideig tart egy ellenfélnek, hogy elérjen hozzánk.
A program 4 számot kér be
float dx: X tengely mentén hány méter távol van tőlünk az ellenfél.float dy: Y tengely mentén hány méter távol van tőlünk az ellenfél.float enemySpeed: Az ellenfél sebessége. (m/s-ban)
Pitagorasz tétel:
Egyenletes mozgás
a2+b2=c2
v=s/t
t=s/v
class HowMuchTime : MonoBehaviour
{
[SerializeField] float dx, dy, speed; // Bemenetek
[SerializeField] float time; // Kimenet
void OnValidate()
{
// Pitagorasz rétel
float distanceSquare = (dx * dx) + (dy * dy);
float distance = Mathf.Sqrt(distanceSquare);
time = distance / speed;
}
}Stratégiai kártyajátékot készítünk, amiben minden egyes kártyának megvannak a feltételei, hogy mikor játszhatók ki.
A következő kártyák vannak a kezemben:
- Bunkók buzogánya
- Trükkös tőr
- Vámpírfog
Kijátszása 3 manába kerül. Ha ennél kevesebb van, nem játszható ki. Emellett feltétel, hogy az ellenfél ne legyen ember és hogy az energiánk nagyobb legyen 5-nél.
Ingyen (Mana felhasználása nélkül) kijátszható akkor, ha kevesebb életpontom van, mint az ellenfélnek, vagy pedig akkor, ha kevesebb vagy pont annyi életünk van, mint a maximális életpontjaink fele. Mivel a tőr a gazdáját is sebzi, semmiképp nem játszató ki ha több 10 vagy annál kevesebb az életpontunk.
Kijátszása 2 manába kerül vagy, ha nincs annyik akkor 5 életpontba. Akkor játszható ki ha az ellenfél ember vagy az energiánk legalább 3. Ha maximum életünk van, a lap nem kijátszható.
Írj programot, ami a szükséges bemeneti információkból kiszámolja, minden lapra, külön külön, hogy kijátszható-e!
A feladat a bementő paraméterek megadásával kezdődik:
float mana = 10; // Manaánk menynisége
int hp = 50; // Életpontjaink
int maxHp = 100; // Maximum életpontunk
float energy = 2.5f; // Energiánk menynisége
int enemyHp = 25; // Ellenfél életpontjai
bool isEnemyHuman =false; // Ellenfél ember-e ?A nagy múltú Random Egyetem különböző karainak furcsa, a kívülállók számára talán teljesen véletlenszerűnek tűnő felvételi követelményei vannak.
- Bakli kar
- Plimpli kar
- Tropli kar
Akkor vesznek fel, ha magasabb vagy 165 cm-nél, de nem nagyobb 200-nál és 2000-ben vagy azután születtél. Kizáró ok, ha horkolsz.
Akkor tudsz bekerülni, ha kisebb vagy 180 cm-nél vagy nagyobb 210-nél. Viszont ha a vezeték és keresztneved megegyezik instant felvesznek.
Tropli Tivadar nagy ellensége volt Plimpli Petóniának ezért azt, akit a Plimpli karra felvennének azt a Tropli karon biztos nem fogadják. Emellett a lányok közül csak az járhat a karra, akinek kisebb a magassága, mint 150 cm, a fiúk közül pedig csak az, aki horkol.
Írj programot, ami a szükséges információk kitöltése után kiszámolja, minden szakra külön külön, hogy megfelelsz a követelményeknek és az eredményt kiírja a konzolra.
Első lépésnek vegyük számba milyen információk kellenek ahhoz, hogy tudjunk dönteni! és eszerint vedd fel a szükséges bemeneti változókat a megfelelő típussal!
string firstName = "Elemér"; // Keresztnév
string familyName = "Lapos"; // Vezetéknév
// ...