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

Игра "Кто хочет стать миллионером"

06.11.2016, 14:20. Показов 8980. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пишу игру "Кто хочет стать миллионером?". У меня возникло пару трудностей. У меня многие функции реализуются с помощью классов.
Я беру вопросы из текстового файла. Файл с вопросами ниже.
Вот собственно в чем вопрос, как узнать, какой ответ выбрал пользователь (какую кнопку нажал и верный ответ или нет) с помощью класса.
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
Random rand = new Random();
 
    public bool btn2click = false;
    public bool btn3click = false;
    public bool btn4click = false;
    public bool btn5click = false;
            string line;
            string chislo2;
            
            int a = 0;
            int b = 0;
            int c = 0;
            int d = 0;
            int f = 0;
            int g = 0;
            string TAns; // верный ответ
            int lvl=1;
            int money = 0;
           
            
        StreamReader sr = new StreamReader(@"Qw.txt", Encoding.Default);
        public void m(ListBox lb, Button btn2, Button btn3, Button btn4, Button btn5,Label lb7)
        {
            int chislo = rand.Next(1,13);
            chislo2 = chislo.ToString();
            while((line = sr.ReadLine())!=null) // мой алгоритм, с помощью которого я беру каждую строчку в файле и присваиваю ее к определенному объекту.
            {
                if (line == chislo2)
                {
                    a = 1;
                    goto lb47;
                }
                if (a == 1)
                {
                    lb.Items.Add(line);
                    b = 1;
                    a = 0;
                    goto lb47;
                    
                } 
                
                if (b == 1)
                {
                   btn2.Text= line;
                   c = 1;
                   b = 0;
                    goto lb47;
                    
                }
                if (c == 1)
                {
                    btn3.Text = line;
                    d = 1;
                    c = 0;
                    goto lb47;
                }
                if (d == 1)
                {
                    btn4.Text = line;
                    f = 1;
                    d = 0;
                    goto lb47;
                }
                if (f == 1)
                {
                    btn5.Text = line;
                    g = 1;
                    f = 0;
                    goto lb47;
                }
                if (g == 1)
                {
                    TAns = line;
                    g = 0;
                    goto lb47;
                }
            lb47: int mur = 0;
            lb7.Text = TAns;
 
 
            }
}
Вложения
Тип файла: txt Qw.txt (1.7 Кб, 49 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2016, 14:20
Ответы с готовыми решениями:

Игра "Кто хочет стать миллионером" - как лучше хранить вопросы
Взялся писать программу-аналог телепередачи Кто хочет стать миллионером, но тут же столкнулся с трудностью. Как лучше всего паковать...

Игра - "Кто хочет стать миллионером?"
Добрый вечер! Помогите создать игру на С# "Кто хочет стать миллионером?"! Очень вас прошу, сделайте как можно побыстрее. Мне...

Создание простейшей игры, подобной "Кто хочет стать миллионером"
Доброго времени! Помогите разобраться с составлением структуры простейшей консольной программы. Есть задание: написать простейшую игру,...

8
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
06.11.2016, 14:50
Пишешь WPF или Forms?

Смотри, тебе не нужно в функцию передавать контроллеры (кнопки). Да и тебе нужен radio button, вместо обычной кнопки. В каждом контроллере есть куча событий, на которые можно подписаться. Знаешь как с событиями работать?

Сейчас напишу тебе свой вариант на WPF (как бы я делал). Сможешь погулять по коду и изучить.
0
 Аватар для drawaki
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 11
06.11.2016, 14:59  [ТС]
Forms. Почему именно radio button? Спасибо большое
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
06.11.2016, 15:19
Я напишу на WPF всё равно, принцип тот же, только контроллеры в отдельном окошке описываешь в xml формате. Разберёшься.
Потому что логически radio button для этой цели создан: куча вариантов и выбираешь ОДИН. Именно такая логика. А кнопка (button), сама по себе просто самостоятельный контроллер, который делает что-то независимое, когда нажимаешь.
Хоть и по стилю, кнопка (button) выгдяит более похожа на интерфейс игры КХСМ, но логически она не предназначена для того чтобы быть одной из неких опций, что нужно выбирать. Тем более, если у тебя будет четыре кнопки, то при нажатии на каждую тебе придётся куда-то отправлять один и тот же код (copy-paste на каждую кнопку - плохо).
0
Эксперт .NET
 Аватар для Usaga
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,319
06.11.2016, 15:27
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Хоть и по стилю, кнопка (button) выгдяит более похожа на интерфейс игры КХСМ, но логически она не предназначена для того чтобы быть одной из неких опций, что нужно выбирать.
Чисто логически, кнопке плевать: режим выбора опции не противоречит самой идее кнопки. В данном случае оформлять участок экрана с вариантом ответа в виде кнопки - вполне себе нормальное решение. И код дублировать не нужно - можно все кнопки повесить на один обработчик, а из тега копки дёргать номер варианта ответа.

Добавлено через 1 минуту
Да и в виде WPF приложение оформлять излишне, ТС в WinForms-то не может сделать, а WPF сложнее в обращении.
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
06.11.2016, 15:34
Цитата Сообщение от Usaga Посмотреть сообщение
можно все кнопки повесить на один обработчик
Я тоже рассматривал этот вариант в качестве альтернативы, но тяжеловато ТС будет понять код.
Цитата Сообщение от Usaga Посмотреть сообщение
Да и в виде WPF приложение оформлять излишне, ТС в WinForms-то не может сделать, а WPF сложнее в обращении.
Не понимаю зачем обучать формам, WPF ненамного труднее. Тем более, что ТС сможет реально проанализовать код и вставить его в своё приложение (предаврительно поняв) вместо того чтобы просто взять мой код и сдать его слепо.
Если ТС будет тяжело, то перепешу на Forms, мне не влом.
0
Эксперт .NET
 Аватар для Usaga
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,319
06.11.2016, 15:36
Цитата Сообщение от Pro100Tom Посмотреть сообщение
вместо того чтобы просто взять мой код и сдать его слепо.
Что-то мне подсказывает, что этого человек и ждёт

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Я тоже рассматривал этот вариант в качестве альтернативы, но тяжеловато ТС будет понять код.
Да ну, брось.

Но я не настаиваю.
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
06.11.2016, 20:29
MainWindow.xaml.cs
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
 
namespace Millionaire
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Game game;
 
        public MainWindow()
        {
            InitializeComponent();
            InitializeMainWindowVariables();
            SubscribeToEvents();
            Play();
        }
 
        protected void InitializeMainWindowVariables()
        {
            game = new Game();
        }
 
        protected void SubscribeToEvents()
        {
            game.NotifyCanFetchQuestions += Game_NotifyCanFetchQuestions;
        }
 
        private void Game_NotifyCanFetchQuestions(object sender)
        {
            UpdateFormWithNewQuestion();
        }
 
        protected void Play()
        {
            game.Start();
        }
 
        protected void UpdateFormWithNewQuestion()
        {
            var question = game.GetNextQuestion();
 
            if (question == null)
            {
                ApplyGameFinishedControlsChanges();
 
                return;
            }
 
            if (question.Answers.Count != GetOptions().Count)
            {
                Console.WriteLine("Number of answers on the form does not match the number of answers provided by the game");
                return;
            }
 
            labelQuestion.Content = question.Content;
 
            foreach (var radioButton in GetOptions())
            {
                var answer = question.GetNextAnswer();
                radioButton.Content = answer.Content;
                radioButton.IsChecked = false;
            }
        }
 
        protected List<RadioButton> GetOptions()
        {
            return stackPanelQuestions.Children.OfType<RadioButton>().ToList<RadioButton>();
        }
 
        private void radio_Click(object sender, RoutedEventArgs e)
        {
            buttonSubmitAnswer.IsEnabled = true;
        }
 
        private void buttonSubmitAnswer_Click(object sender, RoutedEventArgs e)
        {
            buttonSubmitAnswer.IsEnabled = false;
 
            var checkedRadioButton = GetCheckedRadioButton();
            if (checkedRadioButton == null)
            {
                Console.WriteLine("How did you actually do that?");
            }
 
            // Not the best approach since we can always change how the label looks and it will fail as a result.
            // The better solution would be to use an ID instead.
            bool? isCorrect = game.IsAnswerForCurrentQuestionCorrect(checkedRadioButton.Content as string);
            if (isCorrect == null)
            {
                Console.WriteLine("How???");
            }
 
            labelFeedback.Content = (bool)isCorrect ? "Correct!" : "Incorrect!";
 
            UpdateFormWithNewQuestion();
        }
 
        protected RadioButton GetCheckedRadioButton()
        {
            foreach (var radioButton in GetOptions())
            {
                if ((bool)radioButton.IsChecked)
                {
                    return radioButton;
                }
            }
 
            return null;
        }
 
        protected void ApplyGameFinishedControlsChanges()
        {
            buttonSubmitAnswer.Content = "The game has finished!";
            //labelQuestion.Visibility = Visibility.Hidden;
            //labelFeedback.Visibility = Visibility.Hidden;
 
            foreach (var option in GetOptions())
            {
                //option.Visibility = Visibility.Hidden;
            }
        }
    }
}
MainWindow.xaml
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window x:Class="Millionaire.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Millionaire"
        mc:Ignorable="d"
        Title="Millionaire" Height="350" Width="525">
    <Grid>
        <StackPanel Name="stackPanelQuestions" Margin="10">
            <Label Name="labelQuestion" Content="Does question go here?"></Label>
            <RadioButton Name="radioA" Content="First Option" Click="radio_Click"></RadioButton>
            <RadioButton Name="radioB" Content="Second Option" Click="radio_Click"></RadioButton>
            <RadioButton Name="radioC" Content="Third Option" Click="radio_Click"></RadioButton>
            <RadioButton Name="radioD" Content="Fourth Option" Click="radio_Click"></RadioButton>
            <Button Name="buttonSubmitAnswer" Content="Nail Down!" IsEnabled="False" Click="buttonSubmitAnswer_Click"></Button>
            <Label Name="labelFeedback" Content=""></Label>
        </StackPanel>
    </Grid>
</Window>
Game.cs
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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
 
namespace Millionaire
{
    class Game
    {
        private List<Question> questions;
        private int currentIndex;
 
        public delegate void GameReadyEventHandler(object sender);
        public event GameReadyEventHandler NotifyCanFetchQuestions;
 
        public Game()
        {
            InitializeVariables();
        }
 
        protected void InitializeVariables()
        {
            InitializeQuestions();
 
            currentIndex = -1;
        }
 
        protected void InitializeQuestions()
        {
            Questions = ReadQuestionsFromFile();
        }
 
        protected List<Question> ReadQuestionsFromFile()
        {
            string questionFilePath = GetQuestionsFile();
 
            var questions = new List<Question>();
 
            try
            {
                var xml = XDocument.Load(questionFilePath);
 
                foreach (XElement elementQuestion in xml.Root.Elements())
                {
                    Question question = new Question();
                    question.Content = elementQuestion.Element("content").Value;
 
                    foreach (XElement elementAnswer in elementQuestion.Element("answers").Elements())
                    {
                        Answer answer = new Answer();
                        answer.Content = elementAnswer.Value;
 
                        question.Answers.Add(answer);
 
                        XAttribute isCorrect = elementAnswer.Attribute("isCorrect");
                        if (isCorrect != null && Convert.ToBoolean(elementAnswer.Attribute("isCorrect").Value))
                        {
                            question.CorrectAnswer = answer;
                        }
                    }
 
                    questions.Add(question);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            return questions;
        }
 
        protected string GetQuestionsFile()
        {
            string currentDirectory = Directory.GetCurrentDirectory();
            string currentDirectoryName = Path.GetDirectoryName(currentDirectory);
            currentDirectoryName = Path.GetDirectoryName(currentDirectoryName);
 
            string filePath = "\\Data\\questions.xml";
 
            return string.Concat(currentDirectoryName, filePath);
        }
 
        public void Start()
        {
            if (!ValidateQuestions())
            {
                Console.WriteLine("Can't start the game due to an error above");
            }
 
 
            NotifyCanFetchQuestions(this);
        }
 
        protected bool ValidateQuestions()
        {
            if (!ValidateCorrectAnswer())
            {
                Console.WriteLine("Some of the questions don't have a single correct answer specified");
                return false;
            }
 
            if (!ValidateQty())
            {
                Console.WriteLine("Question list is empty");
                return false;
            }
 
            return true;
        }
 
        protected bool ValidateCorrectAnswer()
        {
            foreach (var question in Questions)
            {
                if (question.CorrectAnswer == null)
                {
                    return false;
                }
            }
 
            return true;
        }
 
        public Question GetNextQuestion()
        {
            try
            {
                return Questions.GetNext(++currentIndex, false);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            return null;
        }
 
        public bool? IsAnswerForCurrentQuestionCorrect(string content)
        {
            try
            {
                var currentQuestion = Questions.ElementAt(currentIndex);
 
                return currentQuestion.CorrectAnswer.Content == content;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            return null;
        }
 
        protected bool ValidateQty()
        {
            return Questions.Any();
        }
 
        protected void ResetEverything()
        {
            questions.Clear();
        }
 
        public List<Question> Questions
        {
            get
            {
                return questions;
            }
 
            set
            {
                questions = value;
            }
        }
    }
}
question.cs
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
using System;
using System.Collections.Generic;
 
namespace Millionaire
{
    class Question
    {
        private string content;
        private List<Answer> answers;
        private Answer correctAnswer;
        private int currentIndex;
 
        public Question()
        {
            Content = string.Empty;
            Answers = new List<Answer>();
            correctAnswer = null;
            currentIndex = 0;
        }
 
        public Answer GetNextAnswer()
        {
            try
            {
                return Answers.GetNext(currentIndex++, false);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            return null;
        }
 
        public Answer CorrectAnswer
        {
            get
            {
                return correctAnswer;
            }
 
            set
            {
                correctAnswer = value;
            }
        }
 
        public List<Answer> Answers
        {
            get
            {
                return answers;
            }
 
            set
            {
                answers = value;
            }
        }
 
        public string Content
        {
            get
            {
                return content;
            }
 
            set
            {
                content = value;
            }
        }
    }
}
answer.cs
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
namespace Millionaire
{
    class Answer
    {
        private string content;
 
        public Answer()
        {
            Content = string.Empty;
        }
 
        public string Content
        {
            get
            {
                return content;
            }
 
            set
            {
                content = value;
            }
        }
    }
}
helper.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Collections.Generic;
using System.Linq;
 
namespace Millionaire
{
    static class Helper
    {
        public static T GetNext<T>(this List<T> collection, int index, bool allowLoop = true)
        {
            if (allowLoop && collection.Count <= index)
            {
                index = 0;
            }
 
            return collection.ElementAt(index);
        }
    }
}
~/data/questions.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8" ?>
<questions>
  <question>
    <content>Which of the planets is closest to the sun?</content>
    <answers>
      <answer isCorrect="true">Mercury</answer>
      <answer>Venus</answer>
      <answer>Earth</answer>
      <answer>Mars</answer>
    </answers>
  </question>
  <question>
    <content>Who is the author of Sherlock Holmes?</content>
    <answers>
      <answer>Antuan De Sent Exupery</answer>
      <answer>William Shakespeare</answer>
      <answer isCorrect="true">Arthur Conan Doyle</answer>
      <answer>J. K. Rowling</answer>
    </answers>
  </question>
</questions>
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
06.11.2016, 20:43
Лучший ответ Сообщение было отмечено drawaki как решение

Решение

Проектик прикрепил в этом сообщении.

Программа - это окно, в котором отображаются вопрос, варианты ответа, кнопка и результат ответа. Положение, название и события описаны в MainWindow.xaml. Хочу отметить, что названия переменных (можно встретить в MainWindow.xaml.cs) созданы (параметр Name) в MainWindow.Xaml.

Вся движуха начинается с функции Play(). Там я запускаю функцию Start() экземпляра класса Game. Там происходит инициализация и считываение вопросов из файла. Потом вызывается событие, по смыслу что-то вроде: чувак, я тут всё подготовил, всё работает, ты можешь просить меня передавать тебе вопросы.

Так и происходит. По-скольку мы подписываемся на событие
C#
1
game.NotifyCanFetchQuestions += Game_NotifyCanFetchQuestions;
то, после того, как game всё инициализировал, попадаем в функцию:
C#
1
private void Game_NotifyCanFetchQuestions(object sender)
Там мы просим у "игры" выслать нам первый вопрос. Используя данные объекта "вопрос" мы изменяем значения "Content" контролов (label и radio button). Когда жмём на кнопку, то происходит валидация (если честно хреновенькая; я в комментарии там упомянул, что лучше ID испльзовать, но мне лень этим заниматься сейчас). Если ответ верный, то label покажет "Correct".

Если трудно будет понять сначала, то стоит понять, что на это дело нужно несколько больше времени, чем казалось изначально. Тут куча всего есть: оператор "as", "nullable bool (bool?)", создание делегата и события, считывание xml файла (без сериализации) и использование exceptions и консоля.

Будут вопросы, обращайтесь.
Вложения
Тип файла: zip Millionaire.zip (135.0 Кб, 222 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2016, 20:43
Помогаю со студенческими работами здесь

Получение ответа в игре "Как стать миллионером"
Помогите, пожалуйста. Я сейчас делаю курсач, игру &quot;Кто хочет стать миллионером?&quot;. У меня есть несколько вопросов. 1. У меня есть...

Игра: Кто хочет стать миллионером !
Здавствуйте коллеги... Помогите придумать, как можно хранить вопросы и ответы, чтобы потом можно было легко считать их... БД - не...

Игра "Кто хочет стать миллионером", подключенная к БД с вопросами и ответами
Помогите пожалуйста нужна готовая игра кто хочет стать миллионером на С#, подключенная к базе данных в которой хранятся вопросы и ответы

Игра "Кто хочет стать миллионером" c# wpf с чего начать ?
Так-с я начал создавать приложение &quot;Кто хочет стать миллионером&quot; , я создал основное меню , которое нас перебрасывает на новое окно ,...

Игра "кто хочет стать миллионером?". Как узнать, какой RadioButton выбирает пользователь
Делая это приложение столкнулся м проблемой есть 3 списка(вопросы, ответы и верные ответы) вывод ответов и вопросов я сделал, но у меня...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru