Kezdőoldal » Számítástechnika » Programozás » Ez a kód mennyire "bonyolult"?

Ez a kód mennyire "bonyolult"?

Figyelt kérdés

Gyakoroltam az internetről JAVA -t, de eljutottam egy olyan pontra, ahol már azt mondom, hogy elég komplikált és kezdem elveszíteni a fonalat, hogy mi micsoda. Az alapok megtanulása után elkezdtem alkalmazni a tanultakat. Egy szoftverfejlesztői képzésre ha jelentkezem, akkor az alapok megtanulása után általában egyből ilyen komplex programokban szokás alkalmazni a tanultakat? Pl. ha kifizetem a több millió forintot egy képzésre akkor félek attól, hogy ott sem fogom érteni.. de feltételezem az sokkal jobb mint az internetről tanulni. Aki a nulláról kezdte, annak milyen volt a tanuló és befogadóképessége? Milyen nehézségekkel kellett szembesülnie? A kódot teljesen 0 szintről kezdtem el megtanulni és alkalmazni, ez 2db gép által irányított karaktert hoz létre konzolos felületen. Az ellenség próbálja elkapni a játékost. Íme a kódom:


import java.util.Random;


public class BasicGame {


static final int GAMELOOPNUMBER = 100;

static final int HEIGHT = 15;

static final int WIDTH = 15;

static final Random RANDOM = new Random();


public static void main(String[] args) throws InterruptedException {



String[][] level = new String[HEIGHT][WIDTH];

initLevel(level);

addRandomWalls(level);


String playerMark = "O";

int[] playerStartingCoordinates = getRandomStartingCoordinatesForPlayer(level);

int playerRow = playerStartingCoordinates[0];

int playerColumn = playerStartingCoordinates[1];

Direction playerDirection = Direction.RIGHT;


String enemyMark = "-";

int[] enemyStartingCoordinates = getRandomStartingCoordinatesForEnemy(level, playerStartingCoordinates);

int enemyRow = enemyStartingCoordinates[0];

int enemyColumn = enemyStartingCoordinates[1];


Direction enemyDirection = Direction.LEFT;


for (int iterationNumber = 1; iterationNumber <= GAMELOOPNUMBER; iterationNumber++) {



if (iterationNumber % 10 == 0) {

playerDirection = changeDirection(playerDirection);

}


int[] playerCoordinates = makeMove(playerDirection, level, playerRow, playerColumn);

playerRow = playerCoordinates[0];

playerColumn = playerCoordinates[1];



if (iterationNumber % 2 == 0) {

enemyDirection = changeEnemyDirection(level, enemyDirection, playerRow, playerColumn, enemyRow,

enemyColumn); // changeEnemyDirection


int[] enemyCoordinates = makeMove(enemyDirection, level, enemyRow, enemyColumn);

enemyRow = enemyCoordinates[0];

enemyColumn = enemyCoordinates[1];

}

draw(level, playerMark, playerRow, playerColumn, enemyMark, enemyRow, enemyColumn);

addSomeDelay(200L, iterationNumber);


if (playerRow == enemyRow && playerColumn == enemyColumn) {

break;

}


}

System.out.println("Játék vége.");


}


static int[] getRandomStartingCoordinatesForEnemy(String[][] level, int[] playerStartingCoordinates) {


int playerStartingRow = playerStartingCoordinates[0];

int playerStartingColumn = playerStartingCoordinates[1];

int randomRow;

int randomColumn;


do {

randomRow = RANDOM.nextInt(HEIGHT);

randomColumn = RANDOM.nextInt(WIDTH);

} while (!level[randomRow][randomColumn].equals(" ")

|| calculateDistance(randomRow, randomColumn, playerStartingRow, playerStartingColumn) < 10); //calculateDistance metódusban kiszámolom, hogy mekkora a távolság az ellenség és player távolsága között

return new int[] { randomRow, randomColumn };


}


static int calculateDistance(int row1, int column1, int row2, int column2) {

int rowDifference = Math.abs(row1 - row2);

int columnDifference = Math.abs(column1 - column2);

return rowDifference + columnDifference;

}


static int[] getRandomStartingCoordinatesForPlayer(String[][] level) {


int randomRow;

int randomColumn;


do {

randomRow = RANDOM.nextInt(HEIGHT);

randomColumn = RANDOM.nextInt(WIDTH);

} while (!level[randomRow][randomColumn].equals(" "));

return new int[] { randomRow, randomColumn };

}


static Direction changeEnemyDirection(String[][] level, Direction originalEnemyDirection, int playerRow, // Külön


int playerColumn, int enemyRow, int enemyColumn) {

if (playerRow < enemyRow && level[enemyRow - 1][enemyColumn].equals(" ")) {

return Direction.UP;

}

if (playerRow > enemyRow && level[enemyRow + 1][enemyColumn].equals(" ")) {

return Direction.DOWN;

}

if (playerColumn < enemyColumn && level[enemyRow][enemyColumn - 1].equals(" ")) {

return Direction.LEFT;

}

if (playerColumn > enemyColumn && level[enemyRow][enemyColumn + 1].equals(" ")) {

return Direction.RIGHT;

}

return originalEnemyDirection;

}


static void addRandomWalls(String[][] level) {

addRandomWalls(level, 2, 3);

}


static void addRandomWalls(String[][] level, int numberOfHorizontalWalls, int numberOfVerticalWalls) {

for (int i = 0; i < numberOfHorizontalWalls; i++) {

addHorizontalWall(level);

}


for (int i = 0; i < numberOfVerticalWalls; i++) {

addVerticalWall(level);

}


}


static void addHorizontalWall(String[][] level) {


int wallWidth = RANDOM.nextInt(WIDTH - 3);


int wallRow = RANDOM.nextInt(HEIGHT - 2) + 1;

int wallColumn = RANDOM.nextInt(WIDTH - 2 - wallWidth); // meghatározzuk melyik OSZLOPBA kezdődjön a fal


for (int i = 0; i < wallWidth; i++) { // ebbe a ciklusba végigmegyünk a véletlenszerű falhosszúság számán, és


level[wallRow][wallColumn + i] = "X";

}


}


static void addVerticalWall(String[][] level) {

int wallHeight = RANDOM.nextInt(HEIGHT - 3);

int wallRow = RANDOM.nextInt(HEIGHT - 2 - wallHeight);

int wallColumn = RANDOM.nextInt(WIDTH - 2) + 1;

for (int i = 0; i < wallHeight; i++) {

level[wallRow + i][wallColumn] = "X";

}

}


private static void addSomeDelay(long timeout, int iterationNumber) throws InterruptedException {

System.out.println("-------" + iterationNumber + "-------");

Thread.sleep(timeout);

}


static void initLevel(String[][] level) {

for (int row = 0; row < level.length; row++) { // az összes i -t átneveztem row -ra

for (int column = 0; column < level[row].length; column++) { // az összes j -t átneveztem column -re

if (row == 0 || row == HEIGHT - 1 || column == 0 || column == WIDTH - 1) { // innentől rakom be a falat


level[row][column] = "X";

} else {

level[row][column] = " ";

}


}

}

}


static int[] makeMove(Direction direction, String[][] level, int row, int column) {

switch (direction) {

case UP:


if (level[row - 1][column].equals(" ")) {


row--;

}


break;

case DOWN:

if (level[row + 1][column].equals(" ")) {

row++;

}

break;

case LEFT:

if (level[row][column - 1].equals(" ")) {

column--;

}

break;


case RIGHT:

if (level[row][column + 1].equals(" ")) {

column++;

}

break;

}


return new int[] { row, column };

}


static Direction changeDirection(Direction direction) {

switch (direction) {

case RIGHT:

return Direction.DOWN;


case DOWN:

return Direction.LEFT;


case LEFT:

return Direction.UP;


case UP:

return Direction.RIGHT;


}

return direction;

}


static void draw(String[][] board, String playerMark, int playerRow, int playerColumn, String enemyMark,

int enemyRow, int enemyColumn) {

for (int row = 0; row < HEIGHT; row++) {

for (int column = 0; column < WIDTH; column++) {

if (row == playerRow && column == playerColumn) {

System.out.print(playerMark);

} else if (row == enemyRow && column == enemyColumn) {

System.out.print(enemyMark);

} else {

System.out.print(board[row][column]);

}

}

System.out.println();

}

}


}



2023. júl. 6. 23:55
1 2
 1/14 anonim ***** válasza:
100%
Hasznalj kód megosztó oldalt mint a pastebin en ezt ugyan ki nem elemzem így.
2023. júl. 7. 00:05
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:

köszi!

Itt a kód: [link]

😁

2023. júl. 7. 00:15
 3/14 A kérdező kommentje:

köszi!

itt a kód: [link]

😁

2023. júl. 7. 00:18
 4/14 anonim ***** válasza:
83%

Na pont ezért nem ajánlom én senkinek az internetről a tanulást.

Egy első tanórás valaminek elmegy még iskolában, de maga a kód förtelem.

Stringekkel jelölöd mi van a mezőn?

Erre valók az objektumok...

A többiről inkább nem is beszélek.

Javaslom, inkább tényleg iratkozz be valami képzésre, még a legrosszabb bootcamp is jobban tanít.

És ezzel nem bántani akarlak, mert 0-hoz képest legalább valami, de az a baj, hogy ezt így elkezded betanulni/megszokni hogy így kell, utána ásóval nem lehet már kiverni belőled a rossz szokásokat.

De ha gondolod/kéred, akkor írjál privátban, pár tucat kerülendő dolgot le tudok írni a kódodból, és hogy hogyan lehetne normálisabb

2023. júl. 7. 00:34
Hasznos számodra ez a válasz?
 5/14 A kérdező kommentje:
Az OOP nál még nem tartok.
2023. júl. 7. 02:13
 6/14 anonim ***** válasza:
60%

Ez amúgy nem egy videó tutorial kódja?


A kérdésre válaszolva, ez semmi egy munkához képest. Ott fejlesztőcsapat több 10-100 ezer soros kódbázist fejleszt (de akár milliós is lehet), és magán a kódon kívül mást is kell csinálni. A linkelt program ehhez képest 236 sor, és ráadásul elég fura megoldások vannak benne.


Bootcampekről nem tudom véleményt mondani, de ha otthon akarsz tanulni, akkor érdemes lenne valamilyen egyetemnek a kezdő programozás kurzus anyagát megnézni.

2023. júl. 7. 03:21
Hasznos számodra ez a válasz?
 7/14 anonim ***** válasza:
100%

Ez egy elég egyszerű kód, kérdező. Hosszúnak sem hosszú, és igazából a nyelv alapkészletének egy részét használja csak. Nincsenek benne plus osztályok definiálva, nincsenek benne csomagok ill. hivatkozás más csomagokra, az osztályban sincsenek láthatósági módosítók, tehát nem kell gondolkodni azon, ki kivel és miért. Nincs benne interface, abstract osztály, örökldés. A nyelv magasabb szintű elemei közül sem használ egyet sem, nincs benne anonymus class, lambda, functional interface, multithreading, nincsenek benne generikusok, nincs használva a stream API, a hibakezelés is le van tudva annyival, hogy továbbdobja a main a kivételt...

Szerintem csak gyakorlásra van szükséged, és megtanulod majd követni a fonalat a bonyolultabb kódoknál is.

2023. júl. 7. 07:40
Hasznos számodra ez a válasz?
 8/14 anonim ***** válasza:
100%

#4: Én pedig azt mondom, hogy az ember így tanul. Elsőre nem fog senki olyan kódot írni, ami minden OOP-elvnek, és ideológiának megfelel. Első körben az a lényeg, hogy működjön. Aztán majd ha már átlátja a dolgokat, megtanulja a haladóbb dolgokat is. Nem kell, és nem is szabad egyből objektumokkal kezdeni. Bár talán pont ezért sem ideális tanulónyelv a Java, kvázi megkerülhetetlen az OOP ismerete, már nagyon alacsony szinteken is.


Én pár hete kezdtem átnézni, és átírni, továbbfejleszteni egy 18 évvel ezelőtt írt, azóta is működő PHP-alapú weboldalamat. Volt olyan része, amin elborzadtam... De működött, sőt, még most is működik, a feladatát ellátja, és ez is egy szükséges lépcsőfok volt afelé, hogy most magas szinten tudjam művelni a szakmát.

Sokszor pont azzal sikerül egy tehetséges ember kedvét elvenni, hogy élből leszólják minden próbálkozását. Próbálkozni kell, és az ember a próbálkozásai segítségével fejlődik.

2023. júl. 7. 08:24
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:
100%

"A kérdésre válaszolva, ez semmi egy munkához képest."

Nyilván. De erre is azt mondom, hogy valahol el kell kezdeni. Senki nem úgy indít, hogy komplex ügyviteli szoftvert ír. Ha nem hagyja abba, a kérdező is fog még sokezer soros kódokat is írni. ;-)

2023. júl. 7. 08:27
Hasznos számodra ez a válasz?
 10/14 anonim ***** válasza:
100%
A tanfolyamokkal, bootcampekkel kapcsolatban pedig elég vegyes a kép. Nagyon drágák, ugyanakkor ahhoz túl rövidek, hogy komoly, átfogó tudást adjanak. Gyakori, hogy inkább csak "kódoló szakmunkásokat" képeznek, akik az adott helyzetben lehet, hogy kelendő tudást birtokolnak, de ha csak egy kicsit változik a piac, már el vannak veszve. És a horribilis tandíj mellett komoly korlátozásokat is vállalni kell, és így már közel sem biztos, hogy annyira csábító a helyzet. Ebben a cikkben rávilágítanak a dolog negatív aspektusaira is: [link]
2023. júl. 7. 08:30
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!