• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# - Gra tekstowa. Dodawanie przedmiotów do plecaka

Object Storage Arubacloud
0 głosów
539 wizyt
pytanie zadane 28 czerwca 2018 w C# przez Scorpio240 Nowicjusz (120 p.)

Witam.
Utknąłem...
Piszę grę tekstową i mam problem z dodaniem itemka do plecaka (mianowicie brak pomysłu).
Itemki tworzę tak:

Klasa Item

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.IO;

namespace TekstWorld
{

    public class Item
    {
        protected bool destroy = false;
        protected string item_name;
        protected int item_lvl;
        protected int item_hand;
        protected int durability;
        protected int max_health_points;
        protected int strenght;
        protected int skill;
        protected int ability_power;
        protected int armor;
        protected int min_damage;
        protected int max_damage;
        protected int crit_chances;
        protected int dodge_chances;
        protected int movement_speed;
        protected int alchemist_skill;

        public void Decrease_durability(int x)
        {
            this.durability -= x;
            if (this.durability <= 0)
                this.destroy = true;
        }

        public string Get_item_name(Item item)
        {
            return this.item_name;
        }

    }
}

Klasa dziedzicząca po klasie Item (przedmiot):

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

namespace TekstWorld
{
    class Old_knife : Item
    {
        public Old_knife()
        {

            this.item_name = "Stary nóż";
            this.item_lvl = 1;
            this.item_hand = 1;
            this.skill = 2;
            this.max_health_points = 5;
            this.min_damage = 3;
            this.max_damage = 15;
            this.crit_chances = 5;
            this.dodge_chances = 5;
            this.strenght = 5;
            this.durability = 5;

        }

    }

}

I teraz przyszedł czas na wręczenie graczowi przedmiotu. Stworzyłem tablicę o rozmiarze odpowiadającym zmiennej max_backpack_place i wypełniłem

for (int i = 0; i < Player.max_backpack_place; i++)
            {
                backpack_slots[i] = "<empty>";
            }

Teraz fragmenty moich prób dodania przedmiotu do plecaka:

if (Player.player_class == "Złodziej")
            {
                foreach (var ch in "<Otrzymano>: Stara czapka złodzieja...\n<Otrzymano>: Stary nóż...\n<Otrzymano>: Stare spodnie złodzieja...")
                {
                    Console.Write(ch);
                    Thread.Sleep(10);
                }

                 equip.Add_to_backpack(new Old_thief_hat());
                 equip.Add_to_backpack(new Old_thief_pants());
                 equip.Add_to_backpack(new Old_knife());
            }

Klasa Equip:

using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Threading;
using System.IO;
using System.Diagnostics;

namespace TekstWorld
{

    public class Equip
    {
        static private Item item = new Item();

        string[] backpack_slots = new string[Player.max_backpack_place];

        public void Add_to_backpack(Item item)
        {
            for (int i = 0; i < Player.max_backpack_place; i++)
            {
                backpack_slots[i] = "<empty>";
            }

        }
        public void Show_backpack()
        {
            foreach (var ch in "Ekwipunek: \n" +
                "Pojemność plecaka: " + Player.max_backpack_place + " miejsc.\n")
            {
                Console.Write(ch);
                Thread.Sleep(10);
            }

        }

    }
}

Jakieś pomysły? Z góry dziękuje za każdy

 

2 odpowiedzi

0 głosów
odpowiedź 28 czerwca 2018 przez RafalS VIP (122,820 p.)
edycja 28 czerwca 2018 przez RafalS

Nie znam C#, ale:

        public void Add_to_backpack(Item item)
        {
            for (int i = 0; i < Player.max_backpack_place; i++)
            {
                backpack_slots[i] = "<empty>";
            }

        }

czemu Add_to_backpack do wszystkich bacpack_slots wrzuca "<empty>". I tak na marginesie skoro w plecaku chcesz trzymać itemy to czemu typ tablicy to string:

string[] backpack_slots = new string[Player.max_backpack_place];

Zacząłbym więc od zrobienia tablicy obiektów typu Item oraz dodawaniu do niej itemów przekzywanych w argumencie metody. Generalnie pewnie o wiele lepiej byłoby użyć jakichś mądrych kontenerów / kolekcji czy jak to się w C# nazywa. I wtedy dodanie będzie wywołaniem jednej metody tego kontenera.

komentarz 28 czerwca 2018 przez Scorpio240 Nowicjusz (120 p.)
Uczę sie dopiero
komentarz 28 czerwca 2018 przez RafalS VIP (122,820 p.)
http://www.tutorialsteacher.com/csharp/csharp-list

lub prostsza niegeneryczna lista:

http://www.tutorialsteacher.com/csharp/csharp-arraylist

Wtedy składową klasy equip jest ArrayList / List<Item> itemów na której wywołujesz po prostu:

plecak.add(item);
0 głosów
odpowiedź 15 maja 2019 przez jomyver Nowicjusz (140 p.)

Podobne pytania

+1 głos
2 odpowiedzi 481 wizyt
pytanie zadane 1 września 2017 w Nasze projekty przez Wiedzmak77 Nowicjusz (170 p.)
0 głosów
1 odpowiedź 466 wizyt
pytanie zadane 23 kwietnia 2022 w Python przez TerryLocks Użytkownik (590 p.)
+1 głos
0 odpowiedzi 261 wizyt
pytanie zadane 3 lipca 2021 w JavaScript przez Markko Nowicjusz (130 p.)

92,555 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...