Miért van az, hogy néha egymást nem érintő mezőket tekint "hajónak" a program? (pl. : 3:5 és 4:1)
Ne szóljatok le, ez az első komolyabb kódom. A switchek azért vannak benne, mert amúgy nem generált pl.: 3-masokat. Azt is tudom, hogy néhány lehetőséget soha nem fog legenerálni (pl.: 5:5 és 4:5 egyszerre), ezen majd még javítok. A kód:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int tabla[4][4] = {0}, szam1, szam2, szam3;
srand(time(NULL));
szam1 = rand()%1000;
switch(szam1 % 4){
case 0: szam1 = 0;break;
case 1: szam1 = 1;break;
case 2: szam1 = 2;break;
case 3: szam1 = 3;break;
}
szam2 = rand()%1000;
switch(szam2 % 4){
case 0: szam2 = 0;break;
case 1: szam2 = 1;break;
case 2: szam2 = 2;break;
case 3: szam2 = 3;break;
}
tabla[szam1][szam2] = 1;
szam3 = rand()%1000;
switch(szam3 % 2){
case 0: szam3 = 0;break;
case 1: szam3 = 1;break;
}
if(szam3 == 0)
szam1 = szam1 + 1;
else
szam2 = szam2 + 1;
tabla[szam1][szam2] = 1;
szam3 = 0;
printf("Rajta! Adj meg a koordinatait a kiloni kivant teruletnek!");
do{
printf("\nx: ");
scanf("%d",&szam1);
printf("y: ");
scanf("%d",&szam2);
szam1 = szam1 - 1;
szam2 = szam2 - 2;
if(tabla[szam1][szam2] == 1){
printf("Talalt!");
szam3 = szam3 + 1;
}
else
printf("Nem talat!");
}while(szam3 != 2);
printf("Sullyedt!\n");
scanf("%d",&szam1);
}
Ez a tipikus: rosszat akartál csinálni, és még rosszul is csináltad.
Azt a mod 1000 mod 4-et végképp nem értem, de hogy minek a switch azt se.
Meg úgy kb semmit.
A %3 valószínűleg azért nem adta ki a 0-3 számokat, mert hárommal osztva soha nem lesz három a maradékod.
szam1 = rand()%4; <-ez pótolna 7 sort.
A végén a szam3 feladata megváltozik, ez borzasztóan csúnya. Inkább most az elején szokj le róla, illetve szokj rá a beszédesebb változónevekre. (x, y, direction, hits)
szam1 = szam1 - 1;
szam2 = szam2 - 2;
Ez a 2 sor pedig nem is értem mit csinál.
Azt viszont egyáltalán nem vizsgálod, hogy hol van vége a pályának. Lazán berakod a [0,3] tömb 4. oszlopába&sorába a hajót, aztán nem csoda hogy nem találja el. Ellenőrzésképpen rajzold ki magadnak a táblát a felpítés után, hátha ki tudod egészíteni.
A szam2 = szam2 + 2 az valójában plusz egy. Ezt egyből javítottam a kódban, de sajna ide így került ki. Azért mert koordinátának nem szokott az ember megadni 0-át, de indexelni onnan kezd.
Akkor ezentúl új változót használok rá! Köszönöm a tanácsod, két napja ismerkedem a nyelvvel tehát nagyon sok még a hiányosságom. Ha kompaktabban és használhatóban megírom akkor még kiteszem ide, hogy legyen valami visszajelzésem arról, hogy hogyan sikerült.
One More String: Köszönöm az építő jellegű kritikád. Te elsőre tökéletes kódot írtál.
Addig is megpróbáltam javítani a dolgon, gondolom ez is hibás, de csak kevésbé.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int tabla[4][4] = {0}, x, y, irany, kilott = 0;
srand(time(NULL));
x = rand()%5;
y = rand()%5;
irany = rand()%2;
tabla[x][y] = 1;
switch(irany % 2){
case 0: if(x < 4)
x = x + 1;
else
x = x - 1;break;
case 1: if(y < 4)
y = y + 1;
else
y = y - 1;break;
}
tabla[x][y] = 1;
printf("Rajta! Adj meg a koordinatait a kiloni kivant teruletnek! (0-4 ig)\n");
do{
do{
printf("x: ");
scanf("%d",&x);
}
while(x > 4 || x < 0);
do{
printf("y: ");
scanf("%d",&y);
}while(y > 4 || y < 0);
if(tabla[x][y] == 1){
printf("Talalt!\n");
kilott = kilott + 1;
}
else
printf("Nem talat!\n");
}while(kilott < 2);
printf("Sullyedt!\n");
}
Nem tud nagyobb számod se megadni, minden lehetőség legenerálódik (még nem ugyanolyan eséllyel) és a véletlenszerű kiválasztásnál a hülyeségeket kiszedtem.
Ha működik, akkor jó.
Most függvények használatával varázsold szebbé, olvashatóvá!
Kezd jó lenni, +1 a függvényekhez.
Más:
* ha [0,4] szeretnéd a tábládat, akkor int tabla[5][5] kell neked, különben túlindexeled.
* x = x+1; -> ++x; (Pre- és posztinkremens operátor valamilyen következő leckéből.)
* ha a lépés 0 vagy 1, akkor a switchen belül már nem kell a kettes maradékát venni
* [link] ide tedd fel, ez megtartja a formázást és olvashatóbb lesz nekünk is.
Tagolva olvashatóbb. Csak sajnos azt nem támogatja a gyakori.
Amúgy milyen függvényekkel és hogyan? Tényleg kezdő vagyok.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!