Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2013, 20:47   #1
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
Восклицание Собирать 2 одинаковые картинки C# WinForms

Всем Привет ! ребят есть такие игры как собрать одинаковые картинки. коечто у меня получилось игровое поле это 4 на 5 клеточек это я разместил картинки не повторяются более 2 раз а вот как дальше не могу понять как сравнивать две нажаты картинки вылаживаю код жду советов. зарание огромное спасибо.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace exzamen
{
    public partial class Form1 : Form
    {
        public Button[] Bat;
        public Timer tmr1 = new Timer();
        public int k = 0;
        public Random rnd = new Random();
        public int num;
        ImageList buttImage = new ImageList();
        int selectImage = -1;
        Button prevButt = null;

        public Form1()
        {
            InitializeComponent();
            newGame();
        }

        private void newGame()
        {
            Bat = new Button[20];
            buttImage.ImageSize = new Size(120, 120);
            buttImage.ColorDepth = ColorDepth.Depth32Bit;

            for (int i = 0; i < 20; i++)
            {
                buttImage.Images.Add(imageList.Images[i < 10 ? i : i - 10]);
                buttImage.Images[i].Tag = (i < 10 ? i : i - 10);
            }
            for (int i = 0; i < 20; i++)
            {
                Random rnd = new Random();
                int r = rnd.Next(0, 19);
                Image tmp = buttImage.Images[i];
                buttImage.Images[i] = buttImage.Images[r];
                buttImage.Images[r] = tmp;
            }
            for (int i = 0; i < Bat.Length; i++)
            {
                Bat[i] = new Button();
                Bat[i].Size = new Size(120, 120);
                Bat[i].Location = new Point(50 + 125 * (i % 5), 80 + 125 * (i / 5));
                //Bat[i].TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                Bat[i].Image = buttImage.Images[i];
                Bat[i].Tag = buttImage.Images[i].Tag;
                Bat[i].Click += new EventHandler(ButtonClick);
                Controls.Add(Bat[i]);
            }

            tmr1.Interval = 1000;
            tmr1.Tick += new EventHandler(tmr1_Tick);
            tmr1.Start();

        }

        void tmr1_Tick(object sender, EventArgs e)
        {
            k++;
            Timer.Text = k.ToString();
        }


        private void NewGame_Click(object sender, EventArgs e)
        {
            newGame();

        }

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ButtonClick(object sender, EventArgs e)
        {
            int thisImage = (int)(((Button)sender).Tag);
            if (selectImage == -1)
            {
                selectImage = thisImage;
                prevButt = (Button)sender;
            }
            else
            {
                if (selectImage == thisImage)
                {
                    prevButt.Visible = false;
                    ((Button)sender).Visible = false;

                }
                else
                {
                    //
                }
                prevButt = null;
                selectImage = -1;
            }
        }
    }
}

игра запускается на секунду открыть все картинки а потом их спрятать пользователь нажымает на картинку ему показывают какая он нажимает на вторую если есть сходство значит удалить если нету просто скрыть картинки. плиз подскажите как сделать
Xameleon666 вне форума Ответить с цитированием
Старый 27.08.2013, 01:22   #2
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

вот что у меня получилось после переписания кода.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Exam
{
    public partial class Form1 : Form
    {
        const int Left = 10;
        const int Top = 35;
        const int Width = 100;
        const int Hight = 100;
        const int Padding = 15;

        ImageList buttImage = new ImageList();
        int selectImage = -1;
        Button prevButt = null;
        Button[] buttonMas = new Button[20];
        int[] indexMas = new int[20];

        
        public Form1()
        {
            InitializeComponent();
            buttImage.ImageSize = new Size(100,100);
            buttImage.ColorDepth = ColorDepth.Depth32Bit;

            for (int i = 0; i < 20; i++)
            {
                buttImage.Images.Add(imageList.Images[i % 5]);
                indexMas[i] = i % 5;
            }
            for (int i = 0; i < 20; i++)
            { 
                Random rnd = new Random();
                int r = rnd.Next(0,19);
                Image tmp = buttImage.Images[i];
                int t = indexMas[i];
                buttImage.Images[i] = buttImage.Images[r];
                indexMas[i] = indexMas[r];
                buttImage.Images[r] = tmp;
                indexMas[r] = t;
            }

            Timer timer = new Timer();
            timer.Interval = 1000;
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            foreach(Button bt in buttonMas)
                bt.Image = null;
            ((Timer)sender).Stop();
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    buttonMas[i + j * 5] = new Button();
                    buttonMas[i + j * 5].Location = new Point(Left + (Width + Padding) * i, Top + (Hight + Padding) * j);
                    buttonMas[i + j * 5].Size = new Size(Width, Hight);
                    buttonMas[i + j * 5].UseVisualStyleBackColor = true;
                    buttonMas[i + j * 5].Tag = indexMas[i + j * 5];
                    buttonMas[i + j * 5].Image = buttImage.Images[i + j * 5];
                    buttonMas[i + j * 5].Click += new EventHandler(Click_Bt);
                    this.Controls.Add(buttonMas[i + j * 5]);
                }

            }
        }

        private void Click_Bt(object sender, EventArgs e)
        {
            Button thisBt = (Button)sender;
            int thisImage = (int)(thisBt.Tag);
            thisBt.Image = imageList.Images[thisImage];

            if (selectImage == -1 )
            {
                selectImage = thisImage;
                prevButt = thisBt;
            }
            else
            {
                if (selectImage == thisImage && thisBt != prevButt)
                {
                    prevButt.Visible = false;
                    thisBt.Visible = false;
                }
                else
                {
                    // тут я прячу картинку от пользователя если нет совпадений
                    prevButt.Image = null;
                    thisBt.Image = null;
                    selectImage = -1;
                }
                //prevButt = null;
                
            }
            //thisBt.Image = null;
        }

        
    }
}

Осталась проблеммка если не совпадает картинка то вторая даже не открывается как сделать так чтоб обе картинки были видны на короткий срок потом исчезали? как то в голову совсем не лезит. буду рад любой помощи спасибки
Xameleon666 вне форума Ответить с цитированием
Старый 27.08.2013, 12:37   #3
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Просьба к администрацыи перенести тему в Win Forms сори я не доглядел что есть такой раздел
Xameleon666 вне форума Ответить с цитированием
Старый 29.08.2013, 01:00   #4
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Так с этой проблемой справился появилась новая. есть текстовый документ в нём к примеру 5 строк покажу в каком плане
Код:
Имя Игрока:  Вася Время игры: 23 Количество ходов: 16 
Имя Игрока:  Петя Время игры: 31 Количество ходов: 24
Имя Игрока:  Оля Время игры: 25 Количество ходов: 18 
Имя Игрока:  Юля Время игры: 34 Количество ходов: 26 
Имя Игрока:  Вовочка Время игры: 10 Количество ходов: 10
Задача состоит в том чтоб вытянуть с текстового документа по строчке
в таком порядке самый лучший результат на 1 место чуть хуже на 2 и т.д
и потом заполнить данные в ListBoxs.
если у кого то есть какие идеи? за ранние спасибо!
Xameleon666 вне форума Ответить с цитированием
Старый 29.08.2013, 07:02   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Проще выкинуть будет текстовый документ и использовать хмл для такого (поищите примеры - их вагон). Записали с известной структурой, считали потом по этой же структуре, циклом закинули в листбокс.
Если приспичило текстовый документ, то парсить (использовать String.IndexOf(), например) на предмет строки "Имя Игрока: " после которой считывать в строку до пробела - будет имя, аналогично с остальными данными.

Код выше у Вас, конечно, страшненький... это называется писать на оо-языке в процедурном стиле (Собственно, потому, наверное, не нашлось желающих помочь, я и сам глядя на такой код - не проявляю желаний в него вчитываться). Советую прокачивать навыки декомпозиции, написания классов и использования гибких решений.

Последний раз редактировалось phomm; 29.08.2013 в 07:05.
phomm вне форума Ответить с цитированием
Старый 29.08.2013, 21:33   #6
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Проще выкинуть будет текстовый документ и использовать хмл для такого (поищите примеры - их вагон). Записали с известной структурой, считали потом по этой же структуре, циклом закинули в листбокс.
Если приспичило текстовый документ, то парсить (использовать String.IndexOf(), например) на предмет строки "Имя Игрока: " после которой считывать в строку до пробела - будет имя, аналогично с остальными данными.

Код выше у Вас, конечно, страшненький... это называется писать на оо-языке в процедурном стиле (Собственно, потому, наверное, не нашлось желающих помочь, я и сам глядя на такой код - не проявляю желаний в него вчитываться). Советую прокачивать навыки декомпозиции, написания классов и использования гибких решений.
новая проблеммка выше к коду не относится. там уже все работает как было задумано. осталось только вытащить данные с текстового документа
отсортировать от самого лутшего результата к худшему. и вывести в listBox.
Xameleon666 вне форума Ответить с цитированием
Старый 29.08.2013, 21:37   #7
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

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

Код:
private void menuItem15_Click(object sender, EventArgs e)
    {
        string Line;
        string[] strArr;
        char[] charArr = new char[] { ';' };
        try
        {
            FileStream fs = new FileStream(@"D:\Exam\Exam\bin\Debug\MyTest.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            while (sr.EndOfStream != true)  // framework 2.0
            {
                Line = sr.ReadLine();
                strArr = Line.Split(charArr);
                for (int i = 0; i < strArr.Length; i++)
                {
                    //MessageBox.Show(strArr[i].Trim());
                    listBox1.Items.Add(strArr[i].Trim());
                }
            }
            sr.Close();
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); } 
    }
так выводит все подряд если сделать пару не сложных манипуляцый то буде выводить более мение читабельно в лист боксе но как переборку сделать мыслей не хватает. Почему текстовый файл? на этом был акцент преподователя. как по мне я б это же быстрей реализовал бы в базе данных.
Xameleon666 вне форума Ответить с цитированием
Старый 02.09.2013, 12:56   #8
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Xameleon666 Посмотреть сообщение
пока что получилось вытаскивать данные вот таким вот образом

Код:
private void menuItem15_Click(object sender, EventArgs e)
    {
        string Line;
        string[] strArr;
        char[] charArr = new char[] { ';' };
        try
        {
            FileStream fs = new FileStream(@"D:\Exam\Exam\bin\Debug\MyTest.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            while (sr.EndOfStream != true)  // framework 2.0
            {
                Line = sr.ReadLine();
                strArr = Line.Split(charArr);
                for (int i = 0; i < strArr.Length; i++)
                {
                    //MessageBox.Show(strArr[i].Trim());
                    listBox1.Items.Add(strArr[i].Trim());
                }
            }
            sr.Close();
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); } 
    }
так выводит все подряд если сделать пару не сложных манипуляцый то буде выводить более мение читабельно в лист боксе но как переборку сделать мыслей не хватает. Почему текстовый файл? на этом был акцент преподователя. как по мне я б это же быстрей реализовал бы в базе данных.
Программа написана сдал Экзамен на 10 б из 12 нет только сортировки по топу
зарание предупреждаю практически весь код видоизменялся то то что я показывал до этого было сильно изменено

Последний раз редактировалось Xameleon666; 02.09.2013 в 13:00.
Xameleon666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# WinForms Nikita1987 Windows Forms 3 21.04.2011 13:59
Собирать файлы Excel в один главный Mitri45 Microsoft Office Excel 9 05.11.2010 11:18
Как собирать объявления с других сайтов в один общий? ww888 Помощь студентам 1 23.07.2010 20:28
Отображение картинки на кнопке WPF. Загрузка картинки из ресурсов. Проблема с Uri. Casper-SC Общие вопросы .NET 0 27.06.2010 23:11