Do-ban bekérek változót, nem engedi whileban ellenőrizni (már nem létezik)?
Értem én, hogy rosszul csinálom, de hogy lehetne jól. Csak akkor álljon le a program, ha jó értékeket ad meg az ember.
A vége pedig az lenne, hogy ha szomszédos mezőket adott meg végre a "játékos" akkor kicserélje azok elemeit. Ezt meg valahogy egyszerre kéne végrehajtani, mert amint az egyik megváltozik a másikra, a másikat máár saját magára fogja változtatni.
Bemásolom a kódrészt:
public static void Change(int[,] playfield)
{
do
{
Console.WriteLine("Add valid numbers for the change");
Console.WriteLine("Give the first coordniate(row) of the first jewel you want to change");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Give the second coordniate(coloumn) of the first jewel you want to change");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Give the first coordniate(row) of the second jewel you want to change");
int c = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Give the second coordniate(coloumn) of the second jewel you want to change");
int d = Convert.ToInt32(Console.ReadLine());
}
while ((a != c && b != c) || ((a == c) && (b - 1 != d) && (b + 1 != d)) || ((b == d) && (a - 1 != c) && (a + 1 != c)));
playfield[a - 1, b - 1] = playfield[c - 1, d - 1];
playfield[c - 1, d - 1] = playfield[a - 1, b - 1];
}
Te szentséges ég, az a kilépési feltétel.
A válasz amúgy nagyon egyszerű: a ciklus előtt deklaráld a változókat.
Már működik is, köszönöm.
A kilépési feltételt meg biztos le lehet írni egyszerűbben, de nekem így sikerült, hogy működjön. A cserére nincs ötleted, hogy tudnám megoldani? 2Ds tömb két elemét kéne úgy, hogy a megadott koordináták alapján ne lemásolja az egyiket a másik helyére, hanem tényleg kicserélje.
Temporális változóval a legegyszerűbb.
Elmented az eredeti értéket, mielőtt felülírod.
Nem próbáltam, de szerintem a szomszédos mezőket lehetne így ellenőrizni:
if( abs(a - c) == 1 || abs(b - d) == 1)
ezen felül meg ellenrőrizd, hogy a megadott indexek benne vannak e a mátrixba, (nagyob mint 0, kisebb mint a playfield nagysága)
Az indexeket már csekkoltam. Inkább az a nehéz, most, hogy csak akkor jöjjön létre a csere, ha a csere után két ugyanolyan érték kerül egymás mellé. Így csekkolnám alapból(whileban):
&& playfield[a - 1, b - 1]!= playfield[a-2,b-1] && playfield[a - 1, b - 1] != playfield[a, b - 1] && playfield[a - 1, b - 1] != playfield[a-1, b ] && playfield[a - 1, b - 1] != playfield[a, b - 2] && playfield[c - 1, d - 1] != playfield[c - 2, d - 1] && playfield[c - 1, d - 1] != playfield[c, d - 1] && playfield[c - 1, d - 1] != playfield[c - 1, d] && playfield[c - 1, d - 1] != playfield[c, d - 2]);
De alapból nem jó, + nem tud csekkolni baloldalinál baloldali szomszédot, alsónál alsót stb. és olyankor outof range. Most épp erre guglizok már eg yélf órája, de nem találok igazán jó megoldást.
Ez a problémám már a "playfield" generálásakor. Már kitaláltam, hogy két metódusban csinálom.
public static void FillArray(int[,] array)
{
Random rnd = new Random();
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array[i, j] = rnd.Next(1,8);
}
}
}
És a 2.
public static void FindPairsStart (int [,]arr)
{
int exceed = 0;
Random rnd = new Random();
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
if (arr[i,j]==arr[i,j+1]|| arr[i, j] == arr[i+1, j ]|| arr[i, j] == arr[i, j - 1]|| arr[i, j] == arr[i-1, j ])
{
exceed = arr[i, j];
arr[i, j] = rnd.Next(1, 10 - exceed);
}
}
}
}
De ugye itt sem tudja csekkolni, mert átmegy az index -1be
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!