Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.06.2015
Сообщений: 3
1
.NET 4.x

Комментарии к программе "Тетрис"

20.06.2015, 16:18. Показов 702. Ответов 4
Метки нет (Все метки)

Привет всем. Я студент 1 курса. Наслышан насколько вы заботливы о преподавателях, говоря таким как я "Попробуй разобраться сам, это элементарно". Но проблема в том, что у меня досрочная сдача по веской причине и времени уже практически нет. Скачал программу "Тетрис", для сдачи курсовой. Нужна ваша помощь, а заключается она в том, чтобы прокомментировать данный код программы, вроде все до безобразия легко, но до безобразия непонятно. Скажу сразу, мне в любом случае ниже 3 не поставят. Даже если вы мне опишите работу программы, а я ее пойму и расскажу преподавателю, но мне поставят 3, для меня это будет намного лучше. Помочь желательно до 24 июня. Заранее большое спасибо.
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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //byte DX = 10, DY = 20;
        Brush[] COLR = { Brushes.Aqua, Brushes.Orange, Brushes.Blue, Brushes.Red, Brushes.Green, Brushes.Azure, Brushes.Violet, Brushes.Tomato, Brushes.SteelBlue, Brushes.PapayaWhip };
        Bitmap[] Cirpich;
        Graphics c; 
        Bitmap POLE = new Bitmap(212, 422);
        Figura fig; Figura[] mfig = new Figura[7];
        byte[,] Area = new byte[20, 21];
        Random rnd = new Random();
 
        private void Form1_Load(object sender, EventArgs e)
        {
            c = Graphics.FromImage(POLE);
            c.FillRectangle(new SolidBrush(Color.FromArgb(0, 45, 45)), 0, 0, 210+ 4, 420 + 4);
            //размечаем поле
            for (int x = 0; x < 11; x++) 
            { 
                c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), x * 21 + 1, 1, x * 21, 420 + 3); 
            }
            for (int x = 0; x < 21; x++) 
            { 
                c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), 1, x * 21 + 1, 210 + 3, x * 21); 
            }
            Cirpich = new Bitmap[COLR.Length];
            for (int i = 0; i < COLR.Length; i++)
            {
                Cirpich[i] = new Bitmap(21, 21);
                c = Graphics.FromImage(Cirpich[i]);
                c.FillRectangle(COLR[i], 0, 0, 21, 21);
                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(1, 20), new Point(20, 20));
                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(20, 20), new Point(20, 1));
            }
            string[] figuri = { "3840", "3712", "1632", "17952", "3648", "3616", "9792" };
            for (int i = 0; i < figuri.Length; i++)
                mfig[i] = new Figura(figuri[i]);
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(POLE, 0, 0);
            if (fig != null)
            {
                for (int x = 0; x < 4; x++)
                    for (int y = 0; y < 4; y++)
                    {
                        if (fig.pic[x, y])
                            e.Graphics.DrawImage(Cirpich[fig.Col], (fig.x + x) * 21 + 1, (fig.y + y) * 21 + 1);
                    }
            }
            for (int x = 0; x < 10; x++)
                for (int y = 0; y < 20; y++)
                {
                    if (Area[x, y] > 0)
                    {
                         e.Graphics.DrawImage(Cirpich[Area[x, y]], x * 21 + 1, y * 21 + 1);
                    }
                }
 
        }
        private bool figure_ok()
        {
            for (int x = 0; x < 4; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    if (fig.y + y > -1)
                        if (fig.pic[x, y])
                            if (x + fig.x < 0 | x + fig.x == 10) return false;
                            else if (Area[x + fig.x, y + fig.y] > 0 | fig.y + y == 20)
                                return false;
                }
            }
            return true;
        }
        private void Stop_figur()
        {
            byte numLine = 0;
            int[] DLine = new int[4];
            for (int y = 0; y < 4; y++)
            {
                for (int x = 0; x < 4; x++)
                {
                    if (fig.y + y > -1)
                        if (fig.pic[x, y])
                        {
                            Area[fig.x + x, fig.y + y] = fig.Col;
                            DLine[numLine] = fig.y + y;
                            bool DL = true;
                            for (int i = 0; i < 10; i++)
                            {
                                if (Area[i, DLine[numLine]] == 0) { DL = false; DLine[numLine] = 0; }
                            }
                            if (DL) numLine += 1;
                        }
                }
            }
            if (DLine[0] > 0) DelLine(DLine);
        }
        private void DelLine(int[] d)
        {
            double iL = 0;
            for (int i = 0; i < 4; i++)
            {
                int y1 = d[i];
                if (d[i] == 0) break;
                iL += 1;
                for (int x = 0; x < 10; x++)
                {
                    for (int y = y1; y > 0; y--)
                    {
                        Area[x, y] = Area[x, y - 1];
                    }
                }
            }
            this.Refresh();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (fig == null)
            {
                fig = new Figura(); fig.pic = mfig[rnd.Next(0, 7)].pic;
                if (!figure_ok())
                {
                    Stop_figur();
                    fig = null; timer1.Enabled = false;
                    return;
                }
            }
            fig.y++;
            if (!figure_ok())
            {
                fig.y--; Stop_figur();
                fig = null;
            } this.Refresh(); 
 
        }
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (fig == null) return;
            switch (e.KeyValue)
            {
                case 37:
                    fig.x -= 1; if (!figure_ok()) fig.x += 1;
                    break;
                case 32:
                    if (timer1.Enabled) timer1.Enabled = false;
                    else timer1.Enabled = true;
                    break;
                case 39:
                    fig.x += 1; if (!figure_ok()) fig.x -= 1;
                    break;
                case 38:
                     fig.rotate(); if (!figure_ok()) fig.urotate(); 
                    break;
                case 40:
                    fig.y += 1;
                    if (!figure_ok())
                        fig.y -= 1;
                    break;
            }
            this.Refresh();
        }
 
    }
}
public class Figura
{
    public sbyte x, y;
    public byte Col;
    public bool[,] pic;
    public Figura()
    {
        Random rnd = new Random();
        x = 3; y = -2;
        Col = Convert.ToByte(rnd.Next(1, 9));
    }
    public Figura(string f)
    {
        pic = new bool[4, 4];
        for (int x = 0; x < 4; x++)
            for (int y = 0; y < 4; y++)
            {
                string h9 = Convert.ToString((Convert.ToInt32(f) >> y * 4 + x) & 1, 2);
                if (h9 == "1") pic[x, y] = true;
                else pic[x, y] = false;
            }
    }
    public void rotate()
    {
        bool[,] p2 = new bool[4, 4];
        for (int x = 0; x < 4; x++)
        {
            for (int y = 0; y < 4; y++)
                p2[3 - y, x] = pic[x, y];
        }
        pic = p2;
    }
    public void urotate()
    {
        bool[,] p2 = new bool[4, 4];
        for (int x = 0; x < 4; x++)
        {
            for (int y = 0; y < 4; y++)
            {
                p2[x, y] = pic[3 - y, x];
            }
        }
        pic = p2;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2015, 16:18
Ответы с готовыми решениями:

Проверить, содержит ли указанное предложение слово "дом". Нужны комментарии
помогите объяснить каждую строчку программы,и укажите на ошибка,почебу она не правильно работает?...

Цель - при нажатии на кнопку создать еще одну кнопку. Ошибка "Button" не содержит определения для "Location" и "Text""
int Control ; private void Button2_Click(object sender, RoutedEventArgs e) {...

Классы "Работник", "Календарь", "Оплата труда за месяц". Вывод табеля рабочего времени сотрудника
1. Реализовать класс работник, у класса свойства фамилия (строка), имя (строка), отчество (строка),...

Выдает ошибку - "Не удалось привести тип объекта "TheMaze.FormLevel1" к типу "System.Windows.Forms.Label"."
Ругается вот на эту строчку: ((Label)sender).Visible = false; Вот код: using System; using...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
4
2 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 94
21.06.2015, 00:52 2
Ааа... Голубчик, можно взглянуть на то, что вы скачали ПОЛНОСТЬЮ. Просто мне кажется что это только шматок...
0
0 / 0 / 0
Регистрация: 20.06.2015
Сообщений: 3
21.06.2015, 01:15  [ТС] 3
Это весь код хорошо работающего тетриса. Могу саму программу скинуть.
0
2 / 2 / 0
Регистрация: 07.10.2014
Сообщений: 94
22.06.2015, 01:07 4
Давайте лучше так...

Добавлено через 1 минуту
Еще можно самому запускать компиляцию, поставить стопер в коде или самому лично ставить её на паузу - после чего смотреть что за строка исполняется, и делать вывод (Но это на крайний случай)
0
0 / 0 / 0
Регистрация: 20.06.2015
Сообщений: 3
23.06.2015, 20:19  [ТС] 5
В общем разобрался я чуть чуть. Мое непонимание связано с неопытностью. Я нашел статью именно про эту программу, с таким же кодом в точности до запятых. Спасибо за помощь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2015, 20:19

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Кнопки "свернуть", "развернуть", "закрыть" на панель, которая используется вместо бордюра
используя форму без бордюров решил добавить кнопки &quot;свернуть&quot;,&quot;развернуть&quot;,&quot;закрыть&quot; на панель,...

Как исправить "преобразование типа из "string" в "System.Net.IPEndPoint" невозможно"?
Здравствуйте, не могу отправить массив байт, может кто-то знает как правильно записать ip. При...

Ошибка: "Не удалось привести типа объекта "System.Windows.Forms.TextBox" к типу "System.IConvertible".""
Программа выдает такой текст: &quot;System.InvalidCastException: &quot;Не удалось привести типа объекта...

Ошибка: Оператор "<" невозможно применить к операндам типа "string" и "int"
Дело в чём. Хочу сделать так, чтобы Количество букв из текстбокса не было меньше 6 знаков. if...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.