Diskuze: Tetris
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Petr Šťastný:29.10.2017 8:38
Pouzivej takovy to tlacitko </> nad textovym polem kdyz tady na itnetworku pises prispevek. Hezky to naformatuje kod.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Threading.Thread;
namespace Tetris
{
class Program
{
static Hraci_plocha hraci_plocha = new Hraci_plocha();
static Kostka kostka = new Kostka();
static void Main(string[] args)
{
VytvorHraciPlochu();
VytvorKostku();
}
static public void VytvorHraciPlochu()
{
hraci_plocha.NaplnHraciPlochu();
hraci_plocha.VykresliHraciPlochu();
}
static public void VytvorKostku()
{
while (true)
{
Console.Clear();
hraci_plocha.VykresliKostku();
kostka.PresunKostku();
Console.WriteLine(kostka.Y);
Sleep(1000);
}
}
}
class Hraci_plocha
{
Kostka kostka = new Kostka();
public char[,] plocha;
public Hraci_plocha()
{
plocha = new char[45, 100];
}
public void NaplnHraciPlochu()
{
for (int i = 0; i < plocha.GetLength(0); i++)
{
for (int j = 0; j < plocha.GetLength(1); j++)
{
if (j == 0 || j == 99 || i == 44)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
}
public void VykresliHraciPlochu()
{
foreach (char ch in plocha)
{
Console.Write(ch);
}
}
public void VykresliKostku()
{
for (int i = 0; i < plocha.GetLength(0); i++)
{
for (int j = 0; j < plocha.GetLength(1); j++)
{
if (j == 0 | j == 99 | i == 44)
{
Console.Write("*");
}
else if (j == kostka.X & i == kostka.Y)
{
Console.Write("x");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
}
}
class Kostka
{
public int X { get; set; }
public int Y { get; set; }
private Random rnd;
public Kostka()
{
rnd = new Random();
X = rnd.Next(1, 100);
Y = 0;
}
public void PresunKostku()
{
Y++;
}
}
}.
Petr Šťastný:29.10.2017 8:46
- Proc using static System.Threading.Thread; ?
- Kdyz vykreslujes hraci plochu, udelej to takhle, 2rozmerne pole bych neiteroval pres foreach
// Kod je zjednodusenej, jsem na mobilu, ty for cykly udelej jako u naplnovani plochy
for(i){
for(j){
Console.Write(plocha[i, j]);
}
Console.WriteLine();
}
- Metoda NaplnHraciPlochu nic nenaplnuje, ale jenom vykresluje
Petr Kubíček:29.10.2017 11:10
Using STATIC mi jen zkracuje zápis funkce volané z System.Threading.Thread. A ten používám, protože chci pole překreslovat například po vteřině.
Trochu jsem poupravil kód, dle instrukcí, ale stále bez výsledku.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Threading.Thread;
namespace Tetris
{
class Hraci_plocha
{
Kostka kostka = new Kostka();
public char[,] plocha;
public Hraci_plocha()
{
plocha = new char[45, 100];
}
public void NaplnHraciPlochu()
{
for (int i = 0; i < plocha.GetLength(0); i++)
{
for (int j = 0; j < plocha.GetLength(1); j++)
{
if (j == 0 || j == 99 || i == 44)
{
plocha[i, j] = '*';
}
else
{
plocha[i, j] = ' ';
}
}
Console.WriteLine();
}
}
public void VykresliHraciPlochu()
{
for (int i = 0; i < plocha.GetLength(0); i++)
{
for (int j = 0; j < plocha.GetLength(1); j++)
{
Console.Write(plocha[i, j]);
}
Console.WriteLine();
}
}
public void VytvorKostku()
{
for (int i = 0; i < plocha.GetLength(0); i++)
{
for (int j = 0; j < plocha.GetLength(1); j++)
{
if (j == kostka.X & i == kostka.Y) { plocha[i, j] = 'x'; }
}
Console.WriteLine();
}
}
}
class Kostka
{
public int X { get; set; }
public int Y { get; set; }
private Random rnd;
public Kostka()
{
rnd = new Random();
X = rnd.Next(1, 100);
Y = 0;
}
public void PresunKostku()
{
Y++;
}
}
class Program
{
static Hraci_plocha hraci_plocha = new Hraci_plocha();
static Kostka kostka = new Kostka();
static void Main(string[] args)
{
VytvorHraciPlochu();
VytvorKostku();
}
static public void VytvorHraciPlochu()
{
hraci_plocha.NaplnHraciPlochu();
Console.Clear();
hraci_plocha.VykresliHraciPlochu();
}
static public void VytvorKostku()
{
hraci_plocha.VytvorKostku();
while (true)
{
Console.Clear();
kostka.PresunKostku();
hraci_plocha.VykresliHraciPlochu();
Console.WriteLine(kostka.Y);
Sleep(1000);
}
}
}
}
Petr Šťastný:29.10.2017 11:33
Metoda VytvorKostku se nikdy neukonci, zasekne se to v nekonecnym cyklu, ktery nikde neukoncujes. Mozna to bude tim. Za par hodin budu doma, tam se na to podivam poradne. Zatim si zkus kod vykrokovat, abys nasel chybu.
Dobry s tim using static, ani jsem nevedel, ze neco takovyho jde
Michael Škrášek:29.10.2017 11:45
Podle mě to máš celé špatně rozvržené, ale to nechme stranou. Chyba
je v tom, že sice změníš pozici kostky, ale v poli zustane x uložené na
stejném místě ...
Tak jak to máš stačí poupravit takto:
static public void VytvorKostku()
{
hraci_plocha.VytvorKostku();
while (true)
{
Console.Clear();
hraci_plocha.plocha[kostka.Y, kostka.X] = ' ';
kostka.PresunKostku();
hraci_plocha.plocha[kostka.Y, kostka.X] = 'x';
hraci_plocha.VykresliHraciPlochu();
Console.WriteLine(kostka.Y);
Sleep(1000);
}
}
Pozice se posune i v poli ... smaže stará a uloží nová.
+20 Zkušeností
+2,50 Kč

Zobrazeno 8 zpráv z 8.