Przesuwanie pionków C# 8902 11

O temacie

Autor Trout

Zaczęty 4.03.2012 roku

Wyświetleń 8902

Odpowiedzi 11

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Witam,
Próbuję stworzyć warcaby wykorzystując język C#. Powstawiałem picture boxy i w nich image na obrazy pionków. Niestety gdy dochodzi do przesunięcia pionka to nie wiem jak to zrobić, żeby zmienić obraz w picture boxie na który chce się przestawić pionka. Macie jakiś pomysły?
 

Sawik

Sawik

Użytkownicy
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Użytkownicy
  • Rebel
Nigdy nie pisałem obiektowo, ale usunięcie jednego pola i zastąpienie go nowym powinno zdać egzamin.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Tylko chodzi o to, że nie wiem jak je zastąpić, bo nie znam nazwy tego pola, które chce zmienić i nie wiem skąd ją wziąć.
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Trzymasz te boxy w jakiejś strukturze danych? Musisz w jakiś sposób umieć znaleźć pole o obliczonych współrzędnych.
 

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Trzymasz te boxy w jakiejś strukturze danych? Musisz w jakiś sposób umieć znaleźć pole o obliczonych współrzędnych.
Nie, po prostu wstawiłem je w widoku graficznym. Powinieniem picture boxy umiescic np. w tablicy?
Tylko czy da się utworzyć tablicę picture boxów i jednoczesnie ustawiać ich właściwości w trybie graficznym?
Bo to znacznie ułatwiło by pracę.
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Oczywiście, możesz mieć tyle odwołań do obiektu ile potrzebujesz.
 

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Zadeklaruje tablice: PictureBox[] plansza = new PictureBox[64];
I teraz co muszę zrobić żeby po przejściu do widoku graficznego móc ustawić właściwości dla każdego z elementów tablicy?
 

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Black;
            int Left = 5, Top = 5; ;
            PictureBox[] Pole = new PictureBox[64];
            for (int i = 0; i < 64; i++)
            {
                Pole[i] = new PictureBox();
                Pole[i].Width = 60;
                Pole[i].Height = 60;
                if (i % 2 == 0)
                {
                    Pole[i].BackColor = Color.Red;
                    Pole[i].Image = Image.FromFile(@"C:\Users\Paweł\Desktop\obrazy\biale.jpg");
                }
                if (i%2 == 1)
                {
                    Pole[i].BackColor = Color.White;
                    Pole[i].Image = Image.FromFile(@"C:\Users\Paweł\Desktop\obrazy\czarne.jpg");
                }
            }
            for (int j = 0; j < 8; j++)
            {
                for (int i = 0; i < 8; i++)
                {
                    Pole[j * 8 + i].Left = Left;
                    Left += 65;
                    Pole[j * 8 + i].Top = Top;
                }
                Top += 65;
                Left = 5;
            }
            this.Controls.AddRange(Pole);
        }
    }
}
Napisałem takie cos i pola powinny być na przemian czerwone i biale oraz powinny się załadować obrazki. Tymczasem obrazków nie ma, a wszystkie pola są czerwone i zupełnie nie wiem dlaczego tak się dzieje.
 


Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Tak. Sa jeszcze tylko pliki program.cs i FormDisagner.cs jednak sa one wygenerowane automatycznie wraz z tworzeniem projektu i nic tam nie zmieniałem.

Jakby co dołączam treść tych plików
program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
FormDesigner.cs
namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.SuspendLayout();
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(525, 523);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);

        }

        #endregion
    }
}


Jak usune oba ify odpowiedzialne za zmiane koloru pól to jest po prostu sama czarna forma, a jak np mam sam if odpowiedzialny za pomalowanie pol na bialo to maluja mi się na czerwono.
Dolączam cały projekt
http://www.sendspace.pl/file/31542a047bff6e08373d762
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Przesuwanie pionków C#
#10 2012-03-08, 20:24(Ostatnia zmiana: 2012-03-08, 20:25)
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Black;
            int Left = 5, Top = 5; ;
            PictureBox[] Pole = new PictureBox[64];

            for (int j = 0; j < 8; j++)
            {
                for (int i = 0; i < 8; i++)
                {
                    Pole[j * 8 + i] = new PictureBox();
                    Pole[j * 8 + i].Width = 60;
                    Pole[j * 8 + i].Height = 60;

                    Pole[j * 8 + i].Left = Left;
                    Left += 65;
                    Pole[j * 8 + i].Top = Top;

                    if ((j + i) % 2 == 0)
                    {
                        Pole[(j * 8 + i)].BackColor = Color.Red;
                        //Pole[(j * 8 + i)].Image = Image.FromFile(@"C:\Users\Paweł\Desktop\obrazy\biale.jpg");
                    }
                    else
                    {
                        Pole[(j * 8 + i)].BackColor = Color.White;
                        //Pole[(j * 8 + i)].Image = Image.FromFile(@"C:\Users\Paweł\Desktop\obrazy\czarne.jpg");
                    }
                }
                Top += 65;
                Left = 5;
            }
            this.Controls.AddRange(Pole);
        }
    }
}
Poprawiłem kod. Masz szachownicę. U mnie obrazki działają, nie wiem, czemu u ciebie mogą nie działać.

Trout

Trout

Użytkownicy
posty50
Propsy1
  • Użytkownicy
Jak mam wykomentowane ładowanie obrazków to są pola czerwone i białe, ale jak mam je aktywne to wszystkie pola są czerwone, a obrazki to nie czerwone pola więc nie mam pojęcia o co chodzi. A adres obrazka jest dobry na pewno bo kopiowany, więc nie mam pojęcia co jest nie tak. W kazdym razie dzięki za pomoc :)
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry