Pěkné svátky přeji, jestli se někdo nudí měl bych tady dotaz. Mám napsat síťové piškvorky v gui v C#. Takže první co mě napadlo bylo naházet do form 100 tlačítek (pole 10x10) kde když kliknete na nějaké tlačítko, tak se na něm ukáže třeba kolečko nebo křížek a uloží hodnotu do int pole v kterém už se krásně tahy dají zkontrolovat. No, ale pak mě zamrazilo v zádech, když jsem si představil, že musím poklikat (vygenerovat ) ke 100tlačítkům událost po kliknutí a doplnit do ních příslušné metody. To ani nemyslím na to, že bych to pole pak rozšířil třeba na 30x30 :O .. tak jestli někdo tušíte jak na problém jít jednodušeji budu moc rád za každou radu díky Jestli by třeba nešla nějak využít dědičnost, že bych napsal pro jedno tlačítko, co má udělat po kliknutí na něj atd.. a to tlačítko si pak namnožil třeba na 100 kousků
Fórum › .NET
GUI piškvorky
Zdravím,
osobně bych to asi řešil trochu složitěji přes kreslení(bylo by to určitě hezčí - taková změna pozadí), ale v podstatě nevidím důvod nepoužití dynamicky generované tlačítka. Každý Button má vlastnost(delegáta) Click, kterému předáš EventHandler. A jako káždý handler obsahuje jako parametr Sender. Ten obsahue objekt, který vyvolal událost. Takže teď už si stačí jednotlivé tlačítka nějak od sebe odlišit(třeba podědíš od standartní třídy button a přidáš vlastnost ID), nějaké jendoznačné id, podle kterého určíš, kterou pozici hráč označil.
Přeji pěkný zbytek svátků
To Jura : Díky za typ. Něco s tím zkusím vymyslet, ale spíš s těma tlačítkama jedná se jen o projekt do školy :) Tu vlastnost ID jsem pochopil, ale jak tam potom vygenerovat třeba těch 100tlačítek? Naházet je tam ručně nebo je na to nějaká finta ? :)
To Luxfer :
Bohužel tě budu muset zklamat, protože nemám nainstalováné VS. Ale je to jen trapné přičítání. V konstruktoru udelas toto nebo zvaolas nejakou metodu.
Jen takový náznak kódu:
int nPocetNaRadek = 10;
int nPocetNaSloupec = 10;
int nSirka = 10, nVyska = 10;
int x = 0;
int y = 0;
for(int i = 0; i < nPocetNaRadek; ++i)
{ for(int j = 0; j < nPocetNaSloupec; ++j)
{ MyButton btn = new MyButton;
btn.Parent = this;
btn.Size = NEJAKY_ROZMER;
btn.Location = new Point(x,y);
btn.Click += new EventHandler(MyBtnClick);
x += nSirka; nebo jak se ta property jmenuje
}
y += nVyska;
}
protected void MyBtnClick(Sender sender, EventArgs e)
{ MyButton btn = (MyButton) sender;
// nejake operace s btn.ID
}
No snad je to jasne.
To Jura : Nebo jsetli tuší někdo jiný.. Pracuju s těmi tlačítky podle toho tvého příkladu, ale vyskytl se mi problém, že ty piškvorky hraju na straně serveru a klienta a posílám údaje druhé straně o provedeném tahu a na druhé straně bych chtěl změnit u toho tlačítka popisek, tj. zaznačit druhou stranou provedený tah. Takže já na jedné straně přijmu souřadnice, kde hrála druhá strana, a u tlačítka na této souřadnici bych chtěl změnit ten popisek. Jenže mám problém, že nevím, jak se k takovému tlačítku dostat a změnit u něho nějaké atributy (v mém případě ten popisek tlačítka), když jsem na to tlačítko neklikl.
Jak by se prosím tě dalo k tomu tlačítku dostat, i když jsem na něho neklikl? V MyButton používám ID jednorozměrné pole s 2 údaji o pozici tlačítka v té „matici“
Napadlo mě jedině napsat druhou metodu
protected void MyBtn2Click(object sender, EventArgs e)
a pak ji zavolat třeba s parametry
MyButton send = new MyButton();
send.Text = "";
EventArgs myE = new MouseEventArgs(MouseButtons.Left, 1, 8, 8, 1);
MyBtn2Click(send, myE);
Kde 8, 8 sou nějaké souřadnice toho tlačítka. No ale nějak to nejede ono se tam asi u sender a eventu musí nastavit více :( Zdravím,
no,asi jsem se unáhlil, nějak jsem přehlédl, že se jedná o síťovou hru. Takže tak jak píše Mephi,někde si ty tlačítka musíš pamatovat. Já myslel, že hraje hráč proti hráči na jendom PC:D, pak by si stačilo jen pamatovat, kdo je na tahu. Tzn. udelej si pole těch MyButton a pak už jen prostými indexy.Takže za případné komplikace se omlouvám.
nepodelili byste se pls o zdrojak? treba me konkrtene zajima jak by se to dalo delat sitove...
yep dokazu byt velmi trpelivy a kdo vi, kdyz to bude open source tak treba ti to tady i nekdo z nudy vylepsi ;-)
To mephi : Tak to tě bohužel zklamu. Za ten jedene semestr co děláme C# nám vlákna ještě moc neříkají :o)) Ale co sme tak zkoušeli, tak to nezamrzá ;o) A pokud jo, budem moc rádi když to upravíš třeba na vlákna a pak se o to podělíš :))
Jinak tu práci na síti sme zhruba čerpali tady: http://www.java2s.com/Tutorial/CSharp/0580__Network/Catalog0580__Network.htm
Ahoj. Trochu OT, ale zaujimalo by ma na akej skole studujes. Momentalne som v maturitnom rocniku tak sa o to celkom dost zaujimam. Mal si nejake skusenosti s C# uz predtym, alebo sa to da zvladnut ucit sa od nuly az tam? (Predpokladam teda, ze studujes vysoku skolu, ak nie tak potom beriem cely moj prispevok spat...) DIk.
To jozosandy : Studuji na VŠB v Ostravě na FEI obor informatika a komunikační technika. Sem ve druháku a pokud jde o C# tak dělám ho od října. V prváku sme měli javu, tam tě naučí základy oběktového programování a ve druhém semestru sme dělali nejrůznější algoritmy v jave. Přechod na C# byl naprosto bezbolestný a taky mě to v C# začalo bavit, jde to tam vše jednodušeji. Ještě byla možnost si přidat C++, ale to se mě nechtělo dělat :) Je to tady zatím pohůdka, takže já to tu můžu zatím jen doporučit.. problém je jen, že ti cpou v prváku elektroniku a komunikace, ale ve druháku už si snad dají pokoj :D
To Jura :
try
{
// Vytvářím socket
m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, Int16.Parse(txtPortNo.Text));
// Připojuju se k lokální IP
m_socListener.Bind(ipLocal);
// Začínám číhat na přijatá data
m_socListener.Listen(4);
// Když klient pošle data, spustí se metoda OnClientConnect
m_socListener.BeginAccept(new AsyncCallback(OnClientConnect), null);
cmdListen.Enabled = false; // Po vytvoření připojení už na toto tlačítko více nemůžu klikat
}
Zdravim, jsem na střední v prváku a oboru Elektrotechnika. Moc mi nejde Programoví vybavení, no teda propadám z něj a dostali jsme za ůkol udělat nějáký piškvorky, pexeso, či něco podobnýho a já si nevim rady! S pomocí né moc příjemného učitele jsem vytvořil pole s 150 buttony a udělal to aby se tam oběvovaly křížky a kolečka ale se zbytkem, což je to aby se mi nepřepisovali když klikne druhý hráč, a aby poté co někdo dostane 5 stejných značek zobryzilo že vyhrál či něco podobného,mi prej už nepomůže a tak hledám pomoc všude kde to jde a tak jsem narazil na toto forum a doufám že mi z vás někdo s tím pomůže. Předem děkuji.
int klik;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
klik++;
if (klik % 2 == 0)
{
(sender as Button).Text = "0";
}
else
{
(sender as Button).Text = "x";
}
Ja to kdysi resil tak, ze sem si udelal svoji tridu, ktera dedila z JButton a v ni sem mel prommenou, jestli ma prirazeny herni kamen.Po kliknuti sem tohle kontroloval a kdyz bylo, tak sem zarval hlasku. Slo by to vyresit i tim, ze bys po kliknuti na tlacitko ho dal Enabled = false a tim zabranil dalsimu kliknuti.
Co se tyka rozpoznani 5 stejnych kamenu, ja to resil algoritmem, kdy po kazdem kliknuti sem prosel cele herni pole a 5 kamenu ve vodorovnem, svislem a sikmem smeru.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
GUI Piskvorky — založil pepan
Piškvorky — založil rundll32.exe
Piskvorky v Javě — založil bla
Moderátoři diskuze