Diskuze: Vlastní třída
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 17 zpráv z 67.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Hint:
1 - proměnnou dáš mimo metodu
2 - naplníš v konstruktoru nebo OnLoad metodě formuláře
Jestli mohu doporučit: Dej na radu ostatních, kdybys přečetl minimálně ten tutoriál, dokázal bys to napsat sám. Začátky jsou těžké, ale z cizích kódů se moc nenaučíš (s porovnáním tím, že si něco vymyslíš z vlastní hlavy)


Já to chápu, ale slíbil jsem kamarádovi, že mu s tímto problémem pomůžu, i když jsem věděl, že mé znalosti nejsou adekvátní tomuto řešení. A až to budu mít z krku, tak si rád přečtu všechny tutoriály, protože mě to začalo zajímat. A nikdo mě od toho neodradí, i přesto, že začátky jsou opravdu těžké.
Byl bych opravdu velice rád, kdyby kdokoli doplnil do kódu, který jsem poslal výše, chybějící metody (zbytek kódu). Děkuji.
Vždyť jsem ti napsal všechen kód, stačí ho tam doplnit jako skládačku ...
Teď jsem ti napsal před půl hodinou přesný postup co máš udělat. V tom kódu co jsi poslal naposled jsi akorát smazal ten velký paskvil.


Stále mi to nejede 
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.Diagnostics;
namespace Maze
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
start();
foreach (Control c in Controls)
{
if (c is Label)
{
rectangles.Add(c.ClientRectangle);
}
}
}
private List<Rectangle> rectangles = new List<Rectangle>();
private bool IsThrough(Rectangle playerRectangle, params Rectangle[] rectangles)
{
foreach (Rectangle r in rectangles)
{
if (playerRectangle.IntersectsWith(r))
return true;
}
return false;
if (IsThrough(player.ClientRectangle, rectangles.ToArray()))
{
start();
}
}
// STOPWATCH:
public Stopwatch watch = new Stopwatch();
// START:
public void start()
{
player.Location = new Point(0, 575);
watch.Reset();
watch.Start();
}
// CONTROL:
public void Form1_KeyDown(object sender, KeyEventArgs e)
{
// UP:
if (e.KeyCode == Keys.W)
{
player.Top -= 10;
}
// DOWN:
if (e.KeyCode == Keys.S)
{
player.Top += 10;
}
// LEFT:
if (e.KeyCode == Keys.A)
{
player.Left -= 10;
}
// RIGHT:
if (e.KeyCode == Keys.D)
{
player.Left += 10;
}
IsThrough();
}
// FINISH:
public void finish()
{
watch.Stop();
string time = watch.Elapsed.Seconds.ToString();
MessageBox.Show("Congratulations! " + "Your time: " + time + " seconds.");
}
}
}
Vidíš chybu?
Metodu IsThrough v metodě IsThrough voláš proč ? Tu podmínku by jsi měl
dát do metody kde ovládáš hráče. Takto donekonečna voláš metodu
IsThgrough 


Teď se program sice spustí, ale nejde ovládat hráčem.
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.Diagnostics;
namespace Maze
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
start();
foreach (Control c in panel1.Controls)
{
if (c is Label)
{
rectangles.Add(c.ClientRectangle);
}
}
}
private List<Rectangle> rectangles = new List<Rectangle>();
private bool IsThrough(Rectangle playerRectangle, params Rectangle[] rectangles)
{
foreach (Rectangle r in rectangles)
{
if (playerRectangle.IntersectsWith(r))
return true;
}
return false;
}
// STOPWATCH:
public Stopwatch watch = new Stopwatch();
// START:
public void start()
{
player.Location = new Point(0, 575);
watch.Reset();
watch.Start();
}
// CONTROL:
public void Form1_KeyDown(object sender, KeyEventArgs e)
{
// UP:
if (e.KeyCode == Keys.W)
{
player.Top -= 10;
}
// DOWN:
if (e.KeyCode == Keys.S)
{
player.Top += 10;
}
// LEFT:
if (e.KeyCode == Keys.A)
{
player.Left -= 10;
}
// RIGHT:
if (e.KeyCode == Keys.D)
{
player.Left += 10;
}
if (IsThrough(label1.ClientRectangle, rectangles.ToArray()))
{
start();
}
}
// FINISH:
public void finish()
{
watch.Stop();
string time = watch.Elapsed.Seconds.ToString();
MessageBox.Show("Congratulations! " + "Your time: " + time + " seconds.");
}
}
}
Jo, to bude tím, že máš v tom poli rectangles i ten rectangle toho
hráče = vždycky ti to vráti true protože se ptáš jestli hráč a hráč
se náhodou nepřekrývají => musíš vylepšit to přidání těch
jednotlivých rectanglu do toho listu (v konstruktoru) dej si třeba k tomu
labelu toho hráče k vlastnosti Tag třeba text "Player" a testuj jestli je
label.Tag != "Player"
V kódu teda takto:
foreach (Control c in panel1.Controls)
{
if (c is Label)
{
if( (c as Label).Tag != "Player")
rectangles.Add(c.ClientRectangle);
}
}
Pak už by to mělo všechno fungovat 


Asi bude chyba někde jinde, protože to stále nejede 
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.Diagnostics;
namespace Maze
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Form1 LOAD:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in panel1.Controls)
{
if (c is Label)
{
if ((c as Label).Tag != "Player")
{
rectangles.Add(c.ClientRectangle);
}
}
}
start();
}
// List of Rectangles:
private List<Rectangle> rectangles = new List<Rectangle>();
// Trough:
private bool IsThrough(Rectangle playerRectangle, params Rectangle[] rectangles)
{
foreach (Rectangle r in rectangles)
{
if (playerRectangle.IntersectsWith(r))
return true;
}
return false;
}
// STOPWATCH:
public Stopwatch watch = new Stopwatch();
// START:
public void start()
{
player.Location = new Point(0, 575);
watch.Reset();
watch.Start();
}
// CONTROL:
public void Form1_KeyDown(object sender, KeyEventArgs e)
{
// UP:
if (e.KeyCode == Keys.W)
{
player.Top -= 10;
}
// DOWN:
if (e.KeyCode == Keys.S)
{
player.Top += 10;
}
// LEFT:
if (e.KeyCode == Keys.A)
{
player.Left -= 10;
}
// RIGHT:
if (e.KeyCode == Keys.D)
{
player.Left += 10;
}
if (IsThrough(label1.ClientRectangle, rectangles.ToArray()))
{
start();
}
}
// FINISH:
public void finish()
{
watch.Stop();
string time = watch.Elapsed.Seconds.ToString();
MessageBox.Show("Congratulations! " + "Your time: " + time + " seconds.");
}
}
}
A tady je celý projekt:
http://uloz.to/x4846xQT/maze-rar
Kouknul jsem nato a opravil, nechce se mi to uploadovat, ale validuješ jestli není label1 (zeď ) náhodou ve zdi(sama v sobě) = pokaždé ti to vrátí true a vždy se vrátíš nazačátek.
Takže si to oprav na
if (IsThrough(new Rectangle(player.Location, player.Size), rectangles.ToArray()))
{
start();
}
Pozn. když vytváříš rectangle, tak clientRectangle kašle na pozici
(location toho controlu) takže to musíš sám vytvořit ten objekt
To samé platí i u toho jak si přidáváš ty jednotlivé rectangly v
konstruktoru do toho listu
takže v tom kódu místo
rectangles.Add(c.ClientRectangle);
oprav na:
rectangles.Add(new Rectangle(c.Location, c.Size));
Ještě poznámka, jak máš tu metodu na KeyPress, tak použí raději switch a když nebude žádná klávesa, která by s ní pohla (default) tak zavolej return, zbytečně pak voláš tu metodu IsThrough a testuješ celé to pole... mluvím jen, že kdybys tam měl třeba takových kolizí možných třeba 5oo, tak už by to bylo značně poznat.
Zobrazeno 17 zpráv z 67.