Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 15

Реализовать счетчик предметов в инвентаре

08.05.2022, 12:34. Показов 1006. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как мне реализовать счетчик предметов, как сейчас в классе Item нельзя т.к. предмет не должен отвечать за своё количество и метод ReduceAmount работает не правильно. Нужен ещё один класс Slot или как то по другому это сделать?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
 
namespace Task1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isOpen = true;
            string userInput;
            Player player = new Player();
            Seller seller = new Seller();
            Console.WriteLine("Добро пожаловать в лавку");
            Console.WriteLine("1.Показать инвентарь. 2.Показать товары. 3.Купить. 4.Продать. 5.Выйти из лавки");
 
            while (isOpen)
            {
                userInput = Console.ReadLine();
 
                switch (userInput)
                {
                    case "1":
                        player.ShowInventory();
                        break;
                    case "2":
                        seller.ItemsInShop();
                        break;
                    case "3":
                        player.BuyItem(seller);
                        break;
                    case "4":
                        //player.SellItem(player, seller);
                        break;
                    case "5":
                        isOpen = false;
                        break;
                }
 
            }
        }    
    }
 
    class Item
    {
        public string Name { get; private set; }
        public string Stats { get; private set; }
        public int Price { get; private set; }
        public int Amount { get; private set; }
 
        public Item(string name, string stats, int price, int amount)
        {
            Name = name;
            Stats = stats;
            Price = price;
            Amount = amount;
        }
 
        public void ShowItem(int itemID)
        {            
            Console.WriteLine($"{itemID + 1}.{Name}, Параметры: {Stats}, Цена: {Price}, Количество: {Amount}");
        }
 
        public void ReduceAmount(int amount)
        {
            if (amount <= Amount)
            {
                Amount -= amount;
            }            
        }                
    }
 
    class Player
    {        
        private int _money = 100;
        public List<Item> _inventory = new List<Item>();
 
        public Player()
        {
            _inventory.Add(new Item("Пелье зутаницы", "Атака +3", 20, 1));
            _inventory.Add(new Item("Шипованый гульфик", "Атака +3", 30, 1));
        }
 
        public void ShowInventory()
        {            
            Console.WriteLine($"Ваши вещи    Ваши деньги {_money}");
            for (int i = 0; i < _inventory.Count; i++)
            {
                _inventory[i].ShowItem(i);
            }            
        }
 
        public void BuyItem(Seller seller)
        {
            int itemID;
            int itemCount;
            Console.WriteLine("Что вы хотите купить?");
            itemID = GetNumber();
            Console.WriteLine("Сколько вы хотите купить?");
            itemCount = GetNumber();
 
            if (itemID <= seller._shop.Count)
            {
                if (itemCount <= seller._shop[itemID].Amount)
                {
                    if (_money - seller._shop[itemID - 1].Price * itemCount > 0)
                    {
                        _money -= seller._shop[itemID - 1].Price * itemCount;
                        seller.SellItem(itemID);
                        _inventory.Add(seller._shop[itemID - 1]);
                        seller._shop[itemID - 1].ReduceAmount(itemCount);
                    }
                    else
                    {
                        Console.WriteLine("У вас не хватает денег");
                    }
                }
                else
                {
                    Console.WriteLine("Нет такого количества товара");
                }
            }
            else
            {
                Console.WriteLine("Нет такого товара");
            }            
        }
 
        //public void SellItem(Player player, Seller seller)
        //{
        //    int itemID;
        //    int itemCount;
        //    Console.WriteLine("Что вы хотите продать?");
        //    itemID = GetNumber();
        //    Console.WriteLine("Сколько вы хотите продать?");
        //    itemCount = GetNumber();
 
        //    if (itemID <= _inventory.Count)
        //    {
        //        if (itemCount <= _inventory[itemID].Amount)
        //        {
        //            if (seller.shopAccount - _inventory[itemID - 1].Price * itemCount > 0)
        //            {
        //                _money -= _inventory[itemID - 1].Price * itemCount;
        //                seller.BuyItem(player, itemID);
        //                _inventory[itemID - 1].ReduceAmount(itemCount);
        //                seller._shop.Add(_inventory[itemID - 1]);
        //            }
        //            else
        //            {
        //                Console.WriteLine("У продовца не хватает денег");
        //            }
        //        }
        //        else
        //        {
        //            Console.WriteLine("Нет такого количества товара");
        //        }
        //    }
        //    else
        //    {
        //        Console.WriteLine("Нет такого товара");
        //    }
        //}
        private int GetNumber()
        {
            bool isNumber = int.TryParse(Console.ReadLine(), out int number);
 
            if (isNumber == false)
            {
                Console.WriteLine("Введите число");
                number = 0;
                return number;
            }
            else
            {
                return number;
            }
        }
    }
 
    class Seller
    {
        public int shopAccount = 200;
        public List<Item> _shop = new List<Item>();
 
        public Seller()
        {
            _shop.Add(new Item("Зелье идиотской храбрости", "Атака +2", 20, 1));
            _shop.Add(new Item("Шлем отваги", "Атака +1", 30, 1));
            _shop.Add(new Item("Фляга клея", "Инициатива +2", 40, 2));
            _shop.Add(new Item("Хотельное кольцо", "Проклятье -1", 50, 3));
            _shop.Add(new Item("Утка обречённости", "Уровень -2", 60, 2));
        }
 
        public void ItemsInShop()
        {
            Console.WriteLine($"Товары в магазине     Деньги торговца {shopAccount}");
 
            for (int i = 0; i < _shop.Count; i++)
            {
                _shop[i].ShowItem(i);               
            }           
        }
 
        public void SellItem(int itemID)
        {
            shopAccount += _shop[itemID - 1].Price * _shop[itemID - 1].Amount;
        }
 
        //public void BuyItem(Player player, int itemID)
        //{
        //    shopAccount -= player._inventory[itemID - 1].Price * player._inventory[itemID - 1].Amount;
        //}
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2022, 12:34
Ответы с готовыми решениями:

Вращение предметов в инвентаре
Привет меня интересует ваше мнение: как можно реализовать вращение предметов в инветаре при наведение на них мышкой пример из игры...

Как задавать свойства предметов в инвентаре и передавать их персонажу?
Добрый день! Продолжаю работу над созданием инвентаря к игре. Реализовал базовый инвентарь, который состоит из слотов, в которые помещаются...

Реализовать таблицу студентов, предметов и соответствующих оценок с помощью классов
задача реализовать классом таблицу студентов предметов и соответствующих оценок.. написать ф-ии, высчитывающие преобладающий балл по...

4
14 / 11 / 4
Регистрация: 14.11.2020
Сообщений: 411
08.05.2022, 13:31
Levik123, в смысле предмет не должен отвечать за количество? У вас есть класс Item, который отвечает за "коробку" с предметами. Условно это выглядит как: "Баранка - мягкая - 2500 - 5 шт". А метод ReduceAmount должен работать правильно, если вы вложили туда задуманную логику. Вы от текущего параметра объекта вычитаете цену, на которую хотите уменьшить стоимость.

Добавлено через 1 минуту
Levik123, как вариант, можете отбросить поле Amount, и собирать объекты в словарь, где ключ - это объект Item, а значение - количество предметов. Но я считаю, что это несколько странный подход.
0
0 / 0 / 0
Регистрация: 08.05.2022
Сообщений: 15
09.05.2022, 21:32  [ТС]
в смысле предмет не должен отвечать за количество
У вас не может быть кол-во у ячейки или это должна быть более простая система инвентаря без стака.
Предмет - это всегда один предмет. - это цитаты ментора, а метод ReduceAmount работает но при покупке товара у торговца количество товара уменьшается и у торговца и у покупателя т.е. если купить товар представленый в единичном экземпляре то и у торговца останется 0 этого товара и у покупателя будет 0
Один из вариантов реализации - добавить ещё один класс, который будет хранить кол-во. А из этого класса уже формировать инвентарь. - это тоже предлагает ментор, а я не могу дойти как это реализовать
0
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
10.05.2022, 00:05
Цитата Сообщение от Nuyta Посмотреть сообщение
отбросить поле Amount, и собирать объекты в словарь, где ключ - это объект Item, а значение - количество предметов. Но я считаю, что это несколько странный подход.
Чем же он странный? Вполне нормальный подход. Количество какого-то предмета не является его характеристикой или отличительным признаком.

Цитата Сообщение от Levik123 Посмотреть сообщение
Один из вариантов реализации - добавить ещё один класс, который будет хранить кол-во.
Берите вариант из предыдущего комментария.
0
14 / 11 / 4
Регистрация: 14.11.2020
Сообщений: 411
10.05.2022, 21:06
John Prick, ну, для моего восприятия проще хранить amount прямо в Item. Но это как задача стоит..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2022, 21:06
Помогаю со студенческими работами здесь

Вывести список студентов с названиями предметов взятыми из справочника предметов
Пожалуйста, помогите. Есть программа. Нужно сделать список студентов. у каждого студента есть список экзаменов, которые он сдавал и...

Известна масса каждого из 12 предметов. Определить общую массу всего набора предметов
Известна масса каждого из 12 предметов. Определить общую массу всего набора предметов.

Известна масса каждого из 12 предметов, определить общую массу всего набора предметов
Известна масса каждого из 12 предметов. Определить общую массу всего набора предметов.

Известна масса каждого из 12 предметов, определить общую массу всего набора предметов
известна масса каждого из 12 предметов определить общую массу всего набора предметов ?

В массиве хранятся сведения о стоимости 12 различных предметов. Определить общую стоимость всех предметов
Помогите написать в Builder C++ Добавлено через 14 секунд В массиве хранятся сведения о стоимости 12 различных предметов. Определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru