fel
le

Game PC és Katonák

  • korábbiak gyakorlása, konstruktor, property, konténer
  • több konstruktor készítése ugyanazon osztályhoz, this konstruktorhívás

Egy játékra alkalmas számítógép esetén nyilvántartunk néhány, a gépet jellemző adatot. Egy játékterembe gépeket helyezünk, melyeket a játékosok adott időre bérelhetnek. Minden gép bérleti díja akár különböző is lehet. A gép bérlésének kezdetét és végét jelezzük egy függvényhívással. Minden gép tárolja a saját bérleti díját, illetve hogy mennyi pénzt "kerestünk" már az adott géppel. A gépterem osztálya listaszerűen tárolja a gépeket (szabadokat és bérlés alattiakat is).

Computer class

  • memory: 1,2,4,6,8,12,16 Gb (egész, csak ezeket az értékeket fogadjuk el, nem módosítható)
  • processzor: AMD v INTEL (enumból, nem módosítható)
  • Magok száma: 1,2,4,8,16 (csak ezeket a számokat fogadjuk el, nem módosítható)
  • kibérlési díj/óra 200-2000 Ft (csak 100-al osztható, módosítható)
  • összes játszott órák száma (csak olvasható)
  • összes keresett pénz (csak olvasható)
  • fv bérlés történt( hossza percekben ), akkor hívjuk meg amikor egy bérlés befejeződött, megadjuk mennyi ideig volt bérelve a gép
  • konstruktor a memória, processzor, magok száma, bérleti díj paraméterekkel
  • konstruktor a processzor és bérleti díj paraméterrel, memória 8 Gb, magok száma 2
  • konstruktor a bérleti díj paraméterrel, előzőeken felül Intel a processzor
  • bérlés kezdete publikus mező, DateTime, értéke tetszőlegesen módosítható

A gepterem class, két listát kezel, a szabad és elfoglalt gépek listája

  • szabadGepekSzama, csak olvasható property, megadja hány szabad gép van,
  • szabad gépek listája, csak olvasható property, megadja az adott hívás pillanatában milyen szabad gépek szerepelnek a gépteremben
  • elfoglalt gépek listája, csak olvasható property, megadja az adott hívás pillanatában milyen foglalt gépek szerepelnek a gépteremben
  • fv berlesKezd(...) paramétere vagy egy gép vagy egy sorszám, amelyik gépet a szabad gépek listájáról bérelni kívánjuk. A függvény ha nem találja a nevezett gépet akkor kivételt dob. Ha megtalálja, akkor átrakja a gépet a foglalt gépek listájára, és beállítja annak bérlés kezdete mezőjét az aktuális időpontra (stat).
  • fv berletVege(..) paramétere egy gép vagy egy sorszám a bérelt gépek listájáról, amelynek a bérlését befejeztük. A fv kiszámolja a kezdet óta eltelt időt (percben), és meghívja a gép megfelelő "bérlés történt" függvényét, jelezve hogy a bérlés befejeződött, és hogy az tárolja el a bérleti díjat
  • összes játszott idő, csak olvasható property, megadja a gépterem összes gépeinek összes játszott idejét percben,
  • összes bevétel csak olvasható property, a gépterem összes gépeinek összes begyűjtött bérleti díja,

Főprogram: a gépterem példányhoz adjunk 15 db gépet, induláskor mind szabad, majd billentyűzetről kérjünk be egy sorszámot, az adott gépet foglaljuk le, várjunk egy Enter leütésére, majd szabadítsuk fel a gépet újra. Írassuk ki a gépterem jellemző adatait.

HF: Katonák

A katona osztály tárolja hogy

  • melyik hadseregbeli a katona, enum, fekete vagy fehér
  • erősség, skála érték, a barbár harcos testi ereje, 1..10, 1=gyenge, 10=nagyon erős, direktben nem módosítható csak olvasható
  • X és Y koordináta a harcmezőn, tetszőleges érték elfogadható, tetszőlegesen módosítható
  • konstruktor a hadsereg és az erő értékével,

A harcterület egy NxN terület (konténer):

  • konstruktor az N értékével
  • a konstruktor nem tartalmaz mátrixot, helyette listát kezel (nem publikus)
  • harcos hozzáad fv (bool), paramétere az harcos, valamint az X és Y koordináta a harcmezőn belül, az x,y koordinátát a harcos példány fogja tárolni majd (mindenki tárolja saját maga mi a koordinátája)
  • egy harcmezőn egyszerre csak egy harcos állhat, ezt viszont ellenőrzi a harcterület osztály oly módon, hogy a már korábban hozzáadott harcosok x,y koordinátája nem egyezhet meg ezen X,Y koordinátával,
  • valamint az X,Y koordináta a harcmező területén belülre kell mutasson
  • ha nem stimmel valami, a függvény kivételesen nem kivételt dob fel, hanem false értéket ad vissza
  • harcos választ fv, nincs paramétere, de a területről kiválaszt egy random harcos, az a fv visszatérési értéke
  • szomszédos baráti tagok ereje, paramétere egy harcos példány. A függvény megkeresi a harcost a harcmezőn, meghatározza X,Y koordinátáját, majd az 1 sugarú környezetében lévő, a harcossal egyező csapaba tartozó csapattagok erejét összegzi (beleértve a harcos erejét is)
  • szomszédos ellenséges tagok ereje fv, paramétere egy harcos. Hasonlóan az előzőhöz, megadja a harcos körül álló ellenséges katonák összerejét
  • harcos meghal fv, paramétere egy harcos, akit eltávolít a listáról
  • ellenség választ fv, paramétere egy harcos, akinek az 1 sugarú környezetéből egy ellenséges katonát kell random módon választani
  • összerő fv, paramétere egy hadsereg (fehér v fekete), meghatározza az adott hadseregbeli katonák összerejét

Főprogram:

  • készít egy 20x20 méretű harcterületet
  • 300 db random katonát ad hozzá random X,Y koordinátákkal, kezeli a harcos hozzáad fv által visszaadott false értéket is
  • végrehajt 200x: elkér egy random katonát, meghatároztatja a körülötte lévő baráti és ellenséges erők erejét. Ha a baráti a nagyobb, akkor elkér egy szomszédos ellenséges katonát, és az meghal. Ha az ellenséges erők voltak a nagyobbak, akkor az eredeti katona hal meg. Ha egyforma erősek, akkor a támadó nyer. Ha nincs szomszédos ellenséges katona, akkor nem hal meg senki.
  • a végén lekérdezi melyik hadseregnek mennyi a maradék ereje, és kiírja az erősebb nevét (győztes)

Megjegyzés: kis módosítással a harc menete vizuálisan is megjeleníthető a karakteres képernyőn


Megoldás (kezdemény)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void feltoltgamepc(gepterem T)
        {
            for (int i = 0; i < 5; i++)
            {
                game_computer x = new game_computer( 4, 4, (processor)rnd.Next(0, 3), rnd.Next(2, 20) * 100, rnd.Next(1, 100) % 2 == 0);
                T.gcL.Add(x);
               
            }
        }
        static void kiír(gepterem T)
        {
            foreach (game_computer x in T.gcL)
            {
                Console.WriteLine("{0} magszám", x.magszam);
                Console.WriteLine("{0} memoria", x.memoria);
                Console.WriteLine("{0} proci", x.proci);
                Console.WriteLine("{0} bérlati dij", x.berletidij);
                Console.WriteLine("{0} (foglalt)", x.foglat);
                Console.WriteLine();
            }
        }
        static Random rnd = new Random();
        static void Main(string[] args)
        {
            gepterem t = new gepterem();
            feltoltgamepc(t);
            kiír(t);
            Console.WriteLine();
            int v=t.gepvalaszt();
            Console.WriteLine();
            t.gepelenged(v);
           
            Console.ReadLine();
        }
    }
    enum processor { AND64, Intel64, Intel32}

    class computer
    {
        protected int _memoria;
        protected processor _proci;
        protected int _magszam;

        public int memoria
        {
            set
            {
                if (value == 1 || value % 2 == 0 && value >= 2 && value <= 16 && value != 10 && value != 14) _memoria = value;
                else throw new Exception("Hiás memoria");
            }
            get { return _memoria; }
        }
        public int magszam
        {
            //set
            //{
            //    if ( value % 2 == 0 && value >= 2 && value <= 8 ) _magszam = value;
            //    else throw new Exception("Hiás magszám");
            //}
            get { return _magszam; }
        }
        public processor proci
        {
            get { return _proci; }
        }

        public computer (int pMemoria, int pMagszam, processor pProci)
        {
            memoria = pMemoria;
            if (pMagszam % 2 == 0 && pMagszam >= 2 && pMagszam <= 8) _magszam = pMagszam;
            else throw new Exception("Hiás magszám");
            _proci = pProci;

           
        }

        public computer(int pMagszam, processor pProci) : this(8, pMagszam, pProci) { }
    }

    class game_computer : computer
    {
        protected int _berletidij;
        public bool foglat;

        public int berletidij
        {
            set
            {
                if (value % 100 == 0 && value >= 200 && value <= 2000) _berletidij = value;
                else throw new Exception("hibás berletidíj");
            }
            get
            {
                return _berletidij;
            }
        }

        public void jatszottak(int ora)
        {
            Console.WriteLine("{0} órát játszottak.",ora);
            Console.WriteLine("{0} Ft -ot dobált bele a gépbe... -.- .", berletidij*ora);
        }

        public game_computer(int pMemoria, int pMagszam, processor pProci, int pBreletidij, bool pFoglalt)
            : base(pMemoria, pMagszam, pProci)
        {
            berletidij = pBreletidij;
            foglat = pFoglalt;
        }
    }
    class gepterem
    {
        Random r = new Random();
        public List<game_computer> gcL = new List<game_computer>();

        public int gepvalaszt()
        {
            int gepszam = -1;
            for (int i = 0; i < gcL.Count; i++)
            {
                if (gcL[i].foglat == false)
                {
                    Console.WriteLine("{0}. gép szabad azzal játszhatsz.",i);
                    gcL[i].foglat = true;

                    gepszam=i;
                    break;
                }
            }
            return gepszam;

           
        }
        public void gepelenged(int gepindex)
        {
            Console.WriteLine("{0}. gép most már szabad.", gepindex);
            gcL[gepindex].jatszottak(r.Next(1,10));
            gcL[gepindex].foglat = false;
        }
    }
}
 
Hernyák Zoltán
2013-04-30 17:53:07