Diskuze: Tetris
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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++;
}
}
}.
// 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();
}
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);
}
}
}
}
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
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á.
Zobrazeno 8 zpráv z 8.