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

Простая игрушка. Запись в матрицу

18.01.2013, 18:42. Показов 1600. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа программисты!
С целью лучше изучить язык, пишу приложение крестики-нолики 5 в ряд (гомоку). Условия такие есть поле 15х15, без ии, 2 человека, играющие за одним компьютером, кто первый выстроит цепочку из 5 одинаковых фигур является победителем.
Проблема возникла в следующем. Для начала я инициализирую поле
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void InitBoard()
        {
           picboard = new MyPicBox[15, 15];
            for (int x = 0; x < picboard.GetLength(0); ++x)
            {
                for (int y = 0; y < picboard.GetLength(1); ++y)
                {
                    board[x, y] = 0;
                    picboard[x, y] = new MyPicBox();
                    picboard[x, y].Image = (Image)(WindowsFormsApplication1.Properties.Resources.empty).Clone(); 
                    picboard[x, y].Location = new System.Drawing.Point(x * 32, y * 32);
                    //this.picboard[x, y].Name = "picboard_" + x + "_" + y;
                    this.picboard[x, y].Size = new System.Drawing.Size(32, 32);
                    this.picboard[x, y].SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
                    this.picboard[x, y].TabIndex = 0;
                    picboard[x, y].x = x;
                    picboard[x, y].y = y;
                    panel1.Controls.Add(picboard[x, y]);
                    
                   this.picboard[x, y].Click += new System.EventHandler(this.field_Click);
                }
            }
Затем пытаюсь по клику на элемент panel в методе private void field_Click(object sender, System.EventArgs e) вывести на панель крестик/нолик и при этом мне необходимо записать его в матрицу, насколько я понимаю, ведь далее нужно производить проверку на выигрыш, к сожалению пока ничего не выходит...
Помогите пожалуйста разобраться с этим, как правильно записать мои крестики/нолики в матрицу?

p.s. да, в интернете достаточно много примеров, но мне, как новичку не удалось в них разобраться.
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2013, 18:42
Ответы с готовыми решениями:

Простая игрушка на Swing
Добрый день. Изучил более-менее как делать оконные графические приложения. Хочу ради интереса написать простейшую игрушку. Пока что...

Java - очень простая консольная игрушка
Всем доброго времени суток! У меня довольно интересная проблема. Очень прошу ответить наиболее подробно, так как Java пока что только...

программа простая инверсная запись чисел
помогите сделать программу!!!

6
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.01.2013, 19:09
Kil, ну создайте массив 5х5, после этого проверяйте, если вся строка заполнена одним значением или весь столбец заполнен или диагонали заполнены, то выигрыш. Для игры напишите отдельный класс, логика игры не должна находиться на форме. В кнопке button1_Click не должно быть ничего, что касается игровой механики, только вызов какого-нибудь метода.
0
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 21
18.01.2013, 19:17  [ТС]
хм, может не совсем верна постановка проблемы, но насчет проверки то у меня идеи есть, у меня с другим загвоздка.
Вот есть поле, неважно - picturebox, panel и т.д. - я кликаю по нему, на экране появляется в зависимости от хода нолик или крестик, и у меня он пока тупо прорисовывается, а вот как сделать так, чтобы он стал элементом матрицы с теми же координатами(x,y), которые у той ячейки, по которой кликнули (ячейка-это picboard[x, y])?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.01.2013, 19:34
Ну вот например такой код: все кнопки у меня находятся в массиве buttons
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
using System;
using System.Windows.Forms;
 
namespace RuntimeButtons
{
    public partial class Form1 : Form
    {
        private readonly Button[,] buttons = new Button[Count, Count];
        private const int ButtonSize = 100, ButtonMargin = 10, Count = 3;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < Count; i++)
                for (int j = 0; j < Count; j++)
                {
                    var button = new Button() { Width = ButtonSize, Height = ButtonSize, Top = (ButtonSize + ButtonMargin) * (i + 1), Left = (ButtonSize + ButtonMargin) * (j + 1) };
                    button.Tag = new Tuple<int, int>(i, j);
                    button.Click += ButtonClick;
                    Controls.Add(button);
                    buttons[i, j] = button;
                }
        }
 
 
        private void ButtonClick(object sender, EventArgs e)
        {
            var tuple = (sender as Button).Tag as Tuple<int, int>;
            MessageBox.Show(string.Format("Нажата клавиша [{0},{1}]",tuple.Item1, tuple.Item2));
        }
    }
}
Ниже проект для тестирования:
Вложения
Тип файла: rar RuntimeButtons.rar (33.1 Кб, 17 просмотров)
1
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 21
18.01.2013, 19:48  [ТС]
спасибо, но такая штука у меня уже есть, обычные крестики-нолики даже с ии, вместо button использовал picure_box, однако это другое, я же не задам 225 button-ов или picture_box-ов...
может еще у кого-нибудь какие идеи есть? наверняка же есть какие-нибудь методы/свойства, которые позволят реализовать все весьма просто?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.01.2013, 20:08
Kil, ну есть такой код, написан через задницу, но представление дает
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            var g = e.Graphics;
            Draw(g, pictureBox1.Width / 3, 0, pictureBox1.Width / 3, pictureBox1.Height);
            Draw(g, (pictureBox1.Width * 2) / 3, 0, (pictureBox1.Width * 2) / 3, pictureBox1.Height);
            Draw(g, 0, pictureBox1.Height / 3, pictureBox1.Width, pictureBox1.Height / 3);
            Draw(g, 0, (pictureBox1.Height * 2) / 3, pictureBox1.Width, (pictureBox1.Height * 2) / 3);
        }
 
 
        private void Draw(Graphics g, int startX, int startY, int endX, int endY)
        {
            var pen = new Pen(Color.Blue,5);
            g.DrawLine(pen, startX, startY, endX, endY);
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            int regX = pictureBox1.Width / 3, regY = pictureBox1.Height / 3;
            var args = e as MouseEventArgs;
            int i = (args.X - pictureBox1.Left) / regX, j = (args.Y - pictureBox1.Top) / regY;
            MessageBox.Show(string.Format("Выбран регион [{0},{1}]", i, j));
        }
    }
}
Вложения
Тип файла: rar WindowsFormsApplication1.rar (33.5 Кб, 17 просмотров)
1
0 / 0 / 0
Регистрация: 22.11.2011
Сообщений: 21
18.01.2013, 20:24  [ТС]
а вот за это вам спасибище! теперь буду пробовать заполнять матрицу и проверять...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2013, 20:24
Помогаю со студенческими работами здесь

Простая запись в тестовый файл txt многострочного текста
Подскажите пожалуйста... хочу записать вот такое текст CREATE TABLE IF NOT EXISTS `jos_bannerclient` ( `cid` int(11) NOT NULL...

Есть ли телефоны с АВТОМАТИЧЕСКИМ включением на запись разговора при входящем и исходящем вызывах? Интересует конкретная модель.(самая простая)
сабж

Простая авторизация на php и mysql, очень простая!
В базе данных таблица с двумя строками: id, user, password. На странице есть два поля для ввода (имени и пароля) и кнопка входа. По...

Запись элементов в матрицу
каким образом можно задать функцию так, чтобы она могла выбирать рандомное количество строк (10% от общего количества строк), рандомное их...

Выделение максимумов и запись их в матрицу
Здравствуйте форумчане! тут такой вопрос, имею матрицу переменных, как отрицательных так и положительных, стоит задача выделять и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru